Utiliser les données d'une clée Lixee

Bonjour,
Je souhaite calculer et afficher ma consommation en € TTC sur 1 jour/semaine/mois.
Pour cela, je dispose de mon prix TTC du KWh et des indices compteurs remontés par la clé Lixee et historisés par Jeedom.

J’ai donc besoin d’une formule du genre: ((indice compteur actuel) - (indice compteur à la date D)) * prix du KWh.

Ca semble simple en apparence mais je colle…
Merci de votre aide.

Hello
Avec un bloc code cela devrait le faire

$priceKw=1.17;
$cmdName='#[Maison][MaisonVillecresnesGaz][Index]#';
$cmd=cmd::byString($cmdName);

if (is_object($cmd)  and $cmd->isHistorized() ) {
	$cmdId=$cmd->getId();
	
	//last day
	$start=date("Y-m-d H:i:s", strtotime('yesterday'));
	$end=date("Y-m-d 23:59:59", strtotime('yesterday'));
	calcCost($scenario,$start,$end,$cmdId,$priceKw);

	//Last week
	$start=date("Y-m-d H:i:s", strtotime('monday last week'));
	$end=date("Y-m-d 23:59:59", strtotime('sunday last week'));
	calcCost($scenario,$start,$end,$cmdId,$priceKw);

	//Last month
	$start=date('Y-m-01 00:00:00', strtotime("first day of previous month"));
	$end=date('Y-m-t 23:59:59', strtotime("last day of previous month"));
	calcCost($scenario,$start,$end,$cmdId,$priceKw);
} else {
	$scenario->setLog('La commande : ' .  $cmdName . ' n\'existe pas');
}

function calcCost($scenario,$start,$end,$cmdId,$priceKw) {
  	$scenario->setLog(__FUNCTION__);
	$scenario->setLog('	Start  :' . $start . ' -> ' . $end);
	$all=history::all($cmdId, $start, $end);
	if (count($all) > 1) {
		$firstInd=$all[0]->getValue();
		$lastInd=$all[count($all) - 1]->getValue();
		$cost=($lastInd - $firstInd) * $priceKw;
		$scenario->setLog('First ind : ' . $firstInd . '| last ind : ' . $lastInd . ' => cost : ' .  $cost);
	} else {
		$scenario->setLog('Err - Aucun historique');
	}
}

@chris94440

1 « J'aime »

A ouiii, ce n’est pas si simple que ça ! Clairement, je n’aurais pas trouvé ça tout seul :wink:
Je vais tester mais juste une question : dans chacune des formules, je n’ai que la valeur #indice compteur# à intégrer ? pas de dates bornes ?
Merci.
Pour voir si j’ai bien compris, la traduction chez moi de la conso sur 1 jour donnerait :
$priceKw=1.17;
$cmdName=’#[Appartement][LiXee.ZLinky_TIC 00:15:8d:00:05:d2:a9:c0][Index Base]#;
$cmd=cmd::byString($cmdName);

if (is_object($cmd) && $cmd->isHistorized()) {
$cmdId=$cmd->getId();
$start=date(« Y-m-d H:i:s », strtotime(‹ yesterday ›));
$end=date(« Y-m-d 23:59:59 », strtotime(‹ yesterday ›));
calcCost($scenario,$start,$end,$cmdId,$priceKw);
} else {
$scenario->setLog(‹ La commande : ’ . $cmdName . ’ n’existe pas ›);
}

function calcCost($scenario,$start,$end,$cmdId,$priceKw) {
$scenario->setLog(’ Start :’ . $start . ’ → ’ . $end);
$all =history::all($cmdId, $start, $end);

if (count($all) > 1) {
	$firstInd=$all[0]->getValue();
	$lastInd=$all[count($all) - 1]->getValue();
	$cost=($lastInd - $firstInd) * $priceKw;
	$scenario->setLog('First ind : ' . $firstInd . '| last ind : ' . $lastInd . ' => cost : ' .  $cost);
} else {
	$scenario->set('Err - Aucun historique');
}

}

Merci

re
En fait je sais pas ce que te donne ta commande info … si c’est l’indice du compteur je dirais oui.

J’ai pas testé le bout de code mais je pense que l’idée est là

Test le code pour voir ce que cela donne et on affinera ou corrigera si besoin.

Après je pense que tu veux historiser le cout et l’afficher dans un beau graphique… non ?

@chris94440

La valeur « index » est une valeur absolu à 8 caractères historisée.
Donc si par exemple elle est en valeur courante à 17928843 et que la veille à la même heure elle était de 17928805 ça me donne 838 KWE.
En testant la formule dans le testeur d’expression j’ai une réponse internal erreur 500 avec :

setLog(‹ La commande : ’ . $cmdName . ’ n’existe pas ›); } function calcCost($scenario,$start,$end,$cmdId,$priceKw) { $scenario->setLog(’ Start :’ . $start . ’ → ’ . $end); $all =history::all($cmdId, $start, $end); if (count($all) > 1) { $firstInd=$all[0]->getValue(); $lastInd=$all[count($all) - 1]->getValue(); $cost=($lastInd - $firstInd) * $priceKw; $scenario->setLog(‹ First ind : ’ . $firstInd . ‹ | last ind : ’ . $lastInd . ’ => cost : ’ . $cost); } else { $scenario->set(‹ Err - Aucun historique ›); } }">$priceKw=1.17; $cmdName= ›#[Appartement][LiXee.ZLinky_TIC 00:15:8d:00:05:d2:a9:c0][Index Base]# ›; $cmd=cmd::byString($cmdName); if (is_object($cmd) && $cmd->isHistorized()) { $cmdId=$cmd->getId(); $start=date(« Y-m-d H:i:s », strtotime(‹ yesterday ›)); $end=date(« Y-m-d 23:59:59 », strtotime(‹ yesterday ›)); calcCost($scenario,$start,$end,$cmdId,$priceKw); } else { $scenario->setLog(‹ La commande : ’ . $cmdName . ’ n’existe pas ›); } function calcCost($scenario,$start,$end,$cmdId,$priceKw) { $scenario->setLog(’ Start :’ . $start . ’ → ’ . $end); $all =history::all($cmdId, $start, $end); if (count($all) > 1) { $firstInd=$all[0]->getValue(); $lastInd=$all[count($all) - 1]->getValue(); $cost=($lastInd - $firstInd) * $priceKw; $scenario->setLog('First ind : ’ . $firstInd . '| last ind : ’ . $lastInd . ’ => cost : ’ . $cost); } else { $scenario->set(‹ Err - Aucun historique ›); } }

il faut que tu crée un scenario avec un bloc code et que tu execute ce scenario
Tu peux pas tester avec le testeur d’expression
@chris94440

Update :
j’ai modifié le code car j’ai testé avec les données index de mon gazpar…on obtient le résultat suivant :
image

C’est bien ce que tu souhaites ?
@chris94440

Tout d’abord, Merci de ta sollicitude !!!
Ceci étant dit j’ai bien créé un scénario avec un bloc code dans lequel j’ai placé la formule que je t’ai présentée plus haut.
J’ai bien noté que le testeur d’expression ne fonctionne pas dans ce cas là.
Tu me dis que tu as modifié la formule mais je ne la vois pas (excuse-moi).
Comme tu le disais plus haut, in-fine je souhaite présenter les résultats de mon (de mes, si je pars sur conso jour/semaine/mois/année) scénario dans une tuile du Dashboard mais il faut déjà que la formule fonctionne.
J’y reviens: Dans le scénario où j’ai placé le bloc code avec la formule que je te recopie en dessous, lorsque j’exécute le scénario, j’ai un retour " Lancement du scénario réussi".
La tuile de ce scenario présentée dans le Dashboard ne présente pas de valeur résultat mais les commandes classiques d’exécution du scénario.
Je t’aurais bien fait une copie d’écran mais il semble que l’on ne puisse pas joindre de pièces à nos échanges (ou c’est encore la manifestation de mes limitations intellectuelles !!!).
Donc, je te redonne la formule que j’ai placé dans le bloc code pour la conso par jour (last day). J’ai retiré les parties //Last week et //Last month en comprenant que chacune d’elle sera à placer dans un scénario spécifiquement dédié au résultat « semaine » et « mois » mais c’est peut-être une mauvaise interprétation de ma part.
La formule :
$priceKw=1.17;
$cmdName=’#[Appartement][LiXee.ZLinky_TIC 00:15:8d:00:05:d2:a9:c0][Index Base]#’;
$cmd=cmd::byString($cmdName);

if (is_object($cmd) && $cmd->isHistorized()) {

  • $cmdId=$cmd->getId();*
  • $start=date(« Y-m-d H:i:s », strtotime(‹ yesterday ›));*
  • $end=date(« Y-m-d 23:59:59 », strtotime(‹ yesterday ›));*
  • calcCost($scenario,$start,$end,$cmdId,$priceKw);*
  • } else {*
  • $scenario->setLog(‹ La commande : ’ . $cmdName . ’ n’existe pas ›);*
    }

function calcCost($scenario,$start,$end,$cmdId,$priceKw) {

  • $scenario->setLog(’ Start :’ . $start . ’ → ’ . $end);*

  • $all =history::all($cmdId, $start, $end);*

  • if (count($all) > 1) {*

  •   $firstInd=$all[0]->getValue();*
    
  •   $lastInd=$all[count($all) - 1]->getValue();*
    
  •   $cost=($lastInd - $firstInd) * $priceKw;*
    
  •   $scenario->setLog('First ind : ' . $firstInd . '| last ind : ' . $lastInd . ' => cost : ' .  $cost);*
    
  • } else {*

  •   $scenario->set('Err - Aucun historique');*
    
  • }*

}

Voila, où j’en suis pour le moment. Le chantier n’est pas terminé je crois !
Bonne soirée et merci encore.

Hello,
Je n’ai pas avancé depuis notre dernier échange.
Pour bien débuter, je voudrais aller chercher la valeur de mon index dans le passé à des points fixes pour les soustraire à la valeur courante. j’ai testé
#[Appartement][LiXee.ZLinky][Index Base]#, yesterday
#[Appartement][LiXee.ZLinky][Index Base]# today
#[Appartement][LiXee.ZLinky][Index Base]#, last week
Dans tous les cas, le testeur d’expression me renvoie la valeur courante de l’index.
Quelle syntaxe utiliser pour obtenir l’index hier à 00h00, aujourd’hui à 00h00, ou même aujourd’hui il y a 1heure ?
Merci.

Bonjour,

J’ai peur d’être hors sujet mais après tout c’est une question sur les données d’une clée Lixee

image

Courant correspond au Courant efficace phase 1.

J’ai des panneaux solaire en autocosomation, je doit comprendre quoi, je consome rien à l’instant du print screen mais la ou j’ai des doutes c’est les 15A (Courant efficace) : ça correspond à quoi : ma production solaire total ? mon autocosomation ? A autre chose ?

Merci