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

Merci @Salvialf
Mais du coup je ne comprend pas pourquoi trigger() dans un scenario ne renvoi pas # idcommande# :smiley:
Et pourquoi #trigger# renvoi lui le nom de la commande en human readable #[commande]#…

je vais développer ma réponse au dessus. N’oubliez pas que je suis juste un amateur en code

$trigger en bloc code c’est une variable là j’aurai pu l’appeler $toto ce qui est important c’est ça:

$scenario->getRealTrigger();

A tous les coups je suis en train de réinventer la roue en + je vais faire une recherche…

Bah voilà !!

En fait votre demande était déjà répondu sur au moins 2 post du forum messieurs !!

Au moins ça m’a permis de me creuser les méninges et de trouver par moi-même…

Encore merci pour avoir cherché.
C’est qu’avant j’utilisais le tag #trigger# qui lui me renvoi le nom de la commande human readable.

Comme dans la doc de la v4 il est ecrit que trigger() doit être utilisé à la place de #trigger#, et que selon moi la doc dit que ca marche pareil je pensais retrouver aussi le nom de la commande ce qui n’est pas le cas.
Mais bon du coup ca reste un peu flou pour quand même car du coup je ne vois plus vraiment las idfférence entre trigger() et triggerValue() si on ne passe pas de parametre.

Je vais clore le débat phylosophique pour moi et je vais essayer de m’adapter :wink:
Si un dev passe par là et qu’il a un peu de temps pour valider et clarifier les retour de ces methodes je pense que ca pourra être utile pour tous.

J’en ai parlé avec loic qui confirme qu’il faut passer un paramètre à trigger().

J’ai essayé de modifier la fonction pour voir… j’arrive à récupérer l’id ou le nom de la commande avec trigger() vide mais j’ai une erreur dans le centre des messages.

Je creuse encore un peu pour le fun mais si loic dit que c’est mort c’est que ça l’est à mon humble avis.

Et effectivement il vaut mieux renvoyer la valeur de la commande plutôt qu’une erreur d’argument manquant en l’absence de paramètre

Donc c’est bien une erreur dans la doc :crazy_face: #trigger# marche très bien :blush:

J’ai même pas fais d’essais avec #trigger# :sweat_smile:

À voir si ça va pas être cassé dès la 4.1 ça le sera sûrement plus tard c’est le principe des fonctions dépréciées elles fonctionnent encore jusqu’au jour ou elles ne fonctionnent plus

Ce serait dommage car j’utilise énormément #trigger#.

ouaip ca va faire bizarre sans #trigger# :smiley:

Bon j’ai fait le petit code suivant a mettre au debut du scenario.
Ca me permet d’avoir differentes infos extraites du trigger (a modifer selon les besoin) et de les passer en tag à mon scenario. Au moins je sais ce qu’il y a dedans :smiley:

$equipementHR = str_replace('#', '', cmd::cmdToHumanReadable($scenario->getRealTrigger()));
$equipementID = str_replace('#', '', $scenario->getRealTrigger());
$equipementStrArray = explode(']', str_replace('[', '', $equipementHR));
$tags = $scenario->getTags();
$tags['#equipementHR#'] = $equipementHR;
$tags['#equipementID#'] = $equipementID;
$tags['#groupe#'] = $equipementStrArray[0];
$tags['#equipementName#'] = $equipementStrArray[1];
$tags['#equipementInfo#'] = $equipementStrArray[2];
$scenario->setTags($tags);

Dans un scenario ca donne ca:

Ce sont de simple string donc il faut « concatener » dans des # pour les transformer en commande (exemple dans le dernier log).

Salut,

Bon après ces posts très instructif, je vais vérifier et basculer mes trigger() par triggerValue().

Il n’empêche que le problème du tigger sur variable est insoluble sans code spécifique.

Avec ce code:

$realTriggerID = $scenario->getRealTrigger();
$scenario->setLog($realTriggerID);
$realTriggerName = cmd::cmdToHumanReadable($scenario->getRealTrigger());
$scenario->setLog($realTriggerName);
$trigger = cmd::cmdToHumanReadable($scenario->getRealTrigger()); $cmd = cmd::byString($trigger); $value = $cmd->execCmd();
$scenario->setLog($value);

J’obtiens ceci:

-> Trigger habituel -> OK
#635#
#[Sous-Sol][Bouton Beige Porte Garage][Action Numérique]#
1

-> Trigeer variable() -> KO
variable(plop)
variable(plop)
ERREUR PHP: La commande n'a pas pu être trouvée : variable(plop) => variable(plop) à la ligne 544 !

Pour le code de @ovomaltin:

// Version habituelle -> OK
Log : Group: 
Log : Equipement: Bouton Beige Porte Garage
Info: Action Numérique
Log : TagID: 635
TagValue: 1

// Version variable() -> KO
Log : Group: 
Log : Equipement: 
Info: 
Log : TagID: variable(plop)
TagValue: #variable(plop)#

Donc cette méthode ne fonctionne pas non plus.
Au vue du code source, il semble logique que cela ne fonctionne plus.
Si quelqu’un de plus doué que moi en code peut m’aider a avoir un remplaçant universel pour triggerValue() je suis preneur.

Merci
A+

Il n’y a pas d’id sur les variables

On en revient a mon soucis: trigger(Value)() ne fonctionne pas avec un trigger variable.

Ça dépanne bien. Je ne pense pas être le seul a utiliser cette fonctionnalité. Si cela peut être corrigé, cela évitera pas mal de prise de crane a d’autres utilisateurs lors de la migration en v4.

A+

1 « J'aime »

Tu pourrais tenter de récupérer la variable dans une commande virtuelle et utiliser cette commande comme déclencheur.

Je sais que je peux contourne la chose :stuck_out_tongue_winking_eye:

Bonjour,

Autre remarque, en v3 (au moins), lorsqu’un scénario n’est pas déclenché par une commande, trigger sans paramètre retourne « user » alors que triggerValue ne retourne rien, du coup erreur d’expression. Il faut donc ajouter en tête de tous ces scénarios qui utilisent triggerValue un bloc de test pour stopper l’exécution du scénario si le déclencheur n’est par une commande…

Vu que le comportement de #trigger# n’est pas le même que trigger(), il serait intéressant d’avoir une nouvelle commande triggerToHumanReadable() sans arguments pour obtenir le nom de la commande qui a déclenché. Cela éviterai d’avoir à ajouter un bloc code dans les scénarios et surtout serait fort utile pour le plugin Alarme qui dit d’utiliser #trigger# pour retourner le nom de l’équipement qui a déclenché.

Bonjour
De mémoire j’ai traité une demande de ce genre en 4.1

Bonjour Loic,

Tu peux nous dire comment ?
Quelle est la commande qui remplace #trigger#

Par exemple, j’ai 4 déclencheurs sur un scénario et je veux savoir dans un message (émail) qui à déclenché le scénario, avant il suffisait de mettre : scénario déclenché par #trigger#
Et maintenant ?

En faisant trigger() je crois

Parfait, du coup on retrouve le comportement initial de #trigger#. Cela permettra une adaptation minime pour ceux qui utilisent #trigger# dans les scénarios ou le plugin Alarme.
Merci Loïc.

Ca sera disponible aussi en 4.0.61

3 « J'aime »