Dans un article précédent j’avais commencé à vous présenter le Cube Magic de Xiaomi :

XIAOMI SMART HOME – PRESENTATION ET INCLUSION DANS DOMOTICZ

 

Présentation

Nous allons maintenant entrer plus en profondeur dans son exploitation, et comme je commence à être feignant, mais aussi que cela est très visuel, je vous ai fait une vidéo pour vous expliquer les différents mouvements.
J’ai fait l’impasse sur deux  mouvements :
  • Air Swing
  • Alerte
Ils sont assez difficile à reproduire de façon récurrente…  

Exemples d’utilisation

Nous allons maintenant voir comment utiliser ce cube dans notre installation, en premier lieu, je vais vous « donner » un script LUA, qui va vous permettre de piloter la luminosité d’une ampoule dimmable, comme le ferait un bouton rotatif. Il faut savoir que le cube, en plus d’envoyer les informations de sens de rotation, envoie des valeurs. Ces valeurs positives ou négatives sont des équivalences d’angle et de temps, dans l’API on trouve ceci pour le cube {\ »rotate\ »:\ »25,500\ »} :
  • Rotate = Rotation
  • 25 = Angle/3.6 soit ici : 90*3.6 = 25 : Nous avons tourné le cube dans le sens horaire de 90°
  • 500 = le temps en millisecondes nécessaire pour faire cette rotation
Magique ! Dans Domoticz cela nous donne :
Vous avez compris l’exemple ci-dessus ? Je vous laisse chercher, le premier qui me donne la bonne réponse dans les commentaires aura une surprise.
Nous allons nous servir de l’angle pour notre script d’exemple.

Pilotage d’une ampoule à intensité variable

Plutôt que de vous filer le script tout fait, je vais vous l’expliquer par morceau qu’il faudra assembler pour avoir le résultat. Le principe de fonctionnement : Si le cube tourne en sens horaire, alors augmente la luminosité de l’ampoule de sa valeur actuelle  + la valeur de la rotation avec un maximum à 100% : Exemple : Ampoule à 95%, le cube fait une rotation de +10 (10*3.6 = 36° dans le sens des aiguilles d’une montre)  donc ampoule sera 90 + 10 = 105% sauf que l’on va lui dire que son max sera 100% Si le cube tourne en contre la montre, alors baisse la luminosité de l’ampoule de sa valeur actuelle  – la valeur de la rotation avec un minimum à 0% qui va éteindre l’ampoule : Exemple : Ampoule à 25%, le cube fait une rotation de -50 (-50*3.6 = -180° dans le sens inverse aux aiguilles d’une montre )  donc ampoule sera 25 + -50 = -25% sauf que l’on va lui dire que son mini sera 0% On commence par récupérer les différentes valeurs nécessaires à notre calcul
if devicechanged['Xiaomi Cube Rotation'] then --après le commandarray, on se sert d'un changement de valeur du widget texte affichant la rotation comme du provocateur d’événement
   
   Bulbvalue = otherdevices_svalues['Appliques'];               --On récupère la valeur actuelle de luminosité de l'ampoule à piloter
   RotValue = otherdevices_svalues['Xiaomi Cube Rotation'];     --On récupère la valeur de rotation qui provoque le script
   RotValue = string.sub(RotValue, 1, string.len(RotValue) - 4) --On récupère l'angle à la mode xiaomi (donc enleve les 4 derniers caractères du widget texte
   NumericValue = tonumber(RotValue)                            --Lua est exigent, il faut transformer les caractères récupérés précédemment en valeur numérique
Une fois que nous avons les valeurs, on fait notre calcul :
CalcValue = (Bulbvalue + NumericValue) --CalcValue va être notre valeur finale à appliquer à l'ampoule (valeur actuelle de l ampoule + la valeur de rotation)
On délimite les valeurs maximums et minimums de la valeur à appliquer
    if CalcValue > 100 then
        CalcValue = 100 --valeur maximale à 100%
    elseif CalcValue < 0 then
        CalcValue = 0 --aleur minimale à 0%
    end
Enfin on envoie l’ordre à l’ampoule avec sa nouvelle valeur :
commandArray['Appliques']='Set Level '..CalcValue..''
end
Et voila ! Bien sûr c’est un script device, et il manque les commandArray de début et de fin, mais vous le saviez 😉 Ce qui nous donne en vrai :
Difficile de filmer de l’éclairage dans la pénombre, désolé.

Dans le salon

Après cette seconde vidéo (la maison ne recule devant aucun sacrifice !), je vous livre mon autre script device en LUA qui réagit au Cube placé dans le salon :
-- chargement des modules
package.path = package.path..";/home/nico/domoticz/scripts/lua/?.lua"
require "modules"

commandArray = {}
 if (devicechanged['Xiaomi Cube']=='tap_twice' and otherdevices['Sous Le Bar']=='Off') then
 groupOn('versaille') -- c'est un groupe qui gère tous les éclairages du salon - salle à manger ou tout est à 100%
 elseif (devicechanged['Xiaomi Cube']=='tap_twice' and otherdevices['Sous Le Bar']=='On') then
 groupOff('versaille')
 elseif (devicechanged['Xiaomi Cube']=='flip90') then
 switch('Eclairage TV') -- Allume mon hyperion dans une couleur jaune pleine lune
 elseif (devicechanged['Xiaomi Cube']=='flip180' and otherdevices['Appliques']=='Off') then
 groupOn('cube 180') -- original non ? ce groupe gère deux éclairages coté cheminée
 elseif (devicechanged['Xiaomi Cube']=='flip180' and otherdevices['Appliques']~='Off') then
 groupOff('cube 180')
 elseif devicechanged['Xiaomi Cube']=='free_fall' then
 switch('Meuble TV') -- toggle, switch, inverse l'état de la prise qui alimente mon meuble TV 
 end
 return commandArray
Attention avec celui-ci ! il est fait pour travailler avec speedup domoticz !  Comme vous le voyez je n’utilise pas tous les ordres, il est dans une pièce à vivre, si je veux que ma moitié s’en serve, il faut que ce soit facile à utiliser, et surtout en complément d’autres boutons déjà en place. Il reste aussi plein d’autres fonctions à utiliser, comme le temps qui a été mis pour effectuer la rotation, qui peut aussi servir.   Je vous laisse, j’ai reçu en exclu le nouveau cube multi-multi ordre, un vrai casse tète !      

Laisser un commentaire