Hauptmenü

noch offen: Syntaxfrage

Begonnen von is2late, 13 April 2025, 16:31:31

Vorheriges Thema - Nächstes Thema

is2late

Hallo!

Unsere Gartenbewässerung erfolgt über Hydrawise. Ich benutze das Reading  rl1_next, rl2_next, rl3_next (der drei Zonen), um die Pumpe HUEDevice37 auszuschalten, sobald der Status aller drei Zonen von "running" auf "idle" wechselt. Leider tut er das nicht mehr - Hunter scheint da etwas geändert zu haben. Statt "idle" wird im Ruhezustand nun die Uhrzeit der nächsten programmierten Beregnung angegeben, also zB "04:00" für 4 Uhr morgens.

Ich möchte daher das untenstehende DOIF so ändern, dass anstatt von eq"idle" die Bedingung lautet "alles andere außer "running". Dieses Vorhaben überschreitet aber meine Kenntnisse. Kann mir jemand helfen?

defmod d_PumpeAUS DOIF ([myHydrawise:rl1_next] eq "idle" and [myHydrawise:rl2_next] eq "idle" and [myHydrawise:rl3_next] eq "idle" and [HUEDevice55:state] eq "off") (set HUEDevice37 off) DOELSE ## Nothing
Vielen Dank,
LG Ingo
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

MadMax-FHEM

#1
ne "running"

Googeln hätte auch helfen können ;)

Z.B. https://www-user.tu-chemnitz.de/~lfe/selfhtml61/tecf.htm

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)

is2late

Super, herzlichen Dank, Joachim!
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

is2late

Ich muss doch noch einmal nachfragen...
Dieser Code funktioniert NICHT:
defmod d_PumpeAUS DOIF ([myHydrawise:rl1_next] ne "running" and [myHydrawise:rl2_next] ne "running" and [myHydrawise:rl3_next] ne "running" and [HUEDevice55:state] eq "off") (set HUEDevice37 off) DOELSE ## Nothing
Er führt dazu, dass die Pumpe HUEDevice37 sehr schnell (nach ca 1-2 Minuten) wieder ausgeschaltet wird, obwohl eine der drei Zonen noch läuft.

Könnte dies damit zusammenhängen, dass "ne" eine Zeichenkette ("running") und eine Uhrzeit (zB "04:00" in der Bedeutung "nicht running") nicht miteinander vergleichen kann?
Stört vielleicht der Doppelpunkt?

LG Ingo
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

MadMax-FHEM

Ich wollte schon schreiben, dass ich bei ne immer vorsichtig bin...

Weil u.U. mehr als das gewollte bzw. nicht gewollte zutreffen kann...

Ich weiß nicht, wie DOIF bzw. setMagic? die Readingwerte "zurückliefert" aber die Abfrage ne sollte immer wahr sein, solange eben der Wert nicht "running" ist...

Poste doch ein list vom Device, wenn es den passenden Zustand hat und auch vom DOIF (wenn es nicht passt)...

Du hast auch viele UND usw. evtl. passt die Logik (doch) nicht wie gedacht...

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)

Otto123

Zitat von: is2late am 14 April 2025, 17:26:21obwohl eine der drei Zonen noch läuft.
riecht nach oder statt und
Nur geraten:
((zone1 or zone2 or zone3) and Bedingung4)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

is2late

Hm, das ist interessant...
Also bisher - dh jedenfalls, solange bei Untätigkeit einer Zone "idle" gemeldet wurde - hat das DOIF einwandfrei funktioniert.
Die Idee war ja: Wenn alle drei Zonen AUS sind (die vierte Kondition ist hier zu vernachlässigen), dann soll die Pumpe ausgeschaltet werden -

Hier mal das Listing des DOIF:
[code]define d_PumpeAUS DOIF ([myHydrawise:rl1_next] ne "running" and [myHydrawise:rl2_next] ne "running" and [myHydrawise:rl3_next] ne "running" and [HUEDevice55:state] eq "off") (set HUEDevice37 off) DOELSE ## Nothing
attr d_PumpeAUS comment Wenn KEINE der drei Zonen mehr auf "running" steht UND die Bewässerung NICHT per Hand ausgelöst wurde ("Lampe Yannik an= HUEDevice55 im Elektrikraum"), dann soll die Pumpe HUEDevice37 stromlos gemacht werden.
attr d_PumpeAUS do always
attr d_PumpeAUS room Bewässerung,Geräte
#   DEF        ([myHydrawise:rl1_next] ne "running" and [myHydrawise:rl2_next] ne "running" and [myHydrawise:rl3_next] ne "running" and [HUEDevice55:state] eq "off") (set HUEDevice37 off) DOELSE ## Nothing
#   FUUID      64a5cc15-f33f-8a5f-0b69-74d30b63e120fd64
#   MODEL      FHEM
#   NAME       d_PumpeAUS
#   NOTIFYDEV  myHydrawise,global,HUEDevice55
#   NR         476
#   NTFY_ORDER 50-d_PumpeAUS
#   STATE      cmd_1
#   TYPE       DOIF
#   eventCount 16810
#   READINGS:
#     2025-04-16 10:12:13   Device          myHydrawise
#     2025-04-16 10:12:13   cmd             1
#     2025-04-16 10:12:13   cmd_event       myHydrawise
#     2025-04-16 10:12:13   cmd_nr          1
#     2025-04-15 18:03:27   e_HUEDevice55_state off
#     2025-04-16 10:12:13   e_myHydrawise_rl1_next Sonntag
#     2025-04-16 10:12:13   e_myHydrawise_rl2_next Sonntag
#     2025-04-16 10:12:13   e_myHydrawise_rl3_next idle
#     2025-04-16 10:11:49   mode            enabled
#     2025-04-16 10:12:13   state           cmd_1
#   Regex:
#     accu:
#     bar:
#     barAvg:
#     collect:
#     cond:
#       HUEDevice55:
#         0:
#           state      ^HUEDevice55$:^state:
#       myHydrawise:
#         0:
#           rl1_next   ^myHydrawise$:^rl1_next:
#           rl2_next   ^myHydrawise$:^rl2_next:
#           rl3_next   ^myHydrawise$:^rl3_next:
#   attr:
#     cmdState:
#     wait:
#     waitdel:
#   condition:
#     0          ::ReadingValDoIf($hash,'myHydrawise','rl1_next') ne "running" and ::ReadingValDoIf($hash,'myHydrawise','rl2_next') ne "running" and ::ReadingValDoIf($hash,'myHydrawise','rl3_next') ne "running" and ::ReadingValDoIf($hash,'HUEDevice55','state') eq "off"
#   do:
#     0:
#       0          set HUEDevice37 off
#     1:
#       0         
#   helper:
#     NOTIFYDEV  myHydrawise,global,HUEDevice55
#     event      rl3_next: idle
#     globalinit 1
#     last_timer 0
#     sleeptimer -1
#     timerdev   myHydrawise
#     timerevent rl3_next: idle
#     triggerDev myHydrawise
#     timerevents:
#       rl3_next: idle
#     timereventsState:
#       rl3_next: idle
#     triggerEvents:
#       rl3_next: idle
#     triggerEventsState:
#       rl3_next: idle
#   hmccu:
#   internals:
#   readings:
#     all         myHydrawise:rl1_next myHydrawise:rl2_next myHydrawise:rl3_next HUEDevice55:state
#   trigger:
#   uiState:
#   uiTable:
#
setstate d_PumpeAUS cmd_1
setstate d_PumpeAUS 2025-04-16 10:12:13 Device myHydrawise
setstate d_PumpeAUS 2025-04-16 10:12:13 cmd 1
setstate d_PumpeAUS 2025-04-16 10:12:13 cmd_event myHydrawise
setstate d_PumpeAUS 2025-04-16 10:12:13 cmd_nr 1
setstate d_PumpeAUS 2025-04-15 18:03:27 e_HUEDevice55_state off
setstate d_PumpeAUS 2025-04-16 10:12:13 e_myHydrawise_rl1_next Sonntag
setstate d_PumpeAUS 2025-04-16 10:12:13 e_myHydrawise_rl2_next Sonntag
setstate d_PumpeAUS 2025-04-16 10:12:13 e_myHydrawise_rl3_next idle
setstate d_PumpeAUS 2025-04-16 10:11:49 mode enabled
setstate d_PumpeAUS 2025-04-16 10:12:13 state cmd_1
[/code]

...und hier das des Geräts Hydrawise:

[code]define myHydrawise HYDRAWISE 6B31-1A31-907F-7EE6 60
attr myHydrawise room Bewässerung
attr myHydrawise webCmd stopall renewContext renewRelays
#   DEF        6B31-1A31-907F-7EE6 60
#   FUUID      64a56c0d-f33f-8a5f-2c3e-60f1fc798bed5f3b
#   INTERVAL   60
#   NAME       myHydrawise
#   NR         475
#   STATE      on
#   TYPE       HYDRAWISE
#   eventCount 102049
#   READINGS:
#     2025-04-16 10:17:14   controller_counts 1
#     2025-04-16 10:17:14   ct1_controller_id 1067787
#     2025-04-16 10:17:14   ct1_controller_message Unknown
#     2025-04-16 10:17:14   ct1_controller_name Hunter Steuergart
#     2025-04-16 10:17:14   ct1_last_contact 1970-01-01 01:00:00
#     2025-04-16 10:17:14   ct1_serial_number 0210C4098A
#     2025-04-16 10:17:14   cur_controller_id 1067787
#     2025-04-16 10:17:14   cur_controller_name Hunter Steuergart
#     2025-04-16 10:17:14   customer_id     1005562
#     2025-04-16 10:19:13   presence        present
#     2025-04-16 10:19:13   relay_counts    3
#     2025-04-16 10:19:13   rl1_name        Rasen links
#     2025-04-16 10:19:13   rl1_next        Sonntag
#     2025-04-16 10:19:13   rl1_relay       1
#     2025-04-16 10:19:13   rl1_relay_id    6795236
#     2025-04-16 10:19:13   rl1_run_minutes 14
#     2025-04-16 10:19:13   rl2_name        Rasen rechts
#     2025-04-16 10:19:13   rl2_next        Sonntag
#     2025-04-16 10:19:13   rl2_relay       2
#     2025-04-16 10:19:13   rl2_relay_id    6795246
#     2025-04-16 10:19:13   rl2_run_minutes 14
#     2025-04-16 10:19:13   rl3_name        Tropfrohre
#     2025-04-16 10:19:13   rl3_next        idle
#     2025-04-16 10:19:13   rl3_relay       3
#     2025-04-16 10:19:13   rl3_relay_id    6795251
#     2025-04-16 10:19:13   rl3_run_minutes none
#     2025-04-16 10:19:13   state           on
#   helper:
#     APIKEY     6B31-1A31-907F-7EE6
#
setstate myHydrawise on
setstate myHydrawise 2025-04-16 10:17:14 controller_counts 1
setstate myHydrawise 2025-04-16 10:17:14 ct1_controller_id 1067787
setstate myHydrawise 2025-04-16 10:17:14 ct1_controller_message Unknown
setstate myHydrawise 2025-04-16 10:17:14 ct1_controller_name Hunter Steuergart
setstate myHydrawise 2025-04-16 10:17:14 ct1_last_contact 1970-01-01 01:00:00
setstate myHydrawise 2025-04-16 10:17:14 ct1_serial_number 0210C4098A
setstate myHydrawise 2025-04-16 10:17:14 cur_controller_id 1067787
setstate myHydrawise 2025-04-16 10:17:14 cur_controller_name Hunter Steuergart
setstate myHydrawise 2025-04-16 10:17:14 customer_id 1005562
setstate myHydrawise 2025-04-16 10:19:13 presence present
setstate myHydrawise 2025-04-16 10:19:13 relay_counts 3
setstate myHydrawise 2025-04-16 10:19:13 rl1_name Rasen links
setstate myHydrawise 2025-04-16 10:19:13 rl1_next Sonntag
setstate myHydrawise 2025-04-16 10:19:13 rl1_relay 1
setstate myHydrawise 2025-04-16 10:19:13 rl1_relay_id 6795236
setstate myHydrawise 2025-04-16 10:19:13 rl1_run_minutes 14
setstate myHydrawise 2025-04-16 10:19:13 rl2_name Rasen rechts
setstate myHydrawise 2025-04-16 10:19:13 rl2_next Sonntag
setstate myHydrawise 2025-04-16 10:19:13 rl2_relay 2
setstate myHydrawise 2025-04-16 10:19:13 rl2_relay_id 6795246
setstate myHydrawise 2025-04-16 10:19:13 rl2_run_minutes 14
setstate myHydrawise 2025-04-16 10:19:13 rl3_name Tropfrohre
setstate myHydrawise 2025-04-16 10:19:13 rl3_next idle
setstate myHydrawise 2025-04-16 10:19:13 rl3_relay 3
setstate myHydrawise 2025-04-16 10:19:13 rl3_relay_id 6795251
setstate myHydrawise 2025-04-16 10:19:13 rl3_run_minutes none
setstate myHydrawise 2025-04-16 10:19:13 state on
[/code]

Neu ist, dass Hydrawise jetzt plötzlich keine Uhrzeit für rl1/2_next zurückgibt, sondern einen Wochentag. Scheint davon abzuhängen, ob die Bewässerung noch am selben Tag oder später erfolgen soll (das ist abhängig von der Wetterprognose und dem Sensorstatus).

LG



Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

betateilchen

Zitat von: is2late am 16 April 2025, 10:26:12Die Idee war ja: Wenn alle drei Zonen AUS sind (die vierte Kondition ist hier zu vernachlässigen), dann soll die Pumpe ausgeschaltet werden

Warum nimmst Du dafür nicht einfach ein device vom TYPE=structure, das ist doch genau für solche Szenarien vorgesehen?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

is2late

ZitatWarum nimmst Du dafür nicht einfach ein device vom TYPE=structure, das ist doch genau für solche Szenarien vorgesehen?

Soweit ich das verstehe, würde auch ein Structure das Problem nicht lösen, dass das Reading rl1/2/3 (anders als früher) im Leerlauf der jeweiligen Zone keinen einheitlichen Inhalt bekommt, bei dem man ansetzen kann. Mal ist eine Uhrzeit, mal ein Wochentag...

Ich bräuchte daher schon so etwas wie bei MadMax Lösung, was also sagt: Wenn weder rl1 noch rl2 noch rl3 auf "running" stehen, wird die Pumpe ausgeschaltet.
Die "ne"- Lösung scheint aber an dem Reading "04:00" uä zu scheitern.
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

passibe

#9
Zitat von: is2late am 17 April 2025, 16:33:41Die "ne"- Lösung scheint aber an dem Reading "04:00" uä zu scheitern.
Das kann eigentlich nicht das Problem sein. Habe es gerade mit deinem DOIF getestet, bei mir funktioniert das problemlos. Konnte jetzt aber vielleicht auch nicht alle edge cases testen.

Ich glaube das Problem dürfte irgendwo anders liegen. Du müsstest mal die Bewässerung starten/stoppen/Zeiten verändern und parallel auf dem Event Monitor schauen, was da an Events reinkommt und weshalb das DOIF fälschlicherweise triggert ...

Ich habe getestet mit
defmod d_PumpeAUS DOIF ([myHydrawise:rl1_next] ne "running" and [myHydrawise:rl2_next] ne "running" and [myHydrawise:rl3_next] ne "running" and [HUEDevice55:state] eq "off") (set HUEDevice37 off) DOELSE ## Nothing
attr d_PumpeAUS do always

Das DOELSE kannst du übrigens auch weglassen, das macht in der Kombination mit do always eigentlich nix ...

Also es geht auch einfach
defmod d_PumpeAUS DOIF ([myHydrawise:rl1_next] ne "running" and [myHydrawise:rl2_next] ne "running" and [myHydrawise:rl3_next] ne "running" and [HUEDevice55:state] eq "off") (set HUEDevice37 off)
attr d_PumpeAUS do always

Vielleicht ist es auch irgendwie ein Problem, dass z.B. auch beim Wechsel von Saturday -> 04:00 das DOIF triggert und die Pumpe ausschaltet? Sollte aber eigentlich egal sein, weil die Pumpe da eh schon aus sein sollte (denn es wird ja ohnehin nur dann getriggert, wenn nichts auf "running" ist).

is2late

Hi Passibe,

mache ich. Hier die Events, wenn die Pumpe durch das DOIF abgeschaltet wird:

2025-04-17 17:52:46 HYDRAWISE myHydrawise presence: present
2025-04-17 17:52:46 HYDRAWISE myHydrawise on
2025-04-17 17:52:46 HYDRAWISE myHydrawise presence: present
2025-04-17 17:52:46 HYDRAWISE myHydrawise on
2025-04-17 17:52:46 HYDRAWISE myHydrawise relay_counts: 3
2025-04-17 17:52:46 HYDRAWISE myHydrawise rl1_relay: 1
2025-04-17 17:52:46 HYDRAWISE myHydrawise rl1_relay_id: 6795236
2025-04-17 17:52:46 HYDRAWISE myHydrawise rl1_name: Rasen links
2025-04-17 17:52:46 DOIF d_PumpeAUS cmd_nr: 1
2025-04-17 17:52:46 DOIF d_PumpeAUS cmd: 1
2025-04-17 17:52:46 DOIF d_PumpeAUS cmd_event: myHydrawise
2025-04-17 17:52:46 DOIF d_PumpeAUS cmd_1
2025-04-17 17:52:46 DOIF d_PumpeAn cmd_nr: 2
2025-04-17 17:52:46 DOIF d_PumpeAn cmd: 2
2025-04-17 17:52:46 DOIF d_PumpeAn cmd_event: myHydrawise
2025-04-17 17:52:46 DOIF d_PumpeAn cmd_2
2025-04-17 17:52:46 HYDRAWISE myHydrawise rl1_next: Sonntag
2025-04-17 17:52:46 HYDRAWISE myHydrawise rl1_run_minutes: 15
2025-04-17 17:52:46 HYDRAWISE myHydrawise rl2_relay: 2
2025-04-17 17:52:46 HYDRAWISE myHydrawise rl2_relay_id: 6795246
2025-04-17 17:52:46 HYDRAWISE myHydrawise rl2_name: Rasen rechts
2025-04-17 17:52:46 DOIF d_PumpeAUS cmd_nr: 1
2025-04-17 17:52:46 DOIF d_PumpeAUS cmd: 1
2025-04-17 17:52:46 DOIF d_PumpeAUS cmd_event: myHydrawise
2025-04-17 17:52:46 DOIF d_PumpeAUS cmd_1
2025-04-17 17:52:46 DOIF d_PumpeAn cmd_nr: 2
2025-04-17 17:52:46 DOIF d_PumpeAn cmd: 2
2025-04-17 17:52:46 DOIF d_PumpeAn cmd_event: myHydrawise
2025-04-17 17:52:46 DOIF d_PumpeAn cmd_2
2025-04-17 17:52:46 HYDRAWISE myHydrawise rl2_next: Sonntag
2025-04-17 17:52:46 HYDRAWISE myHydrawise rl2_run_minutes: 15
2025-04-17 17:52:46 HYDRAWISE myHydrawise rl3_relay: 3
2025-04-17 17:52:46 HYDRAWISE myHydrawise rl3_relay_id: 6795251
2025-04-17 17:52:47 HYDRAWISE myHydrawise rl3_name: Tropfrohre
2025-04-17 17:52:47 DOIF d_PumpeAUS cmd_nr: 1
2025-04-17 17:52:47 DOIF d_PumpeAUS cmd: 1
2025-04-17 17:52:47 DOIF d_PumpeAUS cmd_event: myHydrawise
2025-04-17 17:52:47 DOIF d_PumpeAUS cmd_1
2025-04-17 17:52:47 DOIF d_PumpeAn cmd_nr: 2
2025-04-17 17:52:47 DOIF d_PumpeAn cmd: 2
2025-04-17 17:52:47 DOIF d_PumpeAn cmd_event: myHydrawise
2025-04-17 17:52:47 DOIF d_PumpeAn cmd_2
2025-04-17 17:52:47 HYDRAWISE myHydrawise rl3_next: idle

Bei dieser Konstellation "rl1 und rl2 stehen auf "Sonntag", rl3 auf "idle" " funktioniert es einwandfrei. Die andere Variante, dass nämlich das Reading einer der beiden Zonen auf einer Uhrzeit steht, zB "04:00", kann ich naturgemäß leider derzeit nicht testen.

Ist es eigentlich möglich, einen Readinginhalt irgendwie umzubenennen? zB: Wenn das Reading rl1_next NICHT "Running" lautet, setze den Inhalt auf "idle"?

LG
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

passibe

Zitat von: is2late am 17 April 2025, 18:03:20Ist es eigentlich möglich, einen Readinginhalt irgendwie umzubenennen? zB: Wenn das Reading rl1_next NICHT "Running" lautet, setze den Inhalt auf "idle"?
Ja, klar, geht mit userReading – aber, wie gesagt, ich denke das ist irgendetwas anderes hier.

Zitat von: is2late am 17 April 2025, 18:03:20Die andere Variante, dass nämlich das Reading einer der beiden Zonen auf einer Uhrzeit steht, zB "04:00", kann ich naturgemäß leider derzeit nicht testen
Je nach dem wie oft das hydra-Device seinen Status aktualisiert kannst du schon mit setreading und/oder mit trigger arbeiten und das nachstellen. Oder du erstellst einfach einen dummy. So habe ich das z.B. getestet.

is2late

Danke, Passibe!

Seit heute lautet das Reading für alle drei Zonen wieder "idle". Möglicherweise, weil die Wetterprognose iVm dem aktuell ausreichendem Feuchtigkeitsgrad  keine exakte Aussage über den nächsten Einsatz erlaubt. Ich warte also erst einmal ab...

LG
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox