FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Manul am 21 Juli 2017, 11:24:58

Titel: [gelöst] Offenbar Verständnisproblem: Mein DOIF tut nicht, wie ich will
Beitrag von: Manul am 21 Juli 2017, 11:24:58
Ich habe folgendes DOIF:

defmod di_EntfeuchterAnAus DOIF ([kg_li_sco_kellerfenster] eq "open")\
\
  (set kg_li_steckdose_entfeuchter_Sw off)\
\
DOELSEIF ([klima_keller:humidity] < 56)\
\
  (set kg_li_steckdose_entfeuchter_Sw off)\
\
DOELSEIF ([klima_keller:humidity] > 56)\
\
  (set kg_li_steckdose_entfeuchter_Sw on)\
\
DOELSE
attr di_EntfeuchterAnAus initialize initialized
attr di_EntfeuchterAnAus room Automatisierung

setstate di_EntfeuchterAnAus cmd_4
setstate di_EntfeuchterAnAus 2017-07-21 11:18:56 Device klima_keller
setstate di_EntfeuchterAnAus 2017-07-21 11:11:14 cmd 4
setstate di_EntfeuchterAnAus 2017-07-21 11:11:14 cmd_event klima_keller
setstate di_EntfeuchterAnAus 2017-07-21 11:11:14 cmd_nr 4
setstate di_EntfeuchterAnAus 2017-07-21 11:07:34 e_kg_li_sco_kellerfenster_STATE closed
setstate di_EntfeuchterAnAus 2017-07-21 11:18:56 e_klima_keller_humidity 56
setstate di_EntfeuchterAnAus 2017-07-21 11:11:14 state cmd_4


Das soll den Entfeuchter im Keller ausschalten, wenn das Fenster offen ist, und ihn ansonsten so ein- und ausschalten, daß die relative Feuchte nahe 56% bleibt.

Gestern abend habe ich das Fenster geöffnet, während der Entfeuchter lief. Dieser ging daraufhin sofort aus. So weit, so gut.

Heute morgen komme ich in den Keller und der Entfeuchter läuft, das Fenster ist immer noch offen. Mir leuchtet nicht ein, wie es dazu kommen konnte. Irgendjemand eine Idee?
Titel: Antw:Offenbar Verständnisproblem: Mein DOIF tut nicht, wie ich will
Beitrag von: nils_ am 21 Juli 2017, 11:39:37
Irgendjemand eine Idee?
ja.
deine luftfeuchte ist über 56 gewesen!


du fragst in dem zweig den zustand des Fensters nicht ab.
Titel: Antw:Offenbar Verständnisproblem: Mein DOIF tut nicht, wie ich will
Beitrag von: darkness am 21 Juli 2017, 11:40:38
Klar,

DOELSEIF ([klima_keller:humidity] > 56.

Da fehlt noch eine Bedingung, dass da Fenster nicht auf sein darf

Edit:

Zu langsam  :)
Titel: Antw:Offenbar Verständnisproblem: Mein DOIF tut nicht, wie ich will
Beitrag von: Manul am 21 Juli 2017, 12:04:51
Okay, da habe ich offenbar tatsächlich ein Verständnisproblem: Ich dachte, das DOIF läuft in den DOELSEIF-Zweig nur, wenn die davorstehende Bedingung nicht erfüllt ist. Ist das nicht so?
Titel: Antw:Offenbar Verständnisproblem: Mein DOIF tut nicht, wie ich will
Beitrag von: nils_ am 21 Juli 2017, 12:14:24
da fehlt dann das "do always"
Titel: Antw:Offenbar Verständnisproblem: Mein DOIF tut nicht, wie ich will
Beitrag von: Manul am 21 Juli 2017, 12:16:54
Kannst Du das kurz erklären?
Titel: Antw:Offenbar Verständnisproblem: Mein DOIF tut nicht, wie ich will
Beitrag von: nils_ am 21 Juli 2017, 12:24:48
https://forum.fhem.de/index.php/topic,72668.msg642935.html#msg642935

da hat das mal jemand erklärt.


einfach mal hier im subforum nach "do always" suchen, da gab es schon ne menge fragen zu.
Titel: Antw:Offenbar Verständnisproblem: Mein DOIF tut nicht, wie ich will
Beitrag von: Manul am 21 Juli 2017, 12:34:12
Danke. Aus dem link ist  mir allerdings nicht ersichtlich, wie ein "do_always" in meinem Fall helfen sollte.

Ich versuche mal kurz zusammenzufassen, was ich glaube, verstanden zu haben.

- In dem Moment, in dem das Fenster geöffnet wird, ist Bedingung 1 wahr und der Entfeuchter wird abgeschaltet. DOIF ist im Zustand cmd_1
- Wenn dann die relative Feuchte über 56% steigt, wird Bedingung 1 nicht mehr geprüft, da sie das Device, das die Feuchte misst, nicht enthält. Bedingung 2 ist wahr, daher wechselt das DOIF in den Zustand cmd_2 und schaltet den Entfeuchter an, obwohl Bedingung 1 immer noch wahr ist.

Ist das so richtig, insbesondere der fette Teil?

Ein do_always würde doch Bedingung 1 trotzdem nur auswerten, wenn der Fensterkontakt ein Event triggert, oder habe ich das auch falsch verstanden?
Titel: Antw:Offenbar Verständnisproblem: Mein DOIF tut nicht, wie ich will
Beitrag von: Thyraz am 21 Juli 2017, 12:54:49
DOIF triggert auf Events die in irgendeinem der Zweige drin sind (solange sie nicht mir "?" als nicht-triggernd markiert sind).
Es ist meines Wissens egal ob das auslösende Event in einem Zweig vorkommt oder nicht. Geprüft wird dennoch alles der Reihenfolge nach.
Es wird (ohne do always) nur der Zweig nicht überprüft, der gerade aktiv ist.

Willst du, dass ein Zweig nur bei einem bestimmten Event aktiv werden kann darfst du nicht auf Zustände abfragen, sondern musst direkt auf Events checken.

Wäre dann wahrscheinlich in der Art

([kg_li_sco_kellerfenster:"open"])

anstatt

([kg_li_sco_kellerfenster] eq "open")
Titel: Antw:Offenbar Verständnisproblem: Mein DOIF tut nicht, wie ich will
Beitrag von: Ellert am 21 Juli 2017, 13:34:06
Zitat von: Manul am 21 Juli 2017, 12:34:12
Danke. Aus dem link ist  mir allerdings nicht ersichtlich, wie ein "do_always" in meinem Fall helfen sollte.

Ich versuche mal kurz zusammenzufassen, was ich glaube, verstanden zu haben.

- In dem Moment, in dem das Fenster geöffnet wird, ist Bedingung 1 wahr und der Entfeuchter wird abgeschaltet. DOIF ist im Zustand cmd_1
- Wenn dann die relative Feuchte über 56% steigt, wird Bedingung 1 nicht mehr geprüft, da sie das Device, das die Feuchte misst, nicht enthält. Bedingung 2 ist wahr, daher wechselt das DOIF in den Zustand cmd_2 und schaltet den Entfeuchter an, obwohl Bedingung 1 immer noch wahr ist.

Ist das so richtig, insbesondere der fette Teil?

Ein do_always würde doch Bedingung 1 trotzdem nur auswerten, wenn der Fensterkontakt ein Event triggert, oder habe ich das auch falsch verstanden?

Beides Mal ja.

Du müsstest die Zweige gegeneinander verrigeln, z.B.

in die DOELSEIF Zweige

and $cmd != 1 einbauen, dann wird der Lüfter über die Feuchte nur geschaltet, wenn das Reading cmd  des DOIF ungleich 1 ist, also nur wenn das Fenster nicht offen ist.

Titel: Antw:Offenbar Verständnisproblem: Mein DOIF tut nicht, wie ich will
Beitrag von: Manul am 21 Juli 2017, 13:43:24
Danke, dann habe ich's, denke ich, verstanden. Die Bezeichnung DOELSE[IF] finde ich dann allerdings etwas irreführend gewählt. Ich hätte nicht erwartet, daß das System in einen ELSE-Zweig laufen kann, solange die IF-Bedingung noch erfüllt ist.
Titel: Antw:Offenbar Verständnisproblem: Mein DOIF tut nicht, wie ich will
Beitrag von: Ellert am 21 Juli 2017, 14:05:04
Zitat von: Manul am 21 Juli 2017, 13:43:24
Danke, dann habe ich's, denke ich, verstanden. Die Bezeichnung DOELSE[IF] finde ich dann allerdings etwas irreführend gewählt. Ich hätte nicht erwartet, daß das System in einen ELSE-Zweig laufen kann, solange die IF-Bedingung noch erfüllt ist.

Das ist in der Commandref aber so beschrieben - bereits in der Einleitung, da hättest Du nichts anderes erwarten müssen  ;)

ZitatZu beachten ist, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event das dazughörige Device bzw. die dazugehörige Triggerzeit beinhalten. Kommt ein Device in mehreren Bedingungen vor, so wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist.
Titel: Antw:Offenbar Verständnisproblem: Mein DOIF tut nicht, wie ich will
Beitrag von: Manul am 21 Juli 2017, 15:01:05
Mag sein, aber das scheinen auch andere nicht mitbekommen zu haben:

Zitat von: Thyraz am 21 Juli 2017, 12:54:49
Es ist meines Wissens egal ob das auslösende Event in einem Zweig vorkommt oder nicht. Geprüft wird dennoch alles der Reihenfolge nach.
Titel: Antw:Offenbar Verständnisproblem: Mein DOIF tut nicht, wie ich will
Beitrag von: Damian am 21 Juli 2017, 15:51:29
Zitat von: Manul am 21 Juli 2017, 15:01:05
Mag sein, aber das scheinen auch andere nicht mitbekommen zu haben:

Daher als erste Referenz die Commandref nehmen. Sätze, die mit "Meines Wissens nach..." anfangen, sind dann schon mal mit Vorsicht zu genießen ;)

Wer das Verhalten des DOIF-Modul ändern möchte, der kann gerne mit dem Attribut https://fhem.de/commandref_DE.html#DOIF_checkall experimentieren.

Titel: Antw:Offenbar Verständnisproblem: Mein DOIF tut nicht, wie ich will
Beitrag von: Manul am 21 Juli 2017, 16:28:27
Cool, checkall macht's zumindest für mich intuitiver. Danke!
Titel: Antw:[gelöst] Offenbar Verständnisproblem: Mein DOIF tut nicht, wie ich will
Beitrag von: Thyraz am 22 Juli 2017, 07:56:45
Ok, auch wieder was gelernt.  8)
Titel: Antw:Offenbar Verständnisproblem: Mein DOIF tut nicht, wie ich will
Beitrag von: Per am 22 Juli 2017, 10:47:58
Zitat von: nils_ am 21 Juli 2017, 12:14:24
da fehlt dann das "do always"
Netter Versuch ;)
Warum gibt es für zwei Zustände 3 DOIF Fälle? Dampf das auf zwei ein und der Fehler ist mit weg.
Allerdings auch der Lerneffekt ;D