Aide sur la nouvelle fonction trigger

Bonjour,

La raison est que #trigger_value# est un tag.
Il faut donc utiliser round(tag(trigger_value),1).

[2025-12-02 17:54:34][SCENARIO] -- Début : . Tags : {"#trigger#":"virtualCmd","#trigger_name#":"[Technique][Variables][TEST_CODE]","#trigger_id#":"8214","#trigger_message#":"Scénario exécuté automatiquement sur événement venant de : [Technique][Variables][TEST_CODE] (19.455)","#trigger_value#":19.455}
[2025-12-02 17:54:34][SCENARIO] - Exécution du sous-élément de type [action] : action
[2025-12-02 17:54:34][SCENARIO] Mise à jour du tag #TEST# => 19.5
[2025-12-02 17:54:34][SCENARIO] Fin correcte du scénario

4 « J'aime »

Ok, bien vu ! Merci !

Il peut aussi prendre la valeur de « variable(maVariable) ». Mais là problème pour évaluer la condition, car dans :

if #trigger# == "variable(maVariable)"

« variable(maVariable) » prend la valeur de la variable :

[2025-12-03 11:16:14][SCENARIO] **-- Début :** . Tags : {"#trigger#":"variable(maVariable)","#trigger_name#":"","#trigger_id#":"","#trigger_message#":"Scénario exécuté sur événement : #variable(maVariable)#","#trigger_value#":null}
[2025-12-03 11:16:14][SCENARIO] - Exécution du sous-élément de type [condition] : if #trigger# == "variable(maVariable)"
[2025-12-03 11:16:14][SCENARIO] Evaluation de la condition : ["variable(maVariable)" == "0"] = Faux

Pour l’instant j’ai contourné en testant not l’autre déclencheur.

Au vu de ton log j’ai l’impression que ce sera comme Madcow l’a indiqué.
La varible est pris comme un tag

Je pense qu’il faut donc utiliser (tag(variable(maVariable))
Je vous laisse tester et éventuelement contribuer … https://doc.jeedom.com/fr_FR/contribute/doc

Je vais essayer mais je ne suis pas sûr que ce soit la même chose, car dans mon cas l’évènement déclencheur est un changement de valeur de la variable maVariable :

Donc la valeur du tag #trigger# est variable(maVariable), ce qui est attendu. Mais la comparaison avec la chaîne de caractères « variable(maVariable) » ne fonctionne pas car, dans la chaîne, la variable est évaluée.
Je vais essayer des simples quotes, je sais que PHP évalue les chaînes différemment avec simples ou doubles quotes… Et je reviendrai donner ma résultat du test.

RÉSULTATS:

  • simple ou double quotes, la variable est toujours évaluée
  • (tag(variable(maVariable)) retourne toujours chaîne vide, mais normal il n’y a pas de tag correspondant

ALTERNATIVE
Au lieu d’utiliser
if #trigger# == "variable(maVariable)"

j’utilise maintenant
if #trigger# matches "/(maVariable)/"

1 « J'aime »

Bonjour,
Avant de passer à la 4.5 (je suis actuellement en 4.4.20, Debian 12 sur Odroid N2+) j’aimerais avoir votre avis sur l’utilisation de trigger dans un scénario.
Pouvez vous m’indiquer si cette syntaxe fonctionnera avec la 4.5
trigger(#[fenêtres][117 Door Sensor bureau1][Porte]#)==1
Je ne suis pas suffisamment armé pour en juger moi même et m’en excuse.
Merci pour votre aide
Bonne journée

Version courte : non

Version longue : j’avais moi même des lignes comme celles-ci, que j’ai remplacé par

#trigger_name# == "[fenêtres][117 Door Sensor bureau1][Porte]" ET #trigger_value# == 1

Je sais pas si y’a plus simple… Mais ça marche.
Inconvénient : ce n’est pas retro-compatible. Cela veut dire que si vous faites la modif maintenant (sur le v4.4.20) cela ne marchera pas. A contrario, si vous laisser cette ligne telle quelle sur la v4.5, cela ne marchera pas non plus. C’est un breaking change.
Donc dès que vous upgradez la version vers v4.5, il faudra mettre à jour tous vos scenario dans la foulée…

Merci pour cette réponse rapide et précise
Bonne journée

@naif, voir réponse de @Dreaky

@Dreaky, il ne faut pas tester #trigger_value#

Il n’y a besoin que de #trigger_name# == "[fenêtres][117 Door Sensor bureau1][Porte]"

Si la valeur du sensor Door n’est pas 1 alors la comparaison sera fausse

??
Seulement si le scénario démarre sur [Door]==1 non? Car s’il démarre sur seulement [Door], tout changement de [Door] provoque le démarrage.

Me gourais-je?

Bonjour,

Je suis plutôt d’accord avec @Stefjm : tout dépend de ce qu’on met dans le déclencheur :wink:

Si le déclencheur est juste : [fenêtres][117 Door Sensor bureau1][Porte]
Alors chaque modification de l’état de cette information provoquera le démarrage du scénario, quelle que soit la valeur (0, 1 ou autre).
Il faut dans ce cas le tester dans le scénario avec une instruction de type SI #trigger_value# == 1 (ou autre valeur) ALORS xxx

Maintenant si on met comme déclencheur : [fenêtres][117 Door Sensor bureau1][Porte] == 1 (ou autre).
Dans ce cas, toute modification pour la valeur 1 de cette information provoquera le démarrage du scénario. Sinon, dans tous les autres cas, il ne démarre tout simplement pas (ou en tout cas pas en raison de ce déclencheur).
Bien entendu, il est Inutile dans ce cas de tester dans le scénario lui-même si le trigger_value est bien à 1 (il l’est forcément…).

Bonjour,
le déclencheur: #[fenêtres][117 Door Sensor bureau1][Porte]#==0
la commande dans la demande plus haut est dans un
SI trigger(#[fenêtres][117 Door Sensor bureau1][Porte]#)==1
ALORS
#[Chauffage][122 - Danfoss bureau][Action-Consigne-Chaud]# 19.5

@Stefjm et @DanielJ

Je suis daccord avec vous mais la question était de savoir par quoi remplacer :

Cette commande permet de savoir si le trigger était #[fenêtres][117 Door Sensor bureau1][Porte]#, quelque soit la valeur de la commande.

Et la commande qui doit être utilisée pour ça est maintenant #trigger_name# == "[fenêtres][117 Door Sensor bureau1][Porte]"

2 « J'aime »

Non c’est faux.

trigger(#[fenêtres][117 Door Sensor bureau1][Porte]#)==1

Permet à la fois de savoir si le trigger est « [fenêtres][117 Door Sensor bureau1][Porte] » et si sa valeur vaut 1, d’où ma proposition de remplacer par :

#trigger_name# == "[fenêtres][117 Door Sensor bureau1][Porte]" ET #trigger_value# == 1

Le fait de mettre == 1 ne sert à rien

Que ma commande est la valeur 0, 1 ou ce que tu veux, trigger(#commande#) ou trigger(#commande#) == 1 va vérifier que la commande en question a déclenché le scénario … quelle que soit la valeur de la commande !!!

Non, pour la deuxième expression.

suffit à lui-même.Pas besoin de == 1.

Je sais bien oui … :wink:

1 « J'aime »

Toute cette discussion parce que le prototype de trigger() n’était pas donné. :wink:

Je suis un peu nouveau et un peu perdu entre #trigger# et trigger(). Il y a eu du revirement d’après les docs API 4.4 et 4.5?

Oui, la fonction trigger() est annoncée comme dépréciée depuis la 4.5 et sera donc supprimée dans une des prochaines versions, il faut donc mieux commencer à utiliser les nouveaux tag mais rien ne presse non plus

Donc si tu es perdu, ce qui peut s’expliquer, le plus efficace c’est de regarder la doc de la 4.5 : https://doc.jeedom.com/fr_FR/core/4.5/scenario

Faire un scénario de test comme j’ai montré un peu au dessus en utilisant le mot « log » et en appelant les triggers pour voir ce que ça donne quand tu agis sur tes commandes déclenchant le scénario

Tu devrais vite comprendre :sweat_smile:

2 « J'aime »