Hallo Zusammen,
ich bekomme ein DOIF nicht zur Funktion.
Es geht um Bewässerungssteuerung. Die Pumpe soll erst dann anlaufen, wenn ein Ventil der Bewässerung öffnet. Nutze dabei Hydrawise. Symbolisch für die Pumpe: Dummy TEST.
Die Readings eines Ventils lauten
l3_name Tropfrohre
rl3_next Running (wenns läuft, sonst "idle")
rl3_relay 3
Habs ua mit folgender Zeile probiert:
defmod PumpeAN DOIF (rl3:next: "Running") (set TEST:on) DOELSE##nothing
Da passiert leider nichts ... eine Fehlermeldung gibt es auch nicht.
Weiß jemand Rat? Bin leider erst heute Abend wieder da...
LG Ingo
Hier ein weiterer erfolgloser Versuch:
defmod PumpeAN DOIF ([myHydrawise:rl3_next] eq "Running")({fhem("set TEST on")}) DOELSE ## nothing
Hi,
Poster doch mal ein List des DOIF und aller Beteiligten Geräte.
Hast du das DOIF per Eventmonitor erstellen lassen?
https://wiki.fhem.de/wiki/Event_monitor
https://wiki.fhem.de/wiki/Event_monitor#Vorgehensweise_beim_Anlegen_eines_Ger%C3%A4tes
Und das
set TEST:on
müsste doch so:
set TEST on
Bei einem dummy nicht soooo wichtig, er zeigt halt dann (verm.) keine "leuchtende Lampe" an...
...aber es sollte sich "was tun"...
Ansonsten bin ich bei Frank...
EDIT: das solltest du doch mittlerweile kennen/wissen https://forum.fhem.de/index.php?topic=71806.0 ;)
Gruß, Joachim
Hallo Joachim und Frank,
vielen Dank für Eure Tipps!
Hier das List:
Internals:
CFGFN
DEF ([myHydrawise:rl3_next] eq "Running")({fhem("set TEST on")}) DOELSE ## nothing
FUUID 64a143c0-f33f-8a5f-e164-9d3a08e1f58fd718
MODEL FHEM
NAME PumpeAN
NOTIFYDEV myHydrawise,global
NR 4548
NTFY_ORDER 50-PumpeAN
STATE cmd_2
TYPE DOIF
eventCount 28
READINGS:
2023-07-03 11:13:16 Device myHydrawise
2023-07-03 11:13:16 cmd 2
2023-07-03 11:13:16 cmd_event myHydrawise
2023-07-03 11:13:16 cmd_nr 2
2023-07-03 11:13:16 e_myHydrawise_rl3_next idle
2023-07-02 12:42:01 mode enabled
2023-07-03 11:13:16 state cmd_2
Regex:
accu:
bar:
barAvg:
collect:
cond:
myHydrawise:
0:
rl3_next ^myHydrawise$:^rl3_next:
attr:
cmdState:
wait:
waitdel:
condition:
0 ::ReadingValDoIf($hash,'myHydrawise','rl3_next') eq "Running"
do:
0:
0 {fhem("set TEST on")}
1:
0
helper:
NOTIFYDEV myHydrawise,global
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:rl3_next
trigger:
uiState:
uiTable:
Attributes:
room Geräte,Hydrawise
Mit dem Eventmonitor habe ich es auch versucht, aber was herauskommt, scheint zumindest unvollständig zu sein:
defmod myHydrawise_DOIF_1 DOIF ([myHydrawise:"^rl3_run_minutes:.*$"]) ()
Gehe ich recht in der Annahme, dass in die letzte Klammer dann die Anweisung gehört?
Hier also etwa "set TEST on"?
Mit "modify" komme ich nicht weiter, bediene es vermutlich falsch.
LG
Ha, es funktioniert!
Tausend Dank!
UNd schon das nächste Problem:
Möchte gern, dass die Pumpe (HUEDevice37) sich ausschaltet, wenn die Bewässerungszeit abgelaufen ist. Stand:
defmod d_PumpeAN DOIF ([myHydrawise:"^rl.*_run_minutes:.*$"]) (set HUEDevice37 on)
Über den Eventmonitor komme ich nicht weiter. Hab Folgendes versucht:
defmod d_PumpeAN DOIF ([myHydrawise:"^rl.*_run_minutes:.*$"]) (set HUEDevice37 on) DOELSE (set HUEDevice37 off)
Das führt allerdings dazu, dass sich HUE37 nach dem Einschalten gleich wieder ausschaltet.
Ein Wait ließe sich wohl nur mit Platzhalter einrichten, oder? Müsste da die Zeit .*$ (wie auch immer) übergeben werden oder gibt es eine einfachere/bessere Lösung?
Vielen Dank,
Ingo