do always nur für bestimmte Trigger?

Begonnen von bc-hagbard, 10 November 2019, 16:57:30

Vorheriges Thema - Nächstes Thema

bc-hagbard

Hallo zusammen,

ich habe ein DoIf welches quasi einen Fensterkontakt und einen Rollladen als Trigger hat.
Der Fensterkontakt meldet periodisch den ggf. gleichen Status. Daher macht es ohne Attribut "do always" genau was ich möchte.
Der Rollladen wechselt mehrfach seinen Status und hier brauche ich das "do always" Attribut um jedes Mal darauf zu reagieren.
Gibt es da eine elegante Möglichkeit? Natürlich könnte ich es auf zwei DoIf oder Notify aufteilen, aber in einem ist übersichtlicher und mir geht es um mein Verständnis für DoIf.

Hier mein konkretes Anwendungsbeispiel:
1. Mein Rollladen soll sich automatisch auf Lüften stellen wenn zu und ich das Fenster auf mache.
2. Mein Rollladen soll nicht automatisch bewegt werden wenn Fenster/Tür offen ist. Dazu habe ich einen Dummy als Sollwert den ich automatisch setze (Helligkeit, Sonnenschutz, ...=

## 1 Wenn Fenster geschlossen ist/wird und Sollwert abweichend vom Istwert ist/gesetzt wird, dann Istwert auf Sollwert setzen.
([WC_Fenster] eq "closed" and [WC_Rollladen_Dummy] ne [?WC_Rollladen])
   (set WC_Rollladen [WC_Rollladen_Dummy])
## 2 Wenn Fenster geöffnet wird und Rolllade unten ist, dann auf Lüften stellen
DOELSEIF ([WC_Fenster] eq "open" and [?WC_Rollladen] eq "closed")
   (set WC_Rollladen 25)
## 3 Wenn Fenster geöffnet wird und Rollladen nicht unten ist, dann aktuellen Status merken (falls manuell geändert)
DOELSEIF ([WC_Fenster] eq "open" and [?WC_Rollladen] ne "closed")
   (set WC_Rollladen_Dummy [WC_Rollladen])


Habe 1. jetzt mal doppelt aufgenommen damit er zwischen den beiden Einträgen triggert. Das macht er dann aber auch beim Fenster "closed" daher auch keine Lösung.

define WC_Rollladen_DoIf_Fenster DOIF ## 1 Wenn Fenster geschlossen ist/wird und Sollwert abweichend vom Istwert ist/gesetzt wird, dann Istwert auf Sollwert setzen.\
([WC_Fenster] eq "closed" and [WC_Rollladen_Dummy] ne [?WC_Rollladen] and [?WC_Rollladen_DoIf_Fenster] ne "Rollladen gesetzt")\
   (set WC_Rollladen [WC_Rollladen_Dummy])\
DOELSEIF ([WC_Fenster] eq "closed" and [WC_Rollladen_Dummy] ne [?WC_Rollladen])\
   (set WC_Rollladen [WC_Rollladen_Dummy])\
## 2 Wenn Fenster geöffnet wird und Rolllade unten ist, dann auf Lüften stellen\
DOELSEIF ([WC_Fenster] eq "open" and [?WC_Rollladen] eq "closed")\
   (set WC_Rollladen 25)\
## 3 Wenn Fenster geöffnet wird und Rollladen nicht unten ist, dann aktuellen Status merken (falls manuell geändert)\
DOELSEIF ([WC_Fenster] eq "open" and [?WC_Rollladen] ne "closed")\
   (set WC_Rollladen_Dummy [WC_Rollladen])
setuuid WC_Rollladen_DoIf_Fenster 5dacb733-f33f-7882-2921-23aa10bab64cdbbe
attr WC_Rollladen_DoIf_Fenster cmdState Rollladen gesetzt|Rollladen gesetzt toggle|Rollladen auf Lüften|Rollladen Position gemerkt


Falls jemand für das Anwendungsbsp. eine gute Lösung hat natürlich auch gerne, aber mir geht es wie gesagt um das Verständnis für DoIf.

Vielen Dank für eure Hilfe. Habe hier schon viel aus dem Forum durchs mitlesen gelernt.
FHEM,Win,RasPi4,HM CULv3
BSB-LPB-LAN,LMU64,ArduinoMega
GardenaBridge,Google Home

MadMax-FHEM

Soweit ich DOIF kenne, gilt das "do always" für das gesamte DOIF...

Aber du kannst mit "event-on-change-reading" beim Fensterkontakt ansetzen...
...dann wird dort nur noch ein Event generiert, wenn sich der Zustand ändert...

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)

bc-hagbard

Danke Joachim,
darüber habe ich noch nicht nachgedacht. Das "event-on-change-reading" gilt dann aber generell. Müsste ich mal überlegen worauf das sonst noch auswirkungen hat.
Gibt es da ein best practice für die Fensterkontakte? Letztendlich brauche ich den Status nicht immer wieder bekommen. Aber für den Plot ist es glaube ich wichtig, dass da ab und zu mal wieder was kommt.
Bei mir in der Garage ist es auf jeden Fall ganz gut, da kommt der Statuswechsel manchmal nicht an. Vermutlich zu schlechter Empfang.
Gruß, Jan
FHEM,Win,RasPi4,HM CULv3
BSB-LPB-LAN,LMU64,ArduinoMega
GardenaBridge,Google Home

MadMax-FHEM

#3
es gibt ja neben event-on-change-reading gibt es ja auch weitere...
...min-interval, ...

https://wiki.fhem.de/wiki/Event-on-change-reading

https://wiki.fhem.de/wiki/Event-on-update-reading

https://wiki.fhem.de/wiki/Event-min-interval

Musst du dich halt mal einlesen...


Bzgl. Loggen gibt es auch noch addLog:

https://wiki.fhem.de/wiki/Plot-Abriss_vermeiden


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)