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

Une fois que nous avons les valeurs, on fait notre calcul :

On délimite les valeurs maximums et minimums de la valeur à appliquer

Enfin on envoie l’ordre à l’ampoule avec sa nouvelle valeur :

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 :

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 !

 

 

 

9 Replies to “Tuto – Le Cube Xiaomi et Domoticz”

      1. Re-Bonjour,
        Que dire si ce n’est que je suis content…
        (La fidélité ça paie 😉
        pour info, ton site fait désormais partie de ceux que je consulte tous les matins… 😉

        Pour répondre à ta question,
        Pour ce qui du 433 mhz, oui je suis bien équipé :
        J’ai le rfxcom rfxtrx433e sur Domoticz (sur raspberry)
        (et même un tellstick net en attente de reconversion 😉

        Voilà…

        Bien cordialement,
        Cyril

         
  1. Bonjour,
    Je viens de recevoir mon starter kit xiaomi, j’utilise domoticz sur un RPi2.
    J’ai essayé de faire un copier/coller d’un code similaire provenant d’ici : https://www.domoticz.com/forum/viewtopic.php?t=11520&start=1700

    [code]
    commandArray = {}
    — Run only if the cube has been rotated clockwise or anti-clockwise
    if devicechanged[‘Xiaomi Cube’] == « clock_wise » or devicechanged[‘Xiaomi Cube’] == « anti_clock_wise » then
    — Runs only if the light is already On
    –if (otherdevices[‘CorridorLight’] == « On » or otherdevices[‘CorridorLight’] == « Set Level ») then
    — grab the actual dimming value
    actual_dimming = tonumber(otherdevices_svalues[‘CorridorLight’])
    print(« the Current YeeeLightSvalue:  » .. actual_dimming)
    –if the cube has been rotated clockwise and dimming is below 100
    if ((otherdevices[‘Xiaomi Cube’] == « clock_wise ») and actual_dimming 100 then
    new_dim_value = 100
    end
    comando = « Set Level « ..new_dim_value
    commandArray[‘CorridorLight’]=comando
    end

    –if the cube has been rotated anti-clockwise and dimming is above 1
    if (otherdevices[‘Xiaomi Cube’] == « anti_clock_wise » and actual_dimming > 1) then
    — need to find only the integer value
    print(« a test print »)
    actual_rotation = otherdevices_svalues[‘Xiaomi Cube Text’]
    virgola = string.find(actual_rotation, « , »)
    numero = string.sub(actual_rotation, 1, virgola-1)
    — Add the rotation value (in this case is a negative value), to the actual dimming, and if is smaller than 1, set it to 1
    new_dim_value = actual_dimming + tonumber(numero)
    print(« the new value to reduce to:  » .. new_dim_value)
    if new_dim_value <= 1 then
    new_dim_value = 0
    end
    comando = "Set Level "..new_dim_value
    commandArray['CorridorLight']=comando
    end
    –end
    end

    return commandArray

    [/code]
    , mais j'ai cet erreur dans le log :

    Error: EventSystem: in try: [string "commandArray = {} …"]:14: bad argument #1 to 'find' (string expected, got nil)

    J'ai essayé de mixé un peu avec le code de l'article mais j'ai toujours cette erreur.

    c'est a ce niveau que ca bloc :

    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)

    Probablement une erreur de conversion.

    Peux tu m'aider ?

    Merci !

     

Laisser un commentaire