[gelöst] offene Fenster zählen und auflisten

Begonnen von Christian80, 13 November 2020, 16:12:07

Vorheriges Thema - Nächstes Thema

teichtaucher

Ich sehe keine Reading mit "e_". So sieht mein Doif aktuell aus:

Internals:
   CFGFN     
   DEF        (["\.fk\.:open"])
{my $str = "http://192.168.178.46/control?cmd=epd,txl,1,Fenster,2,offen:";; my $idx=2;; foreach (AggrDoIf('@','^*.fk.*','state','"open"')) {$idx++;;$str=$str.",".$idx.',%22'.uri_escape(AttrVal($_,"alias",$_)).'%22'}system("wget -q $str &");;Log(3, $str)}
DOELSEIF (["\.fk\.:closed"] and [#"\.fk\.:open"]>0)
{my $str = "http://192.168.178.46/control?cmd=epd,txl,1,Fenster,2,offen:";; my $idx=2;; foreach (AggrDoIf('@','^*.fk.*','state','"open"')) {$idx++;;$str=$str.",".$idx.',%22'.uri_escape(AttrVal($_,"alias",$_)).'%22'}system("wget -q $str &");;Log(3, $str)}
DOELSEIF (["\.fk\.:closed"] and [#"\.fk\.:open"]==0)
{system("wget -q http://192.168.178.46/control?cmd=epd,clear &")}
DOELSE
{system("wget -q http://192.168.178.46/control?cmd=epd,clear &")}
   FUUID      6643580f-f33f-2bd4-9ee6-e91d434b283f2a60
   MODEL      FHEM
   NAME       gl.fd.FensterDisplay
   NOTIFYDEV  .*(\.fk\.).*,global
   NR         6836
   NTFY_ORDER 50-di_Fenster
   STATE      cmd_1
   TYPE       DOIF
   VERSION    28546 2024-02-23 20:11:05
   eventCount 282
   READINGS:
     2024-05-17 13:36:46   Device          ki.fk.FensterRechts
     2024-05-17 13:37:14   cmd             1
     2024-05-17 13:37:14   cmd_event       ki.fk.FensterRechts
     2024-05-17 13:37:14   cmd_nr          1
     2024-05-17 13:36:36   mode            enabled
     2024-05-17 13:37:14   state           cmd_1
     2024-05-17 13:37:14   wait_timer      no timer
   Regex:
     accu:
     bar:
     barAvg:
     collect:
     cond:
       :
         0:
           "\.fk\.:open" \.fk\.:open
         1:
           "\.fk\.:closed" \.fk\.:closed
           "\.fk\.:open" \.fk\.:open
         2:
           "\.fk\.:closed" \.fk\.:closed
           "\.fk\.:open" \.fk\.:open
   attr:
     cmdState:
     wait:
       0:
         30
       1:
         30
       2:
         30
       3:
         0
     waitdel:
   condition:
     0          ::EventDoIf('\.fk\.',$hash,'open',0)
     1          ::EventDoIf('\.fk\.',$hash,'closed',0) and ::AggregateDoIf($hash,'#','\.fk\.')>0
     2          ::EventDoIf('\.fk\.',$hash,'closed',0) and ::AggregateDoIf($hash,'#','\.fk\.')==0
   do:
     0:
       0          {my $str = "http://192.168.178.46/control?cmd=epd,txl,1,Fenster,2,offen:";; my $idx=2;; foreach (AggrDoIf('@','^*.fk.*','state','"open"')) {$idx++;;$str=$str.",".$idx.',%22'.uri_escape(AttrVal($_,"alias",$_)).'%22'}system("wget -q $str &");;Log(3, $str)}
     1:
       0          {my $str = "http://192.168.178.46/control?cmd=epd,txl,1,Fenster,2,offen:";; my $idx=2;; foreach (AggrDoIf('@','^*.fk.*','state','"open"')) {$idx++;;$str=$str.",".$idx.',%22'.uri_escape(AttrVal($_,"alias",$_)).'%22'}system("wget -q $str &");;Log(3, $str)}
     2:
       0          {system("wget -q http://192.168.178.46/control?cmd=epd,clear &")}
     3:
       0          {system("wget -q http://192.168.178.46/control?cmd=epd,clear &")}
   helper:
     NOTIFYDEV  .*(\.fk\.).*,global
     event      contact: open (to VCCU)
     globalinit 1
     last_timer 0
     sleepdevice ki.fk.FensterRechts
     sleepsubtimer -1
     sleeptimer -1
     timerdev   ki.fk.FensterRechts
     timerevent contact: open (to VCCU)
     triggerDev ki.fk.FensterRechts
     DOIF_eventa:
       cmd_nr: 1
       cmd: 1
       cmd_event: ki.fk.FensterRechts
       cmd_1
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: ki.fk.FensterRechts
       state: cmd_1
     timerevents:
       alive: yes
       battery: ok
       contact: open (to VCCU)
       sabotageError: off
       open
     timereventsState:
       alive: yes
       battery: ok
       contact: open (to VCCU)
       sabotageError: off
       state: open
     triggerEvents:
       alive: yes
       battery: ok
       contact: open (to VCCU)
       sabotageError: off
       open
     triggerEventsState:
       alive: yes
       battery: ok
       contact: open (to VCCU)
       sabotageError: off
       state: open
   internals:
   readings:
   trigger:
   uiState:
   uiTable:
Attributes:
   room       Global
   wait       30:30:30:0

Was ich aber sehe ist dass von Zeit zu Zeit die Readings aktualisiert werden. Bei cmd_event steht dann immer mal ein anderes Fenster drin und ein Update wird ausgelöst. Ich habe an allen Festern die hm-sec-sco. Ich dachte bisher immer, dass die ihren Status nur on Event senden, also wenn Fenster geöffnet oder geschlossen wird. Aber kann es sein, dass die dauerhaft zyklisch mal "feuern"?

Damian

Wenn du es ganz genau wissen willst, dann musst du dir alle Events der Fenster loggen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

teichtaucher

...habe ich mir gerade angeschaut. Es scheint, dass meine Fensterkontakte zyklisch (den aktuellen Status) senden. Und mein Doif reagiert darauf. Ich stelle die Frage mal in der Rubrik Homematic - das Doif verhält sich richtig. (Es interpretiert jede Nachricht von den Fensterkontakten als Event. Wenn die Fenster schon offen waren wird deshalb trotzdem nochmal "offen" erkannt).

juemuc

Du kennst das Attribut "event-on-change-reading"?

Das könnte Deine Problem lösen.

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