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.
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.
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.
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
Bonjour,
Je l’ai ajouté au market de Jeedom. Catégorie Lumière.
Il s’appel : VARIATION LUMINOSITÉ & BOUTON SWITCH XIAOMI
Cordialement,
Guillaume.
Salut, desole mais je le vois pas dans le market.
Merci
Il est en beta,il faut peu être attendre une validation quelconque. C’est la première fois que je partage un scénario.
Ok pas d’autre moyen que par le market ? Je le sens pas trop le market des scenarios 😉
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
Bonjour,
Je trouve que c’est mieux lorsque l’on fait soit même le scénario, le but premier de mes articles c’est d’expliquer et comprendre et pas donner des scénarios tout fait sans savoir comment ils fonctionnent.
Voilà le fichier :
https://domotique.guillaumebraillon.fr/wp-content/uploads/2017/12/VARIATION-LUMINOSITÉ-.txt
Il est en Txt il faut le renommer en Json avant de l’importer.
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
Bonjour,
Le virtuel #[Appartement][Virtuel Bibliothèque]# commande quoi exactement derrière ? la Yeelight ?
Bonjour,
Oui c’est le virtuel de ma lampe Yeelight qui est dans la bibliothèque avec Etat, luminosité, temperature blanc, et les infos. Même genre que pour la lampe de bureau : https://domotique.guillaumebraillon.fr/xiaomi-mijia-lampe-de-bureau/#Virtuel_et_widget_pour_Lampe_de_bureau_Xiaomi
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
Salut,
Merci beaucoup pour ton tuto !
++
Bonjour,
Merci a toi pour ton message.
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 :$
Bonjour,
De mémoire c’est la même chose sans les log.
Ou est ce que vous avez des difficultés ?
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.
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 ?
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 )
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.
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 !
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.
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
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 .. ?
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 ?
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 ?
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.
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 ! 🙂
Merci Guillaume,
Est ce que ce scénario est possible à faire en restant uniquement sur le gateway Xiaomi , sans passer par une box Jeedom ?
C’est exactement ce qui manque dans la gamme xiaomi: un variateur .
Du coup je me demande si je ne vais spas passer chez Schenider electric wiser .
Ils ont un variateur « odace » qui gere aussi les couleurs
Bonjour,
Oui, il est possible d’affecter une action lumière + /- ou temperature couleur +/- par exemple sur le bouton Xiaomi depuis l’application Mi-home.
Bonjour,
Merci beaucoup pour ce tuto qui me permet de m’initier au script (meme si venant de Domoticz je n’ai pas encore tout compris)
Chez moi celui-ci n’etait pas compatible avec l’état « click » de mon bouton qui fait un Toggle sur ma lampe.
Lorsque je relachais le bouton sans être à 100% il m’etaignait la lumière, et en vérifiant dans mes logs j’ai constaté que le bouton relaché produisait un long click release puis un click.
J’ai donc ajouté un sleep avant le stop du script pour que ce click ne soit pas pris en compte.
Bonjour,
Je n’utilise plus çe scénario mais je n’ai pas souvenir d’avoir eu ce problème. Un des avantages de Jeedom c’est que c’est flexible et chacun peut adapter son fonctionnement a son utilisation.
Merci pour l’info.