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
: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