FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: ettettette am 16 März 2018, 22:06:55

Titel: [Gelöst] AT im DOIF löschen
Beitrag von: ettettette am 16 März 2018, 22:06:55
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
Titel: Antw:AT im DOIF löschen
Beitrag von: KernSani am 16 März 2018, 22:33:40
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...
Titel: Antw:AT im DOIF löschen
Beitrag 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
Titel: Antw:AT im DOIF löschen
Beitrag von: Damian am 17 März 2018, 08:35:04
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
Titel: Antw:AT im DOIF löschen
Beitrag von: ettettette am 17 März 2018, 13:01:03
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
Titel: Antw:AT im DOIF löschen
Beitrag von: ettettette am 17 März 2018, 13:20:47
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..
Titel: Antw:AT im DOIF löschen
Beitrag von: KernSani am 17 März 2018, 13:56:18
Auch wenn ich mich wiederhole - bitte mal ein ,,list" des doif posten, damit man sieht, was da passiert


Kurz, weil mobil...
Titel: Antw:AT im DOIF löschen
Beitrag von: ettettette am 17 März 2018, 14:03:12
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

Titel: Antw:AT im DOIF löschen
Beitrag von: KernSani am 17 März 2018, 14:08:05
Nein, ich meine list ModusChange1

https://forum.fhem.de/index.php/topic,71806.0.html


Kurz, weil mobil...
Titel: Antw:AT im DOIF löschen
Beitrag von: ettettette am 23 März 2018, 21:56:58
(([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.
Titel: Antw:AT im DOIF löschen
Beitrag von: KernSani am 24 März 2018, 00:23:07
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 :)