DOIF mit Zähler für Schaltbefehle

Begonnen von sash.sc, 29 September 2022, 19:06:10

Vorheriges Thema - Nächstes Thema

sash.sc

Hallo zusammen.

Im Bad habe ich 2 Bewegungsmelder. Diese werden durch 1 DOIF ausgewertet. In dem DOIF fließt noch ein Shelly mit ein, andem ein Schalter angeschlossen ist. dieser Schalter schaltet den Shelly direkt ein bzw aus.

Ich möchte mit dem Lichtschalter das Licht ausschalten, auch wenn eine Bewegung erkannt wurde, und dies soll dann auch aus bleiben. Bis zur nächsten Bewegung oder betätigen des Schalters.


Internals:
   DEF        ([BWM_EG_Bad:state] eq "motion" or [BWM_sonoff:state] eq "motion") (set bad_licht on) (set bad_licht off)
DOELSEIF ([bad_licht:input0] == 1) ( set bad_licht on)
DOELSEIF ([bad_licht:input0] == 0) ( set bad_licht off)
   FUUID      5eb43033-f33f-852e-373e-0a2fd904891642ef
   FVERSION   98_DOIF.pm:0.264440/2022-09-25
   MODEL      FHEM
   NAME       EG_BAD_BWM_DOIF_1
   NOTIFYDEV  global,bad_licht,BWM_sonoff,BWM_EG_Bad
   NR         485
   NTFY_ORDER 50-EG_BAD_BWM_DOIF_1
   STATE      cmd_1_1
   TYPE       DOIF
   VERSION    26444 2022-09-25 16:29:19
   eventCount 217
   READINGS:
     2022-09-29 19:03:14   Device          BWM_sonoff
     2022-09-29 19:02:43   cmd             1.1
     2022-09-29 19:02:43   cmd_event       BWM_EG_Bad
     2022-09-29 19:02:43   cmd_nr          1
     2022-09-29 19:02:43   cmd_seqnr       1
     2022-09-29 19:02:43   e_BWM_EG_Bad_state nomotion
     2022-09-29 19:03:14   e_BWM_sonoff_state nomotion
     2022-09-29 19:02:09   e_bad_licht_input0 0
     2022-09-29 11:10:45   mode            enabled
     2022-09-29 19:02:43   state           cmd_1_1
     2022-09-29 19:02:43   wait_timer      29.09.2022 19:05:43 cmd_1_2 BWM_EG_Bad
   Regex:
     accu:
     collect:
     cond:
       BWM_EG_Bad:
         0:
           state      ^BWM_EG_Bad$:^state:
       BWM_sonoff:
         0:
           state      ^BWM_sonoff$:^state:
         1:
         2:
       bad_licht:
         0:
         1:
           input0     ^bad_licht$:^input0:
         2:
           input0     ^bad_licht$:^input0:
   attr:
     cmdState:
     wait:
       0:
         0
         180
       1:
         0
       2:
         0
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'BWM_EG_Bad','state') eq "motion" or ::ReadingValDoIf($hash,'BWM_sonoff','state') eq "motion"
     1          ::ReadingValDoIf($hash,'bad_licht','input0') == 1
     2          ::ReadingValDoIf($hash,'bad_licht','input0') == 0
   do:
     0:
       0          set bad_licht on
       1          set bad_licht off
     1:
       0           set bad_licht on
     2:
       0           set bad_licht off
     3:
   helper:
     NOTIFYDEV  global,bad_licht,BWM_sonoff,BWM_EG_Bad
     event      tampered: 0,batteryState: ok,nomotion
     globalinit 1
     last_timer 0
     sleepdevice BWM_EG_Bad
     sleepsubtimer 1
     sleeptimer 0
     timerdev   BWM_EG_Bad
     timerevent nomotion
     triggerDev BWM_sonoff
     timerevents:
       nomotion
     timereventsState:
       state: nomotion
     triggerEvents:
       tampered: 0
       batteryState: ok
       nomotion
     triggerEventsState:
       tampered: 0
       batteryState: ok
       state: nomotion
   internals:
   readings:
     all         BWM_EG_Bad:state BWM_sonoff:state bad_licht:input0
   trigger:
   uiState:
   uiTable:
Attributes:
   alias      EG_BAD_BWM_DOIF_1
   do         resetwait
   room       10_EG->Bad,80_DOIF
   wait       0,180:0:0


Gruß und danke
Sascha
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

Gisbert

Hallo Sascha,

ich versuche mich mal an einer Antwort, obwohl ich die Frage vermisse.

Ich nehme an, du suchst nach einer Lösung für diese Situation:
ZitatIch möchte mit dem Lichtschalter das Licht ausschalten, auch wenn eine Bewegung erkannt wurde, und dies soll dann auch aus bleiben. Bis zur nächsten Bewegung oder betätigen des Schalters.

Du könntest ReadingsAge des Readings input0 des Devices bad_licht zusätzlich abfragen, z.B. es sollte größer als 300 Sekunden sein, wenn eine Bewegung registriert wird - nur dann soll das Licht angehen.

Ungetestet:
(ReadingsAge('bad_licht','input0','')>300 and ([BWM_EG_Bad:state] eq "motion" or [BWM_sonoff:state] eq "motion")) (set bad_licht on) (set bad_licht off)

Viele Grüße Gisbert
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

sash.sc

Heißt, wenn der lichtschalter länger wie 300s nicht betätigt wurde?

Werde das mal probieren.

Danke
Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb