Treppenhauslicht mit HM-LC-Sw1PBU-FM (Schalter) und HM-Sen-MDIR-WM55 (Bewegungsm

Begonnen von Bastel-Frank, 14 April 2019, 11:51:14

Vorheriges Thema - Nächstes Thema

Bastel-Frank

Hallo zusammen,

ich habe HM-LC-Sw1PBU-FM (Schalter) und HM-Sen-MDIR-WM55 (Bewegungsmelder) gepeered. Wenn der Bewegungsmelder anschlägt. Nach einer bestimmten (mit shOnTime eingestellten) Zeit geht das Licht wieder aus. Soweit so gut.

Leider geht das Licht auch aus, wenn in der Zwischenzeit der Bewegungsmelder nochmal eine Bewegung feststellt. Dann sollte eigentlich die An-Zeit nochmal von vorne starten. Wie kann ich dieses Verhalten erreichen?

Viele Grüße
Frank

Otto123

Hallo Frank,

ich bin nicht sicher ob das nachtriggern mit dem peering funktioniert. In Abhängigkeit der Helligkeit funktioniert, das hab ich schon gelesen.

Ich habe das bei mir so gelöst:
defmod di_Flurlicht DOIF ([PIR1:"motion:.on"] and (!isday("REAL")?1:0 or [?PIRWg:brightness] < 130)) (set SW01_Sw01 on)(set SW01_Sw01 off)
attr di_Flurlicht do resetwait
attr di_Flurlicht room Flur
attr di_Flurlicht wait 0,180


Es gibt auch ein template dafür - hast Du damit gepeert? Geht jetzt mit peerSmart.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Bastel-Frank

Hallo Otto,

vielen Dank für deinen Vorschlag. Ich werde das so umsetzen.

Ein Template habe ich nicht genutzt, da weiß ich nie, was dort abläuft ...

Viele Grüße
Frank

Pfriemler

Nachtriggern funktioniert auch mit peering. Allerdings sind auch hier die Restriktionen des Bewegungsmelders zu beachten: Er sendet derfault nach einer Bewegungserkennung erst nach 240s = 4 Minuten (Register "minInterval") die nächste Meldung, auch wenn er in der Zwischenzeit eine Bewegung erkennt. Eine in der "Warteperiode" erkannte Bewegung wird dann "nachgereicht", wenn das Register "captInInterval" auf "on" steht, ansonsten führt erst eine Bewegungserkennung nach Ablauf der "Warteperiode" zu einer erneuten Triggerung.
Um ein kontinuierliches Licht zu erhalten, muss man die Einschaltzeit des Aktors verlängern (mindestens auf die "Warteperiode") oder - auf Kosten der Batterielebensdauer - die Warteperiode verkürzen. "captInInterval" ist in manchen Fällen hilfreich, in manchen kontraproduktiv (ein in der Warteperiode manuell ausgeschaltetes Licht würde nach Ablauf der Warteperiode wieder angehen, auch wenn es nach der manuellen Betätigung keine Bewegung mehr gab). Die richtige Einstellung hängt sehr vom Anwendungszweck ab.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."

Bastel-Frank

Zitat von: Pfriemler am 15 April 2019, 00:23:04
Nachtriggern funktioniert auch mit peering. Allerdings sind auch hier die Restriktionen des Bewegungsmelders zu beachten: .... Die richtige Einstellung hängt sehr vom Anwendungszweck ab.

Der Meinung war ich auch: "minInterval" des Bewegungsmelders auf 15s, shOnTime des Schalters auf 1min gestellt. Das müssten ja während der Laufzeit des Timers im Schalter mehrfach neue Trigger umgesetzt werden. Diese Trigger werden auch generiert und kommen beim Schalter an, nur bewirken tun sie nichts, d.h. der Schalter bleibt bei seinem Zeitinterval, welcher er beim ersten Trigger gesetzt hat.

Ich vermute, da muss noch eine Einstellung im Schalter gesetzt werden ...

pwlr

Hi Frank,

Deine Vermutung ist richtig, es müssen im Schalter noch weitere Register verändert werden. Alledings kann ich aufgrund Deiner Beschreibung und knappen Infos nur raten..
Vielleicht erst mal zur Theorie, siehe Doc "Heimautomatisierung mit fhem" von Ullrich Maaß.
Der Schalter hat 4 Zustände (mit Register Defaultwerten, hier nur für short Trigger):
- off      der Schalter ist dauerhaft ausgeschaltet
- dlyOn   der Schalter ist noch ausgeschaltet und wird nach Ablauf des timers shOnDly einschalten
- on      der Schalter ist dauerhaft eingeschaltet
- dlyOff   der Schalter ist noch eingeschaltet und wird nach Ablauf des timer shOffDly ausschalten
Für jeden dieser Zustände gibt es je 3 Register, die das Verhalten des Schalters in diesem Status bestimmen.
a) die Timer shOffTime,shOnDly, shOnTime und shOffDly (bestimmen die Verweildauer im jeweiligen Status)
b) die Jump-Condition-Register (unter welchen Bedingungen soll der Status verlassen werden)
c) die Jump-Target-Register (Sprungziel, zu welchem Status soll gesprungen werden)

Ich nehme mal an, dass der Bewegungsmelder nur ab einer bestimmten Dunkelheit das Treppenlicht schalten soll. Das macht er nach Deiner Beschreibug auch und zwar scheint er vom Status off nach on zu sringen, da Du das Register shOnTime auf 60 gestellt hast.
Es müste folglich das Register shSwJtOff auf on als Sprungziel stehen. Das Register gilt aber nur für einen Sprung aus dem Status off und nicht für einen Sprung aus dem Status on! Nach dem 1. Trigger befindet sich der Schalter in on und nicht mehr in off und der 2. Trigger funktioniert daher nicht wie gewünscht.
Lösung:
Register
shCtOn auf den gleichen Wert wie shCtOff setzen
shSwJtOn auf on setzen
Jetzt gibt es für den 2. und die folgenden Trigger eine gültige Kondition im Status on und die Timer laufen erneut an, da der Schalter von on nach on springt.

Sollte so gehen, probier bitte mal. Im Zweifelsfall brauchen wir als Info alle Registerinhalte für diesen Peer.
Falls Du auch über einen anderen Peer Dauerlicht schalten möchtest, wird es in dieser Konstellation Probleme geben, da der Bewegungsmelder nach 1 Minute immer wieder das Dauerlicht ausschalten wird. Dann sollte statt on der Status dlyOff genutzt werden.
Mon und viel Erfolg
Bernd

martinp876

Wie wârs mit einem template?
Das  stellt alles ein. Fertig. Falls es dich interessiert, schaue es dir an.

set hm templateDef SwMdirNew brightness:ontime "handle motion detector trigger" CtOff:ltHi SwJtDlyOn:no CtValLo:70 OnTime:0 SwJtOff:dlyOff CtOn:ltHi SwJtOn:no OnTimeMode:minimal OffTimeMode:minimal OffDly:p1 ActionType:jmpToTarget CtValHi:p0 CtDlyOff:ltHi OffTime:unused CtDlyOn:ltHi SwJtDlyOff:dlyOff MultiExec:off OnDly:0

Dann die beiden Parameter einstellen, ab welcher Helligkeit geschaltet werden soll und wie lange es an sein soll

Udomatic

Hallo,

ich stehe gerade auch auf Kriegsfuss mit dem Bewegungsmelder in Kombination mit dem Schaltaktor, wie im Titel des TE genannt. Beide Devices sind erfolgreich gepairt und gepeert. Alles funktioniert. Licht an / aus per Taster sowie Licht an bei Bewegungserkennung.

Als Trigger habe ich ein Notify hinterlegt:
define KellerMotion notify KellerBW_Motion {fhem ("set Kellerlicht on-for-timer 60") if (ReadingsVal("KellerBW","brightness",0) < 34)}

Liste Bewegungsmelder
Internals:
   .triggerUsed 1
   CFGFN     
   DEF        36164903
   FUUID      5cdc5a6a-f33f-45fc-10cf-2861561c2face9b7
   NAME       KellerBW_Motion
   NOTIFYDEV  global
   NR         700
   STATE      noMotion
   TYPE       CUL_HM
   chanNo     03
   device     KellerBW
   peerList   Kellerlicht,
   .attraggr:
   .attrminint:
   READINGS:
     2019-05-15 20:29:02   .R-ledOnTime    0 s
     2019-05-15 22:52:08   .peerListRDate  2019-05-15 22:52:08
     2019-05-15 22:52:08   R-Kellerlicht_chn-01-peerNeedsBurst off
     2019-05-15 22:47:34   R-brightFilter  7
     2019-05-15 22:47:34   R-captInInterval off
     2019-05-15 22:52:03   R-evtFltrNum    3
     2019-05-15 22:52:03   R-evtFltrPeriod 6 s
     2019-05-15 22:47:34   R-minInterval   60
     2019-05-15 20:29:02   R-sign          off
     2019-05-15 22:52:07   RegL_01.         00:00 01:3C 02:72 08:00 22:00 30:03
     2019-05-15 22:52:08   RegL_04.Kellerlicht_chn-01  00:00 01:00
     2019-05-15 22:57:32   brightness      0
     2019-05-15 22:58:34   motion          off
     2019-05-15 22:57:32   motionCount     38_next:60s
     2019-05-15 22:58:34   motionDuration  62
     2019-05-15 22:52:08   peerList        Kellerlicht,
     2019-05-15 22:58:34   state           noMotion
     2019-05-15 22:57:32   trigger_cnt     38
   helper:
     peerFriend peerAct,peerVirt
     peerIDsRaw ,6644DC01,00000000
     peerOpt    4:motionAndBtn
     regLst     1,4p
     expert:
       def        1
       det        0
       raw        1
       tpl        0
     regCollect:
     role:
       chn        1
     shadowReg:
     tmpl:
Attributes:
   model      HM-SEN-MDIR-WM55
   peerIDs    00000000,6644DC01,
   room       Treppenhaus


Ich habe erwartet, dass durch meine Filtereinstellungen (captInInterval, evtFltrNum und evtFltrPeriod) das gewünschte Verhalten eintritt, dass das Licht bei Bewegungserkennung nur einmal an und nach 60 Sekunden wieder ausgeschaltet wird. Leider aber nicht der Fall. Es wird 2x für 60 Sekunden Licht geschaltet.

Woran kann das liegen?
2x Raspberry 3B+, 1x Raspberry 4, Signalduino 433 (Somfy), CUL_HM (HM-MOD-RPI-PCB), MQTT, Hue, ConBee 2, Sonos, AVM DECT, Netatmo, eufy, Nuki,

Otto123

Hi,

KellerBW_Motion

Du triggerst damit auf jeden Event!
Je nach dem wann das Licht angehen soll, würde ich auf KellerBW_Motion:motion:.ontriggern ;)

Am Besten schaust Du Dir das im Eventmonitor an, mit dessen Hilfe kannst Du auch den trigger ändern :)

Allerdings machst Du es jetzt sowieso doppelt!? Du hast den BM mit dem Aktor gepeert und schickst trotzdem noch ein on-for-timer hinterher. Ich würde empfehlen: entweder die Register setzen und den peer machen lassen oder nur das notify nehmen.
Was passiert den wenn Du das notify mal totlegst? -> inactive

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Udomatic

Hi Otto,

ich kriegs nicht gebacken. Das steht im Eventmonitor

2019-05-16 00:02:16 CUL_HM Kellerlicht trigLast: KellerBW_Motion:0
2019-05-16 00:02:16 CUL_HM Kellerlicht trig_KellerBW_Motion: 0_51
2019-05-16 00:02:16 CUL_HM Kellerlicht set_on-for-timer 60
2019-05-16 00:02:16 CUL_HM Kellerlicht set_on-for-timer 60
2019-05-16 00:02:16 CUL_HM Kellerlicht set_on-for-timer 60
2019-05-16 00:02:16 CUL_HM Kellerlicht set_on-for-timer 60
2019-05-16 00:02:16 CUL_HM Kellerlicht set_on-for-timer 60
2019-05-16 00:02:16 CUL_HM KellerBW_Motion brightness: 0
2019-05-16 00:02:16 CUL_HM KellerBW_Motion motion: on (to Kellerlicht)
2019-05-16 00:02:16 CUL_HM KellerBW_Motion motionCount: 51_next:60s
2019-05-16 00:02:16 CUL_HM KellerBW_Motion motion
2019-05-16 00:02:16 CUL_HM KellerBW_Motion trigger_cnt: 51
2019-05-16 00:02:16 CUL_HM Kellerlicht NACK
2019-05-16 00:02:16 CUL_HM Kellerlicht deviceMsg: on (to VCCU)
2019-05-16 00:02:16 CUL_HM Kellerlicht level: 100
2019-05-16 00:02:16 CUL_HM Kellerlicht pct: 100
2019-05-16 00:02:16 CUL_HM Kellerlicht on
2019-05-16 00:02:16 CUL_HM Kellerlicht timedOn: running
2019-05-16 00:02:16 CUL_HM Kellerlicht deviceMsg: on (to VCCU)
2019-05-16 00:02:16 CUL_HM Kellerlicht level: 100
2019-05-16 00:02:16 CUL_HM Kellerlicht pct: 100
2019-05-16 00:02:16 CUL_HM Kellerlicht on
2019-05-16 00:02:16 CUL_HM Kellerlicht timedOn: running
2019-05-16 00:02:17 CUL_HM Kellerlicht deviceMsg: on (to VCCU)
2019-05-16 00:02:17 CUL_HM Kellerlicht level: 100
2019-05-16 00:02:17 CUL_HM Kellerlicht pct: 100
2019-05-16 00:02:17 CUL_HM Kellerlicht on
2019-05-16 00:02:17 CUL_HM Kellerlicht timedOn: running
2019-05-16 00:02:17 CUL_HM Kellerlicht deviceMsg: on (to VCCU)
2019-05-16 00:02:17 CUL_HM Kellerlicht level: 100
2019-05-16 00:02:17 CUL_HM Kellerlicht pct: 100
2019-05-16 00:02:17 CUL_HM Kellerlicht on
2019-05-16 00:02:17 CUL_HM Kellerlicht timedOn: running
2019-05-16 00:02:17 CUL_HM Kellerlicht deviceMsg: on (to VCCU)
2019-05-16 00:02:17 CUL_HM Kellerlicht level: 100
2019-05-16 00:02:17 CUL_HM Kellerlicht pct: 100
2019-05-16 00:02:17 CUL_HM Kellerlicht on
2019-05-16 00:02:17 CUL_HM Kellerlicht timedOn: running


Wenn ich das notify so ändere

define KellerMotion notify KellerBW_Motion:motion: on (to Kellerlicht) {fhem ("set Kellerlicht on-for-timer 60") if (ReadingsVal("KellerBW","brightness",0) < 34)}

geht das Licht nicht mehr an.

Kannst du mir bitte sagen, wie ich es richtig definieren muss aufgrund des Eventlogs?

Ohne notify auf Basis des peerings (notify weg) schaltet das Licht auch nicht. Muss ich da noch etwas spezielles in den Registern setzen? Wenn ja wo?

Vielen Dank vorab.
2x Raspberry 3B+, 1x Raspberry 4, Signalduino 433 (Somfy), CUL_HM (HM-MOD-RPI-PCB), MQTT, Hue, ConBee 2, Sonos, AVM DECT, Netatmo, eufy, Nuki,

Otto123

Ja ich habe nicht dran gedacht: er ist gepeert.
Leerzeichen musst Du im notify im regExp durch Punkte ersetzen. Den Peer würde ich durch .* ersetzen.
KellerBW_Motion:motion:.on.*
Hast Du versucht es vom Eventmonitor machen zu lassen?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Udomatic

Zitat von: Otto123 am 16 Mai 2019, 00:13:09
Ja ich habe nicht dran gedacht: er ist gepeert.
Leerzeichen musst Du im notify im regExp durch Punkte ersetzen. Den Peer würde ich durch .* ersetzen.
KellerBW_Motion:motion:.on.*
Hast Du versucht es vom Eventmonitor machen zu lassen?

Hallo Otto,

jetzt hab ich es gerafft mit dem Eventmonitor. Das ist das Ergebnis, welches nun funktioniert!

KellerBW_Motion:motion:.on.\(to.Kellerlicht\) {fhem ("set Kellerlicht on-for-timer 60") if (ReadingsVal("KellerBW","brightness",0) < 34)}

Allerbesten Dank zu später Stunde!

Sollte ich das peering des BM nun besser unpeeren? Kann das Probleme machen?

Gruß
Udo
2x Raspberry 3B+, 1x Raspberry 4, Signalduino 433 (Somfy), CUL_HM (HM-MOD-RPI-PCB), MQTT, Hue, ConBee 2, Sonos, AVM DECT, Netatmo, eufy, Nuki,

Otto123

Moin Udo,

:D
ich würden das regExp nach meinem Vorschlag abwandeln. Der Teil (to Kellerlicht) kann sich auch mal ändern und der ist für dein notify nicht relevant.
Ein punkt im regExp steht für ein beliebiges Zeichen und der Stern dahinter für beliebig viele Zeichen des vorhergehenden - also beliebig viele beliebige Zeichen.

Ich finde eher die Frage interessant, warum hast Du gepeert um das Peerig dann durch ein notify zu umgehen/ersetzen/ergänzen? Das was das notify jetzt tut, kannst Du auch im Aktor einstellen, dann funktioniert die ganze Sache auch ohne FHEM.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Udomatic

Zitat von: Otto123 am 16 Mai 2019, 09:37:55
Moin Udo,

Ich finde eher die Frage interessant, warum hast Du gepeert um das Peerig dann durch ein notify zu umgehen/ersetzen/ergänzen? Das was das notify jetzt tut, kannst Du auch im Aktor einstellen, dann funktioniert die ganze Sache auch ohne FHEM.

Gruß Otto

Hallo Otto,

ich wollte beide Varianten testen und dann beurteilen, was mir besser gefällt. Aber du hast schon das Beste Argument geliefert, das Notify zu deaktivieren und direkt den Aktor zu programmieren, damit es auch ohne FHEM geht.

Da fehlt mir ehrlich gesagt aber eine gute Doku / Wiki, um es nachbauen zu können.
2x Raspberry 3B+, 1x Raspberry 4, Signalduino 433 (Somfy), CUL_HM (HM-MOD-RPI-PCB), MQTT, Hue, ConBee 2, Sonos, AVM DECT, Netatmo, eufy, Nuki,

Otto123

Naja, das wollte ich so nicht sagen :)
Ich habe seit Jahren ein DOIF dafür, weil ich bei der Programmierung des Schalters auch nicht durchgeblickt habe. Ich meine was solls, wenn das Licht bei mir mal im Flur nicht bei Bewegung angeht müsste ich den Taster drücken :)
Und FHEM läuft  immer :)
defmod di_Flurlicht DOIF ([PIR1:"motion:.on"] and (!isday("REAL")?1:0 or [?PIRWg:brightness] < 130)) (set SW01_Sw01 on)(set SW01_Sw01 off)
attr di_Flurlicht do resetwait
attr di_Flurlicht room Flur
attr di_Flurlicht wait 0,180

Es gibt jetzt mittlerweile Templates dafür (hmInfo) z.B. get hm templateList motionOnSwliefert diese InfomotionOnSw       params:ontime brightness        Info:Switch: on for time if MDIR-brightness below level
  ActionType       :jmpToTarget
  CtDlyOff         :ltLo
  CtDlyOn          :ltLo
  CtOff            :ltLo
  CtOn             :ltLo
  CtValLo          :brightness
  OffTime          :unused
  OnTime           :ontime
  SwJtDlyOff       :dlyOn
  SwJtDlyOn        :on
  SwJtOff          :dlyOn
  SwJtOn           :on

Das peeren kann man mittlerweile mit peerSmart am Aktor interaktiv einstellen und auch template auswählen / Werte setzen geht interaktiv.
Einziger Nachteil: Es hat noch keiner so wirklich aufgeschrieben wie es wirklich geht.
Vielleicht bist Du der Erste und schreibst es auf?
Such im Forum einfach nach peerSmart, es gab schon ein paar Beiträge.
Ich habe mir es zwar vorgenommen, aber momentan fehlt die Zeit.  8)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz