[erledigt] nach Update: Wait-timer werden nicht mehr gelöscht

Begonnen von Sany, 14 März 2018, 17:48:05

Vorheriges Thema - Nächstes Thema

Sany

Hallo zusammen,

ich habe heute mein fhem auf den neuesten Stand gebracht, danach zeigten 3 meiner DOIFs ein seltsames Verhalten. Nach zurückspielen nur des 98_DOIF.pm aus der letzten Sicherung war alles wieder wie es soll. Ebenso konnte ich das Verhalten auf einem Testsystem nachstellen. Nun zu den Einzelheiten:
DOIF-version nach Update:
Zitat98_DOIF.pm      16388 2018-03-11 20:32:41Z Damian
und die Version vor dem Update:
Zitat98_DOIF.pm      16182 2018-02-14 21:36:04Z Damian

Hier mein DOIF: (kann RAW importiert werden zum testen. Erzeugt einen ROOM Arduino, wer das nicht will vorher ändern. Danach kommen noch 2 Defs die den Stromzähler simulieren und diesen ein/ausschaltbar machen)
defmod di_StromzaehlerMonitor DOIF (["^Stromzaehler$:A_value"])\
     (set  $SELF M_Monitor ok , set $SELF C_Color #32a054)\
DOELSEIF\
  ([$SELF:state] eq "ok")\
     (set  $SELF M_Monitor caution , set $SELF C_Color #e67c22)\
DOELSEIF\
  ([$SELF:state] eq "caution")\
     (set  $SELF M_Monitor fail, \
set Telegra message Stromzaehler FAIL!!@{(TimeNow())}\nReset wird ausgelöst , \
set $SELF C_Color #ad3333,\
set Stromzaehler reboot)\
DOELSEIF\
  ([Stromzaehler:SKETCH_NAME])\

attr di_StromzaehlerMonitor alias Stromzähler
attr di_StromzaehlerMonitor cmdState ok|caution|fail|reboot
attr di_StromzaehlerMonitor devStateIcon ok:10px-kreis-gruen caution:10px-kreis-gelb fail:10px-kreis-rot reboot:control_reboot initializ.*:message_attention@orange
attr di_StromzaehlerMonitor do resetwait
attr di_StromzaehlerMonitor group Monitor
attr di_StromzaehlerMonitor initialize initialize
attr di_StromzaehlerMonitor readingList M_Monitor C_Color
attr di_StromzaehlerMonitor room Arduino
attr di_StromzaehlerMonitor selftrigger wait
attr di_StromzaehlerMonitor wait 5:90:90

defmod Stromzaehler DOIF ([+00:01])\
   (set $SELF A_value {(400 + rand(300))})
attr Stromzaehler do always
attr Stromzaehler readingList A_value
attr Stromzaehler room Arduino
attr Stromzaehler stateFormat A_value


defmod di_StromzaehlerOnOff DOIF (["$SELF:myButton: on"])\
(set Stromzaehler enable)\
DOELSEIF\
(["$SELF:myButton: off"])\
(set Stromzaehler disable)
attr di_StromzaehlerOnOff cmdState on|off
attr di_StromzaehlerOnOff do always
attr di_StromzaehlerOnOff readingList myButton
attr di_StromzaehlerOnOff room Arduino
attr di_StromzaehlerOnOff setList myButton:uzsuSelectRadio,on,off
attr di_StromzaehlerOnOff webCmd myButton
attr di_StromzaehlerOnOff webCmdLabel set Stromzähler..


Das DOIF mach folgendes: der Stromzähler sendet zu verschiedenen Zeiten seine Daten. Darauf reagiert das DOIF: sobald A_value empfangen wird triggert das DOIF auf dem ersten Zweig. Nach 5 sek wait schaltet es intern auf "ok", dieses triggert den 2ten Zweig. Hier ist nun ein längeres wait, welches das schalten auf cmd2 ("caution") verzögert. Kommen weiter Daten vom Stromzähler wird dieses längere wait abgebrochen und Zweig 1 wird wieder gültig, dieser triggert wieder Zweig 2 und es wird wieder gewartet. Bleiben die Daten vom Stromzähler weg läuft der timer ab, das DOIF triggert nun den 3ten Zweig, der (genau wie der 2te) nun wieder verzögert auf "fail" schaltet, wenn keine Daten ankommen. Das Ganze dient zur Überwachung des Sensors, ob dieser noch "lebt".
Nach dem Update (also mit der neuen Version von DOIF) wird der wait-timer nicht zurückgesetzt, sondern wenn der Stromzähler wieder sendet schaltet das DOIF nicht auf "ok" zurück sondern es wird zu "caution", beim nächsten Empfang zu "fail", dann wieder "ok" usw.

Die Zeiten im Beispiel sind verkürzt: der "Stromzähler" sendet minütlich, die wait-timer laufen 90 sec.
Da das Ganze bisher wirklich gut lief denke ich mal, ich habe die commandref zu wait, selftrigger und do resetwait soweit begriffen. Aber vielleicht liegt es ja auch an meiner def, ist nur bisher nicht zum tragen gekommen.

Viele Grüße

Sany
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Sany

Hallo Damian,

getestet und läuft!

Vielen Dank für diese ultraschnelle Reaktion! Hut ab und überhaupt großes Lob!!

Sany
fhem als LXC auf Proxmox auf einem minix Z100 , weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....

Damian

Zitat von: Sany am 14 März 2018, 18:53:29
Hallo Damian,

getestet und läuft!

Vielen Dank für diese ultraschnelle Reaktion! Hut ab und überhaupt großes Lob!!

Sany

OK. Korrigierte Version eingecheckt.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF