Flurlichtschaltung/Bewegungsmelder Funklast reduzieren

Begonnen von Fashionbye, 09 März 2015, 19:00:20

Vorheriges Thema - Nächstes Thema

Fashionbye

Gemäß Trick der Woche http://www.fhemwiki.de/wiki/Trick_der_Woche habe ich folgenden Code getestet
define FlurLicht notify Bewegungsmelder_Flur:motion:.* { if (Value("Licht_Flur1") eq "off") { fhem ("set Licht_Flur on ;; define FlurLicht_aus at +00:04:16 set Licht_Flur off") } else { fhem ("delete FlurLicht_aus ;; define FlurLicht_aus at +00:04:16 set Licht_Flur off") }} bzw. umgeschrieben für mein FS20-System:
Internals:
   CFGFN
   DEF        Flur_innen_dummy.on { if (Value("Flur_innen_Licht") eq "off") { fhem ("set Flur_innen_Licht on ; define FlurLicht_aus at +00:00:30 set Flur_innen_Licht off") } else { fhem ("delete FlurLicht_aus ; define FlurLicht_aus at +00:00:30 set Flur_innen_Licht off") }}
   NAME       Flur_innen_Licht_N
   NR         797
   NTFY_ORDER 50-Flur_innen_Licht_N
   REGEXP     Flur_innen_dummy.on
   STATE      2015-03-09 18:29:23
   TYPE       notify
Attributes:
   room       Flur innen


Ich muss in diesem Flur vier Bewegungsmelder FS20PIRU einsetzen, da der Flur mehrfach verzweigt und die Reichweite der Melder klein ist. Dafür gibt es vier Notifys in diesem Stil:

Internals:
   DEF        Flur_innen_BWM_OFEN:on.* set Flur_innen_dummy on
   NAME       Flur_innen_BWM_OFEN_N
   NOTIFYDEV  Flur_innen_BWM_OFEN
   NR         352
   NTFY_ORDER 50-Flur_innen_BWM_OFEN_N
   REGEXP     Flur_innen_BWM_OFEN:on.*
   STATE      2015-03-09 18:29:23
   TYPE       notify
Attributes:
   disable    0
   room       Flur innen


Alle BWM setzen ein "on-old-for-timer 1" als Bewegungssignal ab und setzen denselben Flur_innen_dummy auf "on".
Die BWM und können per setting innerhalb von 8 Sekunden wieder senden, was gewollt ist.
Das Ergebnis ist dies:

2015-03-09_18:29:22 Flur_innen_Licht off
2015-03-09_18:29:22 Flur_innen_Licht on
2015-03-09_18:29:22 Flur_innen_Licht off
2015-03-09_18:29:23 Flur_innen_Licht on
2015-03-09_18:29:49 Flur_innen_Licht off

2015-03-09_18:29:15 Flur_innen_dummy on
2015-03-09_18:29:18 Flur_innen_dummy on
2015-03-09_18:29:22 Flur_innen_dummy on
2015-03-09_18:29:23 Flur_innen_dummy on

Das Licht schaltet ein, doch sobald mehrere Melder ein "on-for-timer 1" senden geht das Licht aus, wieder an wieder aus, fast im Sekundentakt.

Das Lofile sagt:
2015.03.09 18:29:15 3: Flur_innen_Licht_N return value: FlurLicht_aus already defined, delete it first
2015.03.09 18:29:22 3: FS20 set Flur_innen_Licht on
2015.03.09 18:29:22 3: set Flur_innen_Licht on ; define FlurLicht_aus at +00:00:30 set Flur_innen_Licht off : FlurLicht_aus already defined, delete it first
2015.03.09 18:29:22 3: Flur_innen_Licht_N return value: FlurLicht_aus already defined, delete it first
2015.03.09 18:29:23 3: FS20 set Flur_innen_Licht on

Im Eventlog kommen auch die häufigen "off"-Signale durch und schalten aus - während man durch den Flur geht.
Eigentlich müsste der Timer FlurLicht_aus jedes Mal gelöscht werden, wenn das Licht schon an ist, das da hakt etwas und ich komme nicht drauf was???
------------------------------------------------------------------
Dann hab' ich das mit DOIF probiert: siehe http://www.fhemwiki.de/wiki/DOIF .
define schalter_d dummy

define di_Schalter DOIF ([Bewegungsmelder] eq "motion" )  (set schalter_d on, set schalter_d off)
attr di_Schalter do always

define di_Licht DOIF ([schalter_d] eq "on")  (set Licht on) DOELSE  (set Licht off)
attr di_Licht wait 0:300

umgesetzt bei mir mit:
Internals:
   DEF        ([Flur_innen_dummy:?on]) (set Flur_innen_Licht on) DOELSE  (set Flur_innen_Licht off)
   NAME       Flur_innen_Licht_DI
   NR         398
   NTFY_ORDER 50-Flur_innen_Licht_DI
   STATE      disabled
   TYPE       DOIF
   Readings:
     2015-03-09 17:49:59   cmd_event       Flur_innen_dummy
     2015-03-09 17:49:59   cmd_nr          2
     2015-03-09 17:48:59   e_Flur_innen_dummy_events off
     2015-03-09 17:53:23   state           disabled
     2015-03-09 17:49:59   wait_timer      no timer
   Condition:
     0          EventDoIf('Flur_innen_dummy',$hash->{helper}{triggerDev},$hash->{helper}{triggerEvents},'on')
   Devices:
     0           Flur_innen_dummy
     all         Flur_innen_dummy
   Do:
     0          set Flur_innen_Licht on
     1          set Flur_innen_Licht off
   Helper:
     last_timer 0
     sleepdevice Flur_innen_dummy
     sleeptimer -1
     triggerDev Flur_innen_dummy
     triggerEvents:
       off
   Internals:
   Readings:
   State:
   Timerfunc:
   Trigger:
     all         Flur_innen_dummy
Attributes:
   disable    0
   group      Auto_Dimmersteuerung_Flur
   room       Flur innen
   wait       0:60

und
Internals:
   DEF        ([Flur_innen_BWM_OFEN] eq "on-old-for-timer 1" )  (set Flur_innen_dummy on, set Flur_innen_dummy off)
   NAME       Flur_innen_BWM_OFEN_di
   NR         397
   NTFY_ORDER 50-Flur_innen_BWM_OFEN_di
   STATE      initialized
   TYPE       DOIF
   Readings:
     2015-03-09 18:52:45   state           initialized
   Condition:
     0          InternalDoIf('Flur_innen_BWM_OFEN','STATE','') eq "on-old-for-timer 1"
   Devices:
     0           Flur_innen_BWM_OFEN
     all         Flur_innen_BWM_OFEN
   Do:
     0          set Flur_innen_dummy on, set Flur_innen_dummy off
   Helper:
     last_timer 0
     sleeptimer -1
   Internals:
     0           Flur_innen_BWM_OFEN:STATE
     all         Flur_innen_BWM_OFEN:STATE
   State:
   Timerfunc:
Attributes:
   disable    0
   do         always
   group      Auto_Dimmersteuerung_Flur
   room       Flur innen


Das hatte genau dasselbe falsche Verhalten erzeugt wir mit Notify.

2015-03-09_18:08:35 Flur_innen_Licht on
2015-03-09_18:08:51 Flur_innen_Licht off
2015-03-09_18:24:01 Flur_innen_Licht off
2015-03-09_18:24:03 Flur_innen_Licht off
2015-03-09_18:24:09 Flur_innen_Licht off
2015-03-09_18:26:30 Flur_innen_Licht off
2015-03-09_18:26:32 Flur_innen_Licht off


Natürlich hatte ich disable 0 bzw. 1 jeweils die richtigen Module aktiviert/deaktiviert.
Hier kamen auch immer jede Menge off Befehle durch, obwohl die wait-Funktion den off eigentlich verzögern sollte.
Ich steh' auf'm Schlauch! Woran liegt das?
FHEM 5.6 auf Raspberry Pi 2 Model B (2015), davor FritzBox 7390 (2012-2014), dann Beaglebone Black (Anf. 2015). CUL mit 2 GP-Ant.. Einige Dutzend FS20 Geräte, Bel. 100% LED 1-10V Dim., Multiroom Audio. 3 PV-Anlagen. Nächste Projekte: Zählerdatenerfassung, Heizungstemp./Solar, Jal.-St.

Fashionbye

Fall gelöst -
ein echt blöder Fehler von mir, aber ich kam nicht so leicht darauf.
Vielleicht passiert das ja noch jemand, deshalb hier die Erklärung der Ursache.
Die FS20 PIRU waren von mir falsch programmiert worden. Früher wurde auf Kanal 1 direkt geschaltet, später über FHEM indirekt auf Kanal 2. Dann muss man Kanal 1 abstellen klar. Im dunklen Flur in etwas Zeitdruck habe ich dann in der FS20-PIRU-Anleitung in einer Tabelle die Codierung zum Ausschalten des Kanal 2 gesucht - und gefunden.
Leider habe ich mich verlesen und den Code für "AUS"-Senden programmiert, anstelle den Kanal zu deaktivieren. Echt blöd, aber unter Zeitdruck vertut man sich schon mal... .
Inzwischen geht alles - egal ob mit DOIF oder notify (wobei ich DOIF klar bevorzuge...)
FHEM 5.6 auf Raspberry Pi 2 Model B (2015), davor FritzBox 7390 (2012-2014), dann Beaglebone Black (Anf. 2015). CUL mit 2 GP-Ant.. Einige Dutzend FS20 Geräte, Bel. 100% LED 1-10V Dim., Multiroom Audio. 3 PV-Anlagen. Nächste Projekte: Zählerdatenerfassung, Heizungstemp./Solar, Jal.-St.