Bonjour,
Je ne voudrais pas en rajouter, la gestion de l’éclairage avec un détecteur de mouvement étant somme toute assez compliquée pour obtenir un résultat satisfaisant, mais je vous fait partager ici la méthode que j’ai appliquée pour résoudre ce problème, et ce sans utiliser de variables ou le plugin mode.
A noter par ailleurs que c’est bien plus simple de le gérer avec un détecteur de présence (présence == 1 => allumée, sinon on éteint, tout simplement).
1.- Les objectifs :
Le but est donc d’allumer la lumière (de la cuisine en l’occurrence) sur une détection de mouvement.
Tant qu’il y a quelqu’un, ou du moins tant qu’il y a eu au moins une détection de mouvement pendant le temps de réarmement du détecteur de mouvement (en général 90 secondes) + une période supplémentaire à définir (ici 2 minutes), la lumière doit être maintenue. De plus, il ne doit pas y avoir d’extinction de la lumière tant qu’il y a quelqu’un (qui bouge), même brièvement.
Et donc x minutes après la RAZ de la détection de mouvement (présence == 0), on éteint la lampe.
2.- La méthode :
J’utilise pour ce faire deux scénarios : un pour l’allumage, l’autre pour l’extinction de la lampe.
Le principe :
La ligne éclairage en haut représente la lumière (éteinte/allumée/éteinte), la ligne détection en bas représente les moments où le détecteur est activé (à 1).
Il y a donc détection de présence (à gauche). Le scénario ‹ éclairage ›, déclenché par cette détection, va allumer la lampe (‹ Eclairage ON ›).
Le détecteur de mouvement va remettre l’info ‹ présence › à 0 à T0 après 90 secondes, ce qui provoque le déclenchement du second scénario ‹ extinction ›. La première chose que celui-ci va faire, c’est programmer 2 (ou autre) minutes après, avec un bloc DANS … FAIRE… (important ! pas de SLEEP ou de WAIT bloquants) l’extinction de la lampe.
2 minutes après, on teste (dans le bloc DANS…FAIRE…) s’il y a eu une nouvelle détection de mouvement depuis. Si oui, on ne fait rien (il y a donc toujours quelqu’un), mais on supprime toutes les occurrences à venir de ce bloc (avec la précieuse instruction remove_inat), et sinon, on éteint la lumière.
Voilà ce que ça donne :
Scénario pour allumer
(on peut s’affranchir bien sûr du premier test sur la présence ou non à la maison et de la luminosité, des tests sur l’heure, de la définition du niveau de luminosité en fonction de la période dans la journée, ou du contrôle sur l’allumage effectif de la lampe).
Scénario pour éteindre
(la suppression des tâches de réévaluation programmée se fait avec l’instruction
remove_inat. Idem, on peut s’affranchir de la vérification de l’extinction de la lampe).
Ça marchait très bien chez moi, mais j’ai remplacé depuis mes détecteurs de mouvements par des détecteurs de présence, plus pratiques et avec un temps de réarmement de 15 secondes seulement, plus adapté pour des pièces avec du passage.