Fonctionnement du déclencheur #start# si reboot programmé - Jeedom v4.4.19

Bonjour à tous,

J’ai un petit souci avec le déclencheur #start# avec Jeedom en version 4.4.19, mais j’ai pu mettre en place une solution palliative que je vous expose ci-dessous.

Pour contextualiser ce problème, j’ai un petit scénario qui provoque tous les mois un reboot préventif de Jeedom, ce qui permet entre autre d’éviter certains problèmes potentiels…
Ce scénario est celui-ci (simplifié ici pour mes tests, mais le principe reste le même) :

Les déclencheurs :

Le principe est donc le suivant :

  • périodiquement (tous les mois), le scénario se lance et comme le trigger n’est pas ‹ start › mais ‹ schedule ›, le test part sur la branche SINON et va déclencher un reboot après 15 secondes et un message d’alerte.
  • Après le redémarrage de Jeedom, le scénario est donc redéclenché avec l’événement #start#, et vu que le trigger qui a déclenché ce scénario est cette fois ‹ start ›, il est censé me notifier par mail du redémarrage.

A priori, je ne vois rien qui pourrait ne pas marcher…

Le problème que j’ai constaté avec ce scénario :

La partie reboot périodique fonctionne très bien.
Exemple avec un reboot programmé ce jour à 10h34 sur mon RPi de test.

30 (2)

Par contre, après le redémarrage de Jeedom je ne reçois aucune notification comme prévu.

Le log du scénario montre ceci :

Et là, j’ai un peu de mal à comprendre ce qu’il trace exactement :
→ il se lance à 10:34:02, exécute le test (trigger = schedule) et lance donc la notification sous forme d’alerte et le reboot de jeedom à 10:34:17, soit 15 secs après. Ce qui est normal jusque là…

APRES le reboot, le log se complète en reproduisant exactement les mêmes traces avec les mêmes heures, sauf qu’il se termine avec cette ligne : [2024-11-11 10:34:21][SCENARIO] Fin correcte du scénario.

il n’y a donc pas de notification du redémarrage, et le déclencheur #start# n’est pas pris en compte. Il semble se contenter de recopier et compléter le log précédent, mais sans plus.

J’ai donc effectué quelques recherches et quelques tests complémentaires.
Mes tests démontrent que si l’ordre de redémarrage est externe au scénario, provoqué par exemple par :

  • un ordre reboot envoyé en SSH,
  • un ordre reboot envoyé par un scénario distinct (i.e. ce scénario est scindé en deux scénarios distincts, avec pour chacun son propre déclencheur : une programmation et l’autre avec #start#),
  • ou un ordre reboot simulé par l’exécution par un autre scénario de ce code : jeedom::event('start'); (voir ici, merci à @Phpvarious pour cette astuce !)
  • un arrêt électrique.

→ dans tous ces cas, cela fonctionne bien comme prévu :slightly_smiling_face:. Le trigger #start# est bien pris en compte, aucun souci, et le scénario envoie bien le mail :

J’ai testé aussi en modifiant un peu la syntaxe du déclencheur #start# :

Cette syntaxe ne sera valable qu’avec la prochaine version de Jeedom en v4.5 (voir ici), mais j’ai voulu en avoir le cœur net. Sans surprise, ça ne fonctionne pas en v4.4.19.

En résumé :

  • si le redémarrage est dû à un événement externe : un ordre SSH, par un autre scénario, une perte d’alimentation,… c’est OK.
  • si le redémarrage est dû à une programmation et qu’un seul scénario gère les deux actions : c’est KO.

Solution palliative :
Pour éviter ce comportement, il suffit donc de scinder ce scénario en deux parties :
Scénario 1 :

  • déclencheur = programmation récurrente
  • scénario = envoi d’une notification et reboot.

Scénario 2 :

  • déclencheur = #start#
  • scénario = envoi d’une notification du redémarrage.

Pour info, la page santé de mon Jeedom de test (certains plugins sont désactivés) :

(Jeedom et Debian 12 sont bien à jour).

Est-ce que quelqu’un a pu constater le même comportement de ce déclencheur dans ce cas particulier, et est-ce normal ? Doit-on s’attendre à la même chose avec la future v4.5 ?
Merci !

Bonjour.

Juste pour voir, car en fin de compte, le scénario semble se relancer aussi, car l’heure est toujours dans la minute programmée. Pouvez vous faire un wait 55 par exemple, avant de redémarrer.
Ainsi, après le redémarrage, il ne sera pas là même minute.
Le start devrait alors être ok.

Ou alors, c’est simplement que le scénario exécute le redémarrage, mais se termine qu’après le redémarrage (au moins pour dire, j’ai terminé), car la commande doit attendre un retour et ne rend pas la main sans ce retour.

Il faut peut être cocher une option pour ce scénario, pour l’exécution des commandes en //

1 « J'aime »

Merci @Fabrice,

J’ai testé les deux cas de figure, toujours avec ce scénario :

et les déclencheurs suivants :


(un programmé, un sur l’événement de redémarrage)

1.- Avec un SLEEP de 65 secondes au lieu de 15, histoire de passer la minute, ça ne change rien.
Voici ce que donne les logs, pour un déclenchement à 18h08’ et une pause de 65 secondes :

------------------------------------
[2024-11-11 18:08:02][SCENARIO] -- Début : Scenario execute automatiquement sur programmation.
[2024-11-11 18:08:02][SCENARIO] - Exécution du sous-élément de type [condition] : if trigger() == "start"
[2024-11-11 18:08:02][SCENARIO] Evaluation de la condition : ["schedule" == "start"] = Faux
[2024-11-11 18:08:02][SCENARIO] - Exécution du sous-élément de type [action] : else
[2024-11-11 18:08:02][SCENARIO] Ajout de l'alerte : [18:8:2]  **** ATTENTION : Reboot programmé dans 65 secondes ****
[2024-11-11 18:08:02][SCENARIO] Pause de 65 seconde(s)
[2024-11-11 18:09:07][SCENARIO] Lancement du reboot de jeedom
------------------------------------
[2024-11-11 18:08:02][SCENARIO] -- Début : Scenario execute automatiquement sur programmation.
[2024-11-11 18:08:02][SCENARIO] - Exécution du sous-élément de type [condition] : if trigger() == "start"
[2024-11-11 18:08:02][SCENARIO] Evaluation de la condition : ["schedule" == "start"] = Faux
[2024-11-11 18:08:02][SCENARIO] - Exécution du sous-élément de type [action] : else
[2024-11-11 18:08:02][SCENARIO] Ajout de l'alerte : [18:8:2]  **** ATTENTION : Reboot programmé dans 65 secondes ****
[2024-11-11 18:08:02][SCENARIO] Pause de 65 seconde(s)
[2024-11-11 18:09:07][SCENARIO] Lancement du reboot de jeedom
[2024-11-11 18:09:13][SCENARIO] Fin correcte du scénario

2.- Idem, mais en cochant la case ‹ la commande s’exécute en // › en regard de la commande de reboot ici :

Au résultat, ca fonctionne (avec 15 ou 65 secondes de pause) !
Voici les logs, qui sont un peu différents :

------------------------------------
[2024-11-11 18:27:02][SCENARIO] -- Début : Scenario execute automatiquement sur programmation.
[2024-11-11 18:27:02][SCENARIO] - Exécution du sous-élément de type [condition] : if trigger() == "start"
[2024-11-11 18:27:02][SCENARIO] Evaluation de la condition : ["schedule" == "start"] = Faux
[2024-11-11 18:27:02][SCENARIO] - Exécution du sous-élément de type [action] : else
[2024-11-11 18:27:02][SCENARIO] Ajout de l'alerte : [18:27:2]  **** ATTENTION : Reboot programmé dans 65 secondes ****
[2024-11-11 18:27:02][SCENARIO] Pause de 65 seconde(s)
[2024-11-11 18:28:07][SCENARIO] Execution du lancement en arriere plan : scenarioElement6329::Gq6XRzTpDWqbPFk7::1731346087
[2024-11-11 18:28:07][SCENARIO] Fin correcte du scénario
------------------------------------
[2024-11-11 18:28:07][SCENARIO] Lancement en arrière-plan de : scenarioElement6329::Gq6XRzTpDWqbPFk7::1731346087
[2024-11-11 18:28:07][SCENARIO] Lancement du reboot de jeedom
------------------------------------
[2024-11-11 18:28:07][SCENARIO] Lancement en arrière-plan de : scenarioElement6329::Gq6XRzTpDWqbPFk7::1731346087
[2024-11-11 18:28:07][SCENARIO] Lancement du reboot de jeedom
------------------------------------
[2024-11-11 18:29:22][SCENARIO] -- Début : Scenario execute sur evenement : #start#.
[2024-11-11 18:29:22][SCENARIO] - Exécution du sous-élément de type [condition] : if trigger() == "start"
[2024-11-11 18:29:22][SCENARIO] Evaluation de la condition : ["start" == "start"] = Vrai
[2024-11-11 18:29:22][SCENARIO] - Exécution du sous-élément de type [action] : then
[2024-11-11 18:29:22][SCENARIO] Exécution de la commande [Fonctions][Mail Daniel][Envoyer] avec comme option(s) : {"background":"0","title":"Reboot","message":"Jeedom a \u00e9t\u00e9 red\u00e9marr\u00e9 \u00e0 18h29"}
[2024-11-11 18:29:22][SCENARIO] Fin correcte du scénario

On voit que d’une part, le reboot est bien lancé dans une tâche en parallèle, et d’autre part, après le redémarrage (et un certain temps, 1’15" ici), l’événement #start# est bien pris en compte cette fois.

Donc merci @Fabrice de m’avoir aiguillé sur cette solution, je n’y avais pas pensé de prime abord… :+1:

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.