Hauptmenü

Probleme mit meinem "or" DOIF

Begonnen von M.Piet, 25 Juni 2022, 10:41:58

Vorheriges Thema - Nächstes Thema

M.Piet

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

betateilchen

Fehlt da vielleicht eine umschließende Klammer um die Gesamtheit der drei Vergleiche?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Frank_Huber

#2
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)

Reinhard.M

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

M.Piet

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

M.Piet

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


Frank_Huber

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.

kjmEjfu

Wird auch in der CommandRef gut beschrieben: https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung
Vor allem vor den Events ;-)
Migriere derzeit zu Home Assistant

M.Piet

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)

Frank_Huber

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.

M.Piet

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?

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

M.Piet

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!