NEWS
Philips Hue Bewegungsmelder
-
@haselchen
ja ich werde da mit dem Polling heute Abend auch jeden Fall mal versuchen.
Wäre natürlich kool wenn das reichen würde.Momentan braucht er aber locker 4 Sekunden oder so bis das Licht dann endlich geschaltet wird.
Wenn man da ins Badezimmer geht und die Tür zu macht steht man erst einmal noch im Dunkel... -
Verstehe das man da gefrustet ist.
Aber ich denke, dass lässt sich bestimmt optimieren.
Bei Fragen, schreib einfach. -
@fuxsism
hier noch der Link zum "hue-push" Thread -
Der Vollständigkeithalber. Ich nutze meine Bewegungsmelder über die Hue-App. Dort kann man sowohl für unterscheidliche Zeiten als auch Wochentag, Wochenende unterschiedliche Szenen einstellen.
Trotzdem habe ich einmal getestet wie schnell der Bewegunsmelder mit den Push-Script auf eine Bewegung reagiert. Ich würde sagen weniger als 0,5 Sekunden. Also wirklich sehr schnell.
Man könnte also wirklich das Licht auch per ioBroker schalten lassen. Nachteil bei der Hue-App, die weiß nicht wann ich Urlaub habe oder ein Feiertag ist und dort möchte ich morgens früh das Licht weniger hell als an Arbeitstagen.
Die gute Nachricht für alle die nicht basteln wollen Peter Murray wird die neue Api von Philips implementieren, so dass ioBroker danach auch mit Push umgehen kann, wenn der ioBroker Adapter angepasst wurde ohne das man noch das extra Script benötigt.
-
ich habe jetzt versucht dieses PUSH Skript zu installieren.
Jetzt laufen die BWM aber gar nicht mehr und das Skript gibt folgende Fehlersammlung:script.js.Hue_PUSH: TypeScript compilation failed: 'lights.status.status': { stateName: 'reachable', convert: (val) => { return val === 'connected' ? true : false; }, validTypes: ['Extended color light', 'Color temperature light', 'Dimmable light', 'On/Off plug-in unit'], after: (stateId, value) => { updateHueState(stateId.substring(0, stateId.lastIndexOf('.')) + '.on', value); } }, ^ERROR: Expected 3 arguments, but got 2. 'sensors.button.last_event': { stateName: 'buttonevent', convert: (val) => { return ((UUIDs[this.idv2] && UUIDs[this.idv2].metadata) ? UUIDs[this.idv2].metadata.control_id : 0) * 1000 + (val === 'repeat' ? 1 : 0) + (val === 'short_release' ? 2 : 0) + (val === 'long_release' ? 3 : 0); }, validTypes: ['ZLLSwitch'] }, ^ERROR: Object is possibly 'undefined'. 'sensors.button.last_event': { stateName: 'buttonevent', convert: (val) => { return ((UUIDs[this.idv2] && UUIDs[this.idv2].metadata) ? UUIDs[this.idv2].metadata.control_id : 0) * 1000 + (val === 'repeat' ? 1 : 0) + (val === 'short_release' ? 2 : 0) + (val === 'long_release' ? 3 : 0); }, validTypes: ['ZLLSwitch'] }, ^ERROR: Object is possibly 'undefined'. 'sensors.button.last_event': { stateName: 'buttonevent', convert: (val) => { return ((UUIDs[this.idv2] && UUIDs[this.idv2].metadata) ? UUIDs[this.idv2].metadata.control_id : 0) * 1000 + (val === 'repeat' ? 1 : 0) + (val === 'short_release' ? 2 : 0) + (val === 'long_release' ? 3 : 0); }, validTypes: ['ZLLSwitch'] }, ^ERROR: Object is possibly 'undefined'. 'lights.status.status': { stateName: 'state.reachable', convert: (val) => { return val === 'connected' ? true : false; }, validTypes: ['Extended color light', 'Color temperature light', 'Dimmable light', 'On/Off plug-in unit'], after: (stateId, value) => { updateHueState(stateId.substring(0, stateId.lastIndexOf('.')) + '.on', value); } }, ^ERROR: Expected 3 arguments, but got 2. 'sensors.button.last_event': { stateName: 'state.buttonevent', convert: (val) => { return ((UUIDs[this.idv2] && UUIDs[this.idv2].metadata) ? UUIDs[this.idv2].metadata.control_id : 0) * 1000 + (val === 'short_release' ? 2 : 0) + (val === 'long_release' ? 3 : 0); }, validTypes: ['ZLLSwitch'] }, ^ERROR: Object is possibly 'undefined'. 'sensors.button.last_event': { stateName: 'state.buttonevent', convert: (val) => { return ((UUIDs[this.idv2] && UUIDs[this.idv2].metadata) ? UUIDs[this.idv2].metadata.control_id : 0) * 1000 + (val === 'short_release' ? 2 : 0) + (val === 'long_release' ? 3 : 0); }, validTypes: ['ZLLSwitch'] }, ^ERROR: Object is possibly 'undefined'. 'sensors.button.last_event': { stateName: 'state.buttonevent', convert: (val) => { return ((UUIDs[this.idv2] && UUIDs[this.idv2].metadata) ? UUIDs[this.idv2].metadata.control_id : 0) * 1000 + (val === 'short_release' ? 2 : 0) + (val === 'long_release' ? 3 : 0); }, validTypes: ['ZLLSwitch'] }, ^ERROR: Object is possibly 'undefined'. updateHueState(stateId + '.r', Math.round(rgb.Red * 255)); ^ERROR: Expected 3 arguments, but got 2. updateHueState(stateId + '.g', Math.round(rgb.Green * 255)); ^ERROR: Expected 3 arguments, but got 2. updateHueState(stateId + '.b', Math.round(rgb.Blue * 255)); ^ERROR: Expected 3 arguments, but got 2. updateHueState(stateId + '.rgb', Math.round(rgb.Red * 255) + ',' + Math.round(rgb.Green * 255) + ',' + Math.round(rgb.Blue * 255)); ^ERROR: Expected 3 arguments, but got 2.
Kannst du damit was anfangen?
-
Ich benutze das Skript nicht .
Du musst dein Anliegen in den entsprechenden Thread schreiben , wo du das Skript her hast .
Btw. hattest du mal meine Vorschläge ausprobiert ? -
@fuxsism Wie hast Du das Script angelegt als TypeScript? Das ist falsch. Das ist normales Javascript.
-
@haselchen @cash
also inzwischen läuft das Skript!
Bin auch soweit wirklich sehr zufrieden mit der Verzögerung... die ist wirklich nicht mehr zu merken.
Ist nahezu Echtzeit!Vielen Dank schin einmal für die Tippps
-
@haselchen @cash
Hallo,
leider muss ich mit einer weiteren Frage kommen.
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.Ist das Problem bekannt? Und kann man da etwas gegen tun?
-
Kann ich leider nicht bestätigen.
Licht bleibt an solange ich mich bewege .
Der BWM braucht ca. 11 sek bis er von True auf False schaltet.
Das eventuell für deinen Hinterkopf wenn du Skripte programmierst. -
@fuxsism das Problem ist weniger der Bewegungsmelder als Dein Script. Mein Script läuft zwar auch noch nicht so wie ich es will aber ich kann auch nur schwer testen, da meine Lampe noch keine Hue Lampe ist. Ich schalte derzeit einfach nur einen Fake-Datenpunkt.
Ich schalte je nach Uhrzeit 1-3 Minuten nach der Meldung "keine Bewegung" das Licht aus. Sobald eine neue Bewegung erkannt wird breche ich den Timer ab.
-
@haselchen @cash
Das hier ist zum Beispiel ein Skript von mir:
Da ist es aber so dass das Licht trotzdem nach 3 Minuten Bewegung aus geht.
Was ja eigentlich nicht sein dürfte.
Ich habe mal IRGENDWO so etwas wie von einer TOTZeit bei den BWM gelesen... bin mir aber nicht mehr so sicher...Aber was sollte ich an dem Skript ändern?
-
@fuxsism
versuche es doch mal so
-
@fuxsism Zu Blockly kann ich nichts sagen. Ich mache das per Javascript. Aber der Blockly von BBTown sieht besser aus da dort ein timeout enthalten ist.
Ich schreibe mal wie mein Script aufgebaut ist.
Ich ermittel erstmal Arbeitstag und freier Tag = Davon sind bei mir die Szenen Morgens abhängig. Während der Arbeit will ich schon um 6 Uhr eine helle Szene und am Wochenende später.
Falls in der Mittagszeit geschaltet wird soll eine andere Szene angehen. Je nach Arbeitstag oder Wochende giult das gleiche für Abends.
Mein Script wird getriggert durch Bewegung und keine Bewegung.
Bei Bewegung wird geprüft wie hell es ist und ob das Licht benötigt wird oder nicht (der Bewegungsmelder hat ja auch einen Helligkeitssensor).
Wenn nötig schaltet er also die entsprechende Szene. Bei keine Bewegung starte ich einen Timer (Dauer des Timers abhängig von der aktuellen Uhrzeit). Nach Ablauf des Timers also x Minuten nach den der Bewegungsmelder keine Bewegung gemeldet hat schaltet das Licht aus.
Wenn nun 30 Sekunden nach keiner Bewegung eine Bewegung erkannt wird prüft das Script gibt es einen Timer. Falls ja wird der Timer abgebrochen, der zu diesesn Zeitpunkt bei x-30 Sekunden steht. -
@bbtown
was ist denn an deinen Skript anders als an meinem?
Ich kann da wirklich keinen unterschied erkennen?@cash
warum ist das andere Skript besser? In meinem sitzt doch auch ein Timeout!@Asgothian @BBTown @cash @haselchen
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 sagte in Philips Hue Bewegungsmelder:
was ist denn an deinen Skript anders als an meinem?
Ich kann da wirklich keinen unterschied erkennen?es wird niemand gezwungen eine Empfehlung auch mal auszuprobieren
Mich verwundert jedoch, dass dir nicht aufgefallen, ist, dass in meinem Script immer erst einmal den timer gestoppt wird ... bei dir nur wenn bestimmte Bedingungen zutreffen.
Du solltest zudem einmal beim Trigger anstelle der Variante "wurde aktualisiert" auch einmal "wurde geändert" ausprobieren. -
ich meinre das ÜBERHAUPT gar nicht negativ oder so.
Ich find es ja mega dass du versuchst auch neun Input mit rein zu bringen.
ich hatte nur gefragt weil ich keinen Unterschied gesehen hatte und es aber verstehen wollte wo der unterschied ist.Also den Trigger auf Änderung hatte ich zu Beginn auch schon... da hatte ich aber den Eindruck das es teilweise noch schlechter funktioniert... weil der bestehende Wert wahr auch mit neuem Wert wahr akutalisiert wird und dann keine Änderung stattgefunden hat und der Timer dann auch nicht "resettet" wird.
Und der Timer wird bei mir jedes mal auch nur gestoppt wenn das Licht neu geschaltet wird... sollte also eigentlich keinen Unterschied machen oder? -
@fuxsism
Nur weil Du keinen Unterscheid SIEHST???
... also ich bin hier jetzt raus, wenn jemand lieber diskutiert und Beratungsresistent ist, anstatt einfach mal auszuprobieren, dann ist mir meine Zeit zu schade.Wie gesagt, niemand wird hier gezwungen Empfehlungen anzunehmen.
-
@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.