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
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