Aujourd’hui je vous propose un scénario Jeedom permettant de faire un Fondu paramétrable des ampoules Yeelight.
Ça faisait longtemps que je n’avais pas fait d’article sur les scénarios Jeedom et pour cause, j’ai déménagé ! J’ai donc remis à plat mon Jeedom et j’en ai profité pour faire le ménage en repartant de zéro, sans sauvegarde, histoire d’être véritablement sur une installation parfaitement propre. Voilà pour la petite histoire.
Donc, ce scénario consiste à faire un fondu sur la luminosité de 0 à 100%, ou l’inverse. L’intérêt, c’est d’avoir un seul scénario et de saisir en paramètres la durée du fondu et la durée des cycles.
Pour cela, nous allons utiliser une nouveauté de Jeedom V3, les Tags de scénarios.
Prérequis.
Pour l’article j’utilise une ampoule Yeelight Blanche, mais le principe est rigoureusement le même pour les RGB, ou même pour une lampe de bureau, ou toute autre lumière avec un retour d’état du niveau de luminosité.
Pour les lampes n’ayant pas de retour d’état, comme la lampe de chevet, on pourra utiliser une variable pour faire office de retour d’état du niveau de luminosité.
Le scénario pour le fondu de la luminosité (Cible)
Il faut faire un scénario pour le fondu de 0% à 100% et un pour 100% à 0%, on pourrait ajouter une option dans les paramètres mais je ne veux pas trop compliquer le scénario pour l’article, après, libre à vous d’ajouter ce que vous voulez.
Dans cet exemple, on va faire un fondu de 15 minutes, avec des cycles de 30 secondes qui commence avec une luminosité à 100 % pour finir à 0%.
Pour être totalement exact, je finis à 1%, car j’ai bloqué la valeur minimum dans les paramètres de la commande. Voir l’article Xiaomi Mijia – Lampe de Bureau pour plus de détails.
Les Tags
Le scénario va recevoir deux TAGs :
- #DureeTotal# : La durée du fondu en minutes, c’est à dire la durée pour passer d’une luminosité de 100 % à 0 %, (15 minutes).
- #DuréeCycle# : La durée d’un cycle en secondes, c’est à dire le temps entre deux changement de luminosité, (30 secondes).
A cause des tags vous ne pouvez pas provoquer le scénario directement, il faudra passer par un scénario source.
Les variables
Il n’est pas possible de faire des opérations avec les TAGs, donc nous allons les stocker dans des variables.
Nous allons affecter trois variables :
- DureeTotal : On stock la valeur du TAG #DureeTotal#. (En minutes)
- DureeCycle: On stock la valeur du TAG #DureeCycle#. (En secondes)
- ValeurFondu : 100/((variable(DureeTotal)*60)/variable(DureeCycle))
- 100 : C’est la valeur de luminosité au début du fondu.
- variable(DureeTotal)*60 : On convertit la durée totale en secondes. (15 minutes X 60 = 900 secondes)
- /variable(DureeCycle) : On divise par la durée d’un cycle, pour obtenir la valeur de luminosité à décrémenter.
- Exemple : 100/(900/30) = 3.3333333
- Commande : #[Appartement][Virtuel Lumière][On]# On allume l’ampoule.
- Commande : #[Appartement][Virtuel Lumière][Luminosité]# Valeur = 100. On règle la luminosité à 100 %.
La Boucle pour le fondu
Maintenant qu’on a nos valeurs et que l’ampoule est allumée à 100%, on peut commencer la boucle pour le fondu.
Le nombre de tour pour la boucle est définit par la durée du fondu (15 min) et la durée des cycles (30 sec). On va donc mettre dans la valeur de la boucle :
De 1 A (variable(DureeTotal)*60)/variable(DureeCycle) FAIRE
Ça doit vous rappeler quelque chose, c’est la même formule que l’on utilise pour le calcul de l’incrémentation de la luminosité. On aurait pu la mettre dans une variable.
Commande : #[Chambre][Yeelight Blanc][Rafraichir]#
Je rafraîchis les valeurs de l’ampoule, pour être sûr d’avoir le bon retour d’état de la commande info luminosité.
Sleep : Valeur = variable(DureeCycle)
C’est là qu’on utilise la durée du cycle reçue par le TAG #DureeCycle#. (30 secondes)
Commande : #[Appartement][Virtuel Lumière][Luminosité]# Valeur = #[Appartement][Virtuel Lumière ][Info Luminosité]#-round(variable(ValeurFondu))
- #[Appartement][Virtuel Lumière ][Info Luminosité]# = C’est la valeur de la luminosité.
- -round(variable(ValeurFondu)) = On décrémente la valeur de la variable(ValeurFondu) qu’on arrondit, car on ne peut pas affecter à la commande luminosité une valeur avec décimal.
Le scénario pour paramétrer les valeurs (Source)
Depuis un scénario source il faut lancer le scénario cible que l’on vient de créer avec les TAGs pour que le fondu commence.
- Depuis un autre Scénario
- Insérer une commande : ACTION
- Taper : scénario
- Dans la liste déroulante, sélectionner le scénario que nous venons de créer.
- Laisser l’action sur : Start
- Dans la partie Tags, pour 5 minutes et 30 secondes, saisir : DureeTotal=5 DureeCycle=30.
- Sans espace autour des signes « égal ».
- Avec un espace entre les deux tags.
- Cliquer sur exécuter et le fondu devrait commencer.
- Pensez à mettre les Log du scénario sur « Temps réel » pour faire vos tests, sinon vous devrez attendre la fin du fondu pour voir les logs.
- Commencez avec des fondus courts (1 minute et 10 secondes) par exemple : DureeTotal=1 DureeCycle=10
Exemple de log :
Start //Les TAGS envoyés depuis le scénario source. [#DureeTotal#] => 1 [#DureeCycle#] => 10 //Les variables sont peuplées avec les valeurs des Tags Affectation de la variable DureeTotal => 1 = 1 Affectation de la variable DureeCycle => 10 = 10 //On calcule la valeur du fondu Affectation de la variable ValeurFondu => 100/((1*60)/10) = 16.666666666667 //On allume l'ampoule et on met la luminosité à 100 % [Appartement][Virtuel Lumière][On] [Appartement][Virtuel Lumière][Luminosité] [slider] => 100 //On rafraîchit les valeurs de l'ampoule avant la pause, pour laisser le temps aux valeurs de remonter. [Chambre][Yeelight Blanc][Rafraichir] //Pause de 10 secondes (#DureeCycle#) et on change la luminosité. (Luminosité - ValeurFondu) Pause de 10 seconde(s) [Appartement][Virtuel Lumière][Luminosité] [slider] => 83 //C'est reparti pour un tour [Chambre][YeelightBlanc][Rafraichir] Pause de 10 seconde(s) [Appartement][VirtuelLumière][Luminosité][slider]=>66 [Chambre][YeelightBlanc][Rafraichir] Pause de 10 seconde(s) [Appartement][VirtuelLumière][Luminosité][slider]=>49 [Chambre][YeelightBlanc][Rafraichir] Pause de 10 seconde(s) [Appartement][VirtuelLumière][Luminosité][slider]=>32 [Chambre][YeelightBlanc][Rafraichir] Pause de 10 seconde(s) [Appartement][VirtuelLumière][Luminosité][slider]=>15 [Chambre][YeelightBlanc][Rafraichir] Pause de 10 seconde(s) //La dernière valeur est négative, mais la lumière ne s'éteint pas, car elle est bloquée à un mini de 1 dans les réglages [Appartement][VirtuelLumière][Luminosité][slider]=>-2 Fin correcte du scénario
Évolutions possibles
- Pour avoir un fondu qui augmente de 0% à 100 % de luminosité, il faut changer les commandes :
- #[Appartement][Virtuel Lumière][Luminosité]# Valeur = 0.
- #[Appartement][Virtuel Lumière][Luminosité]# Valeur = #[Appartement][Virtuel Lumière ][Info Luminosité]#+ round(variable(ValeurFondu))
- Vous pouvez ajouter un Tag sur le sens du fondu et remplacer le – de la commande :
- #[Appartement][Virtuel Lumière ][Info Luminosité]# variable(SenseFondu) round(variable(ValeurFondu))
- Vous pouvez ajouter un Tag sur la luminosité de départ qui est fixé à 100 dans l’exemple et remplacer les valeurs « 100 » :
- variable(DepartFondu)/((variable(DureeTotal)*60)/variable(DureeCycle))
- #[Appartement][Virtuel Lumière][Luminosité]# Valeur = variable(DepartFondu)
- Pour ne pas avoir des valeurs négatives ou supérieures à 100 %, vous pouvez ajouter un bloc :
- SI #[Appartement][Virtuel Lumière ][Info Luminosité]#+ round(variable(ValeurFondu)) >= 0 ET #[Appartement][Virtuel Lumière ][Info Luminosité]#+ round(variable(ValeurFondu)) <= 100.
- Vous pouvez aussi ajouter la gestion de la couleur sur une ampoule RGB.
Conclusion
Ce scénario peut être très utile dans un réveil matin par exemple. Personnellement je l’utilise le matin dans ma chambre avec la lampe de bureau pour me réveiller ou bien avec la gestion de la couleur sur une ampoule RGB le soir dans la chambre des enfants, pour qu’ils sachent que c’est la fin du temps libre et l’heure de dormir.
Si vous avez des idées de déclinaisons, d’optimisations, des remarques, ou besoin d’aide, n’hésitez pas à laisser un commentaire.
Merci pour cet article ca faisait longtemps comme tu dis 😉
Scenario intéressant. Avec les yeelights tu peux egalement faire ca avec les flows non ?
Oui mais je trouve que ce n’est pas très intuitif et je préfère avoir la possibilité de l’adapter a n’importe quel type de lampe. Pour gérer les flows il faut encore apprendre de nouvelles règles.
Désolé pour le délai, là je suis en train de préparer un article sur la gestion de la présence, les ASK via JPI, la gestion de la luminosité avec le bouton switch Xiaomi et après je m’attaque aux Designs avec gestion des tableaux … 😉
Merci, je me suis levé ce matin en me disant : « il va falloir que je réfléchisse à un scénario de type levé du soleil … » et que vois-je ? juste ton article 😉
Merci encore
Ça fait plaisir de savoir que mes articles tombent au bon moment 🙂
Bonjour Guillaume,
Merci pour ce tutoriel intéressant. Par contre, le problème que je vois, c’est que tu vas bloquer ton système domotique sur ton scénario pendant la durée totale du fondu.
Bonjour,
Je ne vois pas en quoi le systeme domotique, en l’occurrence Jeedom, serait bloqué pendant le déroulement du scénario ?
On peut très bien lancer plusieurs scénarios en même temps. Le sleep est bloquant pour le scénario mais pas pour les autres.
Ta réflexion m’intéresse est ce que tu pourrais m’en dire plus ?
salut,
On m’a déjà répondu plusieurs fois sur le forum ou sur le flux telegram qu’il fallait éviter les sleep car ça tire sur les ressources, il est préférable de faire du « DANS XX » en bloc action.
Je ne saurais pas rentrer dans le détail, désolé.
Bel article en tout cas, merci pour ton temps, c’est clair et détaillé.
++
Oui il faut mieux utiliser la fonction dans lorsque l’on dépasse les 60 secondes. Dans le cas d’un fondu qui dure moins de 60 secondes le Sleep est tout indiqué. La fonction existe on peut donc l’utiliser il faut juste ne pas l’utiliser à la place de la fonction Dans.
Bonjour,
L’idée d’indicateur lumineux dans la chambre des enfants est très intéressante, toutefois, comment gères-tu la lumière le reste du temps ? Si interrupteur normal, double allumage/extinction pour revenir sur le fonctionnement « normal » et déclenchement de ton scénario « coucher depuis le smartphone (ou autre) ? Ou remplacement des interrupteurs par bouton/interrupteur xiaomi ? ou autre….
Merci
Bonjour,
J’ai essayé plusieurs choses :
1) Interrupteur bouton switch collé sur l’interrupteur normal. 1 clic = ON/OFF, 2 clic = Auto / Manu, long clic = luminosité +20. == > mon fils appuyait toujours sur le vrai interrupteur pour éteindre.
2) Interrupteur mural Wireless collé à la place de l’interrupteur normal, j’ai connecté en direct les câbles électrique et supprimé l’interrupteur normal. Clic droit = ON/OFF, clic gauche = luminosité +20, double clic = Auto/Manu==> Ça fonctionne plutôt bien.
Derrière j’ai des scenarios qui gère la luminosité en fonction de l’heure.
Super merci pour ton exemple si clair (logs, variables, etc…..)
Je découvre Jeedom et tu viens de m’aider grandement
Bonne continuation
Bonjour,
Question bete , il faut quand même utiliser un plugin ? Lequel utilises tu ? Merci
Bonjour,
Hormis le plugin Xiaomi Home il n’y a pas besoin de plugin.
Pour ma part j’essai de faire le scénario à l’envers qui est d’allumer la lampe pour faire un réveil doux.
Il faut garder le sleep ou une autre commande existe ?
Avez vous essayé ça :
Pour avoir un fondu qui augmente de 0% à 100 % de luminosité, il faut changer les commandes :
#[Appartement][Virtuel Lumière][Luminosité]# Valeur = 0.
#[Appartement][Virtuel Lumière][Luminosité]# Valeur = #[Appartement][Virtuel Lumière ][Info Luminosité]#+ round(variable(ValeurFondu))
https://domotique.guillaumebraillon.fr/jeedom-scenarios-fondu-parametrable-yeelight/#Evolutions_possibles
J’ai mis les valeurs suivantes pour le scénario source : DureeTotal=1 DureeCycle=10
La lampe s’allume car j’ai mis 1 % au démarrage mais la luminosité n’augmente pas :
Logs scénar source :
[2018-02-06 19:00:31][SCENARIO] Start : 'Scenario lance manuellement'.
[2018-02-06 19:00:31][SCENARIO] Exécution du sous-élément de type [action] : action
[2018-02-06 19:00:31][SCENARIO] Lancement du scénario : Réveil matin semaine options : Array
(
[#DureeTotal#] => 1
[#DureeCycle#] => 10
Logs scénar :
(
[background] => 0
[slider] => 16+round(100/((#DureeTotale#*60)/10))
)
[2018-02-03 12:57:49][SCENARIO] Exécution du sous-élément de type [action] : do
[2018-02-03 12:57:49][SCENARIO] Exécution de la commande [Eclairage ][Yeelight][Rafraichir] avec comme option(s) :
Array
(
[background] => 0
)
[2018-02-03 12:57:49][SCENARIO] Pause de 10 seconde(s)
[2018-02-03 12:58:00][SCENARIO] Exécution de la commande [Eclairage ][Yeelight][Luminosité] avec comme option(s) :
Array
(
[background] => 0
[slider] => 16+round(100/((#DureeTotale#*60)/10))
)
[2018-02-03 12:58:00][SCENARIO] Exécution du sous-élément de type [action] : do
[2018-02-03 12:58:00][SCENARIO] Exécution de la commande [Eclairage ][Yeelight][Rafraichir] avec comme option(s) :
Array
(
[background] => 0
)
[2018-02-03 12:58:00][SCENARIO] Pause de 10 seconde(s)
[2018-02-06 19:00:41][SCENARIO] Log : Lancement de boucles pendant minutes
[2018-02-06 19:00:41][SCENARIO] Exécution d'un bloc élément : 4
[2018-02-06 19:00:41][SCENARIO] Log : Fin de la scène de réveil, Scènes à à OFF.
[2018-02-06 19:00:41][SCENARIO] Fin correcte du scénario
Pouvez-vous me donner un coup de main svp ?
Non personne pour me donner un coup de main ?!
Bonjour,
désolé je n’avais pas vu le messager.
A la ligne :
[slider] => 16+round(100/((#DureeTotale#*60)/10))
Tu ne devrais pas avoir la formule mais un nombre exemple :
[slider] => 21
Si tu ne trouve pas envoi moi un copie d’écran de ton scénario a contact@guillaumebraillon.fr
Salut Guillaume, je souhaite simplement utiliser l’effet de fondu pour un scénario couché rapide afin que la lumière s’éteigne proprement en fondu avant l’allumage d’une autre.
Ton scénario est top mais malgré tout complexe surtout dans mon cas ou je veux faire un fondu simple et rapide à l’extinction.
Sais-tu s’il existe d’autre méthode pour faire du fondu ?
Bonjour,
Si c’est juste pour que la luminosité soit réduite à 1 avant extinction il suffit de mettre la valeur de la luminosité dans les action avant exécution des paramètres de la commande off.
N’hésite pas si tu as besoin de plus de détails.
merci de ton retour,
le simple fait de passer la valeur luminosité à 1 devrait faire l’effet de fondu que j’escompte ? en fait je trouve ça plus sympa un fondu qu’un simple ON/OFF brutal 🙂
Je vais tester et te dirais alors