FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Tommyland78 am 01 April 2019, 11:06:14

Titel: DOIF mit wait und do always - BUG?
Beitrag von: Tommyland78 am 01 April 2019, 11:06:14
Hallo zusammen,

nach einen Update habe ich ein geändertes Verhalten bei meinem DOIF (Workflows)

Hier ein kleines Beispiel:
([Shelly_5:state] eq "on") (set Shelly_5 off)
do always
wait 300

Bisher war es so, dass beim Einschalten von Shelly_5 300 Sekunden gewartet wurde und danach wurde Shelly_5 ausgeschaltet.
Ein Lichtschalter der nach der Betätigung das Licht einschaltet und nach 5 Minuten wieder automatisch ausschaltet.

Seit einem Update Beginnt wait von Beginn an neu die 300 Sekunden, wenn Shelly_5 den Status "on" zwischenzeitlich erneut meldet.
Also immer wenn der Shelly_5 meldet er sei noch an, beginnt der Zähler von neuem.
Das war bisher nicht der Fall.

Übersehe ich etwas?

Grüße
Der Tom
Titel: Antw:DOIF mit wait und do always - BUG?
Beitrag von: GreenFHEMfan am 01 April 2019, 11:40:23
Hallo es gibt mehrer Möglichkeiten es zu realisieren.

Du kannst den Befehl "set Shelly_5 on-for-timer 300" nehmen

oder 

im Shelly selbst über die Weboberfläche eine Ausschaltzeit setzen.

Gruß
Titel: Antw:DOIF mit wait und do always - BUG?
Beitrag von: Damian am 01 April 2019, 15:10:52
Zitat von: Tommyland78 am 01 April 2019, 11:06:14
Hallo zusammen,

nach einen Update habe ich ein geändertes Verhalten bei meinem DOIF (Workflows)

Hier ein kleines Beispiel:
([Shelly_5:state] eq "on") (set Shelly_5 off)
do always
wait 300

Bisher war es so, dass beim Einschalten von Shelly_5 300 Sekunden gewartet wurde und danach wurde Shelly_5 ausgeschaltet.
Ein Lichtschalter der nach der Betätigung das Licht einschaltet und nach 5 Minuten wieder automatisch ausschaltet.

Seit einem Update Beginnt wait von Beginn an neu die 300 Sekunden, wenn Shelly_5 den Status "on" zwischenzeitlich erneut meldet.
Also immer wenn der Shelly_5 meldet er sei noch an, beginnt der Zähler von neuem.
Das war bisher nicht der Fall.

Übersehe ich etwas?

Grüße
Der Tom

Beim always hat sich nichts geändert, ein wait wird nicht unterbrochen, wenn der Timer noch läuft. Ansonsten brauche ich einen Gegenbeweis.
Titel: Antw:DOIF mit wait und do always - BUG?
Beitrag von: Tommyland78 am 02 April 2019, 14:46:08
Zitat von: Damian am 01 April 2019, 15:10:52
Beim always hat sich nichts geändert, ein wait wird nicht unterbrochen, wenn der Timer noch läuft. Ansonsten brauche ich einen Gegenbeweis.

Also bei mir wird wait unterbrochen und beginnt von vorn an zu zählen.
Wie erbringe ich denn den Gegenbeweis den Du gern hättest.
Was genau brauchst Du?

Grüße
Der Tom
Titel: Antw:DOIF mit wait und do always - BUG?
Beitrag von: Frank_Huber am 02 April 2019, 15:48:34
unterbrochen wird bei "do resetwait"

prüfe das doch nochmal und/oder poste ein vollständiges list vom DOIF.
Titel: Antw:DOIF mit wait und do always - BUG?
Beitrag von: Tommyland78 am 04 April 2019, 18:33:04

Internals:
   DEF        ([Shelly_5:state] eq "on") (set Shelly_5 off)


   FUUID      5c6920c2-f33f-6de2-315b-dc73b97b7faf7491
   MODEL      FHEM
   NAME       Auto_Licht_Aus_Treppenlicht_Workflow
   NR         363
   NTFY_ORDER 50-Auto_Licht_Aus_Treppenlicht_Workflow
   STATE      cmd_1
   TYPE       DOIF
   VERSION    18890 2019-03-13 18:56:41
   READINGS:
     2019-03-31 23:04:37   cmd             1
     2019-03-31 23:04:37   cmd_event       set_cmd_1
     2019-03-31 23:04:37   cmd_nr          1
     2019-03-31 23:04:37   state           cmd_1
     2019-03-31 22:53:00   wait_timer      31.03.2019 22:58:00 cmd_1 Auto_Licht_Aus_Treppenlicht_Workflow
   Regex:
     accu:
   attr:
     wait:
       0:
         300
   condition:
     0          ::ReadingValDoIf($hash,'Shelly_5','state') eq "on"
   devices:
     0           Shelly_5
     all         Shelly_5
   do:
     0:
       0          set Shelly_5 off
     1:
   helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   itimer:
   perlblock:
   readings:
     0           Shelly_5:state
     all         Shelly_5:state
   uiState:
   uiTable:
Attributes:
   do         always
   group      Workflow Licht
   room       Workflow
   wait       300
Titel: Antw:DOIF mit wait und do always - BUG?
Beitrag von: Damian am 04 April 2019, 19:04:14
Mit dem set-Kommando hebelst du natürlich den wait aus. So steht das auch in der Commandref: https://fhem.de/commandref_DE.html#DOIF_setcmd
Titel: Antw:DOIF mit wait und do always - BUG?
Beitrag von: Tommyland78 am 04 April 2019, 19:24:29
Hallo,

1) der set-Befehl übersteuert alle Attribute wie z. B. wait, do, usw.
2) ein laufender Wait-Timer wird unterbrochen

Ich glaube ich verstehe etwas nicht ganz.
Nach meinem Verständnis ist 1 +2 genau das was ich will.
Mit dem set-Befehl soll wait unterbrochen werden und der Timer beendet werden.
Nur wird der set-Befehl ja gar nicht ausgeführt. Der Timer beginnt ja immer wieder neu ohne den Set-Befehl.

Der Timer beginnt dann immer wieder neu, denn der Status vom Shelly_5 erneuert wird.
Wird der Status während der Wait-Timer läuft erneuert, beginnt wait von vorn an zu zählen ohne jemals den set-Befehl auszuführen.

und vor allem....es funktionierte ja bisher monatelang gut.

Grüße
Der Tom
Titel: Antw:DOIF mit wait und do always - BUG?
Beitrag von: Damian am 04 April 2019, 19:58:46
Zitat von: Tommyland78 am 04 April 2019, 19:24:29
Hallo,

1) der set-Befehl übersteuert alle Attribute wie z. B. wait, do, usw.
2) ein laufender Wait-Timer wird unterbrochen

Ich glaube ich verstehe etwas nicht ganz.
Nach meinem Verständnis ist 1 +2 genau das was ich will.
Mit dem set-Befehl soll wait unterbrochen werden und der Timer beendet werden.
Nur wird der set-Befehl ja gar nicht ausgeführt. Der Timer beginnt ja immer wieder neu ohne den Set-Befehl.

Der Timer beginnt dann immer wieder neu, denn der Status vom Shelly_5 erneuert wird.
Wird der Status während der Wait-Timer läuft erneuert, beginnt wait von vorn an zu zählen ohne jemals den set-Befehl auszuführen.

und vor allem....es funktionierte ja bisher monatelang gut.

Grüße
Der Tom

Mit set cmd führst du den Befehl aus und beendest ggf. einen wait-Timer der lief. Bei jedem neuen Trigger läuft der wait-timer (der ja unterbrochen worden ist) neu an. Das ist so designt und funktionierte immer schon so.

Was nicht funktionieren darf, ist die Tatsache, dass ein laufender Timer durch einen Trigger neugestartet wird. Das ist deinem List nicht zu sehen.

Titel: Antw:DOIF mit wait und do always - BUG?
Beitrag von: Tommyland78 am 04 April 2019, 20:02:21
Hallo,

ja genau, so sollte es sein - ist es aber eben nicht.
Der laufende Timer wird durch das Triggern des Status vom Shelly_5 neu gestartet.

Ich kann das ja einsehen, kommt eine neue Statusmeldung, startet der Timer neu.
Wir können uns das gern per Teamviewer oder Skype gemeinsam ansehen.

Grüße
Der Tom
Titel: Antw:DOIF mit wait und do always - BUG?
Beitrag von: amenomade am 04 April 2019, 20:11:05
Also zuerst eine Anmerkung: wenn der Modulautor dir sagt, etwas hat sich nicht geändert, kannst Du ihm grundsätzlich glauben. Es können ja bei der Entwicklung Fehler passieren, aber für so ein simpel DOIF hätten schon viele andere Benutzer zwei Wochen nach der letzte Änderung gemeckert.

Bist Du sicher, dass inzwischen dein Shelly keinen anderen Status hat? Die log vom Schelly wäre nicht schlecht. Und/oder ein "list" vom DOIF vor dem Problem und nach dem Problem (und nicht nach einem "set <DOIFname> cmd_1")

EDIT: ich habe deinen Fall simuliert (ein dummy statt shelly, dass ich 2 oder dreimal mit "on" betätige) und ein DOIF. Ich kann dein Problem nicht reproduzieren
Titel: Antw:DOIF mit wait und do always - BUG?
Beitrag von: Tommyland78 am 04 April 2019, 20:27:59
Hallo,

ich wollte nicht zum Ausdruck bringen, dass ich ihm nicht glauben würde! Das wäre etwas anmaßend...
Wenn das anders rüber kam, dann bitte ich um Entschuldigung.

Ich wollte nur sagen, dass es eben genau so ist wie ich schildere und ich mir das ja auch nicht erklären kann.
Ich habe aber absolut keine Ahnung wo ich ansetzen soll.
Das DOIF ist so simpel, dass ja im Grunde kaum weitere Fehlerquellen anstehen würden.

Ein List vom DOIF vor und nach dem Problem kann ich leider nicht bieten, ein davor habe ich nicht.
Das Log liefere ich gleich nach.

Grüße
Der Tom
Titel: Antw:DOIF mit wait und do always - BUG?
Beitrag von: amenomade am 04 April 2019, 20:31:55
dann evtl. ein "list" vom DOIF nach einem "set Shelly_5 on" und wieder ein "list" vom DOIF nach einem erneuten "set Shelly_5 on" vor dem Ende der 5 Minuten?
Titel: Antw:DOIF mit wait und do always - BUG?
Beitrag von: Damian am 04 April 2019, 20:38:41
Ich habe den Fall bei mir nachgestellt, und es funktioniert wie erwartet.

Was allerdings an deinem List auffällig ist, ist die Tatsache, dass der Waiteintrag:

2019-03-31 22:53:00   wait_timer      31.03.2019 22:58:00 cmd_1 Auto_Licht_Aus_Treppenlicht_Workflow

nicht auf no timer steht.

Das kann eigentlich nur dann passieren, wenn man während der Timer noch lief, also vor 22:58, das System heruntergefahren hätte.

Eine andere Frage ist, warum führst du
Zitatset Auto_Licht_Aus_Treppenlicht_Workflow cmd_1
überhaupt aus.

Edit: Du kannst über DEF-Button das Modul neu initialisieren, dann wird der wait_timer-Eintrag definitiv gelöscht und dann noch mal testen.
Titel: Antw:DOIF mit wait und do always - BUG?
Beitrag von: amenomade am 04 April 2019, 20:49:15
ZitatDas kann eigentlich nur dann passieren, wenn man während der Timer noch lief, also vor 22:58, das System heruntergefahren hätte.
So dass er das Ende des Timers irgendwie "verpasst" hat?

Sollten wir nicht auch ein e_<doif>_state haben sollen?
Titel: Antw:DOIF mit wait und do always - BUG?
Beitrag von: Damian am 04 April 2019, 20:57:57
Zitat von: amenomade am 04 April 2019, 20:49:15
So dass er das Ende des Timers irgendwie "verpasst" hat?

Sollten wir nicht auch ein e_<doif>_state haben sollen?
ja, da fehlen einige Sachen.

So sieht es im Normalfall aus:

Internals:
   DEF        ([FS:state] eq "on")(set bla blblb)
   MODEL      FHEM
   NAME       test_di
   NR         614
   NTFY_ORDER 50-test_di
   STATE      initialized
   TYPE       DOIF
   VERSION    18890 2019-03-13 18:56:41
   READINGS:
     2019-04-04 20:55:13   Device          FS
     2019-04-04 20:55:11   cmd             0
     2019-04-04 20:05:26   diff            0
     2019-04-04 20:55:13   e_FS_state      on
     2019-04-04 20:55:11   mode            enabled
     2019-04-04 20:55:11   state           initialized
     2019-02-23 20:16:43   version         18557 2019-02-10 16:58:11
     2019-04-04 20:55:13   wait_timer      04.04.2019 20:55:43 cmd_1 FS
...
Attributes:
   do         always
   wait       30


Man sieht den Auslöser:

     2019-04-04 20:55:13   e_FS_state      on

und das auslösende Device:

     2019-04-04 20:55:13   Device          FS
Titel: Antw:DOIF mit wait und do always - BUG?
Beitrag von: amenomade am 04 April 2019, 21:03:13
Ein Problem mit dem statefile?
EDIT: ne eigentlich nicht, es denn... heruntergefahren
Titel: Antw:DOIF mit wait und do always - BUG?
Beitrag von: Ellert am 09 April 2019, 14:46:26
Hier https://forum.fhem.de/index.php/topic,99243.msg926295.html#msg926295 ff. ist beschrieben, wie es zu dem Timerfragment kommt.