NEWS
BWM Lichtsteuerung mit Helligkeitserkennung
-
Hallo,
ich habe bei mir im Treppenhaus 2 BWM von Xiaomi - einen oben an der Treppe, einen unten.
Folgendes Blockly soll mir das Licht schalten:
Erklärung: Ich lasse bei Aktualisierung erstmal einen 100ms timeout laufen, um die Helligkeit zu aktualisieren.
Wenn dann entweder oben Bewegung und oben der Helligkeitswert unterschritten ist oder das ganze unten, schaltet er das Licht ein und startet einen 20sek-timeout zum Ausschalten. Klappt soweit.
Nun soll er ja, wenn noch einer (zb meine Tochter), durch einen BWM läuft, den 2. timeout stoppen und neu starten.
Hier ist vermutlich mein Denkfehler. Ich verstehe, dass das daran liegt, dass er ja erneut die Helligkeit prüft und die größer als der Helligkeitswert der Bedinung (in dem Fall 20) ist. Klar - Licht ist ja an.
ABER: Was mache ich hier schlauerweise, damit das wie gewollt funktioniert?
Danke und VG
-
@chrbo80
Da gibt es eine einfache Lösung. Da ich im Büro bin nur als "pseudocode".Du hast oben
Falls (((BWM oben ausgelöst = wahr) und (BWM oben dunkel)) oder ((BWM unten ausgelöst) und (BWM unten dunkel))) mache stop timeout2 steuere Lampe an ausführen timeout2 in 20 Sekunden steuere Lampe aus ende timeout2 ende Falls
Daraus wird:
Falls (BWM oben ausgelöst = wahr) oder (BWM unten ausgelöst = wahr) mache Falls (BWM oben dunkel oder BWM unten dunkel) mache steuere Lampe an ende Falls stop timeout2 ausführen timeout2 in 20 sekunden steuere Lampe aus ende timeout2 ende Falls
Entscheidend ist das immer wenn die BWM auslösen der innere Bereich abgearbeitet und im Zweifelsfall auch der Timeout verlängert wird. Nur wenn es auch dunkel ist wird die Lampe eingeschaltet.
Was passieren kann ist das die Lampe öfter mal einen "aus" Befehl bekommt, ohne das sie vorher eingeschaltet wurde. Das sollte aber (hoffentlich) nicht das Problem sein.
Ich hoffe das ist verständlich so.
-
@chrbo80
Da fehlt ein stop timeout direkt vor dem ersten timeout, dann kannst Dir in der ODER dir erneute Abfrage der beiden Trigger sparen, wird ja bereits im Trigger erledigt.Den Timeout zur Erkennung dr Helligkeit kannst eigentlich komplett weglassen, da ich die Dinger auch habe und die Erkennung so schnell geht, dass es nicht wirklich nötig ist. Dann haben die Dinger auch eine Verzögerung von 10 Sekunden drin, in der sie keine neue Bewegung erkennen. Die erkannte Bewegung musst auch mit einer Angabe in den DPs wiedr nach einer gewissen Zeit zurück setzten, sonst bleibt das auf true und es funktioniert nur ein mal.
Hier der DP in rot:
-
@Jan1 sagte in BWM Lichtsteuerung mit Helligkeitserkennung:
@chrbo80
Da fehlt ein stop timeout direkt vor dem ersten timeout, dann kannst Dir in der ODER dir erneute Abfrage der beiden Trigger sparen, wird ja bereits im Trigger erledigt.Das stimmt so nicht. Die Abfrage der BWM im Falls kann nicht entfallen, da ja auf "ändern" des Datenpunktes getriggert wird, also auch wenn ein BWM von "occupied" auf "unoccupied" geht. Man kann das vereinfachen in dem direkt mit dem "wert" Baustein (Zu finden bei den Trigger Bausteinen, in der Auswahlliste steht meines Wissens "object ID" drin, denn kann man auf "wert" umstellen) der Wert des BWM genommen wird der ausgelöst hat - das ist aber weniger einfach erklärt.
Ein "stop timeout" ist nicht unbedingt notwendig, da- ein einzelner BWM nicht 2 mal innerhalb von 100 ms auslösen kann
- es unwahrscheinlich ist, das beide BWM innerhalb von 100 ms auslösen. Und selbst wenn das passiert wird schlimmstenfalls die Lampe doppelt eingeschaltet.
Es ist allerdings guter Stil, grundsätzlich den Timeout zu löschen bevor man den startet.
Den Timeout zur Erkennung dr Helligkeit kannst eigentlich komplett weglassen, da ich die Dinger auch habe und die Erkennung so schnell geht, dass es nicht wirklich nötig ist. Dann haben die Dinger auch eine Verzögerung von 10 Sekunden drin, in der sie keine neue Bewegung erkennen. Die erkannte Bewegung musst auch mit einer Angabe in den DPs wiedr nach einer gewissen Zeit zurück setzten, sonst bleibt das auf true und es funktioniert nur ein mal.
Hier der DP in rot:
Das gilt so nur wenn die BWM am Zigbee-Stick hängen. Ist aber aus dem Script oben nicht zu ersehen. Sie können auch am Xiaomi Gateway oder Deconz Gateway hängen. Die Verzögerung bei der Erkennung ist je nach dem wie sie eingebunden sind unterschiedlich - aber immer vorhanden. Ob da die 20 Sekunden ausreichen damit das Licht an bleibt wenn jemand sich im Treppenhaus bewegt weiss ich nicht.
-
@Asgothian
Das mit Wert aus dem Trigger funktioniert doch nur bei einem Trigger, der ein Objekt enthält, ober bezieht sich dann Wert auf jedes Objekt im Trigger? Wobei ich einige Scripte laufen habe, bei denen ich von dem ausgehe was ich oben schon geschrieben habe und der Trigger eben die ODER Auswertung übernimmt. Das läuft bei mir wie gewünscht.
Der Einwand zum timeout ist gerechtfertigt, es ist sehr unwahrscheinlich, dass der doppelt läuft. Wobei Du ja auch gleich mein Hintergedanken mit in Deiner Antwort drin hast und man sich das am besten einfach so angewöhnt.Ja der TE schreibt nicht wie er eingebunden hat, da die verwendeten DP allerdings den entsprechen die ich über Zigbee habe, liegt der Verdacht nahe
-
@Jan1 sagte in BWM Lichtsteuerung mit Helligkeitserkennung:
@Asgothian
Das mit Wert aus dem Trigger funktioniert doch nur bei einem Trigger, der ein Objekt enthält, ober bezieht sich dann Wert auf jedes Objekt im Trigger?Der Trigger übergibt ein Objekt das zu einem Triggerereignisse die entsprechende ID und die ganzen restlichen Informationen enthält. Also Wert enthält immer den Wert des auslösenden Objektes.
EDIT: Wert ist keine Verknüpfung der benannten Objekte.
Zu der Aussage mit den 100ms sag ich nur Murphy
-
@ticaki
Sehr gute Erklärung und da kann ich doch glatt einige Scripte gleich mal optimieren. Da war ich mir nie sicher, auf welches Objekt (bei mehrfach Trigger), sich nun der Wert bezieht. -
@Jan1 sagte in BWM Lichtsteuerung mit Helligkeitserkennung:
Da war ich mir nie sicher, auf welches Objekt (bei mehrfach Trigger), sich nun der Wert bezieht.
Ich dachte auch immer das bei mehreren Triggern "Wert" so nicht funktioniert, jedenfalls wurde das hier im Forum oft so geschrieben. Probiert und geht. Ich habe mal 3 Steckdosen als Trigger genommen und dann nur eine davon eingeschaltet. Wieder was gelernt....
21.4.2020, 10:51:07.425 [info ]: javascript.0 (4218) Start javascript script.js.18_Test.Wert 21.4.2020, 10:51:07.434 [info ]: javascript.0 (4218) script.js.18_Test.Wert: registered 1 subscription and 0 schedules 21.4.2020, 10:51:23.956 [info ]: javascript.0 (4218) script.js.18_Test.Wert: Name: Tischdeko.STATE Wert: true
-
@dslraser
Bisschen aufpassen muss man aber schon, da wenn eine andere ausgeht, wird alles ausgeschaltet, da nur der geänderte Wert der Trigger ist und wenn die andern noch auf true stehen, wird eben trotzdem ausgeschaltet. Ist doch nicht ganz so einfach und wie oben schon geschrieben wurde, ist der Trigger an sich nicht wirklich eine ODER Funktion, da der Rest nicht berücksichtigt wird, sondern eben nur das Objekt welches sich ändert -
@Jan1
genau -
@dslraser
Wenn das keine Rolle spielt und gewünscht ist, passt das -
@Jan1
Eine ODER/UND Verknüpfung zu erzeugen ist relativ einfach möglich. Einen Zähler der beim Start initialisiert wird in dem jedes True eines Datenpunktes den Zähler erhöht und im Falls Block (geändert) wird dieser Zähler erhöht oder verringert wenn sie eine Objekt verändert.
Zähler > 0 -> ODER
Zähler == Anzahl Objekte -> UND -
@ticaki
Ja, aber noch einfacher ist es eben ein FALLS mit UND/ODER Block dran zu hängen. Es ging jetzt etwas OT um die genaue Funktionsweise des "multi" Trigger und das ist nun geklärt. -
hi, Danke für Eure Hilfe. Ich komme klar Zu Eurer Info: Ich habe die BWM über zigbee eingebunden, sie sind gelötet und stehen auf "occupancy timeout: 5 sek". Das klappt auch, heißt nach 5 Sekunden ist true wieder auf false...