Vous avez été nombreux à lire les articles concernant l’allumage de la lumière sur présence et c’est pour cela que j’ai voulu apporter un correctif aux précédentes versions, car elles ne sont pas optimisées et peuvent ralentir votre box Jeedom.

Pour faire simple, les fonctions « Sleep » et « Wait » que j’utilisais, bloquent les scénarios le temps indiqué dans le champ durée, ou  le temps que la condition soit valide. Pendant ce temps le scénario n’est pas en veille, mais bien actif et augmente la charge du processeur et la mémoire.

Il faut donc, dans la mesure du possible, utiliser les fonctions « Sleep » et « Wait », uniquement pour quelques secondes (10sec Max).

Autre défaut, vous ne pouvez pas voir les logs si vous arrêtez le scénario pendant le « Sleep » ou le « Wait », ce qui peut être gênant pour debugger votre scénario.

Le scénario utilise le Gateway Xiaomi, un détecteur de mouvement Xiaomi et une prise Xiaomi Plug.

Le principe :

  • La lumière s’allume en continu de 20:30 à 22:00, dès qu’un mouvement est détecté.
  • En dehors de cette plage horaire, la lumière s’allume dès qu’un mouvement est détecté et s’éteint lorsqu’il n’y a plus de mouvement, avec un minimum de 3 minutes pour éviter que la lumière ne clignote trop.
  • Lors des extinctions, j’ai ajouté une double vérification, car il m’est arrivé que l’action « Off » ne soit pas reçue correctement par la prise et donc la lumière restait allumée.

Mode du scénario = Provoqué.

Le scénario se déclenche sur la détection de mouvement.

Pour cela, on à le « Old way » qui consiste à sélectionner la commande dans le scénario :

Événement : #[Couloir chambre][Mouvement][status]

Et on a le « Good way » qui consiste à lancer le scénario directement depuis la commande. Cette technique sera à privilégier dans la V3 de Jeedom.

  • Aller dans l’équipement, cliquer sur la roue crantée, aller dans « Configuration avancée« .
  • Dans « Action sur la valeur » choisir « égal« , mettre « 1 » en valeur et « 0 » dans « plus de (min)« .
  • Cliquer sur « + Ajouter« .
  • Saisir « scenario » (sans accent) dans le champ.
  • Sélectionner le scénario d’allumage des lumières.
  • Choisir « Start » dans action.
  • Sauvegarder.

Nous avions déjà utilisé cette technique dans l’article Alertes Monitoring.

Création du scénario

SI #[Couloir][Lumière du couloir][Status]# == 0 ALORS

Pour commencer, on vérifie le statu de la lumière est si elle est éteinte, alors :

SI #time# >= 2030 ET #time# < 2200 ALORS

#[Couloir][Lumière du couloir][On]#

Si on est entre 20:30 et 22:00, alors on allume la lumière.

A 2200 FAIRE

#[Couloir][Lumière du couloir][Off]#

On programme l’extinction de la lampe pour 22:00.

SI #[Couloir][Lumière du couloir][Status]# == 1 ALORS

C’est là que je fais une double vérification. Ceci est facultatif si vous n’avez pas de raté dans l’envoi des actions.

Start scénario :[Couloir][Lumières][Off Lumière couloir]

Si malgré l’action « Off » la lumière est toujours allumée, alors je lance un scénario appelé « Off Lumière couloir »

Détail du scénario de verification :
SI #[Couloir][Lumière du couloir][Status]# == 1 et #[Couloir][Mouvement][Calme depuis : ]# >= 1 ALORS
   #[Couloir][Lumière du couloir][Off]#
   (sleep) Pause de : 1 seconde
          Start scénario : [Couloir][Lumières][Off Lumière couloir]
SINON
    message : Extinction réussi à formatTime(#time#)

Si la lumière est allumée et qu’il n’y a plus de mouvement, alors j’éteins la lumière et je relance le scénario jusqu’à ce que la lumière soit vraiment éteinte.

Pour être informé des erreurs, on peut ajouter un message du genre : « Extinction raté à formatTime(#time#) » avant l’action « Off » et « Extinction réussi à formatTime(#time#) » après le « Sinon« .

SINON

#[Couloir][Lumière du couloir][On]#

Si on n’est PAS entre 20:30 et 22:00, alors on allume la lumière.

DANS 3 FAIRE

SI #[Couloir][Mouvement][Calme depuis : ]#>=1 ALORS

#[Couloir][Lumière du couloir][Off]#

On programme l’extinction de la lampe dans 3 minutes, s’il n’y a pas de mouvement.

SI #[Couloir][Lumière du couloir][Status]# == 1 ALORS
(scenario) start de [Couloir][Lumières][Off Lumière couloir]

On relance la verification de l’extinction.(facultatif).

SINON

S’il y a un mouvement de détecté :

DANS 1 FAIRE
(scenario) start de [Couloir][Lumières][Lumière Couloir Chambre]

On relance le scénario dans 1 minute, pour refaire les tests.

SINON

Pour finir, si la lumière est allumée lorsque le scénario est provoqué par un mouvement avant l’extinction, ou par la fonction start scénario, alors on refait les tests, mais seulement pour l’extinction.

Je ne vous fais pas le détail, car c’est la même chose que la première partie, mais en plus simple .

Si vous avez des questions n’hésitez pas à laisser un commentaire.

SI #time# >= 2030 ET #time# < 2200 ALORS

A 2200 FAIRE

#[Couloir][Lumière du couloir][Off]#

SI #[Couloir][Lumière du couloir][Status]# == 1 ALORS
(scenario) start de [Couloir][Lumières][Off Lumière couloir]

SINON

SI #[Couloir][Mouvement][Calme depuis : ]#>=1 ALORS

#[Couloir][Lumière du couloir][Off]#

SI #[Couloir][Lumière du couloir][Status]# == 1 ALORS
(scenario) start de [Couloir][Lumières][Off Lumière couloir]

SINON

DANS 1 FAIRE
(scenario) start de [Couloir][Lumières][Lumière Couloir Chambre]

Variations

  1. Pour réduire le nombre de commandes, on peut supprimer les 2 #[Couloir][Lumière du couloir][On]# et en mettre un seul avant le SI #time# >= 2030 ET #time# < 2200 ALORS.
  2. Si vous ne voulez pas faire la verification de l’extinction via un scénario, si cela suffit, vous pouvez essayer de rajouter ce code  :
#[Couloir][Lumière du couloir][Off]#
sleep 2
#[Couloir][Lumière du couloir][Off]#

Conclusion

Ce scénario est plus optimisé que les anciens, si vous ne voulez pas refaire tous vos scénarios à cause du « Sleep » et du « Wait » essayez de les remplacer par les blocs « Dans » ou « A« .

Retrouvez la liste des plugins, les scénarios, les images et le matériel compatible Jeedom sur la page: Matériel, Plugin et plus.

N’oubliez pas non plus les bons plans et les ventes flash.

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

Cet article a 19 commentaires

  1. Bonjour,

    Superbe amelioration, merci de ton partage!
    Seul petit detail, si je puis me permettre, que je ferai dans ce cas:
    cette heure est tellement variable par rapport au cycle du saison, donc de l’heure du coucher du soleil, et egalement de l’orientation de la piece visee.
    Personnellement, juste au lieu de prendre une heure fixe, je prendrai la valeur « coucher du soleil » du plugin weather, ou autre.

    Qu’en penses-tu? Merci,
    Cordialement

    Cedric

    1. Merci à toi pour ton retour.
      Oui effectivement, j’utilise d’ailleurs les heures du soleil pour mes autres scénarios lumière. La je ne l’utilise pas car c’est dans un couloir sans fenêtre du coup il fait sombre même en journée.
      Personnellement j’utilise le plugin héliotrope suite à un bug du plugin Weather mais apparemment c’est réglé.
      voila se que je fais dans mon salon par exemple :
      SI #time# < = time_op(#[Informations][Lyon Jour Nuit][Lever du Soleil]#,+10) OU #time# >= time_op(#[Informations][Lyon Jour Nuit][Coucher du Soleil]#,+10) ALORS…
      Cordialement,
      Guillaume.

  2. Bonjour. Peut-on réduire drastiquement le temps entre l’allumage et l’extinction de la lumière avec le détecteur xiaomi ?
    Imaginons dans des toilettes je voudrais 30sec. Mais j’ai cru lire que le détecteur xiaomi avait un temps d’attente de 2mn.

  3. Je sais que tout le monde a des besoins différents et doit faire avec son matériel.
    Mais ça me parait bien compliqué ; pour ma cuisine et ma cave aussi, j’utilise un scénario simple, qui réagit à la seconde près et ne surcharge pas ma box.
    Si il a une présence ET que la luminosité est insuffisante, la lumière s’allume, quelque soit l’heure
    Elle ne s’éteint que lorsque personne n’est là DEPUIS 5 mn
    Le déclenchement est fait par le capteur de présence et la capteur de luminosité, mais le scénario se lance toutes les 5 mn pour vérifier qu’il y a bien eu une absence.

    Impossible de mettre une image dans le commentaire, donc j’ai exporté le scénario en texte via Jeedom
    Si ça peut servir a quelqu’un et si ça vous correspond, n’hesitez pas.

    – Nom du scénario : lumiere cuisine
    – Objet parent : Cuisine
    – Mode du scénario : all
    – Programmation : */5 * * * * *
    – Evènement : #[Cuisine][Cuisine][Présence]#
    – Evènement : #[Cuisine][Cuisine][Luminosité]#

    SI #[Cuisine][Cuisine][Luminosité]# 1
    )

    SINON

    SI lastChangeStateDuration(#[Cuisine][Cuisine][Présence]# ,0) > 300
    ALORS
    #[Cuisine][19FGS-211 Simple Charge][Off]# – Options : Array
    (
    [enable] => 1
    )

    SINON

    1. Bonsoir,
      Je ne sais pas pourquoi tu ne peux pas coller le reste du texte, j’ai déjà fait des commentaires plus long.

      Pour ton scénario je vois ce que tu veux dire mais je ne comprends pas le but de faire un Cron toutes les 5 minutes pour tester s’il y a un mouvement, c’est un peu gourmand car même la nuit ou lorsqu’il n’y a personne le scénario est lancé et donc fait fonctionner Jeedom pour rien.

      Après comme tu dis « tout le monde a des besoins différents et doit faire avec son matériel. » l’important c’est que le fonctionnement au quotidien soit satisfaisant.
      Guillaume.

  4. Je relance tout les 5mn, parce que si tu n’est plus là, il n’y a plus de détection et donc le capteur de présence est retombé,
    Comment relancer le scénario si la luminosité ne change pas, par exemple la nuit?
    sans la relance, l’extinction se ferait à la détection de mouvement et il y aurait un nouvel allumage, c’est le cron la clé.

    L’allumage trop fréquent des ampoules, n’est pas très bon, avec 10mn ça serait encore mieux.

    1. Effectivement il faudrait que je regarde ton scénario en entier.
      Pourquoi ne pas utiliser un bloc DANS 5 ou 10 minutes programmé après le dernier mouvement et tu le relance ou pas en fonction de tes critères (Mouvement, Luminosité…).
      Tu as un Cron grâce au bloc DANS mais qui ne se lance qu’après un mouvement ou allumage de la lumière.

  5. Tu as raison, mais je teste encore plus simple
    Avec 2 conditions simples à la suite sans condition negative
    je te tiens au courant

    SI lastChangeStateDuration(#[Cave][20MultiSensor 6 (ZW100)][Présence]# ,0) > 300
    ALORS
    #[Cave][29Powernode 1][Off]#
    SINON

    SI #[Cave][20MultiSensor 6 (ZW100)][Présence]# == 1
    ALORS
    #[Cave][29Powernode 1][On]#
    SINON

  6. Je suis un peu fatiqué, ca ne fonctionne pas bien sûr, je refait avec DANS et des SI imbriqué

    SI #[Cave][20MultiSensor 6 (ZW100)][Présence]# == 1
    ALORS
    #[Cave][29Powernode 1][On]#
    SINON

    DANS 5
    FAIRE

    SI lastChangeStateDuration(#[Cave][20MultiSensor 6 (ZW100)][Présence]# ,0) > 240
    ALORS
    #[Cave][29Powernode 1][Off]#

    SINON

    1. Salut,
      Moi je ferais un truc comme ça :

      SI #[Cave][29Powernode 1][Off]# ALORS
      #[Cave][29Powernode 1][On]#
      DANS 5 FAIRE
      SI #[Cave][20MultiSensor 6 (ZW100)][Présence]# == 0 ALORS
      #[Cave][29Powernode 1][Off]#
      SINON
      Relance ton scénario
      SINON
      SI #[Cave][20MultiSensor 6 (ZW100)][Présence]# == 0 ALORS
      #[Cave][29Powernode 1][Off]#
      SINON
      Relance ton scénario

      Si c’est éteint alors j’allume et dans 5 minutes si ya pas de mouvement j’éteins sinon je relance le scénario.
      Sinon si c’est allumé et qu’il n’y a pas de mouvement j’éteins sinon je relance le scénario.

      C’est un peu la même chose que le scénario de l’article sans le test de la plage 20:30 22:00 et le double test d’extinction.
      Bon courage.
      Guillaume.

  7. Bonjour.
    Je cherche à faire le même type de scénario, mais je souhaite que cela ne soit allumé uniquement que sur détecteur de présence ET si la luminosité est en dessous de x LUX. (Fibaro).
    En fait, je veux que la lumière fonctionne la nuit si présence.
    Mon scénario fonctionne, mais je n’ai pu que trouver la solution sleep. pour la durée d’allumage de la lampe.
    Aurais-tu une autre solution ?

    1. Bonjour,
      Le Sleep n’est pas à bannir complètement il faut juste éviter de l’utiliser avec des délais trop long, je dirais supérieure à 60 secondes.
      La bloc « Dans » est donc la solution pour les durées > à 60 s.
      Je pense qu’il y a la solution à ton problème dans l’article.
      Bon courage.
      Guillaume.

  8. Bonjour,
    Je cherche a allumer une pièce SI la porte d’entrée s’ouvre, ET le soleil s’est couche, ET que l’Interrupteur de cette piece a été éteint depuis plus de 3 minutes.
    J’ai configuré le scénario suivant.
    SI
    #[Détecteur][Porte Entree][Etat]# == 1 ET #time# > #[Domotique][Maison_Helio][Coucher du Soleil]# ET lastChangeStateDuration(#[Interrupteur Entrée][Interrupt Entree][Etat 1]# == 0) >180
    ALORS
    #[Interrupteur Entrée][Interrupt Entree][On 1]#

    Tout fonctionne, sauf la prise en compte de la dernière condition (allumer Entrée uniquement si l’interrupteur a été éteint il y a plus de 3 minutes).
    La commande LastCHangeStateDuration ne semble pas évidente (NB. j;ai bien historisé les données de l’interrupteur). Avez-vous des conseils ou alternatives?
    Grand merci d’avance,

    1. Bonjour
      C’est la fonction qui n’est pas saisi correctement.
      Il ne faut pas mettre ==0 mais ,0.

      lastChangeStateDuration(commande,valeur) : donne la durée en secondes depuis le dernier changement d’état à la valeur passée en paramètre.Attention, la valeur de l’équipement doit être historisée.

      Ex : lastChangeStateDuration(#[Salle de bain][Hydrometrie][Humidité]#,0) : renvoie 300 si cette valeur est passée à 0 la dernière fois il y a 5 minutes (même si depuis sa valeur a changé)

  9. Bonjour,
    Merci pour le tutos ainsi que pour les autres dont je me sert beaucoup.

    J’aimerais cependant savoir, dans ton scénario, tu a mit « calme depuis » qui de base est l’absence de mouvement du plugin, tu l’a mise à 1. Si par exemple, je le met a 5mns, la lumière s’éteindra si 5mns après la détection du mouvement il n’y a pas de mouvement à 5mns précises? Ou si je bouge au bout de 3mns, puis plus rien pendant 2mns, il ne prendra pas la valeur?

    1. Bonjour et merci pour votre message
      La commande absence de mouvement de remets à zéro des qu’il y a un mouvement.
      C’est donc 5 minutes après le dernier mouvement.

  10. Bonjour,

    tout d’abord bravo pour ton blog, les differentes publications sont ultra précises et bien illustrés.
    J’ai une question à propos de la commande « Calme depuis : » il semblerai que l’unit de retour de cette commande (no_motion) soit des secondes et non des minutes, par conséquent dans ton scenario si on veut 1min il faut mettre 60.
    la valeur max de cette commande est 1800 qui correspond à 30min.

    Tu confirmes ?

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.