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
ne "running"
Googeln hätte auch helfen können ;)
Z.B. https://www-user.tu-chemnitz.de/~lfe/selfhtml61/tecf.htm
Gruß, Joachim
Super, herzlichen Dank, Joachim!
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
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
Zitat von: is2late am 14 April 2025, 17:26:21obwohl eine der drei Zonen noch läuft.
riecht nach
oder statt
undNur geraten:
((zone1 or zone2 or zone3) and Bedingung4)
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
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?
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.
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).
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
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.
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