Hauptmenü

selftrigger geht nicht mehr

Begonnen von JMW, 24 März 2017, 10:57:53

Vorheriges Thema - Nächstes Thema

JMW

Hallo,
nach einem Update scheint meine Statemachine nicht mehr zu funktionieren.
Ich schalte innerhalb eines DOIF mit selftrigger die Zustände zeitverzögert um.

Nun habe ich festgestellt, dass mein Wartezustand (Abwesend->Warten) nicht weitergeschaltet wird. Ich sehe, dass der wait_timer nicht gesetzt ist:

state: Abwesend->Warten
wait_timer:  no timer


define di_AlarmAnlage DOIF     ( ([dm_HomeState]  eq "present") and ([?dm_AlarmZustand]  ne "aus"))                                       ( set dm_AlarmZustand aus  ) \
                      DOELSEIF ( ([dm_HomeState]  eq "absent")  and ([dm_AlarmSchalter]  ne "aus") and ([?dm_AlarmZustand] eq "aus") )    ( set dm_AlarmZustand warten ) \
                      DOELSEIF ( ([?dm_HomeState] eq "absent")  and ([?dm_AlarmSchalter] eq "an") and ([dm_AlarmZustand] eq "warten") )   ( set dm_AlarmZustand scharf ) \
                      DOELSEIF ( ([?dm_HomeState] eq "absent")  and ([dm_AlarmZustand] eq "scharf") )                                     (  ) \
attr di_AlarmAnlage cmdState Anwesend->Aus|Abwesend->Warten|Warten->Scharf|Scharf
attr di_AlarmAnlage group Alarm
attr di_AlarmAnlage selftrigger all
attr di_AlarmAnlage wait 1:1:300:1


Eigentlich war es so, dass die Zustände: "Abwesend->Warten" -> 1s -> "Warten->Scharf" -> 300s -> "Scharf" nacheinander durchgelaufen sind.

Wurde hier etwas geändert?

Damian

Es hat sich hier bei den letzten Updates an der Stelle nichts geändert, bei mir funktioniert der nachgestellte Fall, wie er soll.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Vllt. ein guter Zeitpunkt, statt des Selftriggers die neuen Set-Befehle einzusetzen.

Ellert

Zitat von: Per am 24 März 2017, 15:32:37
Vllt. ein guter Zeitpunkt, statt des Selftriggers die neuen Set-Befehle einzusetzen.
Interessanter Hinweis.

JMW

Zitatder set-Befehl übersteuert alle Attribute wie z. B. wait, do, usw.

Ich mache das ganze mit dem selftrigger nur, weil ich die wait_timer zum Zustandswechsel benutzen möchte.

Geht attr di_AlarmAnlage wait 1:1:300:1 dann noch?

Damian

Zitat von: JMW am 24 März 2017, 19:04:49
Ich mache das ganze mit dem selftrigger nur, weil ich die wait_timer zum Zustandswechsel benutzen möchte.

Geht attr di_AlarmAnlage wait 1:1:300:1 dann noch?

Der jeweils erste Wait-Timer wird außer Gefecht gesetzt. Die waren in erster Linie dafür gedacht, um über die Weboberfläche etwas zu steuern und da will man normaler Weise nicht warten. Dann müsste man so etwas realsieren set mydoif cmd_1 withwait oder attr maydoif cmd_x withwait.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

JMW

Ja, kann man schon alles so machen, aber für meinen Fall ist doch der selftrigger optimal, oder?

Ellert

Zitat von: JMW am 24 März 2017, 19:19:32
Ja, kann man schon alles so machen, aber für meinen Fall ist doch der selftrigger optimal, oder?
"selfrtigger all" ist nicht ganz unproblematisch, siehe https://forum.fhem.de/index.php/topic,51060.msg442955.html#msg442955

Du könntest stattdessen versuchen auf den eigenen Zustand des DOIF triggern.

DOELSEIF ([?dm_HomeState] eq "absent" and [$SELF] eq "cmd_3") ()

Damian

Also Selftrigger mit wait sind unproblematische als ohne, da wird der Status richtig gesetzt und man kann beliebig lange Ketten bilden.
Ohne wait wird der Status nicht richtig gesetzt und die Kette wird beim zweiten Durchlauf von FHEM unterbunden.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Per

Zitat von: Damian am 24 März 2017, 19:16:44
Der jeweils erste Wait-Timer wird außer Gefecht gesetzt.
Den kann man ja als "nop" überspringen
(Bedingung)()(cmd1)(cmd2)
wait 0:1:1