NEWS
Skript für Klingelsignalisierung mit HUE
-
Hallo zusammen,
ich habe mir hier mit Hilfe des Forums ein Skript zusammengebastelt, das mir das Klingeln symbolisieren soll.
Mit der Debouncing Funktion soll erreicht werden, dass bei mehrfach Klingeln der Ablauf nicht unkontrolliert mehrfach gestartet wird.
Insgesamt soll aber erreicht werden, dass Anfangs die Zustände der HUE Lampen in Variablen geschrieben wird, dann ein Farbwechsel (ROT/BLAU) stattfindet und dann sollte es wieder auf Ursprung zurück. Ursprung kann natürlich AUS sein oder eine andere Helligkeit / Farbtemperatur.
Es funktioniert auch schon relativ gut, nur wird zum Schluss bei manchen Lampen der Ausgangszustand nicht wieder erreicht. Ich kann mir aber nicht erklären warum. Teils klappt es, teils nicht. Ein Muster ist nicht zu erkennen… Habe das zurücksetzen jetzt schon doppelt eingebaut, aber hilft auch nicht weiter.
Kann sich das Skript mal jemand ansehen und mir hoffentlich weiterhelfen?
/* debouncing, executes the function if there was no new event in $wait milliseconds @param func @param wait @param immediate (boolean) @returns {Function} */ function debounce(func, wait, immediate) { var timeout; return function() { var context = this, args = arguments; var later = function() { timeout = null; if (!immediate) func.apply(context, args); }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) func.apply(context, args); }; } on("hm-rega.0.27777"/*Klingelbild*/, debounce(function (obj){ if (obj.newState.val === true || obj.newState.val === "true") { if (getState("hm-rega.0.5886").val/*Anwesenheit*/ === true || getState("hm-rega.0.5886").val/*Anwesenheit*/ === "true") { var light1 = "hue.0.Philips_hue.Stehlampe."; var light2 = "hue.0.Philips_hue.Lightstrip_Couch."; var light3 = "hue.0.Philips_hue.Lightstrip_Sideboard."; var light4 = "hue.0.Philips_hue.Pummellampe."; var light5 = "hue.0.Philips_hue.Kugellampe."; var light6 = "hue.0.Philips_hue.Herzchenlampe."; var hue1 = getState(light1 + "hue").val; var bri1 = getState(light1 + "bri").val; var on1 = getState(light1 + "on").val; var b1 = getState(light1 + "b").val; var hue2 = getState(light2 + "hue").val; var bri2 = getState(light2 + "bri").val; var on2 = getState(light2 + "on").val; var b2 = getState(light2 + "b").val; var hue3 = getState(light3 + "hue").val; var bri3 = getState(light3 + "bri").val; var on3 = getState(light3 + "on").val; var b3 = getState(light3 + "b").val; var hue4 = getState(light4 + "hue").val; var bri4 = getState(light4 + "bri").val; var on4 = getState(light4 + "on").val; var b4 = getState(light4 + "b").val; var hue5 = getState(light5 + "hue").val; var bri5 = getState(light5 + "bri").val; var on5 = getState(light5 + "on").val; var b5 = getState(light5 + "b").val; var hue6 = getState(light6 + "hue").val; var bri6 = getState(light6 + "bri").val; var on6 = getState(light6 + "on").val; var b6 = getState(light6 + "b").val; for (var count = 0; count < 5; count++) { (function(count){ setTimeout(function () { if (count % 2 > 0) { setState(light1 +"bri", 254); setState(light1 +"hue", 43819); setState(light2 +"bri", 254); setState(light2 +"hue", 43819); setState(light3 +"bri", 254); setState(light3 +"hue", 43819); setState(light4 +"bri", 254); setState(light4 +"hue", 43819); setState(light5 +"bri", 50); setState(light5 +"hue", 43819); setState(light6 +"bri", 254); setState(light6 +"hue", 43819); } else { setState(light1 +"bri", 254); setState(light1 +"hue", 65504); setState(light2 +"bri", 254); setState(light2 +"hue", 65504); setState(light3 +"bri", 254); setState(light3 +"hue", 65504); setState(light4 +"bri", 254); setState(light4 +"hue", 65504); setState(light5 +"bri", 50); setState(light5 +"hue", 65504); setState(light6 +"bri", 254); setState(light6 +"hue", 65504); } }, count * 1500); }(count)); } count++; setTimeout(function () { //light1 = "hue.0.Philips_hue.Stehlampe."; //light2 = "hue.0.Philips_hue.Lightstrip_Couch."; //light3 = "hue.0.Philips_hue.Lightstrip_Sideboard."; //light4 = "hue.0.Philips_hue.Pummellampe."; //light5 = "hue.0.Philips_hue.Kugellampe."; //light6 = "hue.0.Philips_hue.Herzchenlampe."; //Alle rückgängig setState(light1 +"on", on1); setState(light1 +"bri", bri1); setState(light1 +"hue", hue1); setState(light1 +"b", b1); setState(light2 +"on", on2); setState(light2 +"bri", bri2); setState(light2 +"hue", hue2); setState(light2 +"b", b2); setState(light3 +"on", on3); setState(light3 +"bri", bri3); setState(light3 +"hue", hue3); setState(light3 +"b", b3); setState(light4 +"on", on4); setState(light4 +"bri", bri4); setState(light4 +"hue", hue4); setState(light4 +"b", b4); setState(light5 +"on", on5); setState(light5 +"bri", bri5); setState(light5 +"hue", hue5); setState(light5 +"b", b5); setState(light6 +"on", on6); setState(light6 +"bri", bri6); setState(light6 +"hue", hue6); setState(light6 +"b", b6); }, count * 1500); setTimeout(function () { //light1 = "hue.0.Philips_hue.Stehlampe."; //light2 = "hue.0.Philips_hue.Lightstrip_Couch."; //light3 = "hue.0.Philips_hue.Lightstrip_Sideboard."; //light4 = "hue.0.Philips_hue.Pummellampe."; //light5 = "hue.0.Philips_hue.Kugellampe."; //light6 = "hue.0.Philips_hue.Herzchenlampe."; //Alle rückgängig setState(light1 +"on", on1); setState(light1 +"bri", bri1); setState(light1 +"hue", hue1); setState(light1 +"b", b1); setState(light2 +"on", on2); setState(light2 +"bri", bri2); setState(light2 +"hue", hue2); setState(light2 +"b", b2); setState(light3 +"on", on3); setState(light3 +"bri", bri3); setState(light3 +"hue", hue3); setState(light3 +"b", b3); setState(light4 +"on", on4); setState(light4 +"bri", bri4); setState(light4 +"hue", hue4); setState(light4 +"b", b4); setState(light5 +"on", on5); setState(light5 +"bri", bri5); setState(light5 +"hue", hue5); setState(light5 +"b", b5); setState(light6 +"on", on6); setState(light6 +"bri", bri6); setState(light6 +"hue", hue6); setState(light6 +"b", b6); }, 2000); } } },5000, true));
Danke und Grüße
Alex
-
Hat niemand eine Idee? Ich habe heute nochmal etwas gespielt aber leider bin ich zu keiner neuen Erkenntnis gekommen…
Gruß Alex
-
Ich würde einfach mal vermuten das die hue bridge damit überfordert ist…
You can send commands to the lights too fast. If you stay roughly around 10 commands per second to the /lights resource as maximum you should be fine. For /groups commands you should keep to a maximum of 1 per second.
-
Hast du schon mal darüber Nachgedacht einfach die Lernt Funktion von Hue zu benutzen? Das kann soweit weiss jede Hue Lampe, entweder einmal Blinken oder mehrmals. Befehl, lselect oder select, muss in den Datenpunkt alert der jeweiligen Lampe oder Gruppe geschrieben werden.
Gesendet von Unterwegs
-
Ich würde einfach mal vermuten das die hue bridge damit überfordert ist…
You can send commands to the lights too fast. If you stay roughly around 10 commands per second to the /lights resource as maximum you should be fine. For /groups commands you should keep to a maximum of 1 per second. `
Guter Tip, aber ich denke das kann nicht das Problem sein, da ich ja am Anfang den aktuellen Status speichere und zum Schluss mit einer Verzögerung von einigen Sekunden erst wieder setze. Da dürfte dann genügend Luft zwischen den Anforderungen zur Bridge sein.
@Jey Cee:Hast du schon mal darüber Nachgedacht einfach die Lernt Funktion von Hue zu benutzen? Das kann soweit weiss jede Hue Lampe, entweder einmal Blinken oder mehrmals. Befehl, lselect oder select, muss in den Datenpunkt alert der jeweiligen Lampe oder Gruppe geschrieben werden.
Gesendet von Unterwegs `
Ja den Alert Datenpunkt hätte ich auch schon mal im Auge gehabt. Allerdings meine ich hat der nur die Lampe in ihrem aktuellen Status blinken lassen. Nicht aber wenn sie zu dem Zeitpunkt aus war.
Lselect / select sagt mir aber nichts.
Hast du ein Beispiel wie man das nutzen kann?
Gruß Alex
-
Der alert Datenpunkt kennt 3 Zustände: lselect (mehrmals Blinken), select (einmal Blinken) und none (eigentlich überflüssigfür iobroker).
Du Schreibst einfach den Befehl in den Datenpunkt und dann wird er ausgeführt. Ob die Lampe jetzt an sein muss oder nicht weiss ich nicht. Aber auf jedenfall mit den letzten Einstellungen.
Gesendet von Unterwegs
-
Ja, Lampen müssen vorher an sein…..dan blinken diese für 15 sek mit lselect
wenn sie aus sind, blinkt es nur 1 mal kurz
-
Aufgrund eurer Hilfen konnte ich das Skript jetzt umschreiben, so dass es nun seinen Zweck erfüllt
Ich schalte jetzt eine ganze Gruppe ein und setze die Farbe rot. Danach lasse ich mit lselect 15 Sekunden blinken.
Und danach schalte ich alle Lampen mit einem Zeitabstand von jeweils 1 Sekunde zurück in den Ursprungszustand.
Klappt sehr gut! Danke!
Hier noch das Skript:
! ````
/*
debouncing, executes the function if there was no new event in $wait milliseconds
@param func
@param wait
@param immediate (boolean)
@returns {Function}
*/
function debounce(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
}
! on("hm-rega.0.27777"/Klingelbild/, debounce(function (obj){
if (obj.newState.val === true || obj.newState.val === "true") {if (getState("hm-rega.0.5886").val/*Anwesenheit*/ === true || getState("hm-rega.0.5886").val/*Anwesenheit*/ === "true") { var light1 = "hue.0.Philips_hue.Stehlampe."; var light2 = "hue.0.Philips_hue.Lightstrip_Couch."; var light3 = "hue.0.Philips_hue.Lightstrip_Sideboard."; var light4 = "hue.0.Philips_hue.Pummellampe."; var light5 = "hue.0.Philips_hue.Kugellampe."; var light6 = "hue.0.Philips_hue.Herzchenlampe."; var light7 = "hue.0.Philips_hue.Iris."; var hue1 = getState(light1 + "hue").val; var bri1 = getState(light1 + "bri").val; var on1 = getState(light1 + "on").val; var hue2 = getState(light2 + "hue").val; var bri2 = getState(light2 + "bri").val; var on2 = getState(light2 + "on").val; var hue3 = getState(light3 + "hue").val; var bri3 = getState(light3 + "bri").val; var on3 = getState(light3 + "on").val; var hue4 = getState(light4 + "hue").val; var bri4 = getState(light4 + "bri").val; var on4 = getState(light4 + "on").val; var hue5 = getState(light5 + "hue").val; var bri5 = getState(light5 + "bri").val; var on5 = getState(light5 + "on").val; var hue6 = getState(light6 + "hue").val; var bri6 = getState(light6 + "bri").val; var on6 = getState(light6 + "on").val; var hue7 = getState(light7 + "hue").val; var bri7 = getState(light7 + "bri").val; var on7 = getState(light7 + "on").val; setState("hue.0.Philips_hue.Farbenspiel.bri"/*Philips_hue.Farbenspiel.bri*/, 254); setState("hue.0.Philips_hue.Farbenspiel.hue"/*Philips_hue.Farbenspiel.hue*/,65504); setState("hue.0.Philips_hue.Farbenspiel.alert"/*Philips_hue.Farbenspiel.alert*/,"lselect"); setTimeout(function () {
! //Alle rückgängig
setState(light1 +"on", on1);
setState(light1 +"bri", bri1);
setState(light1 +"hue", hue1);
//setState(light1 +"b", b1);
! }, 16000);
setTimeout(function () {
! //Alle rückgängig
setState(light2 +"on", on2);
setState(light2 +"bri", bri2);
setState(light2 +"hue", hue2);
//setState(light2 +"b", b2);
! }, 17000);
! setTimeout(function () {
! //Alle rückgängig
setState(light3 +"on", on3);
setState(light3 +"bri", bri3);
setState(light3 +"hue", hue3);
//setState(light3 +"b", b3);
! }, 18000);
! setTimeout(function () {
! //Alle rückgängig
setState(light4 +"on", on4);
setState(light4 +"bri", bri4);
setState(light4 +"hue", hue4);
//setState(light4 +"b", b4);
! }, 19000);
! setTimeout(function () {
! //Alle rückgängig
setState(light5 +"on", on5);
setState(light5 +"bri", bri5);
setState(light5 +"hue", hue5);
//setState(light5 +"b", b5);
! }, 20000);
! setTimeout(function () {
! //Alle rückgängig
setState(light6 +"on", on6);
setState(light6 +"bri", bri6);
setState(light6 +"hue", hue6);
//setState(light6 +"b", b6);
! }, 21000);
! setTimeout(function () {
! //Alle rückgängig
setState(light7 +"on", on7);
setState(light7 +"bri", bri7);
setState(light7 +"hue", hue7);
//setState(light7 +"b", b7);
! }, 22000);} }
},5000, true));
! ````
Beste Grüße