Bei Absturz Fhem oder reboot unter Linux wird statefile nicht geschrieben

Begonnen von Rewe2000, 01 Mai 2022, 12:49:03

Vorheriges Thema - Nächstes Thema

Rewe2000

Hallo,

sorry für den komischen Titel, aber mangels Zeichen ist mir da nichts besseres eingefallen.

Ich habe folgendes Problem in Verbindung mit der Integral Funktion, welche ich zur Berechnung der Energie in Userreadings verwende. Häufig habe ich festgestellt, dass meine errechneten Werte nicht mehr stimmen wenn Fhem abstürzt, oder wenn ich Fhem über Linux beende. So wie es sich mir darstellt wird hier das statefile nicht vorher gesichert und dadurch gehen mir Daten in Verbindung mit der Integralfunktion verloren. Das ist für mich nachvollziehbar und so auch nicht zu ändern, denn Fhem kann ja nicht wissen dass es gleich abstürzt (sollte eigentlich nie vorkommen).

Grundsätzlich will ich in diesem Beitrag erfahren, wie ich Fhem korrekt beendet muss, damit das Statefile sauber geschrieben wird und alle Daten nach einem Neustart wieder verfügbar sind.

In der Commandref steht unter shutdown:
Zitatshutdown [restart] [exitValue]

Der Befehl fährt FHEM herunter (nach dem Sichern aller Gerätestatus). Er triggert den global:SHUTDOWN-Event. Mit dem optionalen Parameter restart startet FHEM danach neu.

Auch wenn ich nur "shutdown" ohne den Zusatz restart angebe, so startet Fhem immer wieder neu (beobachte ich seit Umstellung auf Buster).
In der Vergangenheit habe ich den Weg über "sudo systemctl stop fhem" gewählt, doch hier wird anscheinend kein Statefile gesichert und ich habe bei der Integralfunktion fehlerhafte Daten festgestellt.
Führe ich dagegen "shutdown restart" alleine aus, so sind mir noch nie fehlerhafte Werte aufgefallen.

Könnt ihr mich bitte aufklären, wie Fhem korrekt beendet werden muss, wenn ich den Raspi (mit aktuellen Bullsey und aktuellem Fhem) aus irgend einem Grund herunterfahren will.
Gibt es über die Fhem Console einen Befehl, welcher Fhem beendet, das Statefile vorher sichert und nicht wieder Fhem automatisch neu startet?

Anbei noch das List meines Device mit einer Intergralfunktion, so wie ich diese verwende:
Internals:
   DEF        40074
   FUUID      5e8e12a6-f33f-7df9-9a1f-cea2e3731422063d
   IODev      Stromspeicher
   LASTInputDev Stromspeicher
   MSGCNT     10927
   ModbusRegister_lastRcv 2022-05-01 12:11:29
   NAME       Netzuebergabepunkt_Leistung
   NOTIFYDEV  global
   NR         254
   NTFY_ORDER 50-Netzuebergabepunkt_Leistung
   STATE      -11 W
   Stromspeicher_MSGCNT 10927
   Stromspeicher_TIME 2022-05-01 12:11:29
   TYPE       ModbusRegister
   lastUpdate Sun May  1 12:11:29 2022
   nextUpdate Sun May  1 12:11:34 2022
   Helper:
     DBLOG:
       Netzbezug_kWh:
         DBLogging:
           TIME       1651399789.34583
           VALUE      1016.65993987076
       Netzeinspeisung_kWh:
         DBLogging:
           TIME       1651399505.35023
           VALUE      11693.1606795544
   READINGS:
     2022-05-01 12:11:29   Bezug_Einspeisen 1
     2022-04-30 20:50:08   IODev           Stromspeicher
     2022-05-01 12:11:29   Netzbezug_W     0
     2022-05-01 12:11:29   Netzbezug_kWh   1016.65998161512
     2022-05-01 12:11:29   Netzeinspeisung_W 11
     2022-05-01 12:11:29   Netzeinspeisung_kWh 11693.1610306766
     2022-05-01 12:11:29   Netzuebergabepunkt_Watt 11
     2022-05-01 12:11:29   RAW             fff5ffff
     2022-05-01 12:11:29   state           -11
   helper:
     addr       3 0 73
     address    73
     disableRegisterMapping 0
     lastUpdate 0
     nextUpdate 1651399894.70091
     nread      2
     readCmd    I
     register   40074
     registerType 3
     unitId     0
     updateIntervall 5
     cnv:
       a          1
       b          0
       max        2147483647
       min        -2147483648
       step       10000000
Attributes:
   DbLogExclude .*
   DbLogInclude Netzeinspeisung_kWh,Netzbezug_kWh
   IODev      Stromspeicher
   event-min-interval Netzeinspeisung_kWh:480,Netzbezug_kWh:480
   event-on-change-reading .*_kWh:0.005,.*_W:5,.*_Watt:5,state,Bezug_Einspeisen
   group      Kommunikation
   icon       measure_power@red
   plcDataType DINT
   registerType Holding
   room       Hauskraftwerk
   stateFormat {sprintf("%.0f W",ReadingsNum($name,"state",0))}
   updateInterval 5
   userReadings Bezug_Einspeisen {my $wert = ReadingsNum($name,"state",0); ($wert > 0) ? '0' : '1'},
Netzuebergabepunkt_Watt {abs(ReadingsNum($name,"state",0))}, Netzbezug_kWh integral { if (ReadingsNum($name,"state",0) > 0 ) {(ReadingsNum($name,"state",0)/3600/1000)} else {0} },
Netzeinspeisung_kWh integral { if (ReadingsNum($name,"state",0) <0) {(ReadingsNum($name,"state",0)/3600/1000)*(-1)} else {"0"} },

Netzbezug_W { if (ReadingsNum($name,"state",0) > 0 ) {ReadingsNum($name,"state",0)} else {0} },
Netzeinspeisung_W { if (ReadingsNum($name,"state",0) <0) {ReadingsNum($name,"state",0)*(-1)} else {0} }


Hier ein Beispiel der fehlerhaften Einträge in meiner SQL-Datenbank, es ist zu sehen, dass bei dem aufsteigenden Zähler hier Werte nicht passen (Folgewert ist kleiner):
TIMESTAMP DEVICE TYPE EVENT READING VALUE UNIT
2022-04-28 18:55:40 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11637.3487417978 Netzeinspeisung_kWh 11655.23960870080
2022-04-28 18:47:36 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11637.3470049447 Netzeinspeisung_kWh 11655.23787184770
2022-04-28 18:46:50 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11637.3460635963 Netzeinspeisung_kWh 11655.23693049930
2022-04-28 18:38:47 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11637.3453126035 Netzeinspeisung_kWh 11655.23617950650
2022-04-28 18:30:47 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11637.3419888441 Netzeinspeisung_kWh 11655.23285574710
2022-04-28 18:22:58 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11637.3369520781 Netzeinspeisung_kWh 11655.22781898110
2022-04-28 18:17:30 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11637.3318406976 Netzeinspeisung_kWh 11655.22270760060
2022-04-28 18:13:48 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11637.3259980227 Netzeinspeisung_kWh 11655.21686492570
2022-04-28 18:07:39 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11637.3209641472 Netzeinspeisung_kWh 11655.21183105020
2022-04-28 18:01:21 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11637.3188461053 Netzeinspeisung_kWh 11655.20971300830
2022-04-28 17:53:20 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11637.3176352844 Netzeinspeisung_kWh 11655.20850218740
2022-04-28 17:45:18 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11637.3159636997 Netzeinspeisung_kWh 11655.20683060270 <## kleinerer Wert
2022-04-28 17:41:52 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11658.940226869 Netzeinspeisung_kWh 11676.83109377200 <##
2022-04-28 17:35:35 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11658.9373756741 Netzeinspeisung_kWh 11676.82824257710
2022-04-28 17:27:31 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11658.9352258702 Netzeinspeisung_kWh 11676.82609277320
2022-04-28 17:26:15 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11658.9347780312 Netzeinspeisung_kWh 11676.82564493420
2022-04-28 17:18:10 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11658.9301534033 Netzeinspeisung_kWh 11676.82102030630
2022-04-28 17:16:49 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11658.9262131724 Netzeinspeisung_kWh 11676.81708007540
2022-04-28 17:08:48 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11658.9249532963 Netzeinspeisung_kWh 11676.81582019930
2022-04-28 17:02:58 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11658.9199397327 Netzeinspeisung_kWh 11676.81080663570
2022-04-28 16:55:48 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11658.9149316151 Netzeinspeisung_kWh 11676.80579851810
2022-04-28 16:55:18 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11658.9147823445 Netzeinspeisung_kWh 11676.80564924750
2022-04-28 16:47:17 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11658.9129191217 Netzeinspeisung_kWh 11676.80378602470
2022-04-28 16:39:14 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11658.9118134693 Netzeinspeisung_kWh 11676.80268037230
2022-04-28 16:31:14 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11658.9109554398 Netzeinspeisung_kWh 11676.80182234280
2022-04-28 16:23:12 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11658.9098683984 Netzeinspeisung_kWh 11676.80073530140
2022-04-28 16:17:52 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11658.904857453 Netzeinspeisung_kWh 11676.79572435600
2022-04-28 16:17:31 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11658.9047318715 Netzeinspeisung_kWh 11676.79559877450
2022-04-28 16:09:27 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11658.8997613732 Netzeinspeisung_kWh 11676.79062827620
2022-04-28 16:06:40 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11658.897913064 Netzeinspeisung_kWh 11676.78877996700
2022-04-28 15:58:36 Netzuebergabepunkt_Leistung MODBUSREGISTER Netzeinspeisung_kWh: 11658.8946849367 Netzeinspeisung_kWh 11676.78555183970


Da mir meine Zähler überwiegend nur die Leistung in Watt liefern, benötige ich bei vielen Device die Integralfunktion um die Energie in kWh zu berechnen. Somit ist es sehr ärgerlich, wenn hier Fehler auftreten.
Das Problem mit dem Absturz von Fhem werde ich in einem eigenen Beitrag angehen, es ist mir bewusst dass dies nicht sein sollte.

Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

Otto123

Hallo Reinhard,

Zitat von: Rewe2000 am 01 Mai 2022, 12:49:03
Könnt ihr mich bitte aufklären, wie Fhem korrekt beendet werden muss, wenn ich den Raspi (mit aktuellen Bullsey und aktuellem Fhem) aus irgend einem Grund herunterfahren will.
Gibt es über die Fhem Console einen Befehl, welcher Fhem beendet, das Statefile vorher sichert und nicht wieder Fhem automatisch neu startet?
Bei einem shutdown von fhem startet systemctl den service neu. So ist die Standardeinrichtung in der fhem.service Unit.
Ein sudo systemctl stop fhem beendet fhem ordentlich und schreibt auch den statefile, so funktioniert es zumindest bei mir.

Unregelmäßigkeiten könnte man mit journalctl sehen.
journalctl --since "15 minutes ago"

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Rewe2000

Hallo Otto,

vielen Dank für die Erklärung, diese hat mich bestärkt, dass ich zumindest nichts falsch mache.
Weshalb die Berechnungen der Energie über die Intergalfunktion, in diesem Zeitraum bei mir Lücken aufweist das muss ich noch ergründen, aktuell meine ich, es muss der Raspi oder Fhem abgeschmiert und neu gestartet sein.

Mein Versuch von eben, mit stoppen der RPC-Server, stoppen von Fhem über systemctl und reboot Raspi4 hat jedenfalls keinerlei Datenverlust ergeben, so sollte es auch sein.

Nochmals vielen Dank für deine Hilfe, ich beobachte diese "Ausfallerscheinungen", treten diese nochmals auf würde ich mich freuen noch Hilfe bei der Fehlersuche zu bekommen.
Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky