Kann es sein, dass am Handling bzw. Speichern der Werte in der Datenbank etwas geändert wurde?
Bisher war mir so, dass die Werte auf Aktualisierung gespeichert wurden und nun scheint mir eine Speicherung auf Änderung stattzufinden und deshalb mein ehemals darauf geschriebenes Script nicht mehr das macht, was es sollte.
Ich finde das zwar lobenswert, dass die DB „kleingehalten“ wird, aber eine Ankündigung im Changelog hätte ich ganz nett gefunden… wenn es denn so ist, wie ich vermute;)
Grund:
Meine Wetterstation spuckt über die Schnittstelle die Gesamtniederschlagsmenge aus, welche ich in eine Variable schreibe und durch die Differenz der neuen Ausgabe zur Variable, die Niederschlagsmengen der letzten (1, 24 u. seit Mitternacht(heute)) Stunden errechnen lasse.
Das lief mit folgendem Script bisher tadellos:
<?
$archiveID = 30962; // Archive-Handler-ID
$objectID = 32855; // Variablen-ID
$updatetime = IPS_GetVariable($objectID); // Variable abfragen
$updatetime = $updatetime['VariableUpdated']; // Letztes Update $objectID
$nsm_g = GetValueFloat($objectID); // Gesamte Niederschlagsmenge
$ende = time(); // JETZT
$stunden = 60*60; // 1 Stunde a 60 Minuten mit 60 Sekunden
// Scriptstart
// Auslesezeiten der Datenbank
$start_1h = time()-(1*$stunden); // Datenbank auslesen ab 1 Stunde vor JETZT
$start_24h = time()-(24*$stunden); // Datenbank auslesen ab 24 Stunden vor JETZT
$mitternacht = mktime(0,0,0,date("n"),date("j"),date("Y")); // Timestamp - Heute 0:00 Uhr
// Abfrage 1 Stunde
if (($ende - $updatetime) < (1*$stunden))
{
$buffer_1h = AC_GetLoggedValues($archiveID, $objectID, $start_1h, $ende, 0);
$anzahl = count($buffer_1h);
$wert = $buffer_1h[$anzahl-1];
$ns_1h = $wert['Value'];
$nsm_1h = round($nsm_g - $ns_1h,1);
}
else{$nsm_1h = 0;}
SetValueFloat(47235, $nsm_1h); // Variablen schreiben
// Abfrage 24 Stunden
if (($ende - $updatetime) < (24*$stunden))
{
$buffer_24h = AC_GetLoggedValues($archiveID, $objectID, $start_24h, $ende, 0);
$anzahl = count($buffer_24h);
$wert = $buffer_24h[$anzahl-1];
$ns_24h = $wert['Value'];
$nsm_24h = round($nsm_g - $ns_24h,1);
}
else{$nsm_24h = 0;}
SetValueFloat(40632, $nsm_24h); // Variablen schreiben
// Abfrage Heute
if ($updatetime > $mitternacht)
{
$buffer_heute = AC_GetLoggedValues($archiveID, $objectID, $mitternacht, $ende, 0);
$anzahl = count($buffer_heute);
$wert = $buffer_heute[$anzahl-1];
$ns_heute = $wert['Value'];
$nsm_heute = round($nsm_g - $ns_heute,1);
}
else{$nsm_heute = 0;}
SetValueFloat(46526, $nsm_heute); // Variablen schreiben
//echo "Niederschlagsmenge (1h):$nsm_1h L (24h):$nsm_24h L (Heute):$nsm_heute L"."
";
?>
Aber seit Build #1829 musste ich das Script ändern:
<?
$archiveID = 30962; // Archive-Handler-ID
$objectID = 32855; // Variablen-ID
$updatetime = IPS_GetVariable($objectID); // Variable abfragen
$updatetime = $updatetime['VariableUpdated']; // Letztes Update $objectID
$nsm_g = GetValueFloat($objectID); // Gesamte Niederschlagsmenge
$ende = time(); // JETZT
$stunden = 60*60; // 1 Stunde a 60 Minuten mit 60 Sekunden
// Scriptstart
// Auslesezeiten der Datenbank
$start_1h = time()-(1*$stunden); // Datenbank auslesen ab 1 Stunde vor JETZT
$start_24h = time()-(24*$stunden); // Datenbank auslesen ab 24 Stunden vor JETZT
$mitternacht = mktime(0,0,0,date("n"),date("j"),date("Y")); // Timestamp - Heute 0:00 Uhr
// Abfrage 1 Stunde
if (($ende - $updatetime) < (1*$stunden))
{
$buffer_1h = AC_GetLoggedValues($archiveID, $objectID, $start_1h, $ende, 0);
$anzahl = count($buffer_1h);
$wert = $buffer_1h[$anzahl-1];
$ns_1h = $wert['Value'];
$nsm_1h = round($nsm_g - $ns_1h,1);
if (($nsm_g - $ns_1h) == $nsm_g)
{$nsm_1h = 0;}
}
//else{$nsm_1h = 0;}
SetValueFloat(47235, $nsm_1h); // Variablen schreiben
// Abfrage 24 Stunden
if (($ende - $updatetime) < (24*$stunden))
{
$buffer_24h = AC_GetLoggedValues($archiveID, $objectID, $start_24h, $ende, 0);
$anzahl = count($buffer_24h);
$wert = $buffer_24h[$anzahl-1];
$ns_24h = $wert['Value'];
$nsm_24h = round($nsm_g - $ns_24h,1);
if (($nsm_g - $ns_24h) == $nsm_g)
{$nsm_24h = 0;}
}
//else{$nsm_24h = 0;}
SetValueFloat(40632, $nsm_24h); // Variablen schreiben
// Abfrage Heute
if ($updatetime > $mitternacht)
{
$buffer_heute = AC_GetLoggedValues($archiveID, $objectID, $mitternacht, $ende, 0);
$anzahl = count($buffer_heute);
$wert = $buffer_heute[$anzahl-1];
$ns_heute = $wert['Value'];
$nsm_heute = round($nsm_g - $ns_heute,1);
if (($nsm_g - $ns_heute) == $nsm_g)
{$nsm_heute = 0;}
}
else{$nsm_heute = 0;}
SetValueFloat(46526, $nsm_heute); // Variablen schreiben
//echo "Niederschlagsmenge (1h):$nsm_1h L (24h):$nsm_24h L (Heute):$nsm_heute L"."
";
?>
…sonst würde mir die „Stunden-Niederschlagsmenge“ immer nur die aktuell aus der Wetterstation ausgelesene Gesamtniederschlagsmenge berechnen und wiedergeben.
Wenn ich nun keinen Knoten im Kopf habe und meine Vermutung stimmt, dann wünche ich mir auch solche, vielleicht nebensächlichen Änderungen der Release, im Changelog als bemerkenswert