Trigger() en 4.0 ne renvoi pas le nom de la commande

Tags: #<Tag:0x00007f38558d6ed8>

Bonjour,

Question idiote, sur la doc de la 4.0 il est recommandé de ne plus utilisé le tag #trigger# mais trigger().
J’ai fait un test dans un scenaior et chez moi la fonction trigger() me renvoi la même chose que triggerValue() c’est à dire la valeur du trigger et non son nom.
J’ai un scenario provoqué par #[Equipements IT][Ping Panneaux Solaire][Etat]# qui ajoute un log:
DEBUG triggerValue=triggerValue() triggerFct=trigger() triggerTag=#trigger#

Et dans le log j’ai:
[2020-05-05 21:27:08][SCENARIO] Start : Scenario execute automatiquement sur evenement venant de : [Equipements IT][Ping Panneaux Solaire][Etat].
[2020-05-05 21:27:08][SCENARIO] Exécution du sous-élément de type [action] : action
[2020-05-05 21:27:08][SCENARIO] Log : DEBUG triggerValue=1 triggerFct=1 triggerTag=[Equipements IT][Ping Panneaux Solaire][Etat]

Est-ce que c’est un bug? Faut-il vraiment ne plus utiliser #trigger# et si oui comment on recupere le nom de l’equipement ayant provoqué le scenario?

Merci d’avance,
Flo

Salut,
De mémoire, la fonction trigger() est un booléen.
Il faut mettre entre parenthèses le nom de l’équipement que tu veux vérifier comme étant le trigger.

Merci pour la réponse rapide.
Je ne souhaite pas vérifier le nom du trigger je souhaiterais directement utiliser son nom, genre lastStateDuration(trigger(0, 1) ou trigger() devrait me renvoyer le nom de la commande.
Et la doc https://doc.jeedom.com/fr_FR/core/4.0/scenario dit:

#trigger# (deprecié, mieux vaut utiliser trigger()) : Peut être le nom de la commande qui a déclenché le scénario :

‘api’ si le lancement a été déclenché par l’API,
‘schedule’ si il a été lancé par une programmation,
‘user’ si il a été lancé manuellement,
‘start’ pour un lancement au démarrage de Jeedom.

#trigger_value# (deprecié, mieux vaut utiliser triggerValue()) : Pour la valeur de la commande ayant déclenché le scénario

Ca ne me dérange pas d’utiliser #trigger# c’est juste pour clarifier la doc :slight_smile:

Encore merci,
Flo

Pas de quoi.
D’ailleurs, plus bas dans la doc il est marqué :

  • trigger(commande) : Permet de connaître le déclencheur du scénario ou de savoir si c’est bien la commande passée en paramètre qui a déclenché le scénario.
  • triggerValue(commande) : Permet de connaître la valeur du déclencheur

Pense à clôturer ton sujet si tu as ta réponse.
Bonne soirée

Salut,

Je rebondit sur ce sujet car je devenais fou…

D’après tout ce que j’avais trouvé jusqu’à maintenant, #trigger# renvoyait le nom et trigger() renvoyait la valeur…
Je veux bien admettre, qu’une fois de plus, j’ai loupé un truc dans la(les) docs mais regardez ceci:

Triggers_fou

Et son log:

Start : Scenario execute sur evenement : #variable(plop)#.
Exécution du sous-élément de type [action] : action
Exécution de la commande [Réseau][Notifications][PolymereAmiga] avec comme option(s) : {"background":"0","title":"","message":"Trig: variable(plop) Val: 1 Var: 1"}
Exécution du sous-élément de type [condition] : if
Evaluation de la condition : ["variable(plop)" == 1] = Faux
Exécution du sous-élément de type [action] : else
Exécution du sous-élément de type [condition] : if
Evaluation de la condition : [1 == 1] = Vrai
Exécution du sous-élément de type [action] : then
Log : Variable directe fonctionne
Exécution du sous-élément de type [action] : action
Affectation de la variable plop2 => variable(plop) = variable(plop)
Exécution du sous-élément de type [condition] : if
Evaluation de la condition : ["variable(plop)" == 1] = Faux
Exécution du sous-élément de type [action] : else
Fin correcte du scénario

Il y a une incohérence, trigger() dans le message Telegram affiche bien la valeur mais pas ailleurs.
Sachant que pour les « autres » trigger que les variables, trigger() à bien la valeur!
J’avais avant de migrer en 4.0 utilisé l’astuce de stocker trigger() dans une autre variable que j’utilisais.
Cela « contournait » le problème.

Le même log avec un autre déclancheur:

Start : Scenario execute automatiquement sur evenement venant de : [Sous-Sol][Bouton Beige Porte Garage][Action Numerique].
Exécution du sous-élément de type [action] : action
Exécution de la commande [Réseau][Notifications][PolymereAmiga] avec comme option(s) : {"background":"0","title":"","message":"Trig: [Sous-Sol][Bouton Beige Porte Garage][Action Num\u00e9rique] Val: 1 Var: 1"}
Exécution du sous-élément de type [condition] : if
Evaluation de la condition : [1 == 1] = Vrai
Exécution du sous-élément de type [action] : then
Log : Trigger fonctionne
Exécution du sous-élément de type [condition] : if
Evaluation de la condition : [1 == 1] = Vrai
Exécution du sous-élément de type [action] : then
Log : Variable directe fonctionne
Exécution du sous-élément de type [action] : action
Affectation de la variable plop2 => 1 = 1
Exécution du sous-élément de type [condition] : if
Evaluation de la condition : [1 == 1] = Vrai
Exécution du sous-élément de type [action] : then
Log : Variable 2 fonctionne
Fin correcte du scénario

Après un dernier test, triggerValue() semble ne pas fonctionner non plus avec une variable comme déclenchement:
Variable:

Exécution du sous-élément de type [condition] : if
Evaluation de la condition : [ == 1] =  == 1
Expression non valide :  == 1

Autre déclencheur:

Exécution du sous-élément de type [condition] : if
Evaluation de la condition : [1 == 1] = Vrai
Exécution du sous-élément de type [action] : then
Log : TrigVal fonctionne

A l’aide… :slight_smile:
PS; Enlevé la date et le [SCENARIO] pour une meilleurs lisibilité.

Je n’ai lu que le début de ton scenario.
Ca m’a suffit à voir que tu utilises mal la fonction trigger.
C’est un booléen mais encore faut-il qu’il soit correctement écrit.
Il faut mettre SI trigger(commande) ALORS
Où commande est le nom de ton trigger, celui mis en déclencheur.
Pareil pour triggerValue()

Je veux bien me tromper mais explique moi comment récupérer la valeur d’un trigger #variable(xxx)# car moi j’ai aucune solution là. (test avant hein…)
Merci
A+

Je ne comprends pas ce que tu dis.
Dans ton scénario tu mets des tests sur des variables, pas de problème.
Mais où y-a-t-il un trigger sur une variable ?
Le seul trigger que je vois est ce SI trigger() == 1 dont la syntaxe est fausse. Il manque l’argument de la fonction.
Si tu veux faire un test sur une variable, et bien tu la testes. Il n’y a pas besoin de trigger.
Quel serait l’événement ? Que la variable est telle ou telle valeur?

Regarde les logs:

Scenario execute sur evenement : #variable(plop)#.
ou
Scenario execute automatiquement sur evenement venant de : [Sous-Sol][Bouton Beige Porte Garage][Action Numerique].

Triggers

Cela fonctionne avec le bouton mais pas avec la variable.

A+

La bonne syntaxe serait :

SI trigger(#sous-sol…#)
ALORS
Blablabla
SINON
C’est ta variable le trigger et blbablabla dans ce cas.

Je veux pas savoir qui a provoqué le scénario, je veux juste la valeur.
Le principe est d’avoir différentes sources avec des valeurs définie et le scénario n’a besoins que ce cela.
Je vais pas tester chaque trigger, ça n’a plus aucun intérêt.
triggerValue() ne fonctionne pas avec la variable… alors qu’avec l’autre trigger c’est bon.

Voilà
A+

Je crois que j’ai enfin compris ton problème., j’y ai mis du temps.
En fait, si ton trigger est ta variable, tu veux en connaitre directement la valeur.
Je ne voudrais pas dire de bêtise mais si tu mets ta variable dans un virtuel ça devrait marcher de la même façon que pour un équipement physique.
C’est peut-être lourd mais ça doit marcher.
Peut-être que le trigger() et le triggerValue() ne marche pas sur autre chose que des équipements mais je m’avance peut-être.

Oui cela peut faire l’affaire.
Mais ce qui me fait penser a un bug est que dans le message Telegram, j’ai ma valeur avec trigger() !

Message Telegram avec variable:
Trig: #trigger# Val: trigger() Var: variable(plop) TrigVar: triggerValue()
Trig: variable(plop) Val: 1 Var: 1 TrigVar:

Avec l’autre:
Trig: [Sous-Sol][Bouton Beige Porte Garage][Action Numérique] Val: 1 Var: 1 TrigVar: 1

Il y a donc bien une incohérence / bug dans ces fonctions suivant où on utilise.
Vais attendre qu’un Dev passe par là.

A+

Ouvre un ticket, tu verras bien

Jamais fait :slight_smile:

Il y a un début à tout

Perso je ne vois pas pourquoi ouvrir un ticket la dessus…

Un trigger sur une variable est documenté…
Il faut pouvoir récupérer sa valeur. Le fait de ne plus pouvoir est une régression.
Pourquoi cela « passe » encore dans le message Telegram ?
Si vous pouviez tagger un Dev pour avoir un avis sur le sujet cela m’arrangerai.
Je ne crée pas le ticket pour le moment.

Merci
A+

J’entends…

Un ou plusieurs dev passera par là.

Je suis sur le tel je vois pas grand chose donc je ne préfère rien dire pour le moment même si je ne comprend pas le but de la copie d’écran du scénario plus haut.

La documentation paraît plutôt claire:

  • trigger() : Peut être le nom de la commande qui a déclenché le scénario :
    • ‘api’ si le lancement a été déclenché par l’API,
    • ‘schedule’ si il a été lancé par une programmation,
    • ‘user’ si il a été lancé manuellement,
    • ‘start’ pour un lancement au démarrage de Jeedom.
  • triggerValue() : Pour la valeur de la commande ayant déclenché le scénario

https://doc.jeedom.com/fr_FR/core/4.0/scenario

Pour info les fonctions trigger se trouvent ici:

Je me demande si la différence ne vient pas de la manière dont le resultat de trigger() est interpreté.
Et ce qui crée la confusion.
Si j’utilise l’instruction log, avec pour message #trigger# je vais avoir le nom de la commande[xxx][yyy][zzz] dans le log.
Si j’utilise l’instruction log, avec pour message trigger() je vais avoir la valeur de la commande dans le log.
Et je me demande si ce n’est pas la même chose que trigger() est utilisé pour mettre une variable ou dans un test le resultat de trigger, le soft ne va pas être interpreté de la même manière (parfois le nom de la commande parfois sa valeur).

En esperant que ca fasse avancer le schmilblik!