Hallo Zusammen,
ich möchte mit einem DOIF die Gartenpumpe ausschalten, wenn keiner der drei Bewässerungskreise mehr aktiv ist.
Hier der letzte meiner stundenlangen Versuche, der die Pumpe allerdings nicht ausschaltet und mir bestimmt eine Minute "Sanduhr" nach dem Aufruf beschert.
defmod d_PumpeAUS DOIF ([myHydrawise:"^rl1_next:idle"] and [myHydrawise:"^rl2_next:idle"] and [myHydrawise:"^rl3_next:idle"]) (set HUEDevice37 off)
HUEDevice37 ist die Pumpe, rl1-3 sind die drei Bewässerungskreise.
Hier das List von myHydrawise:
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 525
# STATE on
# TYPE HYDRAWISE
# eventCount 4209
# READINGS:
# 2023-07-06 10:42:13 controller_counts 1
# 2023-07-06 10:42:13 ct1_controller_id 1067787
# 2023-07-06 10:42:13 ct1_controller_message Unknown
# 2023-07-06 10:42:13 ct1_controller_name Hunter Steuergart
# 2023-07-06 10:42:13 ct1_last_contact 2023-07-06 10:15:31
# 2023-07-06 10:42:13 ct1_serial_number 0210C4098A
# 2023-07-06 10:42:13 cur_controller_id 1067787
# 2023-07-06 10:42:13 cur_controller_name Hunter Steuergart
# 2023-07-06 10:42:13 customer_id 1005562
# 2023-07-06 10:43:12 presence present
# 2023-07-06 10:43:12 relay_counts 3
# 2023-07-06 10:43:13 rl1_name Rasen links
# 2023-07-06 10:43:13 rl1_next idle
# 2023-07-06 10:43:12 rl1_relay 1
# 2023-07-06 10:43:13 rl1_relay_id 6795236
# 2023-07-06 10:43:13 rl1_run_minutes none
# 2023-07-06 10:43:13 rl2_name Rasen rechts
# 2023-07-06 10:43:13 rl2_next idle
# 2023-07-06 10:43:13 rl2_relay 2
# 2023-07-06 10:43:13 rl2_relay_id 6795246
# 2023-07-06 10:43:13 rl2_run_minutes none
# 2023-07-06 10:43:13 rl3_name Tropfrohre
# 2023-07-06 10:43:13 rl3_next idle
# 2023-07-06 10:43:13 rl3_relay 3
# 2023-07-06 10:43:13 rl3_relay_id 6795251
# 2023-07-06 10:43:13 rl3_run_minutes none
# 2023-07-06 10:43:12 state on
# helper:
# APIKEY 6B31-1A31-907F-7EE6
#
setstate myHydrawise on
setstate myHydrawise 2023-07-06 10:42:13 controller_counts 1
setstate myHydrawise 2023-07-06 10:42:13 ct1_controller_id 1067787
setstate myHydrawise 2023-07-06 10:42:13 ct1_controller_message Unknown
setstate myHydrawise 2023-07-06 10:42:13 ct1_controller_name Hunter Steuergart
setstate myHydrawise 2023-07-06 10:42:13 ct1_last_contact 2023-07-06 10:15:31
setstate myHydrawise 2023-07-06 10:42:13 ct1_serial_number 0210C4098A
setstate myHydrawise 2023-07-06 10:42:13 cur_controller_id 1067787
setstate myHydrawise 2023-07-06 10:42:13 cur_controller_name Hunter Steuergart
setstate myHydrawise 2023-07-06 10:42:13 customer_id 1005562
setstate myHydrawise 2023-07-06 10:43:12 presence present
setstate myHydrawise 2023-07-06 10:43:12 relay_counts 3
setstate myHydrawise 2023-07-06 10:43:13 rl1_name Rasen links
setstate myHydrawise 2023-07-06 10:43:13 rl1_next idle
setstate myHydrawise 2023-07-06 10:43:12 rl1_relay 1
setstate myHydrawise 2023-07-06 10:43:13 rl1_relay_id 6795236
setstate myHydrawise 2023-07-06 10:43:13 rl1_run_minutes none
setstate myHydrawise 2023-07-06 10:43:13 rl2_name Rasen rechts
setstate myHydrawise 2023-07-06 10:43:13 rl2_next idle
setstate myHydrawise 2023-07-06 10:43:13 rl2_relay 2
setstate myHydrawise 2023-07-06 10:43:13 rl2_relay_id 6795246
setstate myHydrawise 2023-07-06 10:43:13 rl2_run_minutes none
setstate myHydrawise 2023-07-06 10:43:13 rl3_name Tropfrohre
setstate myHydrawise 2023-07-06 10:43:13 rl3_next idle
setstate myHydrawise 2023-07-06 10:43:13 rl3_relay 3
setstate myHydrawise 2023-07-06 10:43:13 rl3_relay_id 6795251
setstate myHydrawise 2023-07-06 10:43:13 rl3_run_minutes none
setstate myHydrawise 2023-07-06 10:43:12 state on
Das ANSCHALTEN der Pumpe versuche ich mit folgendem DOIF:
defmod d_PumpeAN DOIF ([myHydrawise:"^rl.*_run_minutes:.*$"]) (set HUEDevice37 on)
Leider wird der Anschaltbefehl bei laufender und nicht laufender Bewässerung minütlich wiederholt , nämlich im Rhythmus der der myHydrawise-Aktualisierung.
Sieht jemand meine Fehler?
Vielen Dank,
Ingo
Zitat von: is2late am 06 Juli 2023, 11:02:50Das ANSCHALTEN der Pumpe versuche ich mit folgendem DOIF:
defmod d_PumpeAN DOIF ([myHydrawise:"^rl.*_run_minutes:.*$"]) (set HUEDevice37 on)
Leider wird der Anschaltbefehl bei laufender und nicht laufender Bewässerung minütlich wiederholt , nämlich im Rhythmus der der myHydrawise-Aktualisierung.
Sieht jemand meine Fehler?
Vielen Dank,
Ingo
Hast du vielleicht das Attribut "do always" gesetzt?
Warum zwei DOIF für einen Zweck? Da ist doch ein Vorteil ggü notify. Außerdem haben DOIF mit nur einem Fall ein paar Eigenheiten.
defmod d_PumpeAUS DOIF ([myHydrawise:"^rl1_next:idle"] and [myHydrawise:"^rl2_next:idle"] and [myHydrawise:"^rl3_next:idle"]) (set HUEDevice37 off)
Das kann so schon mal nicht funktionieren, denn hier triggerst du auf Ereignisse (Angaben in Anführungszeichen) und es können in FHEM nicht mehrere Ereignisse zu einem Zeitpunkt gleichzeitig kommen (wahr sein), daher kann eine UND-Verknüpfung nicht greifen. Was eher sinnvoll wäre, wäre die Ereignisse mit or zu verknüpfen.
@Ralf: nein, kein do always gesetzt
Alternativ habe ich das versucht:
defmod d_PumpeAn DOIF ([myHydrawise:"^rl1_next:Running"] or [myHydrawise:"^rl2_next:Running"] or [myHydrawise:"^rl3_next:Running"]) (set HUEDevice37 on) DOELSE (set HUEDevice37 off)
Funktioniert nicht.
@Damian: or kommt hier für das Anschalten leider nicht in Betracht, weil ja alle drei Bedingungen erfüllt sein müssen
@Per: Du meinst, ein Notify wäre hier besser/günstiger?
So etwa (funktioniert aber auch nicht):
n_Pumpe_aktivieren notify myHydrawise:"^rl1_next:Running|myHydrawise:"^rl1_next:idle {if ($EVENT eq 'Running') { fhem "(set HUEDevice37 on)"}}
Vielen Dank,
Ingo
Wenn es nicht geht, gehe ich immer so ran:
1. Trigger vereinzeln, bis alle so auslösen wie gewünscht (mit Dummys zum Debuggen)
2. getestete Trigger kombinieren, bis gewünschtes Ergebnis eintritt.
3. Kommandos in der Kommandozeile testen
4. 2. bis n. Fall das gleiche Spiel
5. Attribute ergänzen, Timer feinjustieren, Zeiten anpassen.
Zitat von: is2late am 14 Juli 2023, 18:26:39@Ralf: nein, kein do always gesetzt
@Damian: or kommt hier für das Anschalten leider nicht in Betracht, weil ja alle drei Bedingungen erfüllt sein müssen
Mit "and" kannst du nicht mehrere Ereignisse abfragen, sondern vielmehr Zustände von Readings:
defmod d_PumpeAUS DOIF ([myHydrawise:rl1_next] eq "idle" and [myHydrawise:rl2_next] eq "idle"] and [myHydrawise:rl3_next] eq "idle") (set HUEDevice37 off)
Ist da eventuell eine ] zuviel (mittleres idle)?
Und gehört hier nicht noch ein "do always" dazu, damit die Bedingung immer wieder geprüft wird?
In der vorliegenden Definition würde nach meinem Verständnis jede Änderung der drei Readings (rlx_next) die Bedingung triggern, die dann aber nur wahr wird wenn alle drei (durch and) im Zustand idle sind.
Gruß Ralf
Ja, nein und ja.
Das ist eine Besonderheit der einfälligen DOIF, da gibt es einen virtuellen zweiten Fall, welcher hier auftreten kann (und auch wird, was nicht immer der Fall ist, z.B. bei der Verwendung von Events).
Hallo ZUsammen,
Damians Code hat es gebracht, ganz herzlichen Dank!
Wieder etwas gelernt...
LG Ingo