Fondu paramétrable des ampoules Yeelight

Temps de lecture : 7 minutes.

Ça faisait longtemps que je n’avais pas fait un article sur les scénarios Jeedom et pour cause, j’ai déménagé ! J’ai donc remis à plat 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.

Fondu paramétrable des ampoules Yeelight
Notez cet article :
Partager :

22
Laisser un Commentaire

avatar
12 Comment threads
10 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
10 Comment authors
Guillaume BraillonstephaneBXBenPATRICK Recent comment authors
  Notifications  
plus récents plus anciens plus de votes
Me notifier des
Ouquoi
Ouquoi

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 ?

Ronan
Ronan

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

Manuel
Manuel

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.

Popix
Popix

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é.

++

Donat
Donat

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

PATRICK
PATRICK

Super merci pour ton exemple si clair (logs, variables, etc…..)
Je découvre Jeedom et tu viens de m’aider grandement
Bonne continuation

Ben
Ben

Bonjour,
Question bete , il faut quand même utiliser un plugin ? Lequel utilises tu ? Merci

BX
BX

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 ?

BX
BX

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)… Lire la suite »

BX
BX

Non personne pour me donner un coup de main ?!

stephane
stephane

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 ?

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