[gelöst]Zeitgesteuerte DOIFs werden nach FhemNeustart nicht ausgeführt.

Begonnen von maa1, 20 März 2022, 11:45:25

Vorheriges Thema - Nächstes Thema

maa1

Hallo,
seit einigen Monaten werden meine zeitgesteuerten DOIFs beim Fhemneustart nicht mehr ausgeführt. Erst durch manuelles Anstoßen erfolgt eine Aktualisierung der Timer und erst danach werden sie normal ausgeführt und laufen bis zum nächsten FhemNeustart ohne Probleme.

Hier ein Beispiel eines zeitgesteuerten DOIF, welches seit 19.3. nicht mehr ausgeführt wurde.

defmod aSonoff4 DOIF (([07:00-21:00] and [aSonoff6:state] eq "off" and [Sonoff4:temperature,0] < 21) or [Sonoff4:temperature,0] < 19)(set Sonoff4 on) \
DOELSE ( set Sonoff4 off)
attr aSonoff4 alias Heizung Schrankraum
attr aSonoff4 cmdState on|off
attr aSonoff4 disable 0
attr aSonoff4 event-on-change-reading state
attr aSonoff4 icon sani_heating_temp
attr aSonoff4 room Haus

setstate aSonoff4 off
setstate aSonoff4 2022-03-19 06:45:07 Device Sonoff4
setstate aSonoff4 2022-03-19 06:45:07 cmd 2
setstate aSonoff4 2022-03-19 06:45:07 cmd_event Sonoff4
setstate aSonoff4 2022-03-19 06:45:07 cmd_nr 2
setstate aSonoff4 2022-03-19 06:45:07 e_Sonoff4_temperature 19
setstate aSonoff4 2022-02-11 15:33:10 mode enabled
setstate aSonoff4 2022-03-19 06:45:07 state off
setstate aSonoff4 2022-03-18 21:00:00 timer_01_c01 19.03.2022 07:00:00
setstate aSonoff4 2022-03-18 21:00:00 timer_02_c01 19.03.2022 21:00:00]


Bitte um Eure Hilfe.

Damian

Zitat von: maa1 am 20 März 2022, 11:45:25
Hallo,
seit einigen Monaten werden meine zeitgesteuerten DOIFs beim Fhemneustart nicht mehr ausgeführt. Erst durch manuelles Anstoßen erfolgt eine Aktualisierung der Timer und erst danach werden sie normal ausgeführt und laufen bis zum nächsten FhemNeustart ohne Probleme.

Hier ein Beispiel eines zeitgesteuerten DOIF, welches seit 19.3. nicht mehr ausgeführt wurde.

defmod aSonoff4 DOIF (([07:00-21:00] and [aSonoff6:state] eq "off" and [Sonoff4:temperature,0] < 21) or [Sonoff4:temperature,0] < 19)(set Sonoff4 on) \
DOELSE ( set Sonoff4 off)
attr aSonoff4 alias Heizung Schrankraum
attr aSonoff4 cmdState on|off
attr aSonoff4 disable 0
attr aSonoff4 event-on-change-reading state
attr aSonoff4 icon sani_heating_temp
attr aSonoff4 room Haus

setstate aSonoff4 off
setstate aSonoff4 2022-03-19 06:45:07 Device Sonoff4
setstate aSonoff4 2022-03-19 06:45:07 cmd 2
setstate aSonoff4 2022-03-19 06:45:07 cmd_event Sonoff4
setstate aSonoff4 2022-03-19 06:45:07 cmd_nr 2
setstate aSonoff4 2022-03-19 06:45:07 e_Sonoff4_temperature 19
setstate aSonoff4 2022-02-11 15:33:10 mode enabled
setstate aSonoff4 2022-03-19 06:45:07 state off
setstate aSonoff4 2022-03-18 21:00:00 timer_01_c01 19.03.2022 07:00:00
setstate aSonoff4 2022-03-18 21:00:00 timer_02_c01 19.03.2022 21:00:00]


Bitte um Eure Hilfe.

Weil offenbar seit dem 19.03 die Bedingung nicht wahr wurde.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

maa1

Hallo Damian,
leider nein. Wie beschrieben wird dieses DOIF erst nach set initialize wiederbelebt und danach funktioniert es wie gewohnt seit über 4 Jahren. Dies trifft aber auch auf 15 andere DOIFs mit einer Zeitsteuerung zu. Bei einigen muss ich sogar die Uhrzeit in der Def ändern damit sie wieder funktionieren.

Damian

Zitat von: maa1 am 21 März 2022, 09:25:45
Hallo Damian,
leider nein. Wie beschrieben wird dieses DOIF erst nach set initialize wiederbelebt und danach funktioniert es wie gewohnt seit über 4 Jahren. Dies trifft aber auch auf 15 andere DOIFs mit einer Zeitsteuerung zu. Bei einigen muss ich sogar die Uhrzeit in der Def ändern damit sie wieder funktionieren.

ohne do always wird der gleiche Fall hier cmd_2 nicht wiederholt - das war immer schon so und es hat sich dabei nichts geändert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

maa1

Hallo Damian,
leider ist do always auch nicht die Lösung. Habe z.B. bei der wöchentliche Sicherung    
Def: ([00:02|0]) (backup) do always gesetzt und trotzdem wurde das DOIF nach dem Neustart von Fhem nicht ausgeführt. Es betrifft praktisch alle meine zeitgesteuerten DOIFs, die nach einem Neustart nicht automatisch funktionieren und erst einen händischen Stupser benötigen.

Damian

Wenn es mal funktioniert hat, dann war es dem Zufall überlassen.

Es wird nach dem Neustart ohne do always nur dann ausgeführt, wenn die Bedingung getriggert wird und ein Zustandswechsel erfolgt, sonst nicht.

Vielleicht hast du früher die Zustände mit save nicht gesichert und neuerdings schon.

Am DOIF hat sich dbzgl. nichts geändert.

Wenn du nach dem Neustart eine Ausführung provozieren willst, dann kannst du das Attribut https://fhem.de/commandref_DE.html#DOIF_initialize nutzen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

maa1

Vielen Dank für die Rückmeldung. Werde mir die Hinweise und als auch das Attribut näher ansehen bzw. testen. 

maa1

Hallo,

bin schon am Verzweifeln, da meine DOIFs nach einem Fhemneustart (gestern 19:35) weiterhin nicht funkionieren. Auch do always und initialize bringen nicht den gewünschten Erfolg.

Hier mein Beispiel nach dem gestrigen Neustart.


defmod aSonoff4 DOIF (([07:00-21:00] and [aSonoff6:state] eq "off" and [Sonoff4:temperature,0] < 21) or [Sonoff4:temperature,0] < 19)(set Sonoff4 on) \
DOELSE ( set Sonoff4 off)
attr aSonoff4 alias Heizung Schrankraum
attr aSonoff4 cmdState on|off
attr aSonoff4 do always
attr aSonoff4 event-on-change-reading state
attr aSonoff4 icon sani_heating_temp
attr aSonoff4 room Haus

setstate aSonoff4 off
setstate aSonoff4 2022-03-23 16:24:59 Device Sonoff4
setstate aSonoff4 2022-03-24 06:50:31 cmd 2
setstate aSonoff4 2022-03-24 06:50:31 cmd_event aSonoff4
setstate aSonoff4 2022-03-24 06:50:31 cmd_nr 2
setstate aSonoff4 2022-03-23 16:24:59 e_Sonoff4_temperature 19
setstate aSonoff4 2022-03-24 06:49:37 mode enabled
setstate aSonoff4 2022-03-24 06:50:31 state off
setstate aSonoff4 2022-03-22 21:00:00 timer_01_c01 23.03.2022 07:00:00
setstate aSonoff4 2022-03-22 21:00:00 timer_02_c01 23.03.2022 21:00:00


Aufgefallen ist mir dabei die Nichtaktualisierung des Readings temperature von 19 Grad, aktuell sind es 21 Grad.
Erst eine Änderung der Zeitsteuerung von [07:00-21:00] auf z.b. [07:01-21:00] gewirkt, dass das DOIF wieder ganz normal arbeitet.

Betrifft wie schon beschrieben alle meine zeitgesteuerten DOIFs. Hier noch ein ganz einfaches Beispiel einer täglichen Durchführung, welches heute um 00:02 nicht durchgeführt wurde:


defmod logdbDump DOIF ([00:02|1 2 3 4 5 6]) (set Replog dumpSQLite)
attr logdbDump do always
attr logdbDump room Technik

setstate logdbDump cmd_1
setstate logdbDump 2022-03-23 00:02:00 cmd 1
setstate logdbDump 2022-03-23 00:02:00 cmd_event timer_1
setstate logdbDump 2022-03-23 00:02:00 cmd_nr 1
setstate logdbDump 2022-03-20 07:30:51 mode enabled
setstate logdbDump 2022-03-23 00:02:00 state cmd_1
setstate logdbDump 2022-03-23 00:02:00 timer_01_c01 24.03.2022 00:02:00|123456


Damian

Dann befindet sich dein System im "falschen Film".

Wenn der Auszug:

defmod logdbDump DOIF ([00:02|1 2 3 4 5 6]) (set Replog dumpSQLite)
attr logdbDump do always
attr logdbDump room Technik

setstate logdbDump cmd_1
setstate logdbDump 2022-03-23 00:02:00 cmd 1
setstate logdbDump 2022-03-23 00:02:00 cmd_event timer_1
setstate logdbDump 2022-03-23 00:02:00 cmd_nr 1
setstate logdbDump 2022-03-20 07:30:51 mode enabled
setstate logdbDump 2022-03-23 00:02:00 state cmd_1
setstate logdbDump 2022-03-23 00:02:00 timer_01_c01 24.03.2022 00:02:00|123456


von gerade ist, dann sieht man,  dass der Timer gesetzt auf  24.03.2022 00:02:00 nicht zugeschlagen hat. Wenn er also noch nicht abgelaufen ist, dann ist bei dir im System noch nicht 24.03.2022 00:02:00.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

maa1

Heute um 08:01 habe ich die Startzeit von 00:02 auf 00:03 geändert es ist wieder alles in Ordnung; somit muss die Systemzeit stimmen.


defmod logdbDump DOIF ([00:03|1 2 3 4 5 6]) (set Replog dumpSQLite)
attr logdbDump do always
attr logdbDump room Technik

setstate logdbDump initialized
setstate logdbDump 2022-03-24 08:01:15 cmd 0
setstate logdbDump 2022-03-24 08:01:15 mode enabled
setstate logdbDump 2022-03-24 08:01:15 state initialized
setstate logdbDump 2022-03-24 08:01:15 timer_01_c01 25.03.2022 00:03:00|123456

Damian

#10
Zitat von: maa1 am 24 März 2022, 09:40:59
Heute um 08:01 habe ich die Startzeit von 00:02 auf 00:03 geändert es ist wieder alles in Ordnung; somit muss die Systemzeit stimmen.


defmod logdbDump DOIF ([00:03|1 2 3 4 5 6]) (set Replog dumpSQLite)
attr logdbDump do always
attr logdbDump room Technik

setstate logdbDump initialized
setstate logdbDump 2022-03-24 08:01:15 cmd 0
setstate logdbDump 2022-03-24 08:01:15 mode enabled
setstate logdbDump 2022-03-24 08:01:15 state initialized
setstate logdbDump 2022-03-24 08:01:15 timer_01_c01 25.03.2022 00:03:00|123456


und wenn du morgen das siehst:

2022-03-25 00:02:00 cmd 1

dann weißt du, dass deine Anweisung ausgeführt wurde.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

maa1

Natürlich hat es heute funktioniert. defmod logdbDump DOIF ([00:03|1 2 3 4 5 6]) (set Replog dumpSQLite)
attr logdbDump do always
attr logdbDump room Technik

setstate logdbDump cmd_1
setstate logdbDump 2022-03-25 00:03:00 cmd 1
setstate logdbDump 2022-03-25 00:03:00 cmd_event timer_1
setstate logdbDump 2022-03-25 00:03:00 cmd_nr 1
setstate logdbDump 2022-03-24 08:01:15 mode enabled
setstate logdbDump 2022-03-25 00:03:00 state cmd_1
setstate logdbDump 2022-03-25 00:03:00 timer_01_c01 26.03.2022 00:03:00|123456


Wenn das DOIF einmal funktioniert, dann funktioniert es immer bis zum nächsten Neustart.

Warum muss ich nach jeden Neustart in der DEF eine Änderung vornehmen damit es danach funktioniert?

Vielleicht habe ich ein allgemeines Problem, da auch ein Notify beim Neustart nicht ausgeführt wird. Zuletzt wurde dieses am 28.12.2021 ausgeführt, obwohl ich in der Zwischenzeit schon öfters einen Fhemneustart über shutdown+restart durchgeführt habe.

defmod Fhemneustart notify global:INITIALIZED set TelegramBot message @846538726 Fhem wurde neu gestartet!
attr Fhemneustart room Technik
setstate Fhemneustart active
setstate Fhemneustart 2022-03-23 18:39:04 state active
setstate Fhemneustart 2021-12-28 17:56:35 triggeredByDev global
setstate Fhemneustart 2021-12-28 17:56:35 triggeredByEvent INITIALIZED

maa1

Nachdem wir heute 2 Stunden Stromausfall hatten und dadurch ein Neustart von Fhem ausgelöst wurde und somit die DOIFs nicht mehr richtig funktionierten - habe ich gezwungenermaßen mit der Fehlersuche begonnen.

Ausgehend von der Fehlermeldung im Log beim Neustart:

2022.03.26 10:05:56 1: PERL WARNING: Use of uninitialized value $regdev in pattern match (m//) at ./FHEM/98_DOIF.pm line 2758, <$fh> line 1274.
2022.03.26 10:05:56 1: PERL WARNING: Use of uninitialized value $regdev in concatenation (.) or string at ./FHEM/98_DOIF.pm line 2761, <$fh> line 1274.

habe ich die beiden DOIF_Readings rausgefunden, die für das undefinierte Verhalten beim Neustart verantwortlich sind.

attr Aktuelles DOIF_Readings batterien:[@ (<br>)"":battery:$_ < 10,"ok"],Licht:[@a:"^HUEDevice":onoff:$_ eq "1" and $room ne "HUEDevice","keine"]

Nach Lösung dieser beiden und Fhemneustart waren im Log die Fehlermeldung verschwunden und alle DOIFs funktionierten wieder wie gewünscht.

Damian

Dann kannst du froh sein, dass nicht mehr kaputt ist. Was meinst du, warum wichtige System an eine USV angebunden sind :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

maa1

Hallo,

gestern hat sich Fhem von selbst neu gestartet (ohne Fehlermeldung im Log) und danach wurden wiedereinmal die zeitgesteuerten DOIFs nicht ausgeführt. Ich musste alle händisch anstossen.

Hier ein Beispiel das seit Jahren funktioniert, aber eben nach einem Neustart werden die Timer nicht aktualisiert.
defmod TagNacht DOIF ([06:00-22:00]) (setReading TagNacht Nacht 0)\
DOELSE (setReading TagNacht Nacht 1)
attr TagNacht cmdState Tag|Nacht
attr TagNacht do always
attr TagNacht room Technik
attr TagNacht userReadings Nacht

setstate TagNacht Nacht
setstate TagNacht 2022-05-30 06:48:28 Nacht 1
setstate TagNacht 2022-05-30 06:48:28 cmd 2
setstate TagNacht 2022-05-30 06:48:28 cmd_event TagNacht
setstate TagNacht 2022-05-30 06:48:28 cmd_nr 2
setstate TagNacht 2022-05-30 06:45:07 mode enabled
setstate TagNacht 2022-05-30 06:48:28 state Nacht
setstate TagNacht 2022-05-28 22:00:00 timer_01_c01 29.05.2022 06:00:00
setstate TagNacht 2022-05-28 22:00:00 timer_02_c01 29.05.2022 22:00:00

Ebenfalls ist mir aufgefallen, das ein notify für eine automatische Verständigung nach einem Neustart nicht funktionierte . Hier ist noch der letzte Neustart vom März gespeichert.

defmod Fhemneustart notify global:INITIALIZED set TelegramBot message @xxxxxxxxxx Fhem wurde neu gestartet!
attr Fhemneustart room Technik

setstate Fhemneustart 2022-03-26 13:52:59
setstate Fhemneustart 2022-05-30 06:38:46 state active
setstate Fhemneustart 2022-03-26 13:52:59 triggeredByDev global
setstate Fhemneustart 2022-03-26 13:52:59 triggeredByEvent INITIALIZED

Bitte um Unterstützung.