Explication de la fonction lastScenarioExecution fournie par la documentation de Jeedom :

  • lastScenarioExecution(scenario) : Donne la durée en secondes depuis le dernier lancement du scénario. 0 : Le scénario n’existe pas
  • lastScenarioExecution(#[Salle de bain][Lumière][Auto]#) Renvoie 300 si le scénario s’est lancé pour la dernière fois il y a 5 min

La documentation est pour moi légèrement incomplète et peut prêtée à confusion.

Pour éviter tout problème, utiliser l'ID du scénario dans l'argument (contenu de la parenthèse) de la fonction.

Exemple avec un scénario dont l'ID est 5 : lastScenarioExecution(5)

La fonction lastScenarioExecution ne peut pas être utilisée dans le scénario dont le temps doit être calculé, le temps d'exécution restera toujours à 0, le scénario devant s'exécuté pour utiliser la fonction... Il faudra donc passer par un scénario intermédiaire.




Le scénario utiliser pour l'exemple est :

Un capteur de présence déclenche un scénario qui fait clignoter les lumières (Via le plugin Philips Hue), déclenche une alerte vocale sur les Google Home (Via le plugin Google Cast) et envoie une notification dans un channel discord (Via le plugin Discord Link).

Aucun de ces plugins n'est obligatoire, c'est juste ceux que j'utilise.


Scénario N°1, c'est le scénario intermédiaire (ID : 9) celui qui va gérer la détection de mouvement :




Mode du scénario : Provoqué (par le détecteur de mouvement).
Evénement : Lorsqu'un mouvement est détecté via le capteur Philips Hue.

Le scénario est donc provoqué par le détecteur de mouvement.



lastScenarioExecution(10) : Vous voyez ici que l'ID du scénario vérifié est 10, c'est le scénario principal que nous verrons plus bas.

Fonctionnement de ce scénario :

SI le scénario 10 n'a pas été exécuté dans les 180 dernières secondes
    ALORS nous exécutons le scénario [Couloir - Rez-de-chaussee][Sécurité][Alerte rouge], c'est le scénario ayant l'ID 10 + nous ajoutons dans les logs* la valeur de lastScenarioExecution(10).
SINON nous envoyons une notification (Via le plugin Discord Link) pour signaler qu'un mouvement a été détecté alors qu'une alerte a déjà été signalée dans les 180 secondes précédentes.

*Exemple de l'ajout au log :
[2020-05-13 20:06:55][SCENARIO] Start : Scenario execute automatiquement sur evenement venant de : [Couloir - Rez-de-chaussee][Capteur du couloir du RDC][Presence].
[2020-05-13 20:06:55][SCENARIO] Exécution du sous-élément de type [condition] : if
[2020-05-13 20:06:55][SCENARIO] Evaluation de la condition : [4731 >= 180] = Vrai
[2020-05-13 20:06:55][SCENARIO] Exécution du sous-élément de type [action] : then
[2020-05-13 20:06:55][SCENARIO] Lancement du scénario : Alerte rouge options : []
[2020-05-13 20:06:55][SCENARIO] Log : 4731
[2020-05-13 20:06:55][SCENARIO] Fin correcte du scénario

Scénario N°2, c'est le scénario ayant l'ID 10 :




Ici nous vérifions d'abord si l'heure qu'il est, est comprise entre 6h et 21h. Si oui, nous envoyons une notification confirmant l'envoi pendant l'horaire de jour, nous faisons parler les appareils Google pour signaler un mouvement, et nous faisons clignoter les éclairages.
Si l'heure qu'il est, est comprise entre 21h00 et 23h59, ou entre 00h00 et 5h59, si c'est le cas, nous envoyons une notification confirmant l'envoi pendant l'horaire de nuit et nous faisons clignoter les éclairages.