Hauptmenü

Anfängerfrage DOIF

Begonnen von elektro_rainer, 17 März 2020, 10:15:57

Vorheriges Thema - Nächstes Thema

elektro_rainer

Servus zusammen,

ich habe ein DOIF um während der Woche die Beleuchtung aus zu schalten.
Wenn ich "checkall" mache springt das auf cmd_2, führt das dann wie gewollt EINMAL aus und bleibt auf status cmd_1 stehen.
Wo ist mein Denkfehler???

defmod Gartenlicht_Aus_WD DOIF ([([22:30]+int(rand(1800)))|Arbeitstag]) (set Garten_Beleuchtung off)
attr Gartenlicht_Aus_WD group Automatik
attr Gartenlicht_Aus_WD room Simulation
attr Gartenlicht_Aus_WD weekdays Son,Mon,Die,Mit,Don,Fre,Sam,Wochenende,Arbeitstag,WochenendeMorgen

setstate Gartenlicht_Aus_WD cmd_1
setstate Gartenlicht_Aus_WD 2020-03-16 22:35:21 cmd 1
setstate Gartenlicht_Aus_WD 2020-03-16 22:35:21 cmd_event timer_1
setstate Gartenlicht_Aus_WD 2020-03-16 22:35:21 cmd_nr 1
setstate Gartenlicht_Aus_WD 2020-03-12 10:16:15 mode enabled
setstate Gartenlicht_Aus_WD 2020-03-16 22:35:21 state cmd_1
setstate Gartenlicht_Aus_WD 2020-03-16 22:35:21 timer_01_c01 17.03.2020 22:48:56|Arbeitstag


Danke

rabehd

Zitatcmd_2, führt das dann wie gewollt EINMAL aus
Ich sehe nichts was als cmd_2 ausgeführt werden könnte.
Auch funktionierende Lösungen kann man hinterfragen.

elektro_rainer

... und warum springt das DOIF nach einem "checkall" auf cmd_2 und führt das dann genau einmal aus??

rabehd

Du schreibst:
ZitatWenn ich "checkall" mache springt das auf cmd_2, führt das dann wie gewollt EINMAL aus und bleibt auf status cmd_1 stehen.
Es gibt also etwas gewolltest unter dem 2. Zweig. Da steht aber nichts. Was wird denn ausgeführt?
Es kann eigentlich nur der 1. Zweig ausgeführt werrde, da es keinen 2. gibt.
Wo soll es hinspringen, wenn Du nur einen einzigen Zweig hast? Ich würde sagen "do always" führt zur erneuten Durchführung.
Auch funktionierende Lösungen kann man hinterfragen.

Damian

Wenn du checkall ausführen lässt, dann wird deine Bedingung geprüft, die ist zu diesem Zeitpunkt nicht wahr also geht er in den Zustand cmd_2. Zum errechneten Zeitpunkt führt er deine Anweisung aus in cmd_1.

Du musst das Attribut do always setzen, damit cmd_1 nicht nur einmal ausgeführt werden kann.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

elektro_rainer

Danke für Eure Hilfe und Erklärungen, ich werd's heut direkt testen!

elektro_rainer

das war's,... funzzt, .. danke!