Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Xiaomi Cube Blockly Skripte für Dimmer

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Xiaomi Cube Blockly Skripte für Dimmer

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

      Hallo Leute, habe heute einen Xiaomi Cube bekommen und natürlich direkt getestet.

      Nun zu meinem Problem:

      Ich wollte über die Rotation Funktion die Lichter im Wohnzimmer Dimmen. (nach links drehen - Dunkler - nach rechts drehen - Heller)

      Es handelt sich um mehrere Tradfri Leuchtmittel in verschiedenen Lampen.

      16994_unbenannt7.jpg

      Dies funktioniert auch eigentlich ganz gut. Nur ist mir aufgefallen wenn z.b. eine Leuchte komplett ausgeschaltet ist, wird diese durch das dimmen automatisch eingeschaltet.

      Jetzt wäre meine Frage, wie ich das Skript umstellen muss, dass dies nicht geschieht.

      Im Prinzip, prüfe ob Lampe an wahr - dann dimme - wenn Lampe an unwahr - dann mache nichts. Wenn sowas möglich ist. Ich bekomme es aber leider nicht hin.

      Vielen DANK im Vorraus.

      1 Reply Last reply Reply Quote 0
      • X
        xbow42 last edited by

        ich denke das wird du nicht lösen können in dem du den Brightness-datenpunkt direkt beschreibst da der Wert zu Lampe gesendet wird und die Lampe eben mit Licht an reagiert.

        Idee wäre ein zusätzlicher Datenpunt "Brightness_preset" den du mit deinem Würfel veränderst.

        Fall Objekt [Rotation]
        -... "Brightness_preset"<- neuer drehwinkel
        
        Falls Objekt [ "Brightness_preset"]
        -wurde geändert
        --Falls Lampe_Power=wahr
            mache SetObjekt"Brightness" auf Wert von  "Brightness_preset" 
        
        //und noch ein
        Falls Objekt [ "Lampe_power"]
        -ist wahr
          SetObjekt"Brightness" auf wert von  "Brightness_preset" 
        
        

        könnte klappen, muss aber nicht 😉

        Vermutlich wird die Lampe beim Einschalten erst mal auf die Helligkeit gehen die sie noch in der Birne gespeichert hat und dann auf den neuen Wert dimmen.

        Mögliche Fehlerquelle :arrow:

        iobroker sendet power_on->Lampe

        iobroker erkennt "Lampe_power"=true und setzt neue Helligkeit

        Lampe erkennt das on signal und schaltet ein mit alter helligkeit und quittiert den wert -> iobroker

        iobroker objekt "brightness" hat wieder den alten Wert aus der Lampe.

        dazu noch delay von WLAN/CLOUD/Zigbee 😢 also nicht ganz einfach das ganze…

        Was ich mir auch schwierig vorstelle, wie stellst du mit drehen auf zb. 20% ein wenn die Lampe aus ist. Alexa sagt "ich habe Ikea-birne auf 20% voreingestellt" oder Anzeige in VIS.

        1 Reply Last reply Reply Quote 0
        • W
          WilliamDalton last edited by

          Servus,

          ich habe gestern abend so was ähnliches gebastelt, bin dann nur an Blockly gescheitert und auf JavaScript gewechselt.

          Vielleicht hilft dir das hier ja weiter:

          var tempBrightness;
          
          on({id: "zigbee.0.00158d00029a7618.rotate_left"/*Rotate left event*/, val: true}, function (obj) {
            var value = obj.state.val;
            var oldValue = obj.oldState.val;  
            changeBrightness(-10)
          });
          
          on({id: "zigbee.0.00158d00029a7618.rotate_right"/*Rotate right event*/, val: true}, function (obj) {
            var value = obj.state.val;
            var oldValue = obj.oldState.val;
            changeBrightness(10);
          
          });
          
          function changeBrightness(i) {
          
          // getState ungetestet :-)
            if(getState('zigbee.0.7cb03eaa00add844.state').val === false )
            {
                return;
            }
          
            tempBrightness = parseInt(getState('zigbee.0.7cb03eaa00add844.brightness').val);
          
            console.log('tempBrightness:' + tempBrightness);
            tempBrightness =tempBrightness + i;
            setState("zigbee.0.7cb03eaa00add844.brightness"/*Brightness*/, tempBrightness);  
          }
          
          

          Die Erweiterung, dass der Status der Leuchte ausgelesen wird und ggf. die Methode verlassen wird hab ich grad nur blind gemacht, sollte vom Prinzip her aber passen. Außerdem steuere ich immer mit +/- 10 Prozent, werde mir das mit dem RotationAngle mal abschauen 😉

          1 Reply Last reply Reply Quote 0
          • R
            Rocket85 last edited by

            @xbow42:

            ich denke das wird du nicht lösen können in dem du den Brightness-datenpunkt direkt beschreibst da der Wert zu Lampe gesendet wird und die Lampe eben mit Licht an reagiert.

            Idee wäre ein zusätzlicher Datenpunt "Brightness_preset" den du mit deinem Würfel veränderst.

            Fall Objekt [Rotation]
            -... "Brightness_preset"<- neuer drehwinkel
            
            Falls Objekt [ "Brightness_preset"]
            -wurde geändert
            --Falls Lampe_Power=wahr
                mache SetObjekt"Brightness" auf Wert von  "Brightness_preset" 
            
            //und noch ein
            Falls Objekt [ "Lampe_power"]
            -ist wahr
              SetObjekt"Brightness" auf wert von  "Brightness_preset" 
            
            

            könnte klappen, muss aber nicht 😉

            Vermutlich wird die Lampe beim Einschalten erst mal auf die Helligkeit gehen die sie noch in der Birne gespeichert hat und dann auf den neuen Wert dimmen.

            Mögliche Fehlerquelle :arrow:

            iobroker sendet power_on->Lampe

            iobroker erkennt "Lampe_power"=true und setzt neue Helligkeit

            Lampe erkennt das on signal und schaltet ein mit alter helligkeit und quittiert den wert -> iobroker

            iobroker objekt "brightness" hat wieder den alten Wert aus der Lampe.

            dazu noch delay von WLAN/CLOUD/Zigbee 😢 also nicht ganz einfach das ganze…

            Was ich mir auch schwierig vorstelle, wie stellst du mit drehen auf zb. 20% ein wenn die Lampe aus ist. Alexa sagt "ich habe Ikea-birne auf 20% voreingestellt" oder Anzeige in VIS. `

            Na ich dachte mir schon das es nicht ganz so einfach werden wird. Ich teste mal…VIELEN DANK!

            1 Reply Last reply Reply Quote 0
            • R
              Rocket85 last edited by

              @WilliamDalton:

              Servus,

              ich habe gestern abend so was ähnliches gebastelt, bin dann nur an Blockly gescheitert und auf JavaScript gewechselt.

              Vielleicht hilft dir das hier ja weiter:

              var tempBrightness;
              
              on({id: "zigbee.0.00158d00029a7618.rotate_left"/*Rotate left event*/, val: true}, function (obj) {
                var value = obj.state.val;
                var oldValue = obj.oldState.val;  
                changeBrightness(-10)
              });
              
              on({id: "zigbee.0.00158d00029a7618.rotate_right"/*Rotate right event*/, val: true}, function (obj) {
                var value = obj.state.val;
                var oldValue = obj.oldState.val;
                changeBrightness(10);
                
              });
              
              function changeBrightness(i) {
              
              // getState ungetestet :-)
                if(getState('zigbee.0.7cb03eaa00add844.state').val === false )
                {
                    return;
                }
              
                tempBrightness = parseInt(getState('zigbee.0.7cb03eaa00add844.brightness').val);
              
                console.log('tempBrightness:' + tempBrightness);
                tempBrightness =tempBrightness + i;
                setState("zigbee.0.7cb03eaa00add844.brightness"/*Brightness*/, tempBrightness);  
              }
              
              

              Die Erweiterung, dass der Status der Leuchte ausgelesen wird und ggf. die Methode verlassen wird hab ich grad nur blind gemacht, sollte vom Prinzip her aber passen. Außerdem steuere ich immer mit +/- 10 Prozent, werde mir das mit dem RotationAngle mal abschauen 😉 `

              Hey, super Vielen Dank auch an dich, leider bin ich beim Thema JavaScript genau gesagt ein Vollblut Anfänger. Wie muss ich denn jetzt weiter verfahren 😞

              1 Reply Last reply Reply Quote 0
              • X
                xbow42 last edited by

                WilliamDalton: so wie ich das verstanden habe möchte er den Dimmerwert auch ändern wenn die Lampe aus ist & aus bleiben soll dabei. Du änderts den Wert auch direkt und die Lampe leuchtet entsprechend. korrekt?

                Rocker85: Hast du das mal nach meinem Vorschlag zusammengeklickt mit Blockly und probiert? Wenn ja was passiert?

                1 Reply Last reply Reply Quote 0
                • W
                  WilliamDalton last edited by

                  Servus,

                  ich hab mal ein bissel was gebastelt. Bin auch noch neu im ioBroker, manche Sachen könnten vielleicht eleganter gehen, ein bisschen wackelig ist es vielleicht auch, aber so tut es erst mal 😉

                  Den Dimmwert bei ausgeschalteter Lampe ändern habe ich nicht hin bekommen bzw. geht meiner Erfahrung nach nicht. Testweise hab ich versucht, den State vor dem ändern des Dimmwerts neu zu setzen. Dann flackert die Lampe aber auch, finde ich nicht so doll die Lösung…

                  Die Funktion "Wenn die Lampe aus ist, soll sie auch aus bleiben" hab ich implementiert, wenn das nicht gewollt ist kann man es auch auskommentieren.

                  Die Werte die der Cube liefert wenn der Winkel geändert wurde erschließen sich mir nicht wirklich. Ganze Drehung mach in Summe 250 Grad, halbe 150, aber nicht wirklich gut reproduzierbar. Ich hab daher nen Faktor mit rein gebracht, an dem kann man spielen...

                  Dann hab ich noch etwas aufgeräumt und die ObjektID´s nach oben gezogen, dann lässt es sich besser anpassen.

                  > Hey, super Vielen Dank auch an dich, leider bin ich beim Thema JavaScript genau gesagt ein Vollblut Anfänger. Wie muss ich denn jetzt weiter verfahren :-(
                  Einfach ein neues Skript erstellen und im PopUp JavaScript wählen. Dann den Code rein kopieren und oben die ersten beiden Ids auf deine Gegebenheiten anpassen. Welche das sind findest du im Objektbrowser raus

                  
                  var idCube = 'zigbee.0.00158d00029a7618';
                  var idLamp = 'zigbee.0.7cb03eaa00add844';
                  var angleFactor = 0.3; // Steurt das Verhältnis von Drehungwinkel und resultierender Helligkeitsveränderung
                  
                  on({id: idCube + ".rotate_left"/*Rotate left event*/, val: true}, function (obj) {
                    var value = obj.state.val;
                    var oldValue = obj.oldState.val;
                  
                    var change = getAngle();
                  
                    changeBrithness(change);
                  });
                  
                  on({id: idCube +".rotate_right"/*Rotate right event*/, val: true}, function (obj) {
                    var value = obj.state.val;
                    var oldValue = obj.oldState.val;
                  
                    var change = getAngle();
                  
                    changeBrithness(change);
                  
                  });
                  
                  function getAngle(){
                  
                      var tempAngle = parseFloat( getState(idCube +  '.rotate_angle').val );
                  
                      tempAngle = Math.round(tempAngle * angleFactor,0);
                      console.log('tempAngle:' + tempAngle);
                      return parseInt(tempAngle);
                  }
                  
                  function changeBrithness(i) {
                  
                    var tempBrightness = parseInt(getState(idLamp + '.brightness').val);
                    var tempState = getState(idLamp + '.state').val;
                  
                    console.log('tempBrightness:' + tempBrightness);
                    console.log('tempState:' +tempState);
                  
                    if(tempState === false)
                    {
                        console.log('Lampe war aus, dann bleibts aus...');
                        return;
                    }
                  
                    if (isNaN(tempBrightness)) tempBrightness = 0;
                    tempBrightness = tempBrightness + i;
                    if(tempBrightness > 100) tempBrightness = 100;
                  
                    setState(idLamp + ".brightness"/*Brightness*/, tempBrightness);
                    //setState(idLamp + ".state", tempState);
                  }
                  
                  
                  1 Reply Last reply Reply Quote 0
                  • R
                    Rocket85 last edited by

                    Vielen DANK an alle für die tollen Tipps.

                    Wie folgt konnte ich das Problem nun lösen.

                    16994_unbenannt.jpg

                    Ich musste erst mal jeden einzelne Lampe ansprechen und nicht die Wohnzimmergruppe. Desweiteren wurde noch ein UND hinzugefügt in dem der Power State abgefragt wurde.

                    Hier nochmals vielen DANK an Myzer@AT

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

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    945
                    Online

                    31.7k
                    Users

                    79.7k
                    Topics

                    1.3m
                    Posts

                    3
                    8
                    1410
                    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