Aujourd’hui, nous allons voir le scénario « Variation de la luminosité via un bouton switch Xiaomi » permettant de faire varier la luminosité, par exemple, d’une ampoule Yeelight E27 avec un bouton switch Xiaomi.Gearbest Xiaomi Smart Wireless Switch

Une seule commande du bouton sera utilisée, le « long_click_press« . Vous pouvez donc utiliser les autres commandes pour d’autres actions.
Le scénario est utilisable pour d’autres types de lampes ayant un retour d’état du niveau de luminosité, comme la lampe de bureau Xiaomi, par exemple.

Le pas de l’augmentation, 10%, 20%, etc … est réglable via une variable.

Une fois la luminosité égale à 100 %, l’ampoule clignote pour qu’on sache qu’on est au maximum et pour avoir le temps de lâcher le bouton, si on veut s’arrêter à 100%.

Si on ne lâche pas le bouton, on passe à 1 % et il y a une pause de 2 secondes, pour avoir le temps de lâcher le bouton avant que l’augmentation continue progressivement en fonction du pas saisi dans la variable.

Variation de la luminosité via un bouton switch Xiaomi

MODE DU SCENARIO = PROVOQUÉ.

On aura simplement besoin d’un déclenchement sur le changement de statut du bouton. #[Salon][Bouton clic Lumières][Clic]#

SI #[Salon][Bouton clic Lumières][Clic]# == « long_click_press » ALORS

Là, on vérifie que la commande du bouton soit bien un long clic.

SI #[Salon][Yeelight RGB][Statut]# == 0 Alors

Pour commencer, on vérifie l’état de la lumières. 0 = éteinte, 1 = allumée.

ACTION 1 : #[Appartement][Virtuel Bibliothèque][On]#

Si elle est éteinte, on allume la lumière via le virtuel. J’utilise les commandes du virtuel pour que les widget du Design soient bien mis à jour.

Le bloc n’a pas de sinon, car si on est déjà allumé, alors on continue le scénario.

ACTION : #[Salon][Yeelight RGB][Rafraichir]#.

On rafraîchit l’ampoule Yeelight pour avoir les bonnes valeurs d’infos.

Variable : LumiPas Valeur : 20

On affecte la variable avec le pas pour l’augmentation de la luminosité, 20 dans mon exemple.

Variable : LumiBibli Valeur : #[Salon][Yeelight RGB][Luminosité Info]#

On affecte la variable avec la valeur de la luminosité. (Bibli = c’est parce que la lampe est dans ma bibliothèque).

Variable : LumiLimit Valeur : 100 – variable(LumiPas,20)

Cette variable permet de définir une limite maximum pour finir la boucle et ne pas dépasser les 100 % de luminosité. 100 % moins la valeur de la variable LumiPas saisie précédemment.

SI variable(LumiBibli,1) > variable(LumiLimit,80) ALORS

Dans l’hypothèse ou la lumière est déjà au maximum, alors on réinitialise la variable.

Variable : LumiBibli Valeur : – variable(LumiPas,20)

Pour réinitialiser la variable, on va affecter le pas de luminosité en négatif, pour qu’elle soit à 0% lorsque le pas sera ajouté dans la boucle. Comme on ne veut pas éteindre la lumière avec la luminosité à 0%, on remplacera 0% par 1% dans la boucle.

Le bloc n’a pas de sinon, car si on n’est pas au maximum de la luminosité, on continue avec la même valeur.

DE 1 A (100 / variable(LumiPas,20)) * 2 FAIRE

On rentre dans boucle.

La formule permet de faire 2 boucles de 100 % en fonction du pas choisi. Par exemple, avec un pas de 20 % : (100 / 20 ) x 2  = 10.

Cela permet de faire 2 tours, au cas ou on aurait loupé la luminosité désirée au premier tour. Si vous loupez 2 fois la bonne luminosité, il faudra alors lâcher le bouton et recommencer, ou encore, changer le 2 dans la formule pour faire plusieurs tour.

SI variable(LumiBibli,1) > variable(LumiLimit,80) ALORS

Ici, c’est le même test que précédemment, mais dans la boucle on vérifie si la prochaine valeur de luminosité sera supérieure à 100 %, alors on réinitialise la variable.

Variable : LumiBibli Valeur : – variable(LumiPas,20)

Pour réinitialiser la variable, on va affecter le pas de luminosité en négatif, pour qu’elle soit à 0% lorsque le pas sera ajouté dans la boucle. Comme on ne veut pas éteindre la lumière avec la luminosité à 0%, on remplacera 0% par 1%, plus tard dans la boucle.

Le bloc n’a pas de sinon car si on n’est pas au maximum de la luminosité, alors on continu avec la même valeur.

DE 1 A 2 FAIRE

Cette boucle va permettre de faire clignoter la lumière lorsqu’on est à 100 % de luminosité, pour avoir le temps de lâcher le bouton avant de repartir à 1%.

ACTION 1 : #[Salon][Yeelight RGB][Luminosité]# Valeur : 1
ACTION 2 : #[Salon][Yeelight RGB][Luminosité]# Valeur : 100
ACTION 3 : Sleep Valeur : 1

Deux fois de suite, on passe la luminosité de 1 % à 100 %, avec une pause de 1 secondes sur le 100%.

SI #[Salon][Bouton clic Lumières][Clic]# == « long_click_press » ALORS

Grâce à ce bloc, la boucle devient un While. Tant que le bouton est sur « long clic« , alors on continue la boucle.

Variable : LumiBibli Valeur : round(variable(LumiBibli,1),-1) + variable(LumiPas,20)

C’est là qu’on augmente la luminosité du pas qu’on a défini dans la variable « LumiPas« . Le round(XXX,-1) permet d’arrondir les nombres à la dizaine la plus proche.

Le but est que le 1 + 20 = 21, soit considéré comme un 0 + 20 = 20. Idem si la valeur à été changée manuellement, un 26 + 20 sera donc désormais égal à 50.

Par contre, dans le cas ou vous paramétriez un pas qui ne serait pas une dizaine, il sera arrondi. Donc un pas de 5 sera égal à 10.

SI variable(LumiBibli,1) <= 0 ALORS

Comme on ne veut pas que la luminosité soit inférieure ou égale à 0, alors on la passe à 1.

ACTION 1 : #[Appartement][Virtuel Bibliothèque][Luminosité]# Valeur : 1

On allume la lumière à 1 %.

Variable : LumiBibli Valeur : 0

On met la variable « LumiBibli » à 0 au cas ou elle soit négative. On pourrait la mettre à 1, mais comme le round la transformera en 0 autant le faire directement. Ca évite aussi de se retrouver avec des 21, 41, etc …

ACTION 2 : Sleep Valeur : 2

Le sleep de 2 secondes permet d’avoir le temps de lâcher le bouton sur 1 %, avant que la boucle recommence.

SINON
ACTION 1 : #[Appartement][Virtuel Bibliothèque][Luminosité]# Valeur : variable(LumiBibli,1)
ACTION 2 : Sleep Valeur : 1

Si la luminosité est supérieure à 0 %, alors on allume simplement la lumière avec la valeur de « LumiBibli » et on fait une pause de 1 seconde pour avoir le temps de lâcher le bouton.

SINON

ACTION 1 : Stop

Pour finir, si on a lâché le bouton on arrête le scénario. Pour info le bouton sera égal à « long_click_release« .

Exemple de LOG 

Si vous regardez la copie d’écran, au début de l’article, vous voyez que j’ajoute des action Log à chaque bloc. Il suffit ensuite de taper « Log » dans le champ « recherche » des Log du scénario, pour avoir une vue d’ensemble, voila ce que ça donne avec une luminosité à 100 % au départ et un pas de 20% :


Gestion du Long Clic
On rafraîchit les valeurs et on affecte les variables avant la boucle.
Déjà à 100% alors Luminosité passe à -20.
Le bouton n'est pas lâché alors on fait varier de +20 la luminosité.
Luminosité à : 0
Luminosité est <= à 0 alors on allume à 1 et on reste 2 secondes.
Le bouton n'est pas lâché alors on fait varier de +20 la luminosité
Luminosité à : 20
Luminosité est diff de 0 alors on utilise la variable
Le bouton n'est pas lâché alors on fait varier de +20 la luminosité
Luminosité à : 40
Luminosité est diff de 0 alors on utilise la variable
Le bouton n'est pas lâché alors on fait varier de +20 la luminosité
Luminosité à : 60
Luminosité est diff de 0 alors on utilise la variable
Le bouton n'est pas lâché alors on fait varier de +20 la luminosité
Luminosité à : 80
Luminosité est diff de 0 alors on utilise la variable
Le bouton n'est pas lâché alors on fait varier de +20 la luminosité
Luminosité à : 100
Luminosité est diff de 0 alors on utilise la variable
LumiBibli > 80 alors on recommence à 1
Boucle de 2 x 1 = 2 secondes de variation pour avoir le temps de lâcher le bouton à 100
Le bouton n'est pas lâché alors on fait varier de +20 la luminosité
Luminosité à : 0
Luminosité est <= à 0 alors on allume à 1 et on reste 2 secondes.
Le bouton n'est pas lâché alors on fait varier de +20 la luminosité
Luminosité à : 20
Luminosité est diff de 0 alors on utilise la variable
Le bouton n'est pas lâché alors on fait varier de +20 la luminosité
Luminosité à : 40
Luminosité est diff de 0 alors on utilise la variable
Bouton lâché on arrête à 40

Conclusion

Voilà un scénario qui permet une bonne utilisation de la commande « Long click » des boutons switch Xiaomi. Personnellement, j’utilise le « Simple click » pour allumer une prise Xiaomi et le « Double click » pour allumer l’ampoule Yeelight. Mais, je pourrais très bien m’en passer, car il y a un test sur l’état de l’ampoule au début du scénario.

Pour les utilisateurs des nouveaux boutons Aqara carrés qui n’ont plus la commande « Long click », vous pouvez toujours utiliser le scénario en remplaçant la commande « Long click » par « Simple click » et en utilisant le « Double click » pour arrêter la variation. Il faudra aussi modifier le scénario pour autoriser la luminosité à 0% afin de pouvoir éteindre totalement la lampe.

Pensez à regarder la page des bons plans pour trouver des lampes Yeelight ou les boutons switch Xiaomi au meilleur prix.

Si vous avez des idées de déclinaisons, d’optimisations ou des remarques, n’hésitez pas à laisser un commentaire.

Cet article a 27 commentaires

  1. Bonjour,

    Encore merci pour ton tuto, pourrais tu partager l’export de ton scénario (je suis un peu fainéant de le réécrire au complet) ?

    Cordialement

    1. Bonjour,
      Je l’ai ajouté au market de Jeedom. Catégorie Lumière.
      Il s’appel : VARIATION LUMINOSITÉ & BOUTON SWITCH XIAOMI
      Cordialement,
      Guillaume.

  2. Salut, desole mais je le vois pas dans le market.

    Merci

    1. Il est en beta,il faut peu être attendre une validation quelconque. C’est la première fois que je partage un scénario.

  3. Ok pas d’autre moyen que par le market ? Je le sens pas trop le market des scenarios 😉

  4. Re,
    tu peux essayer d’expoter ton scenario avec le bouton exporter dans la page du scenario et le partager sans passer par le market ?
    Merci

  5. J’ai bien lu ton article comme les autres d’ailleurs :p et pas survolé pour bien comprendre la mécanique de ton scenario. 😉 Et je trouvais un peu domage de faire du copier coller ou de refaire la roue.
    Après je m’intéresse un peu plus au fonctionnel qu’au développement de scenario.

    Merci pour le partage ! Top j’essaye ça et fais un retour

  6. Bonjour,

    Le virtuel #[Appartement][Virtuel Bibliothèque]# commande quoi exactement derrière ? la Yeelight ?

  7. Hello,

    Super tuto.

    Je viens de recevoir mes équipements mais je ne comprend pas pourquoi il faut mettre un virtuel en plus.

    Si on a qu’une seule lampe à contrôler on peux changer le scénario non ? Quelle ligne faudrait-il supprimer dans ce cas ?

    Encore merci

  8. Salut,
    Merci beaucoup pour ton tuto !
    ++

  9. Bonjour,
    J’ai l’impression que le screenshot ne correspond pas 100% a tout ce que tu décris dans ton article , non ?
    J’avoue ne pas tout saisir, du coup les petites différences (si elles existent vraiment) me perturbent :$

    1. Bonjour,
      De mémoire c’est la même chose sans les log.
      Ou est ce que vous avez des difficultés ?

    2. Bonjour,
      Par exemple, ou retrouves ton le premier si/alors bleu ?
      Si je comprends bien , en lisant l’article on passe de la déclaration des variables au 1er si/alors violet, on zappe le bleu.
      Ça fait quelques jours que je n’ai pas regardé le scénario, je m’y replonge pour qu’on puisse mieux échanger.
      Merci d’avance.

    3. Ok j’ai vérifié et effectivement j’avais modifié le scénario entre la copie d’écran et l’article.
      J’ai refait la copie d’écran qui correspond au scénario de l’article, dit moi si ça va mieux ?

    4. Merci , je m’y retrouve mieux, j’ai bien compris le fonctionnement.(en plus le screenshot est net maintenant 🙂 )
      Ce qui pèche chez moi c’est la rédaction, quand on tu appelles une variable tu écris par exemple : variable(lumibibli,1) , je pense que tu appelles la variable lumibibli en lui donnant 1 comme valeur ?
      Je testerai tout ça , et j’essaierai de me documenter.
      En tout cas merci pour le contenu, l’aide et la réactivité (gros pouce bleu )

    5. Pour les variables c’est dans la doc jeedom. Le chiffre après la virgule c’est la valeur si la variable n’existe pas.

  10. ReBonjour,
    J’ai eu le temps de me repencher sur ton scenario.
    Tout fonctionne parfaitement après avoir passer en revu les docs concernant les variables et les calcules sur les variables.
    (Je suis du genre a avoir besoin de comprendre avant de faire ^^’ ) Depuis je glisse des variables partout, ou presque ^^’.
    Bonne journée !

    1. Super, c’est vrai que c’est pratique les variables mais maintenant il y a aussi les Tag de scenarios qui peuvent bien rendre services. 🙂
      Bonne journée.

  11. Bonjour Guillaume,

    Merci pour tous ces tuto c’est vraiment du trés beau travail de partager ton savoir et de nous l’apprendre également.
    Néanmoins je débute sur jeedom j’ai réussi a faire quelques scénarios simple, les complexes je bute un peu.
    Si tu pourrais m’aider : J’ai un module ZWAVE variateur FIBARO et je le controle avec un SWITCH double bouton Xiaomi, l’objectif Bouton Gauche Allumé / Éteindre et le bouton droit variateur.
    Avec ton Tuto j’obtient une variation sur 2 cycles mais cette variation ne sarrette pas que je lâche le bouton droit ou pas ça continue, et si j’appuis plus de 10 secondes j’entend la GATEWAY qui me fait un bruit d’inclusion.
    une idée ? peut être que je pourrais faire un BothClick ( double bouton ) pour stopper le scénario ? Merci d’avance Jérôme

  12. Bonjour,
    Merci à vous pour le tutoriel.
    J’ai cependant quelque soucis concernant le scénario et je ne sais pas si c’est tout le monde pareil ou juste moi…?
    J’ai un gros délai lorsque j’appui sur mon bouton switch xiaomi et du coup le scénario n’est pas fluide du tout voir même inutilisable…
    Quand j’appuie, il se passe au moins 1,5secondes avant que l’ampoule ne réagisse et commence à faire des mouvements .. ?

    1. Bonjour,
      chez moi je n’ai presque pas de délai. Il faut voir dans les log si le délai vient du scénario. si vous faites un scénario avec juste Si click ALORS lumière ON est ce qu’il y a un délai ?

      1. Presque pas.
        Je pense que c’est lié au deuxième bloc Si/Sinon.
        Vous avez mis #[Salon][Yeelight RGBE][Statut]# == 0 alors on l’allume
        Par contre chez moi j’ai mis :

        #[Salon][Lampe][Statut]# == "off"
        alors j'allume la lampe #[Salon][Lampe][Allumer]#
        et j'affecte une luminosité : #[Salon][Lampe][Luminosité]# = 100

        Chez vous, vous allumez la lampe sans affecter de luminosité, du coup elle est à combien?
        Parce que pour le coup chez moi, vu que je lui mets 100, je passe dans le SI > limit qui va donc la repasser à -20, puis ensuite dans l’autre qui va le passer à 1 et attendre 2 secondes…

        Donc je pense que c’est ça qui ne vas pas chez moi?

        Au lieu de mettre à 100 il faudrait que je l’allume avec une luminosité à 1 ?

        1. Il faut affecter une valeur < à la variable LumiLimit pour ne pas passer dans la boucle de limite et ne pas avoir de pause au demarrage.

          1. C’est donc bien le changement que je viens de faire 🙂
            Je testerai ce soir si ça fonctionne mieux!
            Merci à vous pour l’aide et pour le tuto ! 🙂

Laisser un commentaire

Merci à ceux qui ont contribué,
votre don contribuera à fournir encore plus de contenu de qualité.

Inscrivez-vous à la Newsletter de votre choix pour ne recevoir que ce que vous désirez.

Fermer le menu

Vous pouvez maintenant choisir quel type d’article vous voulez recevoir par Newsletter, pensez à mettre à jour votre abonnement.
Le formulaire de gestion d’abonnement est disponible uniquement pour les abonnés aux mailing listes.