NEWS
Philips Hue Bewegungsmelder
-
@bbtown
naja... also ich denke schon, dass man so ein Skript ja auch jeweils verstehen sollte.
Und so wie ich das "lese" arbeitet dein Skript genau wie meines... ih verstehe nur nicht wo der Unterschied liegt und deshalb auch nicht wieso es dann besser laufen würde?
Vielleicht kannst du es mir aber ja erklären?Und nochmal... es soll überhaupt kein Angriff sein oder so... ich bin über jeden Tipp wirklich sehr dankbar!!!
-
@fuxsism sagte in Philips Hue Bewegungsmelder:
@bbtown
naja... also ich denke schon, dass man so ein Skript ja auch jeweils verstehen sollte.
Und so wie ich das "lese" arbeitet dein Skript genau wie meines... ih verstehe nur nicht wo der Unterschied liegt und deshalb auch nicht wieso es dann besser laufen würde?Folgende Signifikante Unterschiede gibt es:
- das Skript von BBTown stoppt den Timeout bei jeder Aktualisierung des Presence Wertes, Deines nur wenn alle Bedingungen erfüllt sind.
- dein Skript hat "code Dubletten", sprich 2 Stellen die das gleiche tun. das ist ungünstig, da z.Bsp. wenn du irgendwann dich entscheidest mit geringerer Helligkeit zu arbeiten an 2 Stellen angepasst werden muss an Statt bei bbtown nur an einer
- BBTowns script nutzt die Logik-Funktionen die Blockly bietet besser, prüft dafür aber auch eine Bedingung weniger ab (Schlafen = falsch wird nicht geprüft)
- BBTowns Skript prüft die Zeitbedingung nicht identisch zu deinem Skript: Zwischen 6:00 und 7:30 würde dein Skript (wenn es denn funktionieren würde) kein Licht schalten, das von BBTown schon
- Dein Skript hat eine nicht funktionierende Bedingung die nie wahr wird. Beim Block
Zeit zwischen A und B
muss A immer kleiner sein als B, sprich 16:00 > 6:00 - das ist nicht der Fall.
Unterm Strich ist das Skript von BBTown an einer Stelle besser als deins. Er nutzt die Logikbausteine um die abzuprüfenden Bedingungen leichter lesbar zu prüfen. Dabei nutzt er die Eigenschaft das "Falls Wert = Wahr" das gleiche ist wie "Falls Wert", sowie erweiterte Optionen, und prüft die Zeiten besser ab, und erzeugt damit ein deutlich kompakteres Blockly. Solange es wenige Skripte gibt macht das wenig aus - je mehr Skripte mit unterschiedlichen Aufgaben existieren desto wichtiger ist Übersichtlichkeit der Skripte.
Es ist an einer Stelle schlechter als Deins - wenn der BWM den Status auf falsch setzt wird der timeout gestoppt. Passiert das bevor der Timeout die Lampe abgeschaltet hat dann bleibt die Lampe an.
Und nochmal... es soll überhaupt kein Angriff sein oder so... ich bin über jeden Tipp wirklich sehr dankbar!!!
A.
-
@asgothian sagte in Philips Hue Bewegungsmelder:
Es ist an einer Stelle schlechter als Deins - wenn der BWM den Status auf falsch setzt wird der timeout gestoppt. Passiert das bevor der Timeout die Lampe abgeschaltet hat dann bleibt die Lampe an.
da hast Du wahr!
Vielleicht greift das besser
-
@asgothian @BBTown
so... das is doch mal eine Erklärung. Vielen Dank dafür...Die Code Dubletten sind entstanden weil ich ja einen gewissen "Leerlauf" habe in dem das Licht nicht geschaltet werden soll.
Soll halt morgens schalten... dann tagsüber nicht und dann ab Nachmittags wieder.
Aber ich verstehe was du meinst.
Das Der Wert A immer kleiner sein muss als Wert B ist zum Beispiel ein sehr sehr guter Hinweis. Das wusste ich nicht!
Ich möchte ja aber, dass dies ab Nachmittags 16Uhr über die Nacht bis morgens um 6Uhr geht... wie würde man das am Besten dann definieren?Von der kompakteren und eventuell eleganteren Bauweise aber mal abgesehen, unterscheiden sich die beiden Skripte in ihrer eigentlich Funktion aber doch trotzdem nicht odeR?
Also das Grundproblem kann durch das andere Skript nicht gelöst werden? -
@fuxsism sagte in Philips Hue Bewegungsmelder:
Also das Grundproblem kann durch das andere Skript nicht gelöst werden?
Was genau ist das Grundproblem ? die Verzögerung die initial genannt wurde sollte (sofern du auf push umgestellt hast) ja nicht mehr das Problem sein.
ch möchte ja aber, dass dies ab Nachmittags 16Uhr über die Nacht bis morgens um 6Uhr geht... wie würde man das am Besten dann definieren?
wie BBTown es getan hat:
Aktuelle Zeit nicht zwischen 10:00 und 16:00 Uhr
-
haha ja klar... das klingt schon serh vernünftig
Is ja logisch mit der Zeit!!
Das werde ich auf jeden Fall umsetzen.Das Grunproblem:
Irgendwie scheint es so zu sein das die BWM nur eine gewisse Zeit lang akutalisieren und danach so etwas wie eine Pause brauchen?
Es sieht so aus, dass ich zum Beispiel im Bad den BWM so eingestellt habe das er bei Bewegung das licht schaltet und dann nach 3 Minuten in denen er keine Bewegung erkannt hat das Licht wieder aus schaltet.
Befinde ich mich nun im Bad geht das Licht auch sofort an... allerdings dann nach 5 Minuten trotz Bewegung einfach aus.
Das bedeutet ja... das er quasi zwei Minuten lang neue Bewegungen erkannt hat, hier dann auch der Timer zum ausschalten entsprechend neu gestartet wird, der BWM dann aber irgendwann einfach die neu erkannte Bewegung nicht mehr übermittelt und dann das Licht abschaltet.
In diesem Fall muss ich dann das Bad verlassen... irgendwie 30 sekunden warten und danach wird das Licht dann auch wieder angeschaltet.Ich habe übrigens gerstern Abend noch etwas rumprobiert, und es scheint wirklich ein Problem der dauerhaften Bewegung zu sein. Wenn ich also in den Flur gehe sendet der BWM "Bewegung". Verlasse ich den Flur und bleibe nur ein paar Sekunden weg, so dass der BWM keine Bewegung erkennt sendet er sofort beim erneuten Eintritt wieder "Bewegung". Das Licht wird also quasi neu geschaltet und der Timer neu gestartet.
Bleibe ich aber im FLur mit ständiger Bewegung vor dem BWM sendet der BWM kein einziges "Bewegung" mehr und der Timer läuft einfach aus und das Licht geht aus obwohl die Bewegung da ist.
Es scheint also so... als würde der BWM nur neue Bewegungen melden und keine durchgehende...??? -
@fuxsism Also mal ganz ganz einfach.
Erstelle ein Script das bei jeder Änderung des Wertes den Inhalt der Wertes ausgibt. Nicht mehr. Kein schalten sondern nur ein Log.
Das heißt Du solltest im Log dann sehen wann gemeldet wird und wo Dein Fehler im Script liegt..
Bewegung erkannt um x
keine Bewegung um y
Bewegung um zBin aber auch raus. Weil ich mit Blockly nichts anfangen kann und somit keine Hilfe bin. Ich kann nur sagen der Bewegungmelder funktioniert und mach das was er bei mir soll…
-
@cash
das Skript an sich läuft ja und funktioniert ja auch zuverlässig.
Mein Problem ist dann eher doch der BWM an sich und dass er einfach bei Dauerbewegung keinen neuen Zustand sendet.
Da bleibt er einfach auf Bewegung=wahr stehen und da kann natürlich das Beste Skript nicht laufen.Könnte es vielleicht sogar daran liegen dass die Akkus nicht mehr voll genug sind? So quasi etwas wie einen Stromsparmodus??
-
@fuxsism doch das beste Script kann laufen. Meins ist nicht das Beste aber es läuft mit genau diesen Bewegungsmelder! Vielleicht solltest Du darüber nachdenken ob nicht doch Dein Script das Problem ist
Es ist doch gut wenn er 10 Minuten auf wahr bleibt wenn 10 Minuten Bewegung ist. Ich würde das Licht nicht ausschalten wenn der Datenpunkt auf wahr steht.
Schalte das Licht aus wenn der Datenpunkt auf falsch geändert wird…. und zwar sollte dann ein timeout starten.
Bin aber endgültig raus. Der Bewegungsmelder macht das was er soll. Nur Dein Script ist halt einfach falsch Wenn Du es nicht glaubst kauf Dir halt ein anderen und schmeiß ihn weg.
-
Genau vor dem gleichen Problem wie Fuxsism stand ich auch.
Nein tut es nicht. Wenn der BWM ausgelöst wird (Bewegung erkannt) und nun dauerhaft Bewegung vor dem BWM
erkannt wird, ändert der BWM seinen nicht Zustand und das Licht geht nach den 2min aus.Mein Blockly sieht so aus :
Kellerflurlicht mit BWM oben und unten im Treppenhaus -
Das ähnelt dem Vorschlag von Cash - Solange wie der Zustand des BWM wahr ist bleibt das Licht an
Beim Wechsel von Bewegung erkannt auf nicht erkannt wird in meinem Fall der Timeout aktiv und das Licht
nach 30sek ausgeschaltet.Dazu habe ich im BWM die Parameter so gesetzt :
So funktioniert es bei mir
-
Du redest hier aber vermutlich vom HMIP BWM , richtig?
Jedenfalls sehen deine Einstellungen so aus .
Den kannst du natürlich in keinster Weise mit dem Hue BWM vergleichen. -
@fuxsism sagte in Philips Hue Bewegungsmelder:
@cash
das Skript an sich läuft ja und funktioniert ja auch zuverlässig.
Mein Problem ist dann eher doch der BWM an sich und dass er einfach bei Dauerbewegung keinen neuen Zustand sendet.
Da bleibt er einfach auf Bewegung=wahr stehen und da kann natürlich das Beste Skript nicht laufen.Könnte es vielleicht sogar daran liegen dass die Akkus nicht mehr voll genug sind? So quasi etwas wie einen Stromsparmodus??
Du zäumst das Pferd von hinten auf.
Gute Skripte erstellt man in 3 Schritten.
Schritt 1:
Wie verhält sich die Hardware. Welche Signale / Statusänderung / Statusaktualisierungen bekomme ich von der Hardware unter welchen Bedingungen.
Schritt 2:
Wie kann ich darauf reagieren. Mit welcher Logik bekomme ich die Funktion die ich haben will hin. Dabei rede ich absichtlich von Logik, nicht von Blockly, JS oder Node Red.
Schritt 3:
Umsetzen der Logik in der gewählten Skriptengine.
In Deinem Fall scheint es so zu sein das der BWM den Zustand Bewegung erkannt auf
wahr
setzt. Dieser Zustand wird nicht weiter aktualisiert bis er keine Bewegung mehr erkennt - dann setzt er den Zustand auffalsch
Das Skript welches du oben erstellt hast nutzt (vereinfacht) die folgende Logik
Wenn in der Nacht
Bewegung
gemeldet wird mache das Licht für 2 Minuten an.Das diese Logik mit dem Verhalten des Bewegungsmelders nicht zusammen passt sollte sofort auffallen.
Die Logik die du haben willst ist:
Wenn in der Nacht
Bewegung
gemeldet wird mache das Licht an.
Wenn in der Nachtkeine Bewegung mehr
gemeldet wird mache das Licht in x Sekunden aus.Du hast also recht - das Skript läuft einwandfrei, und tut genau das was du ihm gesagt hast. Der Ansatz das ein Fehlverhalten des Bewegungsmelders vorliegt ist aber falsch.
A.
-
@haselchen
Ja, du hast recht ich habe Homematic-BWM, ich habe alle Philips-BWM damit ersetzt, weil mir das Einschaltverhalten
zu unregelmässig war, Übernahme der Bewegungserkennung zwischen 1-3 sek wurde von meiner Frau nicht akzeptiert.Ich habe jetzt aber nochmal einen Philips-BWM reaktiviert und das Polling im HUE-Adapter auf "2" gesetzt und dieses Programm läuft mit dem Philips-BWM so, wie es soll :
Licht Einschalten nach Bewegungserkennung und halten, solange wie Bewegung registriert wird.
Beim Wechsel auf keine Bewegung erkannt wird der Timer aktiviert und das Licht anschliessend ausgeschaltet.
Die Einschaltreaktion von jetzt bis zu 2sek wäre für mich allerdings immer noch nicht zufriedenstellend. -
Nebenbei mal gesagt: Warum 2 Trigger wenn einer reicht, sprich warum nicht so:
Trigger auf Flur EGS.presence, wurde aktualisiert
- darin:
stop Licht aus
Falls Wert und aktuelle Zeit ist nicht zwischen 5:00 und 18:00 mache
-steuere Test-Lampe.level mit 50
Ausführen Licht aus in 20 Sek
-steuere Test-Lampe.level mit 0
A.
p.s. kein Zugriff auf Blockly deswegen den obigen Pseudocode. -
hatte ich auch erst so probiert.
Das Licht soll aber auch bei dauerhafter Bewegungserkennung anbleiben ( meine Frau hat an der Haustür immer eine sehr lange Verabschiedungszeremonie - und wenn dabei das Licht ausgeht ........... )
und das würde es in dem Fall, habe ich gerade nochmal ausprobiert.Deswegen die eindeutige Vorgabe das der Timer nur im Fall "keine Bewegung erkannt" aktiv wird und erst dann das Licht ausgeschaltet wird.
-
@cash @Asgothian @BBTown @haselchen @karlo-enzo
also ich muss euch nun auch noch einmal berichten.
Ich konnte gestern noch bis spät in die Nacht testen un skripten und die Lösung scheint wirklich gefunden...
Deshalb auch noch einmal VIELEN DANK für die ganzen Ideen und den nützlichen Input!
Die Lösung liegt wirklich darin den Timer zum Ausschalten erst bei der Änderung auf Bewegung = false zu starten.Nun laufen die Lampen auch bei Dauerbewegung zuverlässig und gehen dann aus wenn man den Raum verlässt!
-
@karlo-enzo Du hast recht, in meinem Pseudo Skript ist ein Fehler drin, es bildet nicht komplett Deine Anwendung ab. Korrekt wäre:
@asgothian sagte in Philips Hue Bewegungsmelder:
Trigger auf Flur EGS.presence, wurde aktualisiert
- darin:
stop Licht aus
Falls Wert und aktuelle Zeit ist nicht zwischen 5:00 und 18:00 mache
-steuere Test-Lampe.level mit 50
Falls nicht Wert
-Ausführen Licht aus in 20 Sek
-steuere Test-Lampe.level mit 0
-
@Asgothian
Das hat hat etwas gedauert, bis ich Deinen Vorschlag in Blockly hingekriegt habe:Würde das so zu Deinem Vorschlag passen ???
So fit bin ich nämlich noch nicht im Script-Erstellen , - habe mir bis jetzt alles selber erarbeitet und manches ist in Blockly auch nicht so eindeutig darzustellen.
ABER -- wenn man nur einen Triggerbaustein je Script verwenden soll, wäre diese Variante dann richtiger als diese :???