Hallo liebe Leute,
ich suche jetzt schon einige Zeit, aber ich komm nicht drauf:
Wieso wird das at im letzten DOELSEIF nicht gelöscht:
(([Modus:state] eq "auto") and ([?Lue1]==1) )
(set Lue1 0, set Nachricht "ModusChange1 aus Lue1")
DOELSEIF (([Modus:state] eq "an") and ([?Lue1]==0))
(set Lue1 1, set Nachricht "ModusChange1 an Lue1")
DOELSEIF (([Modus:state] eq "aus") and ([?Lue1]==1))
(set Lue1 0, set Nachricht "ModusChange1 aus Lue1")
DOELSEIF (([Modus:state] ne "") and (exists($defs{'Lue1_24_at'})))
(delete Lue1_24_at)
DOELSE ()
Vielen Dank im Vorraus
Ette
Bedingungsteil im DOIF ist eigentlich perl, daher sind keine {} notwendig. Falls das nicht hilft, bitte ein list des Doif, wenn es sich in dem Status befindet, in dem das ar gelöscht werden sollte.
Kurz, weil mobil...
Ich habs nochmal geprüft, die Synthax ist genau so richtig.
Es liegt daran, dass nicht alle DOELSEIFs durchgeführt werden, steht ja so auch in der Wiki.
Es wäre schön, wenn man das DOIF zum prüfen aller Bedingungen überreden könnte.
"Prüfe immer auch diesen Fall:"
Sonst muss ich das in einem notify machen, worunter aber die Übersichtlichkeit leiden würde.
Liebe Grüße
Ette
Zitat von: ettettette am 17 März 2018, 01:21:41
Ich habs nochmal geprüft, die Synthax ist genau so richtig.
Es liegt daran, dass nicht alle DOELSEIFs durchgeführt werden, steht ja so auch in der Wiki.
Es wäre schön, wenn man das DOIF zum prüfen aller Bedingungen überreden könnte.
"Prüfe immer auch diesen Fall:"
Sonst muss ich das in einem notify machen, worunter aber die Übersichtlichkeit leiden würde.
Liebe Grüße
Ette
Dann hast du die Doku noch nicht komplett gelesen:
https://fhem.de/commandref_DE.html#DOIF_checkall
Hört sich erstmal gut an, aber dort steht:
ZitatZu beachten ist, dass bei einer wahren Bedingung die dazugehörigen Befehle ausgeführt werden und die Abarbeitung immer beendet wird - es wird also grundsätzlich immer nur ein Befehlszweig ausgeführt und niemals mehrere.
Genau das will ich aber, dass in einem Rutsch auch mehrere Zweige abgearbeitet werden.
Ich muss das löschen des at also in ein notify auslagern oder in die entsprechenden Zweige mit einbauen, wennes keine andere Lösung gibt.
Hmmm
Das müsste laut comandref funktionieren, tuts aber auch nicht:
(([Modus:state] eq "auto") and ([?Lue1]==1) )
(set Lue1 0, set Nachricht "ModusChange1 aus Lue1",{if (exists($defs{'Lue1_24_at'})) {fhem("delete Lue1_24_at")} })
DOELSEIF (([Modus:state] eq "an") and ([?Lue1]==0))
(set Lue1 1, set Nachricht "ModusChange1 an Lue1",{if (exists($defs{'Lue1_24_at'})) {fhem("delete Lue1_24_at")} })
DOELSEIF (([Modus:state] eq "aus") and ([?Lue1]==1))
(set Lue1 0, set Nachricht "ModusChange1 aus Lue1",{if (exists($defs{'Lue1_24_at'})) {fhem("delete Lue1_24_at")} })
DOELSE ()
Grübel..
Auch wenn ich mich wiederhole - bitte mal ein ,,list" des doif posten, damit man sieht, was da passiert
Kurz, weil mobil...
Was meinst du mit "list"?
Das hier:
defmod ModusChange1 DOIF (([Modus:state] eq "auto") and ([?Lue1]==1) )\
(set Lue1 0, set Nachricht "ModusChange1 aus Lue1",{if (exists($defs{'Lue1_24_at'})) {fhem("delete Lue1_24_at")} })\
DOELSEIF (([Modus:state] eq "an") and ([?Lue1]==0))\
(set Lue1 1, set Nachricht "ModusChange1 an Lue1",{if (exists($defs{'Lue1_24_at'})) {fhem("delete Lue1_24_at")} })\
DOELSEIF (([Modus:state] eq "aus") and ([?Lue1]==1))\
(set Lue1 0, set Nachricht "ModusChange1 aus Lue1",{if (exists($defs{'Lue1_24_at'})) {fhem("delete Lue1_24_at")} })\
\
DOELSE ()
attr ModusChange1 room Lueftraum
setstate ModusChange1 cmd_4
setstate ModusChange1 2018-03-17 13:59:58 Device Modus
setstate ModusChange1 2018-03-17 13:59:58 cmd 4
setstate ModusChange1 2018-03-17 13:59:58 cmd_event Modus
setstate ModusChange1 2018-03-17 13:59:58 cmd_nr 4
setstate ModusChange1 2018-03-17 13:59:58 e_Modus_state an
setstate ModusChange1 2018-03-17 13:13:46 mode enabled
setstate ModusChange1 2018-03-17 13:59:58 state cmd_4
Nein, ich meine list ModusChange1
https://forum.fhem.de/index.php/topic,71806.0.html
Kurz, weil mobil...
(([Modus:state] eq "auto") and ([?Lue1]==1) )
(set Lue1 0, set Nachricht "ModusChange1 aus Lue1",{if (exists($defs{'Lue1_24_at'})) {fhem("delete Lue1_24_at")} })
DOELSEIF (([Modus:state] eq "an") and ([?Lue1]==0))
(set Lue1 1, set Nachricht "ModusChange1 an Lue1",{if (exists($defs{'Lue1_24_at'})) {fhem("delete Lue1_24_at")} })
DOELSEIF (([Modus:state] eq "aus") and ([?Lue1]==1))
(set Lue1 0, set Nachricht "ModusChange1 aus Lue1",{if (exists($defs{'Lue1_24_at'})) {fhem("delete Lue1_24_at")} })
DOELSE ()
Vielen Dank für eure Hilfe,
so wie oben gepostet funktioniert es auf jeden Fall.
Ich hatte in einem anderen device noch einen Synthaxfehler, vielleicht lags daran - versteh ich zwar nicht - aber egal.
Zitat von: ettettette am 23 März 2018, 21:56:58
so wie oben gepostet funktioniert es auf jeden Fall.
Schreibst du dann bitte noch [Gelöst] vor das Subject des ersten Posts? Danke :)