Gestion éclairage avec detecteur et interrupteur

Bonjour,

Je vous partage ici le scénario suivant : j’ai un capteur de passage qui allume ‹ le bois › (sous la maison, entrée secondaire) la nuit et ensuite la lumière s’éteint au bout de 60 secondes. Rien de bien extraordinaire.

La problématique résolue par ce scénario : lorsque j’allume manuellement ces lumières, mais que je passe devant le capteur, je veux que la lumière reste allumée. Je ne veux pas que les 60 secondes s’appliquent.

Ces lumières sont sur du zigbee qui donne un retour d’état.
Je n’utilise pas de virtuels ou autres astuces. Je ne crois pas avoir vu de post similaires.
Si c’est le cas, désolé, mon post est pour aider au cas où.

Bonjour,

Merci pour cet exemple de scénario.

J’ai 2 questions

1/ Pourquoi supprimer les variables ? Si le scénario sert souvent vous créer et supprimez en permanence des variables ? Quel intérêt

2/ Le SI avec le ALORS vide et SINON
Pourquoi ne pas changer la condition et faire un ALORS et pas de SINON ?

Bonjour,
Il existe surement d’autres moyens…

  • La variable EnCours permet de savoir si on est dans la première ou deuxième détection
  • EtatOriginal stocke l’état initial de la lampe
  • Au premier déclenchement :
    • Si la lampe est allumée, ne rien faire
    • Si la lampe est éteinte, l’allumer et programmer l’extinction
  • Au second déclenchement :
    • Si elle était éteinte initialement, l’éteindre
    • Si elle était allumée initialement, ne rien faire
  • On réinitialise les variables à la fin

J’ai posé la question à ‹ Claude › (AI) de mettre les variables à zero en fin du else, voici sa réponse :

Les deux approches sont possibles, mais supprimer les variables (plutôt que les mettre à 0) présente quelques avantages :

1. Propreté :

** Évite d’avoir des variables qui traînent inutilement dans le système*
** Libère de la mémoire (même si c’est minime)*

2. Sécurité :

** En supprimant les variables, on est sûr qu’au prochain cycle tout recommencera from scratch*
** Si on met à 0, il pourrait y avoir des cas où la variable existe déjà mais n’est pas à 0 (en cas de bug ou d’arrêt inattendu du scénario)*

3. Logique :

** La condition initiale vérifie si la variable n’existe pas OU est à 0*
** En supprimant la variable, on revient exactement dans les conditions initiales*

Mais tu as raison, mettre les variables à 0 fonctionnerait aussi. C’est plus une question de préférence et de « bonne pratique » que de nécessité technique.

Bonjour,
Moi pareil, il y a des petites choses qui m’interpellent…

Chacun sa logique (il faut juste s’y retrouver…), mais au lieu d’un :
SI condition == x ALORS [vide] SINON [Faire ceci, cela…],
il vaut mieux voir :
SI condition != x ALORS [Faire ceci, cela…]
C’est déjà plus lisible et ‹ logique ›.

Concernant les variables, visiblement ‹ Claude › ne sait pas qu’on peut utiliser des tags dans Jeedom :slightly_smiling_face:.
Vois la doc ici, mais en gros, un tag est une variable temporaire, interne à un scénario donné. Elle n’existe que pendant l’exécution du scénario, et est équivalent donc à [je crée une variable] [actions…] [je supprime cette variable].
Elle ne peut donc pas servir à mémoriser une valeur ou en transmettre une (sauf via l’option ‹ tag › transmis lors de l’appel à un scénario, voir la doc…)

L’utilisation du SLEEP : ne pas oublier que l’instruction SLEEP est bloquante (comme un WAIT d’ailleurs). Elle ne devrait être utilisée que pour des périodes de quelques secondes, pas plus. Le scénario se met en attente pendant x secondes (60 ici), ce qui monopolise des ressources (threads) pour rien en gros, et peut même provoquer des dysfonctionnements (pour peu qu’il n’y ait pas vraiment de gestion temporelle de l’ensemble des scénarios)…
Mieux vaut mettre un DANS 1 minute, FAIRE ceci/cela.
Et ça tombe bien, SLEEP 60 est équivalent à DANS 1 minute…

Alors oui, ca marche sûrement comme ça (la logique est bonne), mais…

:wink:

Cool. Merci pour tout ça.
Je sents que je vais encore passer qqs heures sur mes scénarios :sweat_smile:
Et le commentaire sur les best practice c’est aussi Claude, pour info. Quel vantard :grin:

1 « J'aime »