Utilisation de valuedate dans averagebetween

Bonjour,
J’ai fait des recherches sur le net, dont sur ce forum, mais je ne trouve pas ma solution.
Pouvez-vous m’aider.

Je souhaiterai déterminer la température moyenne sur une période qui évolue en fonction des jours.
Le début de la période est la date de mise à jour d’une donnée d’un virtuel
j’utilise donc :

valuedate(#[monVirtuel][donnee]#)

Ensuite je veux la température moyenne d’un thermomètre T1 ce qui me donne :

averagebetween(#T1[temp]#,valuedate(#monVirtuel[donnee]#),now)

voici mon scénario.

et le résultat de celui-ci :
image

voyer vous mon erreur?

Bonjour,

Probablement pas d’erreur mais le core a du mal quand il y a trop de fonctions imbriquées.

Utilise un tag pour stocker la valeur du valueDate puis appel ce tag dans la fonction averageBetween.

Bonjour,
Tout d’abord Merci Bison pour cette piste.
Je viens de tester ta solution, bien que le AverageBetween me renvoi un résultat celui-ci n’est pas cohérent 16,7° au lieu de 27.7°.
Voici mon nouveau Scénario :


Et les LOG :

Essaye en utilisant plutôt tag(DebutPeriode) parce qu’en principe il ne faut plus utiliser la méthode #montag# depuis longtemps

Voici le nouvel essai avec tag(DebutPeriode) et mais la commande averagebetween ne renvoi plus rien. la fonction se comporte comme lors du premier test envoyé.
Scénario :


Résultat :

Encore merci de ton aide Bison.

J’ai revérifié, c’est pas possible en fait, le core attend exactement ce qu’il faut et ne réinterprète rien dans averageBetween()

La solution sera de passer par un bloc code pour appeler la fonction, soit après avoir récupérer les tags, soit en appelant la fonction valueDate() directement

EDIT :

Donc comme ça en remplaçant #[xxx][yyy][zzz]# par ta commande

Le bloc code :

$cmdId= cmd::byString("#[xxx][yyy][zzz]#")->getId();
$dateDebut = scenarioExpression::valueDate($cmdId);
$a = scenarioExpression::averageBetween($cmdId,$dateDebut,'now');

$tags = $scenario->getTags();
$tags['#Avg#'] = $a;
$scenario->setTags($tags);

Bonjour Bison,
Merci pour ton Code, celui-ci a fonctionné.
J’ai juste dû l’adapter car la date de debut n’est pas sur la même commande que la moyenne.
Ce qui me donne les éléments suivants.
Le Scénario :


Le bloc Code :

$cmdId= cmd::byString("#[Maison][Gestion Température maison][Dernier Message émis]#")->getId();
$dateDebut = scenarioExpression::valueDate($cmdId);
$cmdId= cmd::byString("#[Chaudiere][Chaudière ][Température extérieure]#")->getId();
$a = scenarioExpression::averageBetween($cmdId,$dateDebut,'now');

$tags = $scenario->getTags();
$tags['#Avg#'] = $a;
$tags['#DateDebut#'] = $dateDebut;
$scenario->setTags($tags);

Le logs :

------------------------------------
[2024-08-01 09:06:10][SCENARIO] -- Début : Scenario lance manuellement.
[2024-08-01 09:06:10][SCENARIO] - Exécution du sous-élément de type [action] : action
[2024-08-01 09:06:10][SCENARIO]    Log : date début période : 2024-08-01 01:15:06
[2024-08-01 09:06:10][SCENARIO]    Log : Température actuelle : 24.3
[2024-08-01 09:06:10][SCENARIO]    Log : commande souhaitée :
[2024-08-01 09:06:10][SCENARIO]    Log : résultat attendu : 25.4
[2024-08-01 09:06:10][SCENARIO] Mise à jour du tag #DebutPeriode# => 2024-08-01 01:15:06
[2024-08-01 09:06:10][SCENARIO]    Log : 2024-08-01 01:15:06
[2024-08-01 09:06:10][SCENARIO]    Log : Commande souhaitée 2 :
[2024-08-01 09:06:10][SCENARIO] Exécution d'un bloc élément : 143
[2024-08-01 09:06:10][SCENARIO] - Exécution du sous-élément de type [action] : code
[2024-08-01 09:06:10][SCENARIO] Exécution d'un bloc code
[2024-08-01 09:06:10][SCENARIO]    Log : 25.4
[2024-08-01 09:06:10][SCENARIO]    Log : 2024-08-01 01:15:06
[2024-08-01 09:06:10][SCENARIO] Fin correcte du scénario

Je me pose une question au sujet des bonnes pratiques dans le bloc Code, j’ai réutilisé la variable cmdId, ne faudrait-il pas que je crée une nouvelle variable cmdId2?

Par contre au sujet de la réinterprétation de averagebetween, je trouve dommage qu’une fonction (valuedate) qui renvoi une date ne peut être mise en entrée d’une autre fonction qui attend une date.

Encore mille merci pour ton aide.

Non pas de soucis. Dans ce cas tu ne réutilises pas cette variable à un autre moment que la ligne juste après.
Ce serait problématique si tu devais réutiliser la variable déclarée à la première ligne vers la fin du code.

Et oui, ça serait plus simple que la fonction interprète ce que l’on donne dans les attributs de cette fonction.

Je t’invite à fermer le sujet avec le post qui t’a aidé :wink:

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