[Gelöst] AT im DOIF löschen

Begonnen von ettettette, 16 März 2018, 22:06:55

Vorheriges Thema - Nächstes Thema

ettettette

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

KernSani

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...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

ettettette

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

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ettettette

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

ettettette

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..

KernSani

Auch wenn ich mich wiederhole - bitte mal ein ,,list" des doif posten, damit man sieht, was da passiert


Kurz, weil mobil...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

ettettette

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


KernSani

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

ettettette

(([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.

KernSani

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 :)
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...