Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Aqara Cube - Funktionstabelle - deConz

    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

    Aqara Cube - Funktionstabelle - deConz

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

      Hat schon jemand eine Funktionstabelle für den Aqara Cube gefunden? Also so eine Tabelle wo die deConz Codes für alle Dreh/Kipp/Klopf und was weiß ich noch Bewegungen drin steht?

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

        @JB_Sullivan schau mal hier rein.

        JB_Sullivan 1 Reply Last reply Reply Quote 0
        • JB_Sullivan
          JB_Sullivan last edited by

          So etwas habe ich gesucht - Vielen Dank

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

            @Jey-Cee

            Offensichtlich kennst du dich ja mit dem Cube ebenfalls ganz gut aus.

            Ich wollte gerne mit dem Cube meine Gartenbeleuchtung steuern. Dazu habe ich mir eine Logik Tabelle erstellt bei welcher Bewegung was passieren soll.

            scan0226.pdf

            Nun gab es ja hier im Forum irgend wann einmal dieses Java Skript zum steuern von Alexa via Cube.

            Ich dachte das ich dieses Skript dafür missbrauchen kann um Schalthandlungen durchzuführen. Leider kenne ich mich in JavaSkript gar nicht aus.

            Eigentlich wollte ich alles so einzeln schalten wie im PDF.

            Kannst du mir ggf. einen Hinweis geben, wie ich das anstellen muss? In dem Skript habe ich zwei Positionen geändert. Das schalten und abschalten funktioniert - IM BLOCK - aber die Schaltposition des Würfels ist mehr ein Zufallsprodukt.

            Wie muss ich das Skript verändern, damit ich alles einzeln schalten und vor allen Dingen auch den richtigen Seiten zuweisen kann? Aus der Formel werde ich nicht schlau, denn irgendwie muss ich ja auf die 1000er Werte von den deConz Datenpunkten kommen.

            /*
            Aqara Cube Skript
            Events: 
            {1}
            90 Grad
            180 Grad
            schieben
            hochwerfen & auffangen
            schütteln
            Taptap
            drehen 
            {1}
            */
             
            var CubeS = "deconz.0.Sensors.23.buttonevent", // Cube Switch
            	CubeR = "deconz.0.Sensors.24.buttonevent", // Cube Rotate
                switchVal,
                degree,
                elements = [],
                elementsInt= [],
                debug;
               
               
            // Sleep Funktion Experimental
            function sleep(milliseconds) {
            	var start = new Date().getTime();
            	for (var i = 0; i < 1e7; i++) {
            		if ((new Date().getTime() - start) > milliseconds){
            			break;
            		}
            	}
            }
             
             debug = 0; // DEBUG MODE: 0 = Aus, 1 = Aktionen anzeigen, 2 = Alles anzeigen
             
             
            on({id: CubeS, change: "any"}, function (obj) { 
             
                 
                 
                // Objekt in String wandeln, doppel Null entfernen und ergebnisse in Array elements schreiben.
            	switchVal = JSON.stringify(getState(CubeS).val);
            	elements = switchVal.split("00");
            	// Elemente des Arrays in Integerwerte konvertieren
            	for(var i=0; i<elements.length;i++) elementsInt[i] = parseInt(elements[i], 10);
                 
                if (debug >= 2) { 
            	console.log("Original: " + getState(CubeS).val + " Element 1: " + elements[0] + " Element 2: " + elements[1]);
                }
            	var total = elementsInt[0] + elementsInt [1];
                if (debug >= 2) { 
            	console.log("Total: " + total);
                }
             
            	if (( elementsInt[0] + elementsInt [1] == 7 ) && ( elementsInt [1] !== 0 )) {
                   if (debug ==  1) { 
            		console.log("180 Grad" + " Seite: " + elementsInt[0] + " liegt oben.");
                   }
            		setState("sonoff.0.Garten_4CH_No2.POWER1"/*Wasserfall*/, true);
            		setState("sonoff.0.Garten_4CH_No2.POWER2"/*Glassteine*/, true);
                    setState("sonoff.0.Garten_4CH_No2.POWER3"/*Pflanzkoerbe*/, true);
                    setState("sonoff.0.Garten_4CH_No1.POWER1"/*Terrasse*/, true);
                    setState("sonoff.0.Garten_4CH_No1.POWER2"/*Pool*/, true);
                    setState("sonoff.0.Garten_4CH_No1.POWER3"/*50Prozent*/, true);
                    setState("sonoff.0.Garten_4CH_No1.POWER4"/*100Prozent*/, true);
                   // sleep(550);
                   
            	} else if ( elementsInt[0] + elementsInt [1] == 14) {
                   if (debug ==  1) { 
            		console.log("Geschüttelt");
                   }
            		setState("alexa2.0.Echo-Devices.G090U61091855EMG.Player.controlPause"/*Pause*/, true);
            	}
            	else if ( elementsInt[0] + elementsInt [1] == 15) {
            		sleep(0);
                    if (debug ==  1) { 
            		console.log("Geworfen");
                    }
            	if (getState("alexa2.0.Echo-Devices.G090U61091855EMG.Player.controlPlay"/*Main Zone Power State*/).val === false) {
                   
            		setState("alexa2.0.Echo-Devices.G090U61091855EMG.Player.controlPlay"/*Main Zone Power State*/,true);
                   
                   
            	}
            	else {
                       
            		setState("alexa2.0.Echo-Devices.G090U61091855EMG.online"/*Main Zone Power State*/,false);
            	}
                   
            }
            else if ( elementsInt[0] == elementsInt [1] )  {
                   if (debug ==  1) { 
            	console.log("TapTap" + " Seite: " + elementsInt[0] + " liegt oben.");
                   }
            	setState("alexa2.0.Echo-Devices.G090U61091855EMG.Player.controlPause"/*Play/Pause*/, true);
                   
                   
            }
            else if (( elementsInt [1] === 0 ) && ( elementsInt [0] <= 6 )) {
                   if (debug ==  1) { 
            	console.log("Schieben" + " Seite: " + elementsInt[0] + " liegt oben." );
                   }
                   setState("sonoff.0.Garten_4CH_No2.POWER1"/*Wasserfall*/, false);
            		setState("sonoff.0.Garten_4CH_No2.POWER2"/*Glassteine*/, false);
                    setState("sonoff.0.Garten_4CH_No2.POWER3"/*Pflanzkoerbe*/, false);
                    setState("sonoff.0.Garten_4CH_No1.POWER1"/*Terrasse*/, false);
                    setState("sonoff.0.Garten_4CH_No1.POWER2"/*Pool*/, false);
                    setState("sonoff.0.Garten_4CH_No1.POWER3"/*50Prozent*/, false);
                    setState("sonoff.0.Garten_4CH_No1.POWER4"/*100Prozent*/, false);
            }
            else if (( elementsInt [1] === 0 ) && ( elementsInt [0] <= 7 )) {
                if (debug ==  1) { 
                console.log("Cube Wakeup!");
                }
            }
            else if ( elementsInt [0] <= 6 ) {
                   if (debug ==  1) { 
            	console.log("90 Grad" + " Seite: " + elementsInt[0] + " liegt oben.");
                   }
            	setState("alexa2.0.Echo-Devices.G090U61091855EMG.Player.controlNext"/*Next*/, true);
                   
            }
               
               
             
                 
            });
             
            on({id: CubeR, change: "ne"}, function (obj) { // nur bei änderung Triggern "ne" not equal
                    
                    
            var rotationVal = JSON.stringify(getState(CubeR).val); // Objekt in String konvertieren
             
               
                     
            // Schauen ob rotationVal negativ/positiv ist und nur die ersten beiden bzw. drei ziffern verwenden.
            if ( rotationVal.substr(0,1) == "-" ) {
                        
            	if (rotationVal.length == 6 ) {
            		degree = rotationVal.substr(0,4);
                            
            	}
            	else {
            		degree = rotationVal.substr(0,3);
                        
            	}
                        
            }
            else {
                        
            	if (rotationVal.length == 5 ) {
            		degree = rotationVal.substr(0,3);
                            
            	}
            	else {
            		degree = rotationVal.substr(0,2);
            	}
                        
                  
            }
                    
                    
                   if (debug ==  1) {  
            console.log("gedreht: " + degree);
                   }
            // Volume auslesen
            var aMainVol = parseInt(getState("alexa2.0.Echo-Devices.G090U61091855EMG.Player.volume"/*Main Volume*/).val);
                    
            // Neues Volumen errechnen
            if (debug >= 2) { 
            console.log("Ergebnis: " + parseInt(degree) / 5);
            }
            if (parseInt(degree)  > 60) {
                if (debug >= 2) {
                console.log("Vol unterschied zu hoch, angepasst!");
                }
                degree = 60;
               
                
            }
             
            var newMainVol = (degree / 5) + aMainVol;
            if (debug >= 2) {
            console.log("Vol unterschied: " + (parseInt(degree) / 5));
            console.log("mainvol: " + aMainVol + " newMainVol: " + newMainVol);
            }
            // Neues Volumen an EchoDot senden
            setState("alexa2.0.Echo-Devices.G090U61091855EMG.Player.volume", newMainVol);
                    
            });
            
            Jey Cee 1 Reply Last reply Reply Quote 0
            • Jey Cee
              Jey Cee Developer @JB_Sullivan last edited by

              @JB_Sullivan sagte in Aqara Cube - Funktionstabelle - deConz:

              Offensichtlich kennst du dich ja mit dem Cube ebenfalls ganz gut aus.

              Eigentlich gar nicht.

              Ich hab jetzt nir kurz über das skript geschaut, aber sieht viel zu Kompliziert aus. Warum man da irgendwas berechnen soll ist mir vollkommen unklar, die Zahlen sind fix.

              Mach es dir einfach:

              on({id: idButtonEvents, change: 'any'}, 
                  (obj) => {
                        switch(obj.state.val){
                             case 1001:
                                setState(licht1, true);
                             break;
                             case 2001:
                                 //eine andere funktion
                             break;
                               //usw.
                         }
                     }
              }
              

              Das soll nur ein Schema Darstellen und der code ist am Smartphone entstanden.

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

                @Jey-Cee

                Danke für den Hinweis. In der Zwischenzeit habe ich die Systematik hinter dem Code wohl verstanden und durch stumpfes Drag&Drop und Änderung der Datenpunkte wohl alles so eingetragen wie es für meine Wunschfunktion nötig ist.

                Allerdings habe ich in Zeile 200 wohl einen Klammerfehler rein gebastelt. Da ich nicht weiß wie die Klammersetzung in JavaSkript aussehen muss, tue ich mich extrem schwer den Ursprung des Fehler zu finden.

                Könntest du bitte nochmal einen Blick drauf werfen?

                /*
                Aqara Cube Skript
                Events: 
                {1}
                90 Grad
                180 Grad
                schieben
                hochwerfen & auffangen
                schütteln
                Taptap
                drehen 
                {1}
                */
                 
                var CubeS = "deconz.0.Sensors.23.buttonevent", // Cube Switch
                	CubeR = "deconz.0.Sensors.24.buttonevent", // Cube Rotate
                    switchVal,
                    degree,
                    elements = [],
                    elementsInt= [],
                    debug;
                   
                   
                // Sleep Funktion Experimental
                function sleep(milliseconds) {
                	var start = new Date().getTime();
                	for (var i = 0; i < 1e7; i++) {
                		if ((new Date().getTime() - start) > milliseconds){
                			break;
                		}
                	}
                }
                 
                 debug = 2; // DEBUG MODE: 0 = Aus, 1 = Aktionen anzeigen, 2 = Alles anzeigen
                 
                 
                on({id: CubeS, change: "any"}, function (obj) { 
                 
                     
                     
                    // Objekt in String wandeln, doppel Null entfernen und ergebnisse in Array elements schreiben.
                	switchVal = JSON.stringify(getState(CubeS).val);
                	elements = switchVal.split("00");
                	// Elemente des Arrays in Integerwerte konvertieren
                	for(var i=0; i<elements.length;i++) elementsInt[i] = parseInt(elements[i], 10);
                     
                    if (debug >= 2) { 
                	console.log("Original: " + getState(CubeS).val + " Element 1: " + elements[0] + " Element 2: " + elements[1]);
                    }
                	var total = elementsInt[0] + elementsInt [1];
                    if (debug >= 2) { 
                	console.log("Total: " + total);
                    }
                 
                	//if (( elementsInt[0] + elementsInt [1] == 7 ) && ( elementsInt [1] !== 0 )) {
                      //if (debug ==  1) { 
                		//console.log("180 Grad" + " Seite: " + elementsInt[0] + " liegt oben.");
                       //}
                		//setState("deconz.0.Lights.1.on"/*Schreibtischlampe*/, true);
                        //}
                		
                    //sleep(550);
                
                     //Geschüttelt
                  
                    else if ( elementsInt[0] + elementsInt [1] == 14) {
                       if (debug ==  1) { 
                		console.log("Geschüttelt");
                       }
                		setState("alexa2.0.Smart-Home-Devices.3d19d4d8-8a84-4bbf-bc28-25e56f2a833a.powerState"/*Alles AUS*/, true);
                }    
                
                    //Geworfen 
                
                
                    else if ( elementsInt[0] + elementsInt [1] == 15) {
                		sleep(0);
                        if (debug ==  1) { 
                		console.log("Geworfen");
                        }
                	    setState("sonoff.0.Garten_S55_3.POWER"/*SteckdoseOST*/, false);
                }
                
                //TapTap       
                
                else if ( elementsInt[0] + elementsInt [1] == 4)  {
                       if (debug ==  1) { 
                	console.log("TapTap" + " Seite: " + elementsInt[0] + " liegt oben.");
                       }
                	    setState("sonoff.0.Garten_4CH_No2.POWER1"/*Wasserfall*/, false);
                        setState("sonoff.0.Garten_4CH_No2.POWER2"/*Glassteine*/, false);
                }
                else if ( elementsInt[0] + elementsInt [1] == 6)  {
                       if (debug ==  1) { 
                	console.log("TapTap" + " Seite: " + elementsInt[0] + " liegt oben.");
                       }
                	    setState("sonoff.0.Garten_4CH_No1.POWER2"/*GabionePool*/, false);
                        setState("sonoff.0.Garten_S55_1.POWER"/*PoolSteckdose*/, false);
                }
                else if ( elementsInt[0] + elementsInt [1] == 8)  {
                       if (debug ==  1) { 
                	console.log("TapTap" + " Seite: " + elementsInt[0] + " liegt oben.");
                       }
                	    setState("sonoff.0.Garten_4CH_No2.POWER3"/*Pflanzkoerbe*/, false);
                        setState("deconz.0.Lights.1.on"/*SteckdosePflanzkoerbe*/, false);
                } 
                else if ( elementsInt[0] + elementsInt [1] == 10)  {
                       if (debug ==  1) { 
                	console.log("TapTap" + " Seite: " + elementsInt[0] + " liegt oben.");
                       }
                	    setState("sonoff.0.Garten_4CH_No1.POWER3"/*50Prozent*/, false);
                }
                else if ( elementsInt[0] + elementsInt [1] == 12)  {
                       if (debug ==  1) { 
                	console.log("TapTap" + " Seite: " + elementsInt[0] + " liegt oben.");
                       }
                	    setState("sonoff.0.Garten_4CH_No1.POWER4"/*100Prozent*/, false);
                }
                else if ( elementsInt[0] + elementsInt [1] == 2)  {
                       if (debug ==  1) { 
                	console.log("TapTap" + " Seite: " + elementsInt[0] + " liegt oben.");
                       }
                       setState("sonoff.0.Garten_4CH_No1.POWER1"/*Terrasse*/, true);
                }
                
                //Schieben      
                
                else if (( elementsInt [1] === 0 ) && ( elementsInt [0] <= 2 )) {
                       if (debug ==  1) { 
                	console.log("Schieben" + " Seite: " + elementsInt[0] + " liegt oben." );
                       }
                       setState("sonoff.0.Garten_4CH_No2.POWER2"/*Glassteine*/, true);
                }
                else if (( elementsInt [1] === 0 ) && ( elementsInt [0] <= 3 )) {
                       if (debug ==  1) { 
                	console.log("Schieben" + " Seite: " + elementsInt[0] + " liegt oben." );
                       }
                       setState("sonoff.0.Garten_S55_1.POWER"/*PoolSteckdose*/, true);
                      
                }
                else if (( elementsInt [1] === 0 ) && ( elementsInt [0] <= 4 )) {
                       if (debug ==  1) { 
                	console.log("Schieben" + " Seite: " + elementsInt[0] + " liegt oben." );
                       }
                       setState("deconz.0.Lights.1.on"/*SteckdosePflanzkoerbe*/, true);
                }
                else if (( elementsInt [1] === 0 ) && ( elementsInt [0] <= 6 )) {
                       if (debug ==  1) { 
                	console.log("Schieben" + " Seite: " + elementsInt[0] + " liegt oben." );
                       }
                       setState("sonoff.0.Garten_S55_3.POWER"/*SteckdoseOST*/, true);
                }
                
                //Aufwachen
                
                else if (( elementsInt [1] === 0 ) && ( elementsInt [0] <= 7 )) {
                    if (debug ==  1) { 
                    console.log("Cube Wakeup!");
                    }
                
                //90Grad
                
                
                else if ( elementsInt [0] = 4 ) {
                       if (debug ==  1) { 
                	console.log("90 Grad" + " Seite: " + elementsInt[0] + " liegt oben.");
                       }
                	    setState("sonoff.0.Garten_4CH_No1.POWER2"/*GabionePool*/, true);
                       
                }   
                else if ( elementsInt [0] = 5 ) {
                       if (debug ==  1) { 
                	console.log("90 Grad" + " Seite: " + elementsInt[0] + " liegt oben.");
                       }
                	    setState("sonoff.0.Garten_4CH_No2.POWER3"/*Pflanzkoerbe*/, true);
                       
                }   
                else if ( elementsInt [0] = 6 ) {
                       if (debug ==  1) { 
                	console.log("90 Grad" + " Seite: " + elementsInt[0] + " liegt oben.");
                       }
                	    setState("sonoff.0.Garten_4CH_No1.POWER3"/*50Prozent*/, true);
                       
                } 
                else if ( elementsInt [0] = 11 ) {
                       if (debug ==  1) { 
                	console.log("90 Grad" + " Seite: " + elementsInt[0] + " liegt oben.");
                       }
                	    setState("sonoff.0.Garten_4CH_No1.POWER4"/*100Prozent*/, true);
                       
                }
                else if ( elementsInt [0] = 2 ) {
                       if (debug ==  1) { 
                	console.log("90 Grad" + " Seite: " + elementsInt[0] + " liegt oben.");
                       }
                	    setState("sonoff.0.Garten_4CH_No1.POWER1"/*Terrasse*/, true);
                       
                }
                
                });
                 
                on({id: CubeR, change: "ne"}, function (obj) { // nur bei änderung Triggern "ne" not equal
                        
                        
                var rotationVal = JSON.stringify(getState(CubeR).val); // Objekt in String konvertieren
                 
                   
                         
                // Schauen ob rotationVal negativ/positiv ist und nur die ersten beiden bzw. drei ziffern verwenden.
                if ( rotationVal.substr(0,1) == "-" ) {
                            
                	if (rotationVal.length == 6 ) {
                		degree = rotationVal.substr(0,4);
                                
                	}
                	else {
                		degree = rotationVal.substr(0,3);
                            
                	}
                            
                }
                else {
                            
                	if (rotationVal.length == 5 ) {
                		degree = rotationVal.substr(0,3);
                                
                	}
                	else {
                		degree = rotationVal.substr(0,2);
                	}
                            
                      
                }
                        
                        
                       if (debug ==  1) {  
                console.log("gedreht: " + degree);
                       }
                // Volume auslesen
                var aMainVol = parseInt(getState("alexa2.0.Echo-Devices.G090U61091855EMG.Player.volume"/*Main Volume*/).val);
                        
                // Neues Volumen errechnen
                if (debug >= 2) { 
                console.log("Ergebnis: " + parseInt(degree) / 5);
                }
                if (parseInt(degree)  > 60) {
                    if (debug >= 2) {
                    console.log("Vol unterschied zu hoch, angepasst!");
                    }
                    degree = 60;
                   
                    
                }
                 
                var newMainVol = (degree / 5) + aMainVol;
                if (debug >= 2) {
                console.log("Vol unterschied: " + (parseInt(degree) / 5));
                console.log("mainvol: " + aMainVol + " newMainVol: " + newMainVol);
                }
                // Neues Volumen an EchoDot senden
                setState("alexa2.0.Echo-Devices.G090U61091855EMG.Player.volume", newMainVol);
                        
                });
                
                
                Jey Cee 1 Reply Last reply Reply Quote 0
                • Jey Cee
                  Jey Cee Developer @JB_Sullivan last edited by

                  @JB_Sullivan sagte in Aqara Cube - Funktionstabelle - deConz:

                  Allerdings habe ich in Zeile 200 wohl einen Klammerfehler rein gebastelt.

                  Füg eine } nach

                  setState("sonoff.0.Garten_4CH_No1.POWER1"/*Terrasse*/, true);
                  

                  ein.

                  1 Reply Last reply Reply Quote 0
                  • JB_Sullivan
                    JB_Sullivan last edited by JB_Sullivan

                    Vielen Vielen Dank - tatsächlich jetzt geht es 👍 👍 👍 👍
                    Kaum macht man es richtig funktioniert es 😊

                    Edit: Hmm zumindest im Hinblick auf den Fehler der beim komplieren wegen der fehlenden Klammer aufgetreten ist.

                    Obwohl die Ergebnisse stimmig sind. Schaltet das Skript die States nicht um - muss ich noch mal ein bisschen suchen und mit dem funktionierenden Ursprungsskript quervergleichen.

                    Ist bestimmt auch wieder nur irgend eine Kleinigkeit.

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

                    Support us

                    ioBroker
                    Community Adapters
                    Donate
                    FAQ Cloud / IOT
                    HowTo: Node.js-Update
                    HowTo: Backup/Restore
                    Downloads
                    BLOG

                    686
                    Online

                    31.8k
                    Users

                    79.9k
                    Topics

                    1.3m
                    Posts

                    aqara cube
                    2
                    8
                    1649
                    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