Variable statisticsBetween

Bonjour,

Je tente de calculer la moyenne de température extérieure entre une date cible et maintenant.

Cette information va entrer dans le calcul de la consommation de ma chaudière par rapport à la température extérieure moyenne sur la dernière période d’actualisation de ma chaudière (+1 sur un compteur chaque heure de combustion)

statisticsBetween(#[Chaufferie][Chaudière RTU][T° ext (réele)]#,avg,2019-11-10 08:17:13,now)
=> Réponse : 2.166265 :smile:

statisticsBetween(#[Chaufferie][Chaudière RTU][T° ext (réele)]#,avg,variable(LastTS),now)
=> Réponse: vide :unamused:

LastTS contient 2019-11-10 08:17:13

Une idée?

Merci d’avance

Daywin

Jeedom ne support pas bien l’utilisation de fonction (ici variable) dans une fonction. Je n’ai jamais réussi a améliorer ce point

Suggestion : utiliser un bloc code, ce qui fonctionne très bien chez moi.
Exemple :


history::getStatistique(141, $debut, $fin)["avg"])

141 est l’ID de ma commande historisée.

@Domars
Effectivement bonne idée je vais faire comme ça ! Merci !

@Loic
J’ai jeté un oeil au code. Effectivement pas simple à résoudre…

Voici une idée permettant de prendre en charge les tags (possible de faire pareil pour les variables assez simplement). L’idée étant de le faire au 1er niveau (encore accès à $_scenario) tant que l’information n’est pas perdu dans la récursivité.

Function setTags (11eme ligne) de la classe scenarioExpression:

if (is_object($_scenario)) {
	$cmd = cmd::byId(str_replace('#', '', $_scenario->getRealTrigger()));
	if (is_object($cmd)) {
		$replace1['#trigger#'] = $cmd->getHumanName();
		$replace1['#trigger_value#'] = $cmd->execCmd();
	} else {
		$replace1['#trigger#'] = $_scenario->getRealTrigger();
	}

// INSERER: 

	preg_match_all("/#[a-zA-Z][a-zA-Z_]*#/", $_expression, $matches, PREG_SET_ORDER);
	if (is_array($matches)) {
		foreach ($matches as $match) 
		{	
			$temp = self::tag($_scenario, str_replace("#","",$match[0]),"");
			if ($temp != "")
			{
				$_expression = str_replace($match[0], $temp , $_expression);
			}
		}
	}
}

Qu’en pensez-vous?

Daywin

Je confirme ça fonctionne très bien. Merci pour l’idée !

$id=100 // Id de la commande
$tags = $scenario->getTags(); 
$start = date('Y-m-d H:i:s',$tags['#start#']); 
$end = date('Y-m-d H:i:s',$tags['#end#']);
$tags['#output#'] = history::getStatistique($id, $start, $end)["avg"];
$scenario->setTags($tags);

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