Node-RED - Utilisation du Cube Aqara (toutes les fonctions) sans passerelle Xiaomi avec node red

Utilisation du Cube Aqara sans passerelle Xiaomi

Pré requis :
Un cube
Clef Deconz Conbee II ou autre clef prenant en charge le protocole zigbee
installer Node Red
Du temps pour lire ce tuto ^^

  1. Préparation :
    Après que vous l’ayez appareillé dans l’interface Phoscon de votre clef Deconz Conbee II (comme un switch classique) :

image

Vous le retrouvez ensuite dans vos intégrations :
image

Renommez-le avec un nom sympa :
image

  1. Identification des actions
    Il s’agit d’un cube, d’un dès, nous allons donc identifier chacun des mouvements de celui-ci, pour ce faire, nous allons d’abord utiliser un schéma du cube et écouter chaque évènement.

image

Je nomme les faces de cette manière (les amateurs de rubiks cube ne seront pas dépaysés !)

U : Up (la face du haut)
B : Back (la face arriere)
F : Front (la face avant, devant vous)
L : Left (celle de gauche)
R : Right (quelle surprise, celle de droite)
D : Down ( celle du bas, face à la table)

Il faut maintenant connaitre les différents mouvements possibles :
Rotate : quand vous basculez le cube d’une face à l’autre (de U vers L par exemple)
Spin : quand le cube reste sur une face et pivote dans le sens horaire ou anti horaire
Shake : le secouer !
Drop : lorsqu’il tombe
Double Tap : le taper 2 fois dans une main ou sur une tabe
Push : (ou glisser) lorsque que vous lui donnez une pichenette et qu’il glisse sur quelques centimètres.

Bien ! chaque mouvement associera donc un point de départ , un point d’arrivée et un mouvement , ok ?
par exemple mon cube est sur la table et je bascule à droite : donc de U vers L en Rotate (<- rappelez-vous de cette exemple on revenir dessus très vite)

Allez dans ‘Outils de Développement’ puis sur l’onglet ‘Evènements’ et dans le champs ‘Evenement auquel s’abonner’ saisir ‘deconz_event’ puis cliquer sur ‘COMMENCE A ECOUTER’

image

Méticuleusement, tourner votre cube de U à L :

Voici le résultat :

"event_type": "deconz_event",
"data": {
    "id": "mi_magic_cube",
    "unique_id": "00:15:8d:00:02:7d:6c:9b",
    "event": 4001

Puis de L à U :
« event_type »: « deconz_event »,
« data »: {
« id »: « mi_magic_cube »,
« unique_id »: « 00:15:8d:00:02:7d:6c:9b »,
« event »: 1004

Pour faire simple le U , commencera toujours par 100x le x prendra le chiffre de la dernière position, ici 4.

image

Donc si on a bien compris, si on passe de U à R : on obtiendra 3001 (3 étant R et 1 étant U)
à retenir : le premier chiffre prend le chiffre correspondant à sa nouvelle position et le dernier à sa précédente position.

Si je passe R à U, donc je reviens à l’état initial, alors U aura comme valeur 1003 !

Et là vous vous dite, ‘la vache ! y a plein de possibilités !’

En effet ! pour U en voici quelques une que vous pourrez transposer pour els autre face :

UF 2001,
FU 1002
UR 3001,
RU 1003
UL 4001,
LU 1004,
UB 5001,
BU 1005
UD 6001,
DU 1006 ……………………

Mais aussi de n’importe quelle face vers une autre, n’oubliez pas, le premier chiffre représente l’etat actuel le dernier représente la valeur précédente.

image

Ici l’enchainement donnera : (UL) 4001 -> (LD) 6004 -> (DR) 3006 -> (RU) 1003 !

Pour finir !
- le shake est formaté de cette manière : 7007

  • le double tap : x00x
  • le push : x000

Toutes ces données, vous les trouvez dans Evènements ! allez-y faire vos tests !

Vous êtes toujours là ? ok, maintenant que nous avons fait connaissance avec le cube et ce qu’il sait faire, continuons !

  1. Intégration et automatisation dans Node Red

Pour comprendre Node Red, SNoof85 fait de supers tuto.

Alors, dans un Flow, nous allons déposer :

image

Un nœud Events all , un switch, une fonction, un switch, et quelques calle services.

De gauche à droite, le event all servira à ecouter le service DECONZ_EVENT (comme tout à l’heure) Le switch est un switch virtuel, il permettra d’identifier le le cube au cas ou vous disposeriez d’autre interrupteur en zigbee, la fonction permet d’indiquer toutes les fonction de notre cube, le deuxieme switch sera l’image de notre cube et de ses fonctions (vous verrez c’est classe !) et le call services permettront d’executer un service (genre light turn on) une fois relié à une fonction du switch.

En clair ! voila :

image

3.1 Paramétrage des nœuds :

Double clic sur le nœud event all :

image

Ici, on lui demande d’écouter ce qu’il se passe sur le service Deconz (comme nous avons fait tout à l’heure)

Pour le premier switch :

image

Ici on filtre les actions sur un switch en particulier. Vous pourrez rajouter d’autre switch par la suite (interrupteur, bouton poussoir…)

Pour le nœud Fonction :

Ne vous posez pas de question, copier/coller le code :

image

const code = msg.payload.event.event;

let action;
const codes = {
  "side1": [1002, 1003, 1004, 1005, 1006],
  "side2": [2001, 2003, 3004, 4005, 5006],
  "side3": [3001, 3002, 3004, 3005, 3006],
  "side4": [4001, 4002, 4003, 4005, 4006],
  "side5": [5001, 5002, 5003, 5004, 5006],
  "side6": [6001, 6002, 6003, 6004, 6005],
  "push": [1000, 2000, 3000, 4000, 5000, 6000],
  "doubletap": [1001, 2002, 3003, 4004, 5005, 6006],
  "shake": [7007],
  "drop": [7008],
  "wake": [7000]
};

for (let a in codes) {
  if(codes[a].includes(code)) {
    action = a;
    break;
  }
}

if (!action) {
  const strCode = String(code);
  if (strCode.substr(1,2) !== "00" || strCode.length !== 4) {
    action = code > 0 ? "rotatecw" : "rotateccw";
  }
}

msg.payload = action || "";
return msg;

/!\ pour info, il s’agit ci-dessus de l’ensemble des positions et surtout du spin (rotatecw et rotate ccw) correspondant au faite de tourner le cube sur lui-même dans le sens horaire et anti horaire. /!\

Pour le deuxième switch :

Il va falloir rentrer les libellés des codes correspondant aux positions :

image

Vous les avez indiqués dans la fonction précédente ici en vert :

image

C’est long, mais pas compliqué ! (Alors oui on peut faire des imports / exports, etre plus rapide et tout et tout mais ce n’est le sujet du howto :wink: )

Votre switch prend une autre allure :

image

Pour le nœud Service call :

Nous allons tester 4 services :

Lancer une scene
Allumer Eteindre une lumiere
Baisser le son de votre tv
Augmenter le son de votre tv
( vous pourrez également faire mute et unmute sur la tv ou votre GH, plein d’autres possibilités….)

Double cliquer sur le premier nœud Service call pour paramétrer le lancement de la scène :

image

Double cliquez sur le second nœud pour allumer éteindre une lampe :

image

Jusqu’ici c’est quand même super intuitif !

Double cliquez sur le troisième et quatrième nœud pour baisser / monter le volume de votre media :

image

image

Voila !!

Plus qu’à relier le tout :

Servez-vous des infos bulles pour connaitre de quelles fonctions il s’agit sur votre switch, comme sur le screen précédent.

Cliquez sur Deploy et tester tout ca !

Pour ceux qui ne se sont pas encre pendu, ou endormi, vous devriez avoir saisie toutes les possibilités du cubes et de node red ! c’est juste énorme J

Référence et remerciements :

Merci à SNoof85 !

un peu de lecture : https://la-cascade.io/json-pour-les-debutants/

Le tuto de Snoof : debuter-avec-nodered ici sur le forum

https://forum.partificiels.com

Je ne suis pas infaillible, si une erreur s’est glissée, je m’en excuse d’avance, n’hésitez pas à m’en faire part ! et surtout vous aussi, faites-nous profiter de vos tutos, du plus simple au plus complexe !

3 J'aimes