Recherche à identifier la dernière action qui a allumé un éclairage

Bonjour la comm.
Je dispose d’un éclairage extérieur piloté par 3 télécommandes, un interrupteur fibaro et des scenarios. Pour les besoins d’une nouvelle source de pilotage (un détecteur de mouvements extérieur) je cherche à connaître quelle est la dernière action qui a allumé les lampes. J’ai cherché, j’ai rien trouvé. La seule sol. que je voie est que chacune des actions, plutôt que d’allumer mes lampes, lance un scenario qui assigne une valeur à une variable puis allume les lampes. Quelqu’un a une meilleure idée ?

Merci d’avance

Mes infos de config

  • Jeedom Core : 4.4.19 (master)
    DNS Jeedom : oui

Statut Démon : Stoppé (NA)
Version JC : 1.11.0 stable
Version OS : debian 11.11
Version PHP : 7.4.33
Bin : ok / vNotif_2

Equipements :
Tablette Huawey : v1.8.0 stable sur android [os : 26] (polling) - PA
Synoptique living : v1.8.0 stable sur android [os : 24] (polling) - PA
Mobile Claude : v1.8.0 stable sur android [os : 28] (polling) - PA
Mobile Liliane : v1.8.0 stable sur android [os : 28] (polling) - PA

Plugin’s
Jeezigbee et Z-Wave JS à jour au 01-01-25.

Déjà est-ce que toute les commandes possibles pour la lampe en question passent par Jeedom, ou est-ce qu’il y a des commandes qui passent en direct (je pense aux télécommandes)

S’il y a des commandes direct, ça va être compliqué pour Jeedom de savoir qu’est ce qui à actionné la lampe !

1 « J'aime »

Tout passe par Jeedom.
J’ai trouvé dans la config de mon FGS213 de chez Fibaro la possibilité de définir des actions en + de la commande ON ou OFF


Reste à voir si même possibilité sur les différents équipements (télécommandes). J’aurais préféré une fonction, tag, variable ou autre au niveau du scenario du genre « lastOnby » et le nom de l’équipement pour ne pas devoir mettre à jour une variable dans tous les coins de mon jeedom mais je n’ai rien trouvé au niveau du Core.

En fait je ne comprends pas trop ton besoin est ce que tu peux expliciter ?

Tu dis : Pour les besoins d’une nouvelle source de pilotage (un détecteur de mouvements extérieur) je cherche à connaître quelle est la dernière action qui a allumé les lampes

C’est à dire ? Tu veux un comportement spécifique sur ce détecteur ?

Perso plutôt que de créer une variable, je ferais un scénario de gestion de cet éclairage en passant si nécessaire un tag pour savoir qui à demandé telle ou telle action.
Si tu en dis plus sur ce que tu veux faire exactement on doit pouvoir te proposer quelque chose :slight_smile:

L’éclairage de la façade est actuellement actionné par 1 interrupteur mécanique derrière lequel se cache un fibaro FGS213, par 3 télécommandes diverses et un scénario (le lundi soir allumer de 20 à 22 car tous les lundis quelqu’un rentre dans cette fourchette d’heure. jusque là tout est OK aujourd’hui. Je viens d’y ajouter un détecteur de présence qui s’enclenche lorsque quelqu’un se présente dans l’allée de garage. actuellement, si éteint et détection mouvement les lampes s’allument et s’éteignent 90sec après : c’est OK. MAIS si la façade est allumée, que quelqu’un se présente, 90 sec après les lampes s’éteignent alors qu’il ne fallait pas puisque elles avaient été allumées pour une raison valable. C’est pas clair comme explication. En fait je veux faire au niveau de la détection de mouvement si éteint on allume et éteint après 90sec. Si allumé on ne fait rien.(ni allumer, ni éteindre). OUF, j’y suis :slight_smile: précision le détecteur est un Smabit AV2010/22B

Merci pour les précisions.

Dans ce cas la tu n’a pas tellement besoin de savoir qui à allumé avant toi. Si ton détecteur de mouvement déclenche un scénario, tu n’a qu’à conditionner ce dernier pour qu’il ne fasse rien si la lumière est déjà allumée ce n’est pas suffisant pour ton cas ?

Sinon, je fais la même chose avec la gestion de l’éclairage et minuterie par pièces. Je regarde ce qui à déclenché le scénario pour agir différemment en fonction :
Par exemple la détection de mouvement déclenche la tempo, alors qu’un capteur de luminosité (qui me sert à régler le niveau d’éclairage automatiquement) actualise le niveau d’éclairage mais ne relance pas la tempo.

D’accord avec toi pour le premier déclenchement du scénario mais si je m’agite dans l’allée, le scenario se relance, il prend l’info que la lampe est allumée (par mon premier déclenchement) et ne s’éteint plus. Je pense que le plus simple serait de placer une source de lumière dédiée au détecteur, dans ce cas rien à scénariser

Suffit de desactiver ce scenario quand la lampe est allumee par lautre scenario

Hum ce que je ferais dans ton cas, c’est d’utiliser le plugin mode pour gérer le mode d’éclairage.

Avec par exemple 3 modes :

  • On : allumage de la lampe
  • Off : extinction de la lampe
  • Tempo : lancement du scénario de gestion d’éclairage

Sur tes télécommandes, tu ne lance plus directement l’allumage de la lumière mais changes le mode.

Dans ton scénario de gestion de l’éclairage, si le détecteur de mouvement à délenché le scénario :

  • Si le mode actuel est en mode tempo alors tu programme l’extinction dans X minutes
  • Si le mode actuel est le mode On alors tu ne fais rien

En effet, je n’ai pas le réflexe « mode », je voulais faire la même logique avec une variable. A creuser. Merci pour l’aide.

Je crains de ne pas comprendre, je n’ai qu’un scénario qui se lance en cas de détection. Parlerais-tu d’une instance d’un même scénario ?
Voici la cfg de mon scenario

Ben non, si ton scenario est bien construis y a pas de raison.

Détection de mouvement
si lampe pas allumée
allumage lampe
dans x minutes éteindre lampe

Si pendant la temporisation le scenario se relance sur une nouvelle détection, le « DANS » reste actif, l’heure de programmation d’extinction de la lampe reste valide :

Nouvelle détection de mouvement
lampe déjà allumée
ne rien faire
(l’heure d’extinction du premier lancement reste valable)

Le seul inconvénient, c’est que tu passes forcement par un état éteint avec de pouvoir « prolonger » la durée d’extinction.

ça doit peut être pouvoir se contourner (les pros des scenario / core jeedom doivent sans doute savoir comment) en cherchant dans le scenario si une heure d’extinction est déjà programmée pour cette lampe, et dans ce cas de faire un « removeinat » et de programmer une nouvelle heure.
L’autre solution « noob » étant effectivement de passer par une variable booléen qui sert à se « souvenir » que la lampe à été allumée par la détection (les autres moyens d’allumage n’ayant pas d’importance ici) pour modifier l’heure programmée d’extinction (et d’effacement de la variable).

La je pense qu’on approche, tout se trouvera dans le scenario , jamais pensé à « inverser » la condition. Je creuse.

A condition de vérifier au premier lancement de la tempo que la lumière n’était pas déjà allumée avant et donc ne rien faire et ne pas toucher à la variable.

Bon perso j’aurais plus utilisé un mode mais oui ça semble possible :slight_smile:

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.

c’est très compliqué tout ça.

si l’idée est de laisser l’ampoule allumée 90s après la dernière détection, il suffit de rien faire d’autre que de reprogrammer le « DANS 90 » de toute façon si c’est le même scénario qui est lancé par 3 dispositifs, il annule la tâche dès qu’on la reprogramme, pas besoin de remove_inat.

à noter que le déclencheur est dans #trigger#.

si c’est 90s au total, il suffit de tester si c’est allumé et un AND avec les fonctions statistiques pour savoir depuis combien de temps c’est déjà allumé tout simplement. pour ça il faut historiser la commande.

Non, pas vraiment. 90 secondes, c’est le temps de réarmement minimal du détecteur de mouvement (des Aqara pour ma part). L’ampoule reste donc allumée pendant 90 secondes + 1 (ou 2,3 ou +) minutes, soit 2’30" min après la dernière détection.

Je ne suis pas sûr que ce soit plus ‹ simple › d’utiliser des fonctions statistiques (type time_between par exemple ?), où il faut dans ce cas rechercher dans l’historique et calculer un écart de temps à la seconde :wink:

La méthode que je propose n’est pas si compliquée d’ailleurs : 1 action pour l’un (allumage), et 1 test et deux actions pour l’autre (extinction), en choisissant bien les déclencheurs.
Mais je ne dis pas non plus que c’est la meilleure méthode…

Heu je trouve que deux scénarios pour gérer une seule fonction c’est quand même plus compliqué … Perso je fais quelque chose d’équivalent mais avec un seul scénario.
Tant que mon détecteur détecte une présence, il relance le scénario. Si un bloc DANS avait déjà été programmé précédemment, la nouvelle prog le remplace.

1 « J'aime »

:slight_smile: oulààà, que d’infos pour un premier janvier, j’ai mal aux cheveux.:slight_smile:
Bon, je dors dessus et reprend cela demain.

Un grand merci pour votre disponibilité et vos avis et conseils éclairés.

1 « J'aime »

Pour info, j’avais montré mon scénario de gestion d’éclairage ici : Domotisation Lumières + Mouvement (Jour/Nuit/Luminosité - #14 par Sigri

1 « J'aime »