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
Fehlt da vielleicht eine umschließende Klammer um die Gesamtheit der drei Vergleiche?
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)
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
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. :)
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
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.
Wird auch in der CommandRef gut beschrieben: https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung
Vor allem vor den Events ;-)
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)
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.
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?
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
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!