Bloc code: récupération de la valeur de la commande qui a déclenché le scénario

Bonjour,
dans un bloc code, comment récupérer la la valeur de la commande qui a déclenché le scénario ?

j’ai essayé:

1° $value = trigger();

2° $value = triggerValue();

3° $tags = $scenario->getTags(); $message=$tags[’#trigger_value#’];


J’utilise pour l’instant le code ci-dessous qui fonctionne, mais je ne pense pas qu’il me garantisse que c’est bien la valeur qui a déclenché le scénario (elle a pu changer) :
$tags[’#tagNotificationMessage#’] = $value;
$scenario->setTags($tags);

Pour info, le but est de modifié la valeur pour l’envoyer dans une notification, ce que je fais avec le code suivant (qui fonctionne):
$tags = $scenario->getTags();
$value = str_replace("/","
",$value);
$tags[’#tagNotificationMessage#’] = $value;
$scenario->setTags($tags);

dans le paramètre message, j’utilise : tag(tagNotificationMessage)

Philippe

Tu as un début ici pour récupérer la cmd.

1 « J'aime »

Pour récupérer la valeur de la commande, @Jeandhom avait donnée une solution :

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

Je le remets parce que cela me parrait plus précis pour la réponse à la demande.

3 « J'aime »

Merci pour les deux réponses et la précision bien utile. Le code fonctionne bien.
Il permet bien de retourner la valeur actuelle de la commande qui a déclenché le scénario.
Je voudrais avoir la valeur qui a provoqué le déclenchement du scénario et non la valeur actuelle mais ca n’est peut être pas possible.

(si la commande est modifiée deux fois de suite rapidement, 2 scénarios sont déclenchés. je récupère dans chacun d’eux la dernière valeur au lieu de la valeur propre à chacun des déclenchements)

pour simuler ce changement de valeur rapide, j’ai fait un autre scénario que j’exécute manuellement avec le bloc code suivant:

cmd::byString("#[Bgx][CAM01][Last event]#")->event("fielddetection/2021/12/30 18:00:10");
cmd::byString("#[Bgx][CAM01][Last event]#")->event("fielddetection/2021/12/30 18:00:11");

Bonjour,

Malheureusement, la valeur de déclenchement n’est pas récupérable. Même la fonction triggerValue() retourne la valeur actuelle et non celle au moment du déclenchement.

Tu es sur de toi, parceque ce n’est pas ce qui est indiqué sur la Doc ?

triggerValue(commande) : Permet de connaître la valeur du déclencheur du scénario

Si c’est vrai, ça pourrait expliquer quelques bugs de scénarios …

Norbert

Oui. Je suis sûr 1:wink:

Le code de triggerValue() :

public static function triggerValue(&$_scenario = null) {
                if ($_scenario !== null) {
                        $cmd = cmd::byId(str_replace('#', '', $_scenario->getRealTrigger()));
                        if (is_object($cmd)) {
                                return $cmd->execCmd();
                        }
                }
                return false;
        }

D’ailleurs, il faudrait corriger la doc car le paramètre commande n’est pas utilisé.

...
} elseif ($function == 'triggerValue') {
          $replace2[$replace_string] = self::triggerValue($_scenario);
...

En résumé, la valeur du déclencheur est la valeur qu’il a au moment de l’appel à triggerValue()

1 sauf erreur de ma part …

2 « J'aime »

@Loic : peux-tu confirmer que triggerValue() retourne la valeur lors de l’appel et non la valeur de déclenchement ? si oui, préciser si c’est considéré comme un bug de fonctionnement ou de doc. Perso, cela me perturbe que la valeur retournée puisse changer entre 2 appels dans un même scénario, voire même entre le déclenchement du scénario et le premier appel.
merci d’avance

triggerValue(commande) : Permet de connaître la valeur du déclencheur du scénario.

Je ne vois pas bien en quoi il y a erreur de sementique (sauf commande qui n’a rien à faire là).

Une commande est à 0 pendant x minutes puis elle passe à 1 et déclenche donc un scénario.
Et bien là valeur qui a permis de déclencher le scénario est la valeur 1.

Je sais plus trop je dirais la valeur de la commande qui déclenche le scénario a l’instant où triggervalue est appelé. Ce qui est pour moi correcte et correspond bien à la doc.

je pense que c’est exactement ce à quoi tout le monde s’attend à la lecture de la doc. mais ce n’est pas ce que je constate, et ce n’est pas ce que l’analyse de code ci-dessus indique.
d’où ma question.

Dans mon cas la commande ne contient pas juste 0 ou 1 mais une chaine de texte, et triggerValue() est appelé dans des fonctions IF, donc après déclenchement du scénario (et entre temps la valeur de la commande a pu changer)

Ah oki j’ai saisi le soucis, en effet la fonction retourne la valeur au moment de l’appel de celle-ci.

Du coup il faut faire un tag dès le début du scénario pour stocker la valeur de déclenchement et utiliser ce tag ensuite dans les If au besoin mais en effet ça porte à confusion.

1 « J'aime »

cela pourrait-il être remonté à la R&D afin d’avoir une correction dans le core.
la solution du tag est bien mais pas parfaite puisque la valeur peut avoir changé avant stockage dans le tag.

Une correction de bug ? C’est pas parce que c’est pas le fonctionnement que tu voudrais que c’est forcement un bug… La fonction marche parfaitement suivant le cahier des charges voulu. Faut arrêter de crier au bug dès que ça vous va pas c’est assez démoralisant pour les dev…

Oui effectivement on peut le voir comme un manque de précision dans la doc.

En résumé,

la fonction triggerValue() retourne la valeur (au moment de l’appel de la fonction) du déclencheur du scénario,
et non la valeur qui a provoqué le déclenchement du scénario (car elle a pu changer entre temps)

Ca ne m’arrange pas mais merci en tout cas pour les réponses rapides. Je clos.

PS d’après clôture: j’ai codé la fonction que j’ai appelé « triggeringValue() », et j’ai fait un PullRequest

2 « J'aime »

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