Hallo,
ich stecke beim Aufbau des DOIF fest und freue mich über eure Hilfe.
Hintergrund:
Meine Geräte sind systematisch benannt: XX.YY.BeschreibenderText
XX = Zimmer; wz=Wohnzimmer, ku=Küche, ...
YY = Funktion; di=Dimmbare Lampe z.B. Hue, sw=Schaltbare Steckdose
Basierend darauf kann ich mit list sehr schön die Geräte von Interesse zusammenstellen:
list ...(di|sw).* state
fl.di.LampeDecke 2019-10-03 19:47:32 off
fl.di.LampeRegal 2019-10-02 12:55:16 off
ku.di.LampeSpueleBunt 2019-10-02 08:25:02 off
ku.di.LampeSpueleWeiss 2019-10-02 08:25:02 off
ku.sw.LampeRegal 2019-10-03 17:44:03 unreachable
wz.di.HueGo1 2019-09-30 19:44:54 unreachable
wz.di.LampeEcke 2019-10-03 19:20:43 off
wz.di.LampeFenster 2019-10-02 23:58:52 off
wz.di.StarWarsRegal 2019-10-03 20:02:43 disconnected
wz.di.Vitrine 2019-10-03 17:13:09 dim06%
wz.sw.LampeRegal 2019-10-03 19:29:08 on
wz.sw.StarWars 2019-10-03 16:45:43 off
Die Anzahl der eingeschalteten Lampen gibts mit count
count ...(di|sw).*:FILTER=state=(dim.*|on)
Count: 2 devices for devspec ...(di|sw).*:FILTER=state=(dim.*|on)
Beim Versuch das ganze nun als DOIF zu realisieren scheitere ich kläglich.
defmod di_wz_AnzahlLampenAn DOIF [#"wz.(di|sw).*"::$STATE eq "on"]
attr di_wz_AnzahlLampenAn do always
attr di_wz_AnzahlLampenAn state [#""::$STATE eq "on" and $room eq "Wohnzimmer"]
- wie muss ich den RegEx im Ereignis Teil aufbauen, damit der nicht ständig triggert sondern nur bei Änderung des STATE der Geräte mit di oder sw im Namen?
- Vermutlich macht es mehr Sinn im Ereignis Teil sauber zu filtern als in der state Formatierung? Also "room eq "Wohnzimmer" überflüssig?
- Zählen der Lampen dann mit [#""::$STATE eq "on" or "dim.*"] ?
Danke!
Ich würde es so machen:
defmod di_wz_AnzahlLampenAn DOIF ##
attr di_wz_AnzahlLampenAn do always
attr di_wz_AnzahlLampenAn state [#"wz.(di|sw).*"::$STATE eq "on"]
defmod di_wz_AnzahlLampenAn DOIF ##
attr di_wz_AnzahlLampenAn state [#"^wz.(di|sw)"::$STATE eq "on"]
sollte reichen.
Zitat von: Damian am 03 Oktober 2019, 21:59:35
defmod di_wz_AnzahlLampenAn DOIF ##
attr di_wz_AnzahlLampenAn state [#"^wz.(di|sw)"::$STATE eq "on"]
sollte reichen.
Ja, mein do always war überflüssig und deine Regex ist besser. Danke Damian :)
Danke euch beiden!
[#"^wz.(di|sw)"::$STATE eq "on" or $STATE =~ "dim"]
funktioniert für meine Lampentypen.
Auf welche Events triggert das DOIF nun? Alle? Oder nur die dem Suchmuster wz.(di|sw) entsprechen? Meine Befürchtung war / ist, dass mein Pi in zukunft nicht mehr viel anderes macht als Lampen zählen ::)
Zitat von: robertPI am 03 Oktober 2019, 22:49:41
Danke euch beiden!
[#"^wz.(di|sw)"::$STATE eq "on" or $STATE =~ "dim"]
funktioniert für meine Lampentypen.
Auf welche Events triggert das DOIF nun? Alle? Oder nur die dem Suchmuster wz.(di|sw) entsprechen? Meine Befürchtung war / ist, dass mein Pi in zukunft nicht mehr viel anderes macht als Lampen zählen ::)
Die erste Angabe "^wz.(di|sw)" entspricht auch dem Triggerfilter, mit der neusten DOIF-Version wird sogar ein fhem-Filter gesetzt (wenn möglich), so dass das Modul bei sonstigen Events erst gar nicht geweckt werden muss.
ok, dann ist das genau meine Lösung :-)
Nochmals vielen Dank für die Hilfe!