Scenario s'exécute plusieurs fois

Bonjour

J’ai crée ce scénario (avec le déclencheur #user_connect#:

Qui m’envoie un mail pour m’informer de la connexion d’un utilisateur (sans savoir lequel, mais c’est un autre sujet :slight_smile: ):

Lorsque j’ouvre mon navigateur, et que je me connecte, le scenario s’exécute 4 fois, comme le montre les logs, et je reçois donc 4 mails:

------------------------------------
[2025-07-24 15:40:19][SCENARIO] -- Début : Scenario execute sur evenement : #user_connect#.
[2025-07-24 15:40:19][SCENARIO] - Exécution du sous-élément de type [action] : action
[2025-07-24 15:40:19][SCENARIO] Exécution de la commande [supervision][mail 1and1][supervision] avec comme option(s) : {"background":"0","title":"Connexion \u00e0 l'interface JEEDOM","message":"24 Juillet 2025 15h40\nUne connexion a \u00e9t\u00e9 effectu\u00e9e sur l'interface Jeedom."}
[2025-07-24 15:40:20][SCENARIO] Fin correcte du scénario
------------------------------------
[2025-07-24 15:40:20][SCENARIO] -- Début : Scenario execute sur evenement : #user_connect#.
[2025-07-24 15:40:20][SCENARIO] - Exécution du sous-élément de type [action] : action
[2025-07-24 15:40:20][SCENARIO] Exécution de la commande [supervision][mail 1and1][supervision] avec comme option(s) : {"background":"0","title":"Connexion \u00e0 l'interface JEEDOM","message":"24 Juillet 2025 15h40\nUne connexion a \u00e9t\u00e9 effectu\u00e9e sur l'interface Jeedom."}
[2025-07-24 15:40:21][SCENARIO] Fin correcte du scénario
------------------------------------
[2025-07-24 15:40:21][SCENARIO] -- Début : Scenario execute sur evenement : #user_connect#.
[2025-07-24 15:40:21][SCENARIO] - Exécution du sous-élément de type [action] : action
[2025-07-24 15:40:21][SCENARIO] Exécution de la commande [supervision][mail 1and1][supervision] avec comme option(s) : {"background":"0","title":"Connexion \u00e0 l'interface JEEDOM","message":"24 Juillet 2025 15h40\nUne connexion a \u00e9t\u00e9 effectu\u00e9e sur l'interface Jeedom."}
[2025-07-24 15:40:22][SCENARIO] Fin correcte du scénario
------------------------------------
[2025-07-24 15:40:23][SCENARIO] -- Début : Scenario execute sur evenement : #user_connect#.
[2025-07-24 15:40:23][SCENARIO] - Exécution du sous-élément de type [action] : action
[2025-07-24 15:40:23][SCENARIO] Exécution de la commande [supervision][mail 1and1][supervision] avec comme option(s) : {"background":"0","title":"Connexion \u00e0 l'interface JEEDOM","message":"24 Juillet 2025 15h40\nUne connexion a \u00e9t\u00e9 effectu\u00e9e sur l'interface Jeedom."}
[2025-07-24 15:40:24][SCENARIO] Fin correcte du scénario

Par contre, si je me déconnecte, et que je laisse le navigateur ouvert, je n’ai que 2 répétitions:

------------------------------------
[2025-07-24 15:43:54][SCENARIO] -- Début : Scenario execute sur evenement : #user_connect#.
[2025-07-24 15:43:54][SCENARIO] - Exécution du sous-élément de type [action] : action
[2025-07-24 15:43:54][SCENARIO] Exécution de la commande [supervision][mail 1and1][supervision] avec comme option(s) : {"background":"0","title":"Connexion \u00e0 l'interface JEEDOM","message":"24 Juillet 2025 15h43\nUne connexion a \u00e9t\u00e9 effectu\u00e9e sur l'interface Jeedom."}
[2025-07-24 15:43:54][SCENARIO] Fin correcte du scénario
------------------------------------
[2025-07-24 15:43:55][SCENARIO] -- Début : Scenario execute sur evenement : #user_connect#.
[2025-07-24 15:43:55][SCENARIO] - Exécution du sous-élément de type [action] : action
[2025-07-24 15:43:55][SCENARIO] Exécution de la commande [supervision][mail 1and1][supervision] avec comme option(s) : {"background":"0","title":"Connexion \u00e0 l'interface JEEDOM","message":"24 Juillet 2025 15h43\nUne connexion a \u00e9t\u00e9 effectu\u00e9e sur l'interface Jeedom."}
[2025-07-24 15:43:55][SCENARIO] Fin correcte du scénario

J’ai testé avec Chrome et firefox (que 3 répétitions par contre) sur PC, et sur Safari et Chrome sur MAC.

Est ce un comportement normal?

Merci d’avance de vos éclaircissements.

======
Jeedom 4.4.19

Page Sante:

Bonjour,
Peut-être tout simplement mettre #user_connect# == 1 en déclencheur ? :slightly_smiling_face:

Edit : Oups désolé cela ne prend pas en compte la Connexion ou déconnexion exclusive

Pourrais-tu afficher dans le log la valeur du tag #user_connect# ?
On comprendrait peut-être ce qu’il se passe…
Je sais pas si un truc comme ça fonctionnerait dans un bloc code (non testé) :

$tags = $scenario->getTags();
$user_connect = $tags['#user_connect#'];
$scenario->setLog('Utilisateur connecté : '.$user_connect);

Dans le Log « event » de Jeedom on voit bien apparaitre 2 lignes « Local account found for admin » (et aussi 2 lignes « User connection accepted admin »).


Ces 2 lignes apparaissent systématiquement à chaque login et #user_connect# déclenche bien le scénario 2 fois :thinking:

Etrange… mais peut-être une piste…

Edit : Test avec Firefox : 4 déclenchements
Dans le log event :

Merci pour votre aide à tous :slight_smile:

Oui donc effectivement, c’est normal que je recoive plusieurs mails alors!

C’est beaucoup?

Oui, si tu me dis comment trouver ces infos :slight_smile:

Le top ce serait d’avoir un mail avec dedans la personne qui s’est connecté. Mais oui, l’idée d’est de savoir s’il y a eu une connexion à mon Jeedom

Alors au mieux j’ai ça :


évidemment tu remplaces l’action log par ton action mail en ajoutant le texte :

Connectés : variable(connected)

Le sleep 5 permet d’attendre que tous les events soient passés.

Pour le bloc code voilà le code :

$utilisateurs = '';
$users = user::all();
foreach ($users as $user) {
    if ($user->is_Connected() && $user->getLogin() != 'internal_report') $utilisateurs .= $user->getLogin().' ';
}
$scenario->setData('connected', $utilisateurs);

Pour info, l’utilisation des tags permet de s’affranchir des variables et donc du besoin de supprimer les variable quand on n’en a plus besoin. les tags sont des variables temporaires qui disparaissent à la fin de l’exécution du scenario (si je ne m’abuse).

Sauf qu’un tag est propre au scenario en cours et son problème c’est que le scenario se lance 4 fois… :roll_eyes:

1 « J'aime »

Ca a l’air top, mais j’ai beau lire et relire, je ne comprends pas la partie du SI avec le !variable(connected) :grin:

Ben teste tu verras bien…
La variable n’est là que pour bloquer les 3 autres lancements du scenario/envoi de mail, donc au 1er lancement elle n’existe pas donc il s’exécute, les 3 autres lancements elle existe donc ils zappent = 1 seul mail et pas 4.

Même sans la variable, normalement le fait qu’un scénario ne puisse se lancer qu’une seule fois en même temps (sauf si tu coche la multi exécution) fait que juste avec un sleep de quelques secondes, le premier scénario n’étant pas terminé, les exécutions suivantes ne devraient pas se faire.

ok je vais tester :slight_smile:

Par contre en déclencheur, je laisse le #user_connect#?

Bien sûr !

Ah moi je ne fais que répondre au problème de départ :

Sur sa capture y’a pas de multi-lancement mais il reçoit 4 mails donc voilà…
Après tu as raison le sleep peut suffire faut tester… Auquel cas on passera un tag depuis le bloc code au lieu de la variable. Mais bon on pinaille là.

Alors j’ai testé, mais dans le log (et dans le mail que je reçois), il ne me met pas l’utilisateur connecté mais la liste de tous les utilisateurs configurés dans mon jeedom.

Voici ce que j’ai fait:

Et voici le log:

[2025-07-25 17:18:17][SCENARIO] -- Début : Scenario execute sur evenement : #user_connect#.
[2025-07-25 17:18:17][SCENARIO] - Exécution du sous-élément de type [condition] : if !variable(connected)
[2025-07-25 17:18:17][SCENARIO] Evaluation de la condition : [!""] = Vrai
[2025-07-25 17:18:17][SCENARIO] - Exécution du sous-élément de type [action] : then
[2025-07-25 17:18:17][SCENARIO] Affectation de la variable connected => 1 (1)
[2025-07-25 17:18:17][SCENARIO] Pause de 5 seconde(s)
[2025-07-25 17:18:22][SCENARIO] Exécution d'un bloc élément : 1051
[2025-07-25 17:18:22][SCENARIO] - Exécution du sous-élément de type [action] : code
[2025-07-25 17:18:22][SCENARIO] Exécution d'un bloc code
[2025-07-25 17:18:22][SCENARIO] Exécution de la commande [supervision][mail 1and1][supervision] avec comme option(s) : {"background":"0","title":"Connexion \u00e0 l'interface JEEDOM","message":"25 Juillet 2025 17h18\nUne connexion a \u00e9t\u00e9 effectu\u00e9e sur l'interface Jeedom avec l'utilisateur liste-complete-des-utilisateurs-configurés "}
[2025-07-25 17:18:22][SCENARIO]    Log : Utilisateur connecté: admin alm carine drs enfant ipad1 tablet
[2025-07-25 17:18:22][SCENARIO] Suppression de la variable connected
[2025-07-25 17:18:22][SCENARIO] Fin correcte du scénario

Non ce n’est pas la liste des configurés (all()) mais des connectés (is_Connected()). Déconnecte ta tablet et ipad1 par exemple, ils ne devraient plus apparaitre.

Donc ton message « sur l’interface Jeedom avec l’utilisateur » n’est pas bon il faut dire « sur l’interface Jeedom, liste des utilisateurs connectés : » (pas de méthode Jeedom pour avoir le nom qui vient de se connecter)

Après si ça fonctionne tu pourras essayer en changeant le code par :

$utilisateurs = '';
$users = user::all();
foreach ($users as $user) {
    if ($user->is_Connected() && $user->getLogin() != 'internal_report') $utilisateurs .= $user->getLogin().' ';
}
$tag['connected']=$utilisateurs;
$scenario->setTags($tag);

et en supprimant les 2 actions variable et delete_variable
et en remplaçant dans le mail variable(connected) par tag(connected)
pour faire plaisir à tout le monde :sweat_smile:

Accessoirement tu peux enlever aussi ton action log et ajouter dans le code à la fin :

$scenario->setLog('Connectés : ' . $utilisateurs);
1 « J'aime »

Je viens de supprimer tous les périphériques enregistrés (dans Réglages-Systeme-Utilisateurs). Je me suis déconnecté puis reconnecté, et j’ai toujours le même message avec les mêmes utilisateurs.

Petite remarque en passant: je suis connecté, et je vois bien l’utilisateur courant dans les sessions actives.Si je me déconnecte (via le menu déconnecter) et reconnecte, j’ai une seconde connexion active avec cet utilisateur, la même IP source (normal) et l’heure de connexion. Ce qui signifie que si je me déconnecte, la session n’est pas effacée?

Oui les sessions peuvent avoir une expiration.
Bon j’ai pas trop le temps mais comme mesure temporaire remplace dans le code :

    if ($user->is_Connected() && $user->getLogin() != 'internal_report') $utilisateurs .= $user->getLogin().' ';

par

    if ($user->getLogin() != 'internal_report') $utilisateurs .= $user->getLogin().'->'.$user->getOptions('lastConnection').' / ';

A minima tu auras l’heure de connexion.

Ok après avoir checké différents points, j’en arrive à ce code pour ton scenario :


Bien sûr à la place de l’action log tu mets ton action mail.

Le contenu du bloc code (avec ajout d’un défaut pour la date) :

$utilisateurs = '';
$now = new DateTime();
$users = user::all();
foreach ($users as $user) {
	$d = new DateTime($user->getOptions('lastConnection', '1970-01-01 00:00:00'));
	$diff = $now->diff($d);
 	$seconds = ($diff->days * 86400) + ($diff->h * 3600) + ($diff->i * 60) + $diff->s;
	if ($seconds < 10 && $user->getLogin() != 'internal_report') $utilisateurs .= $user->getLogin().' ';
}
$tag['connected']=$utilisateurs;
$scenario->setTags($tag);
$scenario->setLog('Connexion de : ' . $utilisateurs);