NEWS
Aqara Cube - Funktionstabelle - deConz
-
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?
-
@JB_Sullivan schau mal hier rein.
-
So etwas habe ich gesucht - Vielen Dank
-
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.
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); });
-
@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.
-
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); });
-
@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.
-
Vielen Vielen Dank - tatsächlich jetzt geht es
Kaum macht man es richtig funktioniert esEdit: 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.