setreading und stromausfall ==> Verlust

Begonnen von Rampler, 30 März 2015, 09:28:15

Vorheriges Thema - Nächstes Thema

Rampler

Guten Morgen zusammen,
heute Nacht hatte ich einen Stromausfall mit folgen...

Ich verwende zur Heizoelverbrauchsmessung folgendens Notify:
HZ.brenner1 {
if("%" eq "closed"){
$data{brenneron_lasttime}=time()}
elsif("%" eq "open") {
$data{oelverbrauch} = (time()-$data{brenneron_lasttime})/60*0.0273 ;;
$data{oelverbrauch_reading} = ReadingsVal ("HZ.brenner1","Gesamtliter",0);;
$data{oelverbrauch_tot} = $data{oelverbrauch_reading}+$data{oelverbrauch};;
fhem "trigger HZ.brenner Verbrauch: $data{oelverbrauch}" ;;
fhem "trigger HZ.brenner Gesamtliter: $data{oelverbrauch_tot}" ;;
fhem "setreading HZ.brenner1 Gesamtliter $data{oelverbrauch_tot}"}};

Nach dem Stromausfall war der Wert Gesamtliter auf einem Fantasiewert.
Zeitgleich habe ich im Log folgenden Eintrag:
PERL WARNING: Use of uninitialized value in subtraction (-) at (eval 49) line 5.

Ich dachte, dass durch das Reading der Wert automatisch gesichert ist.
Kann ich irgendwie das Reading "Gesamtliter" sichern ?
Ich denke mit Save geht das nicht oder ?
Habe auch schon überlegt meinen Raspberry an eine Powerbank anzuschließen, um so eine USV zu erhalten ..
Haben die Profis einen Tipp für mich ?
Ich sag schonmal Danke
Klaus
3 HMUART (2 via ESP8266), 1 DUOFERN, 12 ESP8266, SolvisBen, GoodWE WR, RPI2 (Bullseye), ZWAVE, HM-Classic, und hoch zufrieden ...
Danke an alle, die was dazu beigetragen haben !!

rudolfkoenig

setreading setzt "nur" den Wert in dem Haupspeicher. Um diese auf die Platte zu schreiben muss man save, oder, falls es nur um readings geht, {WriteStateFile()} verwenden.
Bei der Verwendung einer USV kann man beim Stromausfall den Server herunterfahren, ein shutdown verschickt an alle Prozesse ein SIGTERM, dabei ruft FHEM WriteStateFile() auf, und beendet sich.

Rampler

Zitat von: rudolfkoenig am 30 März 2015, 11:48:39
setreading setzt "nur" den Wert in dem Haupspeicher. Um diese auf die Platte zu schreiben muss man save, oder, falls es nur um readings geht, {WriteStateFile()} verwenden.
Bei der Verwendung einer USV kann man beim Stromausfall den Server herunterfahren, ein shutdown verschickt an alle Prozesse ein SIGTERM, dabei ruft FHEM WriteStateFile() auf, und beendet sich.

Danke, habe jetzt mal fhem{WriteStateFile()} eingebaut ...
3 HMUART (2 via ESP8266), 1 DUOFERN, 12 ESP8266, SolvisBen, GoodWE WR, RPI2 (Bullseye), ZWAVE, HM-Classic, und hoch zufrieden ...
Danke an alle, die was dazu beigetragen haben !!

rudolfkoenig