Hauptmenü

DOIF blockiert / führt nicht aus

Begonnen von is2late, 06 Juli 2023, 11:02:50

Vorheriges Thema - Nächstes Thema

is2late

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

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

RalfRog

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?
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

Per

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.

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

is2late

#4
@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
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

Per

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.

Damian

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)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

RalfRog

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
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

Per

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

is2late

Hallo ZUsammen,

Damians Code hat es gebracht, ganz herzlichen Dank!
Wieder etwas gelernt...

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