DB-Logging -> Wert suchen und ausgeben

Hi!

Mir stellt sich gerade die Frage, wie ich ein Value aus der Datenbank lesen kann, was am nächsten an vor „mindestens vor einer Stunde gespeichert“ liegt, oder anders erklärt (Hindergrund):

Ich speichere den Luftdruck.
Da der sich nicht bei jeder Sensorübermittlung (WS2000) geändert hat, wird dieser natürlich auch nicht regelmäßig gespeichert, sondern nur wenn tatsächlich eine Änderung stattfand.
Nun möchte ich aber die Luftdrucktendenz über 1h, 3h usw. berechnen.
Nehme den Wert der letzten Sensorübermittlung minus den Wert von vor min. 1Stunde bzw. 3 Stunden usw.

Da ich aber nun keinen festen Zeitabschnitt zum Auslesen angeben kann…
Wie komme ich an den Wert, der mindestens 1 Stunde alt ist, aber dann den nächstgelegenen?

z.B. so.

$time = AC_GetLoggedValues(28761 /*[Archive Handler]*/, 35017 /*[Wetterstation\Nidda\Temperatur]*/, 0, time(), 10);
print_r($time);

musst halt noch umrechnen und raussuchen.

Hallo Rainer,

so funktioniert’s eben nicht.:o

Limit kann ich keins angeben, weil ich ja garnicht weiss, wieviele Werte zwischen jetzt und dem letzten Wert vor mindestens einer Stunde liegen.

Wenn ich das aber herausfinden kann, dann wäre das eine Lösung, an die ich auch schon dachte.

Wichtig dabei ist aber die „Unkonstante“ > letzter Wert vor min. 1 Stunde

Mit Startzeit 0 geht natürlich garnicht, ohne ebenfalls das Limit ermittelt zu haben.

Also entweder muss ich über die „Unkonstante“ die Startzeit mit Limit 0 ermitteln, oder mit Startzeit 0 das entsprechende Limit.

Naja, dass es so nicht funktioniert, dachte ich war klar. Deswegen umrechnen und raussuchen. :wink:

Du hast den Timestamp , LastTime im Array und mit getdate(LastTime) kann ich mir sehr wohl die Zeiten rausziehen und mit der aktuellen Zeit vergleichen. :slight_smile:

OK… OK… du hast ja Recht Rainer:)
Ich hoffte nur auf die Schnelle auf ein Ergebnis;)

Dann habe ich mich mal selber „abgetan“ und stelle mal mein Halbfertigprodukt (erstmal 1 Stunde) online:


<?
/*
*****************************************************
 Berechnet die Luftdrucktendenz über mehrere Stunden
*****************************************************
File     :  Luftdruck-Tendenz.ips.php
Trigger  :  Variable: [-Wetter-\Luftdruck [relativ]
Interval :  Bei Aktualisierung
*/

$archiveID = 30962 /*[Archive Handler]*/ ;   // Archive-Handler-ID
$objectID = 55112 /*[-Wetter-\Luftdruck [relativ]]*/ ; // Variablen-ID
$ende = time(); // JETZT
$start_1h = time()-(60*60); // Datenbank auslesen ab 1 Stunde vor JETZT
$start_3h = time()-(180*60); // Datenbank auslesen ab 3 Stunden vor JETZT

echo date("H:i:s")."
";

// Abfrage 1 Stunde
$buffer_1h = AC_GetLoggedValues($archiveID, $objectID, $start_1h, $ende, 0);
//print_r(AC_GetLoggedValues($archiveID, $objectID, $start_1h, $ende, 0));
$anzahl = count($buffer_1h);
$wert = $buffer_1h[$anzahl-1];
$ts = $wert["TimeStamp"];
$value = $wert["Value"];
echo $value ."
";

if ($ts > $start_1h)
{
$limit = count($buffer_1h)+1;
$buffer_1h = AC_GetLoggedValues($archiveID, $objectID, 0, $ende, $limit);
$wert = $buffer_1h[$limit-1];
$value = $wert["Value"];
}
echo $value ."
";
?>

Irgendwie bin ich aber damit noch nicht wirklich zufrieden, auch wenn’s nur ein „Halbfertigprodukt“ ist… Irgendwas stört mich noch:confused:

Hab mich heute nochmal damit beschäftigt und dann doch ein für mich zufriedenstellendes Script erstellen können.
Für die Nachwelt und wen’s interessiert:

<?
/*
*****************************************************
 Berechnet die Luftdrucktendenz über mehrere Stunden
*****************************************************
File     :  Luftdruck-Tendenz.ips.php
Trigger  :  Variable: -Wetter-\Luftdruck [relativ]
Interval :  Bei Aktualisierung
*/

$archiveID = 30962 /*[Archive Handler]*/ ;   // Archive-Handler-ID
$objectID = 55112 /*[-Wetter-\Luftdruck [relativ]]*/ ; // Variablen-ID
$ld = GetValueFloat($objectID);    // Luftdruck aktuell
$ende = time(); // JETZT
$stunden = 60;    // 1 Stunde a 60 MInuten
$start_1h = time()-(1*$stunden*60); // Datenbank auslesen ab 1 Stunde vor JETZT
$start_3h = time()-(3*$stunden*60); // Datenbank auslesen ab 3 Stunden vor JETZT
$start_12h = time()-(12*$stunden*60); // Datenbank auslesen ab 12 Stunden vor JETZT
$start_24h = time()-(24*$stunden*60); // Datenbank auslesen ab 24 Stunden vor JETZT

echo "Uhrzeit: ". date('d.m.Y - H:i:s')."
";

// Abfrage 1 Stunde
$buffer_1h = AC_GetLoggedValues($archiveID, $objectID, $start_1h, $ende, 0);
$anzahl = count($buffer_1h);
$wert = $buffer_1h[$anzahl-1];
$ld_1h = $wert['Value'];
echo "Luftdruck(1h): $ld_1h / ".date('d.m.Y - H:i:s',$wert['LastTime'])." Uhr" ."
";

// Abfrage 3 Stunden
$buffer_3h = AC_GetLoggedValues($archiveID, $objectID, $start_3h, $ende, 0);
$anzahl = count($buffer_3h);
$wert = $buffer_3h[$anzahl-1];
$ld_3h = $wert['Value'];
echo "Luftdruck(3h): $ld_3h / ".date('d.m.Y - H:i:s',$wert['LastTime'])." Uhr" ."
";

// Abfrage 12 Stunden
$buffer_12h = AC_GetLoggedValues($archiveID, $objectID, $start_12h, $ende, 0);
$anzahl = count($buffer_12h);
$wert = $buffer_12h[$anzahl-1];
$ld_12h = $wert['Value'];
echo "Luftdruck(12h): $ld_12h / ".date('d.m.Y - H:i:s',$wert['LastTime'])." Uhr" ."
";

// Abfrage 24 Stunden
$buffer_24h = AC_GetLoggedValues($archiveID, $objectID, $start_24h, $ende, 0);
$anzahl = count($buffer_24h);
$wert = $buffer_24h[$anzahl-1];
$ld_24h = $wert['Value'];
echo "Luftdruck(24h): $ld_24h / ".date('d.m.Y - H:i:s',$wert['LastTime'])." Uhr" ."
";

// Luftdrucktendez
$ldtendenz_1h = round($ld - $ld_1h,1);
$ldtendenz_3h = round($ld - $ld_3h,1);
$ldtendenz_12h = round($ld - $ld_12h,1);
$ldtendenz_24h = round($ld - $ld_24h,1);
echo "Luftdrucktendenz (1h):$ldtendenz_1h (3h):$ldtendenz_3h (12h):$ldtendenz_12h (24h):$ldtendenz_24h"."
";
?>

sehr cooles Script, prima!
habs mal übernommen, mal schauen was man damit noch alles anstellen kann :wink:

Sorry, aber bei allem Verneigen vor dem gemachten Aufwand, kann ich Lösungen, die das Rad nochmal erfinden, irgendwie nicht wirklich etwas abgewinnen. Das alles ist ureigenste und tausendfach erprobte Aufgabe einer Datenbank und dank Runtime-Versionen auch ohne einen Cent zu haben.

Details dazu hier

…ich hoffe, das war nun auch für Schnelleser kurz und kompakt genug :slight_smile:

Sehr zeitnaher Kommentar.

Ich denke Du durchsuchst heute das Forum um deinem Wunsch nach einer DB-Anbindung in IPS Nachdruck zu verleihen.

Ich denke das Thema ist beiweitem ausgereitzt und sollte, anstatt das Forum mit deinem Kommentaren zu strapazieren, am Besten in einem direkten Kontakt mit dem IPS-HQ ablaufen.

…in diesem thread nicht weiter besprochen werden… deshalb closed!