Diskussion Bewegungsmelder und sequence

Begonnen von Prof. Dr. Peter Henning, 22 Oktober 2020, 12:28:10

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

Ich bin gerade dabei, mein Treppenhaus mit Bewegungsmeldern zu verwanzen. Ziel ist festzustellen, ob sich z.B. jemand aus dem Dachgeschoss ins Obergeschoss bewegt hat.

Dazu gibt es an jedem Treppenabsatz einen BM, und eine generische sequence
defmod TH.M2.seq sequence TH.MD.*:motion 1:19 TH.MD.*:motion
die auslöst, wenn in einem Zeitraum von 1-20 Sekunden nach _einem_ Bewegungsmelder ein Zweiter ausgelöst wird. Da die sequence die Auslöser meldet, kann man also problemlos die Bewegungsrichtung feststellen.

Jetzt aber kommt die Frage ins Spiel, wie man dann die weitere Bewegung ins Erdgeschoss erkennt. Dabei wird natürlich nur ein weiterer BM ausgelöst.

- Eine sequence mit _drei_ Devices, also
defmod TH.M3.seq sequence TH.MD.*:motion 1:19 TH.MD.*:motion 1:19 TH.MD.*:motion
funktioniert _nicht_ gleichzeitig mit der für 2 Devices (vermutlich kommen sich die internen Timer ins Gehege?)

- Nur eine sequence mit drei Devices ist ebenfalls keine Option. Da kann man zwar mit triggerPartial auch den Fall abfangen, dass nur 2 BM ausgelöst worden sind. Der Fall wird dann aber erst nach dem 2 Timeout, also 20 Sekunden zu spät gemeldet.

- Eine weitere sequence, die auf den Event der 1. sequence und einen weiteren BM trigger, funktioniert ebenfalls nicht:
defmod TH.M3.seq sequence TH.M2.seq:trigger.* 1:19 TH.MD.*:motion
Wenn man sich mit triggerPartial oder verbose 5 anzeigen lässt, was intern abläuft, wird von dieser zweiten sequence zwar sehr wohl das Triggern der ersten sequence festgestellt - aber das Ereignis des dritten Bewegungsmelders eben nicht:
Zitat2020.10.22 13:24:27 5: sequence TH.M3.seq matched 2
2020.10.22 13:24:30 1: ============> TH.MD10
2020.10.22 13:24:37 5: sequence TH.M3.seq timeout on 1 (partial_1)
Auch hier kann ich nur vermuten, dass sich die internen Timer der beiden sequences in die Quere kommen, denn um 13:24:30 gab es das richtige Event von TH.MD10, aber erst um 13:24:37 den Timeout.

Die zentrale Frage lautet also: Warum erkennt die zweite sequence nicht das Event vom dritten Bewegungsmelder ???

Getestet habe ich das übrigens nicht durch fortwährendes Treppensteigen, sondern mit drei Dummy Devices
Internals:
   FUUID      5f9141d2-f33f-7377-5a17-281b89a07e0a6ece
   NAME       TH.MD8
   NR         11338
   STATE      nomotion
   TYPE       dummy
   READINGS:
     2020-10-22 12:26:40   state           nomotion
Attributes:
   devStateIcon nomotion:motion_detector@black motion:people_sensor@crimson
   setList    motion:noArg nomotion:noArg
und einem Kommando
define c_bmtest cmdalias bmtest AS set TH.MD8 motion;sleep 3;set TH.MD9 motion;sleep 3;set TH.MD10 motion;sleep 3;set TH.MD(8|9|(10)) nomotion

LG

pah

rudolfkoenig

Ich sehe keine Probleme:
fhem> info timer
fhem> bmtest
fhem> 2020-10-22 13:35:10.810 dummy TH.MD8 motion
2020-10-22 13:35:13.813 sequence TH.M2.seq trigger
2020-10-22 13:35:13.813 dummy TH.MD9 motion
2020-10-22 13:35:16.817 sequence TH.M3.seq trigger
2020-10-22 13:35:16.817 dummy TH.MD10 motion
2020-10-22 13:35:19.821 dummy TH.MD10 nomotion
2020-10-22 13:35:19.821 dummy TH.MD8 nomotion
2020-10-22 13:35:19.821 dummy TH.MD9 nomotion

fhem> bmtest
fhem> 2020-10-22 13:35:27.262 sequence TH.M2.seq trigger
2020-10-22 13:35:27.262 dummy TH.MD8 motion
2020-10-22 13:35:30.266 dummy TH.MD9 motion
2020-10-22 13:35:33.269 sequence TH.M2.seq trigger
2020-10-22 13:35:33.269 sequence TH.M3.seq trigger
2020-10-22 13:35:33.269 dummy TH.MD10 motion
2020-10-22 13:35:36.273 dummy TH.MD10 nomotion
2020-10-22 13:35:36.273 dummy TH.MD8 nomotion
2020-10-22 13:35:36.273 dummy TH.MD9 nomotion


Das "vorzeitige" triggern von TH.M2.seq  im zweiten Abschnitt kommt dadurch zustande, dass TH.M2.seq beim Setzen von TH.MD10 aktiviert wird.

Getestet habe ich mit folgenden fhem.cfg:
attr global motd none
attr global mseclog 1
attr global statefile ./log/fhem.save.seq
define telnetPort telnet 7072 global

defmod TH.M2.seq sequence TH.MD.*:motion 1:19 TH.MD.*:motion
defmod TH.M3.seq sequence TH.MD.*:motion 1:19 TH.MD.*:motion 1:19 TH.MD.*:motion
define c_bmtest cmdalias bmtest AS set TH.MD8 motion;;sleep 3;;set TH.MD9 motion;;sleep 3;;set TH.MD10 motion;;sleep 3;;set TH.MD(8|9|(10)) nomotion
define TH.MD8 dummy
attr TH.MD8 setList    motion:noArg nomotion:noArg
define TH.MD9 dummy
attr TH.MD9 setList    motion:noArg nomotion:noArg
define TH.MD10 dummy
attr TH.MD10 setList    motion:noArg nomotion:noArg

Prof. Dr. Peter Henning

#2
 :o
Das sind dieselben Definitionen wie bei mir - und ich kriege keinen Trigger vom dritten BM.

Edit: Die erste Variante läuft - nachdem ich die Definitionen noch einmal händisch eingetragen habe. Einzige Erklärung, die ich bei der Hand habe: Offenbar ist beim Cut and Paste der Regulären Ausdrücke irgendein Müllzeichen mit hineingekommen  :-[

Das erklärt aber noch nicht, wieso ich mit einer sequence zwar auf den Trigger einer anderen reagieren kann - aber dann den Event des dritten BM verpasst:
Zitatdefmod TH.M3.seq sequence TH.M2.seq:trigger.* 1:19 TH.MD.*:motion
Da gibt es unmittelbar nachdem die TH.M3.seq den Trigger der ersten sequence festgestellt hat, ein Timeout. Als ob statt 1:19 dort eine Null stünde. Im nachfolgenden Log-Auszug bei 17:11:40, der Event des dritten BM kommt aber erst um 17:11:43
Zitat
2020.10.22 17:11:36 1: ============> TH.MD8
2020.10.22 17:11:36 5: sequence TH.M2.seq matched 2
2020.10.22 17:11:39 1: ============> TH.MD9
2020.10.22 17:11:39 5: sequence TH.M2.seq matched 4
2020.10.22 17:11:39 1:sequence TH.M2.seq trigger TH.MD8:motion TH.MD9:motion
2020.10.22 17:11:40 5: sequence TH.M3.seq matched 2
2020.10.22 17:11:40 5: sequence TH.M3.seq abort on 1 (partial_1)
2020.10.22 17:11:43 1: ============> TH.MD10
2020.10.22 17:11:43 5: sequence WZ.M2.seq matched 2
2020.10.22 17:12:03 5: sequence WZ.M2.seq timeout on 1 (partial_1)

LG

pah