Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Skript für Klingelsignalisierung mit HUE

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Skript für Klingelsignalisierung mit HUE

    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      ceerix last edited by

      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

      1 Reply Last reply Reply Quote 0
      • C
        ceerix last edited by

        Hat niemand eine Idee? Ich habe heute nochmal etwas gespielt aber leider bin ich zu keiner neuen Erkenntnis gekommen…

        Gruß Alex

        1 Reply Last reply Reply Quote 0
        • cash
          cash Most Active last edited by

          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.

          1 Reply Last reply Reply Quote 0
          • Jey Cee
            Jey Cee Developer last edited by

            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

            1 Reply Last reply Reply Quote 0
            • C
              ceerix last edited by

              @cash:

              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

              1 Reply Last reply Reply Quote 0
              • Jey Cee
                Jey Cee Developer last edited by

                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

                1 Reply Last reply Reply Quote 0
                • M
                  mikiline last edited by

                  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

                  1 Reply Last reply Reply Quote 0
                  • C
                    ceerix last edited by

                    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

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    818
                    Online

                    31.7k
                    Users

                    79.8k
                    Topics

                    1.3m
                    Posts

                    4
                    8
                    950
                    Loading More Posts
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes
                    Reply
                    • Reply as topic
                    Log in to reply
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    The ioBroker Community 2014-2023
                    logo