DOIF count mit mehreren Geräten / mehreren "Reaktionsbedingungen"

Begonnen von TimoD, 23 Mai 2023, 21:49:11

Vorheriges Thema - Nächstes Thema

TimoD

Hallo Community,
ich habe folgendes DOIF Gerät:

Internals:
   DEF        ([_Licht$":on"])
   FUUID      646c5e0a-f33f-53b5-a44c-d3e1e549aa4406fe
   MODEL      FHEM
   NAME       Count_Lights
   NOTIFYDEV  .*(_Licht$).*,global
   NR         660
   NTFY_ORDER 50-Count_Lights
   STATE      5
   TYPE       DOIF
   VERSION    26938 2023-01-01 18:13:32
   eventCount 6
   Helper:
     DBLOG:
       state:
         logdb:
           TIME       1684870319.22021
           VALUE      5
   READINGS:
     2023-05-23 08:48:22   cmd             2
     2023-05-23 08:48:22   cmd_event       Count_Lights
     2023-05-23 08:48:22   cmd_nr          2
     2023-05-23 08:48:19   mode            enabled
     2023-05-23 21:31:59   state           5
     2023-05-23 21:30:24   timer_01_c01    error: Wrong timespec _Licht$":on": either HH:MM:SS or {perlcode}
   Regex:
     STATE:
       :
         STATE:
           "_Licht$"  _Licht$
     accu:
     collect:
   attr:
     cmdState:
   condition:
     0          ::DOIF_time_once($hash,0,$wday)
   do:
     0:
       0         
     1:
   helper:
     NOTIFYDEV  .*(_Licht$).*,global
     event      rampTime: 0,on,dim: 50,dimValueLast: 50
     globalinit 1
     last_timer 1
     sleeptimer -1
     triggerDev Kueche_innen_Dim_Licht
     triggerEvents:
       rampTime: 0
       on
       dim: 50
       dimValueLast: 50
     triggerEventsState:
       rampTime: 0
       state: on
       dim: 50
       dimValueLast: 50
   localtime:
   perlblock:
   time:
     0          _Licht$":on"
   timeCond:
     0          0
   timer:
     0          0
   timers:
     0           0
   uiState:
   uiTable:
Attributes:
   room       System
   state      [#"_Licht$":state:"on"]

Nun würde ich gerne auch noch gerne alle Geräte zählen, die mit HUE im Namen anfangen, wie muss ich den dann state und das DEF anpassen, schaffe es nicht, habe es wie folgt versucht, leider ohne Erfolg:

DEF: ([_Licht$":on"]|[^HUE$":1"])
state: [#"_Licht$":state:"on"|#"^HUE$":onoff:"1"]

Ich danke schonmal für Eure Hilfe ;-)

juemuc

Hier ein Beispiel von mir.

defmod di_uiTable_Licht DOIF ## Visualisierung von Lichtschaltern und Steckdosen, die an sind
attr di_uiTable_Licht addStateEvent 1
attr di_uiTable_Licht alias Licht/Steckdosen-Status
attr di_uiTable_Licht devStateStyle style="text-align:right"
attr di_uiTable_Licht event-on-change-reading .*
attr di_uiTable_Licht event_Readings ligths:\
my $hm=[@as(<br>)"^HmIP_BSM:^state|^HM_LC:^hmstate":hmstate:"on",""];;\
my $hue=[@as(<br>)"HUEDevice:^onoff":onoff:"1",""];;\
my $br="<br>";;\
my $anz=[#"^HmIP_BSM:^state|^HM_LC:^state":state:"on","0"] + [#"HUEDevice:^onoff":onoff:"1","0"];;\
if ($anz eq "0") \
  {"alles aus";;} \
else \
  {if ($anz eq "0" or $anz eq "1")  \
     {$br="";;}\
   $hm.$br.$hue;;},\
sockets:[@as(<br>)"^FBDECT_FB|HM_ES":state:"on","alles aus"],\
countl:[#"^HmIP_BSM:^state|^HM_LC:^state":state:"on","0"] + [#"HUEDevice:^onoff":onoff:"1","0"],\
counts:[#"^HM_ES|^FBDECT_FB:^state":state:"on","0"]
attr di_uiTable_Licht room Statuszentrale
attr di_uiTable_Licht uiTable {\
package ui_Table;;\
$TC{1}="align='center'";;\
$TC{2}="align='left'";;\
}\
"Licht"|icon([$SELF:ligths],"on","off",".*","alles aus")|[$SELF:ligths]\
"Steckdosen"|icon([$SELF:sockets],"black_Steckdose.on","black_Steckdose.off",".*","alles aus")|[$SELF:sockets]\
"Anzahl Licht"|[$SELF:countl]\
"Anzahl Steckdosen"|[$SELF:counts]

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

TimoD

Danke für deine Antwort, gibt es denn keine einfache Möglichkeit zur Abfrage nach "or", wie in der Command ref mit AND:

[@"rooms$":temperature:$_ > 20 and $room eq "livingroom"]
-->
[@"rooms$":temperature:$_ > 20 | $room eq "livingroom"] geht nicht

juemuc

Spezielle Fragen zu DOIF solltest Du im entsprechenden Unterforum stellen. Da sind die Chancen auf eine Antwort größer.
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Damian

Zitat von: TimoD am 24 Mai 2023, 08:19:40Danke für deine Antwort, gibt es denn keine einfache Möglichkeit zur Abfrage nach "or", wie in der Command ref mit AND:

[@"rooms$":temperature:$_ > 20 and $room eq "livingroom"]
-->
[@"rooms$":temperature:$_ > 20 | $room eq "livingroom"] geht nicht

wenn es and gibt dann wird es wohl auch or geben ;) siehe Perl-Operatoren
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

TimoD

Ja, wenn ich dann aber abfragen möchte wie viele HUE und Decken Lampen an sind, mit folgender Abfrage geht or nicht:

[#"^HUE":onoff:"1" or "_Licht$":state:"on"]
wie müsste den der Code aussehen, das er dieses zusammen zählt?
(separat funktioniert die jeweilige Abfrage:[#"^HUE":onoff:"1"]   [#"_Licht$":state:"on"])

Grüße

Damian

Zitat von: TimoD am 25 Mai 2023, 11:18:00Ja, wenn ich dann aber abfragen möchte wie viele HUE und Decken Lampen an sind, mit folgender Abfrage geht or nicht:

[#"^HUE":onoff:"1" or "_Licht$":state:"on"]
wie müsste den der Code aussehen, das er dieses zusammen zählt?
(separat funktioniert die jeweilige Abfrage:[#"^HUE":onoff:"1"]   [#"_Licht$":state:"on"])

Grüße

Dann musst du sie einfach zusammenaddieren [#"^HUE":onoff:"1"] + [#"_Licht$":state:"on"]
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF