LastStateDuration - Appel avec un tag ne marche pas

Bonjour,

J’essaie d’aller jusqu’au bout d’un scénario générique" de la gestion des mes ouvrants avec des Aquara.
Globalement je m’en sors presque bien (tests en cours mais ça me semble fonctionner pour le moment) sauf pour le calcul de la durée d’ouverture de la porte.
Dans mon scenario initial (non générique) je fais le calcul de la durée d’ouverture en seconde avec un appel à lastStateDuration avec la commande et la valeur du statut et ça marche très bien lastStateDuration(#[Entree][AqOC1_Entree][Ouverture]#, 1)

Dans mon scénario générique auquel je passe le nom de l’ouvrant et la commande sans les dièses
image
sinon c’est la valeur de la commande (1 ou 0) qui est transmise au tag et non la commande que je sais compléter et appeler dans un bloc code.

Là ou je suis coincé c’est lorsque je veux appeler lastStateDuration dans un message avec en valeur un tag que j’ai construit dans un bloc code juste avant.
Lors de l’exécution, je reçois l’erreur "commande introuvable [Entree][AqOC1_Entree][Ouverture] (sans les dièses!!) alors que juste au dessus j’affiche la valeur du tag (entre les =) avec des # (#[Entree][AqOC1_Entree][Ouverture]#).

image

J’ai, par ailleurs, regardé comment appeler lastStateDuration dans un bloc code, mais je n’obtiens rien de correct avec la syntaxe que j’ai trouvée dans un ancien post du forum avec scenarioExpression.

$tags[’#TDureeOuverture#’] = scenarioExpression::lastStateDuration($cmd, 1)

Quelqu’un aurait-il une piste pour calculer la durée d’ouverture dans ce contexte?
Quel élément de syntaxe devrais-je plutôt tester pour que cela soit bien interprété au final?

Cordialement

Je me réponds à moi-même.

Je n’ai pas progressé sur l’utilisation de lastStateDuration dans un message et avec un tag en paramètre.

Toutefois, pour l’appel dans le bloc code, en fouillant un peu plus dans la doc et l’ancien forum, j’ai pu, par analogie avec un exemple de l’utilisation d’une fonction de la classe history,adapter mon code précédent et faire l’appel avec l’Id de la commande récupéré par un getId et ensuite appel avec la fonction de la classe scenarioExpression:

$Tcmd = ‹ # ›.$tags[’#commande#’].’#’;
$cmdId = cmd::byString($Tcmd)->getId();
$duree = scenarioExpression::lastStateDuration($cmdId, 1);
$tags[’#TDureeOuverture#’] = $duree .‹ s › ;

NOTA : Les petits > et < autour du # ou de s, devraient normalement être des '.
Mais je ne sais pas comment faire en sorte qu’ils ne soient pas modifiés dans la mise en exergue.

Pour inclure ton texte
sur une ligne vide cliquer sur </>
puis colle ton texte la ou c’est indiqué

$Tcmd = '#'.$tags[’#commande#’].’#’;
$cmdId = cmd::byString($Tcmd)->getId();
$duree = scenarioExpression::lastStateDuration($cmdId, 1);
$tags[’#TDureeOuverture#’] = $duree .'s' ;

ou taper 6 fois Alt Gr 7 pour obtenir 3 accents grave
coller le texte
puis refaire 6 fois Alt Gr 7 pour obtenir 3 accents grave

1 J'aime