Anzahl eingeschalteter Lampen mittels DOIF

Begonnen von robertPI, 03 Oktober 2019, 20:17:13

Vorheriges Thema - Nächstes Thema

robertPI

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!
FHEM auf Raspbery Pi 4
HM: HM-CFG-USB-2,HM-CC-RT-DN,HM-TC-IT-WM-W-EU,HM-SEC-SCo,HM-ES-PMSw1-Pl,HM-Sen-MDIR-WM55 | Philips hue: LCT001,LWL001,FLS-PP lp | Logitech Harmony Ultimate | zigbee2mqtt: WSDCGQ01LM, WSDCGQ11LM, MFKZQ01LM, MCCGQ11LM

amenomade

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"]
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Damian

defmod di_wz_AnzahlLampenAn DOIF ##
attr di_wz_AnzahlLampenAn state [#"^wz.(di|sw)"::$STATE eq "on"]


sollte reichen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

amenomade

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 :)
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

robertPI

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  ::)
FHEM auf Raspbery Pi 4
HM: HM-CFG-USB-2,HM-CC-RT-DN,HM-TC-IT-WM-W-EU,HM-SEC-SCo,HM-ES-PMSw1-Pl,HM-Sen-MDIR-WM55 | Philips hue: LCT001,LWL001,FLS-PP lp | Logitech Harmony Ultimate | zigbee2mqtt: WSDCGQ01LM, WSDCGQ11LM, MFKZQ01LM, MCCGQ11LM

Damian

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

robertPI

ok, dann ist das genau meine Lösung :-)

Nochmals vielen Dank für die Hilfe!
FHEM auf Raspbery Pi 4
HM: HM-CFG-USB-2,HM-CC-RT-DN,HM-TC-IT-WM-W-EU,HM-SEC-SCo,HM-ES-PMSw1-Pl,HM-Sen-MDIR-WM55 | Philips hue: LCT001,LWL001,FLS-PP lp | Logitech Harmony Ultimate | zigbee2mqtt: WSDCGQ01LM, WSDCGQ11LM, MFKZQ01LM, MCCGQ11LM