FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: M.Piet am 25 Juni 2022, 10:41:58

Titel: Probleme mit meinem "or" DOIF
Beitrag von: M.Piet am 25 Juni 2022, 10:41:58
Moin Zusammen,

ich scheitere grade an einer einfachen Aufgabe.

Ich habe einen DOIF als "oder" aufgebaut. Hintergrund: ich möchte, dass der Solarkreis am Pool nur aktiv ist, wenn es auch ein halbwegs sonniger Tag ist. Darum schau ich ganz simpel, was Proplanta für den Nachmittag vorhersagt. Tritt einer der Bedinungen zu, soll "Solar_Wetter_Prolanta" auf "Solar_Wetter_On" gesetzt werden. Bei allen anderen Bedinungen auf "Off"

[Wetter_PROPLANTA:fc0_weatherDay:"heiter"] or [Wetter_PROPLANTA:fc0_weatherDay:"sonnig"] or [Wetter_PROPLANTA:fc0_weatherDay:"bedeckt"] (set Solar_Wetter_Prolanta Solar_Wetter_On) DOELSE (set Solar_Wetter_Prolanta Solar_Wetter_Off)

Da "Wetter_PROPLANTA:fc0_weatherDay" sich zuletzt um 17:32 geändert hat, und das Reading nicht auf "heiter", "sonnig" oder "bedeckt" steht, sollte mein Dummy doch auf "Solar_Wetter_Off". stehen. Er ist aber unverändert. Seit 2 Tagen unverändert.

Oder mache ich einen Denkfehler?
Danke schon mal für die Hilfe :)

PS: ja, ich habe in meinem Device Proplanta falsch geschrieben... xD
Titel: Antw:Probleme mit meinem "or" DOIF
Beitrag von: betateilchen am 25 Juni 2022, 11:20:59
Fehlt da vielleicht eine umschließende Klammer um die Gesamtheit der drei Vergleiche?
Titel: Antw:Probleme mit meinem "or" DOIF
Beitrag von: Frank_Huber am 25 Juni 2022, 11:43:16
bitte ein list des DOIF im Fehlerzustand.
Alles andere ist raten.....

Ich würde das auch eher über eine Zustandsabfrage machen anstatt der Events.
([DEVICE:READING] =~ "version1|version2|version3") (set BLA on) DOELSE (set BLA off)
Titel: Antw:Probleme mit meinem "or" DOIF
Beitrag von: Reinhard.M am 26 Juni 2022, 10:54:33
Zitat von: M.Piet am 25 Juni 2022, 10:41:58
Moin Zusammen,

ich scheitere grade an einer einfachen Aufgabe.

Ich habe einen DOIF als "oder" aufgebaut. Hintergrund: ich möchte, dass der Solarkreis am Pool nur aktiv ist, wenn es auch ein halbwegs sonniger Tag ist. Darum schau ich ganz simpel, was Proplanta für den Nachmittag vorhersagt. Tritt einer der Bedinungen zu, soll "Solar_Wetter_Prolanta" auf "Solar_Wetter_On" gesetzt werden. Bei allen anderen Bedinungen auf "Off"

[Wetter_PROPLANTA:fc0_weatherDay:"heiter"] or [Wetter_PROPLANTA:fc0_weatherDay:"sonnig"] or [Wetter_PROPLANTA:fc0_weatherDay:"bedeckt"] (set Solar_Wetter_Prolanta Solar_Wetter_On) DOELSE (set Solar_Wetter_Prolanta Solar_Wetter_Off)

Da "Wetter_PROPLANTA:fc0_weatherDay" sich zuletzt um 17:32 geändert hat, und das Reading nicht auf "heiter", "sonnig" oder "bedeckt" steht, sollte mein Dummy doch auf "Solar_Wetter_Off". stehen. Er ist aber unverändert. Seit 2 Tagen unverändert.

Oder mache ich einen Denkfehler?
Danke schon mal für die Hilfe :)

PS: ja, ich habe in meinem Device Proplanta falsch geschrieben... xD

Hallo M.Piet!
Für mich sieht deine Beschreibung der Event States falsch aus. Fall das Reading "fc0_weatherDay" heißt und du die Werte heiter, sonnig und bedeckt triggern willst müsste es meines Erachtens folgendermaßen aussehen:

[Wetter_PROPLANTA:"fc0_weatherDay: heiter"] or [Wetter_PROPLANTA:"fc0_weatherDay: sonnig"] or [Wetter_PROPLANTA:"fc0_weatherDay: bedeckt"] (set Solar_Wetter_Prolanta Solar_Wetter_On) DOELSE (set Solar_Wetter_Prolanta Solar_Wetter_Off)


Das Reading muss zusammen mit dem erwarteten Ergebnis in Anführungszeichen stehen und exakt dem entsprechen was als Event im Monitor zu sehen ist. Daher auch das Leerzeichen. Wenn du auf Nummer Sicher gehen willst einmal die Events im Monitor anschauen.

Gruß Reinhard
Titel: Antw:Probleme mit meinem "or" DOIF
Beitrag von: M.Piet am 27 Juni 2022, 11:04:16
Zitat von: Frank_Huber am 25 Juni 2022, 11:43:16
Ich würde das auch eher über eine Zustandsabfrage machen anstatt der Events.
([DEVICE:READING] =~ "version1|version2|version3") (set BLA on) DOELSE (set BLA off)
Genau das hat mir geholfen. :)
Vielen Dank. Jetzt macht mein DOIF was er soll. :)
Titel: Antw:Probleme mit meinem "or" DOIF
Beitrag von: M.Piet am 27 Juni 2022, 14:37:00
Nun aber doch noch eine Frage.

Nun möchte ich einen weiteren "and" -DOIF.
Er soll den Stellmotor der Solaranlage nur aktiv schalten, wenn alle 4 Bedingungen erfüllt sind. Die 4 Quellen sind dummys. Ich frage mich, warum der DOIF nichts macht, obwohl alle 4 Bedingungen zuteffen. Gibt es bei einem "and" DOIF was anderes zu beachten?
(Zum testen wird ein Dummy geschaltet, später wird es der Stellmotor sein).

Wäre nett, wenn mir da noch jemand helfen könnte. Danke schon mal.

[Solar_Zeitschaltuhr:"state: Solar_Zeit_On"] and [Solar_Wetter_Prolanta:"state: Solar_Wetter_On"] and [Solar_An_Aus:"state: Solar_On"] and [Solar_Temp_On:"state: Solar_Temp_On"](set Dummy_Solar_Test DOIF_AN) DOELSE (set Dummy_Solar_Test DOIF_AUS)

Der DOIF:
Internals:
   CFGFN     
   DEF        [Solar_Zeitschaltuhr:"state: Solar_Zeit_On"] and [Solar_Wetter_Prolanta:"state: Solar_Wetter_On"] and [Solar_An_Aus:"state: Solar_On"] and [Solar_Temp_On:"state: Solar_Temp_On"](set Dummy_Solar_Test DOIF_AN) DOELSE (set Dummy_Solar_Test DOIF_AUS)
   FUUID      62b99850-f33f-8a41-1979-cab6838f356da661
   MODEL      Perl
   NAME       Solar_Steuerung_4_Zustaende_DOIF
   NOTIFYDEV  global
   NR         3753988
   NTFY_ORDER 50-Solar_Steuerung_4_Zustaende_DOIF
   STATE      initialized
   TYPE       DOIF
   VERSION    25386 2021-12-28 22:19:25
   READINGS:
     2022-06-27 14:32:01   mode            enabled
     2022-06-27 14:32:01   state           initialized
   Regex:
     accu:
     collect:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
   helper:
     DEVFILTER  ^global$
     NOTIFYDEV  global
     globalinit 1
     last_timer 0
     sleeptimer -1
   perlblock:
   uiState:
   uiTable:
Attributes:
   room       Pool



Einer der 4 Dummys:
Internals:
   CFGFN     
   FUUID      62b5895f-f33f-8a41-9af9-8ef06c2f8aed2b9c
   NAME       Solar_Zeitschaltuhr
   NR         3681530
   STATE      Solar_Zeit_On
   TYPE       dummy
   READINGS:
     2022-06-27 14:30:00   state           Solar_Zeit_On
Attributes:
   room       Pool

Titel: Antw:Probleme mit meinem "or" DOIF
Beitrag von: Frank_Huber am 27 Juni 2022, 14:53:46
Zitat von: M.Piet am 27 Juni 2022, 14:37:00
Nun aber doch noch eine Frage.

Nun möchte ich einen weiteren "and" -DOIF.
Er soll den Stellmotor der Solaranlage nur aktiv schalten, wenn alle 4 Bedingungen erfüllt sind. Die 4 Quellen sind dummys. Ich frage mich, warum der DOIF nichts macht, obwohl alle 4 Bedingungen zuteffen. Gibt es bei einem "and" DOIF was anderes zu beachten?
(Zum testen wird ein Dummy geschaltet, später wird es der Stellmotor sein).

Wäre nett, wenn mir da noch jemand helfen könnte. Danke schon mal.

[Solar_Zeitschaltuhr:"state: Solar_Zeit_On"] and [Solar_Wetter_Prolanta:"state: Solar_Wetter_On"] and [Solar_An_Aus:"state: Solar_On"] and [Solar_Temp_On:"state: Solar_Temp_On"](set Dummy_Solar_Test DOIF_AN) DOELSE (set Dummy_Solar_Test DOIF_AUS)

Der DOIF:
Internals:
   CFGFN     
   DEF        [Solar_Zeitschaltuhr:"state: Solar_Zeit_On"] and [Solar_Wetter_Prolanta:"state: Solar_Wetter_On"] and [Solar_An_Aus:"state: Solar_On"] and [Solar_Temp_On:"state: Solar_Temp_On"](set Dummy_Solar_Test DOIF_AN) DOELSE (set Dummy_Solar_Test DOIF_AUS)
   FUUID      62b99850-f33f-8a41-1979-cab6838f356da661
   MODEL      Perl
   NAME       Solar_Steuerung_4_Zustaende_DOIF
   NOTIFYDEV  global
   NR         3753988
   NTFY_ORDER 50-Solar_Steuerung_4_Zustaende_DOIF
   STATE      initialized
   TYPE       DOIF
   VERSION    25386 2021-12-28 22:19:25
   READINGS:
     2022-06-27 14:32:01   mode            enabled
     2022-06-27 14:32:01   state           initialized
   Regex:
     accu:
     collect:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
   helper:
     DEVFILTER  ^global$
     NOTIFYDEV  global
     globalinit 1
     last_timer 0
     sleeptimer -1
   perlblock:
   uiState:
   uiTable:
Attributes:
   room       Pool



Einer der 4 Dummys:
Internals:
   CFGFN     
   FUUID      62b5895f-f33f-8a41-9af9-8ef06c2f8aed2b9c
   NAME       Solar_Zeitschaltuhr
   NR         3681530
   STATE      Solar_Zeit_On
   TYPE       dummy
   READINGS:
     2022-06-27 14:30:00   state           Solar_Zeit_On
Attributes:
   room       Pool


Du prüfst auf Ereignisse, nicht Zustände.
I(n deinem Versuch müssen alle 4 Dummys gleichzeitig schalten... baue es auf Zustandsüberwachung um und es sollte gehen.
Titel: Antw:Probleme mit meinem "or" DOIF
Beitrag von: kjmEjfu am 27 Juni 2022, 15:12:52
Wird auch in der CommandRef gut beschrieben: https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung
Vor allem vor den Events ;-)
Titel: Antw:Probleme mit meinem "or" DOIF
Beitrag von: M.Piet am 27 Juni 2022, 15:29:50
Ah OK.....danke....das es bei einem Dummy nicht so einfach ist, hätte ich jetzt nicht gedacht.

OK, ich habe ihn umgebaut. Aber ich fürchte das ich irgendwas mit den Klammern noch falsch habe:

([Solar_Zeitschaltuhr]:"state: Solar_Zeit_On") and ([Solar_Wetter_Prolanta] eq "Solar_Wetter_On") and ([Solar_An_Aus] eq "Solar_On") and ([Solar_Temp_On] eq "Solar_Temp_On")(set Dummy_Solar_Test DOIF_AN) DOELSE (set Dummy_Solar_Test DOIF_AUS)

Ich bekomme beim Speichern des DOIFs folgende Meldung:

Solar_Steuerung_4_Zustaende_DOIF DOIF: expected DOELSEIF or DOELSE:  and ([Solar_Wetter_Prolanta] eq "Solar_Wetter_On") and ([Solar_An_Aus] eq "Solar_On") and ([Solar_Temp_On] eq "Solar_Temp_On")(set Dummy_Solar_Test DOIF_AN) DOELSE (set Dummy_Solar_Test DOIF_AUS)
Titel: Antw:Probleme mit meinem "or" DOIF
Beitrag von: Frank_Huber am 27 Juni 2022, 16:39:42
so muss das:

([GERÄT1:READING] eq "Bla" and [GERÄT2:READING] eq "Bla" and [GERÄT3:READING] eq "Bla")

Du hast jetzt ne Mischung aus Ereignis und Zustand gebaut die gar nicht funktioniert.
Titel: Antw:Probleme mit meinem "or" DOIF
Beitrag von: M.Piet am 27 Juni 2022, 17:23:53
Hmmm....ich hatte mich an den Link gehalten:
https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung

Aber OK. Ich habe es nun so aufgebaut, wie du mir genannt hast.

([Solar_Zeitschaltuhr:state] eq "Solar_Zeit_On" and [Solar_Wetter_Prolanta:state] eq "Solar_Wetter_On" and [Solar_An_Aus:state] eq "Solar_On") and [Solar_Temp:state] eq "Solar_Temp_On") (set Dummy_Solar_Test DOIF_AN) DOELSE (set Dummy_Solar_Test DOIF_AUS)
Ich bekomme hier leider die gleiche Fehlermeldung:
Solar_Steuerung_4_Zustaende_DOIF DOIF: expected DOELSEIF or DOELSE:  and [Solar_Temp:state] eq "Solar_Temp_On") (set Dummy_Solar_Test DOIF_AN) DOELSE (set Dummy_Solar_Test DOIF_AUS)

Beispiel:
Das Reading "state" im Device "Solar_Zeitschaltuhr" ist "Solar_Zeit_On".
Also sollte dies doch richtig sein:
[Solar_Zeitschaltuhr:state] eq "Solar_Zeit_On"

...oder kann es sein, dass ich dich gar nicht verstanden habe?
Titel: Antw:Probleme mit meinem "or" DOIF
Beitrag von: MadMax-FHEM am 27 Juni 2022, 17:37:01
Klammern schon mal gezählt?

Zitat
([Solar_Zeitschaltuhr:state] eq "Solar_Zeit_On" and [Solar_Wetter_Prolanta:state] eq "Solar_Wetter_On" and [Solar_An_Aus:state] eq "Solar_On") and [Solar_Temp:state] eq "Solar_Temp_On") (set Dummy_Solar_Test DOIF_AN) DOELSE (set Dummy_Solar_Test DOIF_AUS)

Gruß, Joachim
Titel: Antw:Probleme mit meinem "or" DOIF
Beitrag von: M.Piet am 27 Juni 2022, 17:45:10
Zitat von: MadMax-FHEM am 27 Juni 2022, 17:37:01
Klammern schon mal gezählt?

Gruß, Joachim
Danke Joachim....das war es. Der DOIF jetzt macht was er soll! Vielen vielen dank für deine Hilfe und deine Geduld!