J’ai beau chercher, je ne trouve pas l’instruction qu’il faudrait que j’utilise.
Dans un bloc code d’un scénario j’arrive à récupérer la valeur d’une ligne de l’historique avec l’instruction :
$indexProdPV2 = history::getStatistique($cmdIdCompteurProdPV, $dateDebut, $dateFin)[« last »];
Mais dans certain cas, j’ai besoin de modifier la valeur de cette ligne de l’historique. Et pour cela j’ai besoin de récupérer la date exacte d’enregistrement de cette ligne. Première question : Comment, avec quelle instruction puis-je récupérer la valeur exacte de la date d’enregistrement d’une ligne existante dans l’historique ?
Ensuite quand je saurai récupérer cette date, je vais vouloir modifier cette ligne dans l’historique. Et j’ai l’intention de continuer à utiliser les instructions :
$histoProdPV = cmd::byId($cmdIdCompteurProdPV);
$histoProdPV->addHistoryValue($delta,$heureHistory);
dans lesquelles la variable $heureHistory contiendra la fameuse date que je vais apprendre à récupérer…
Seconde question : Est-ce que l’instruction addHistoryValue va bien savoir modifier la ligne déjà existante dans l’historique ?
history::all c’est à ça que ça sert !!! « All » toutes les valeurs de la ligne et non pas toutes les lignes entre les 2 dates !!! Mais c’est bien sûr !!! Que n’y avais-je pas pensé.
setvalue() OK mais avec quelle syntaxe ?
Par exemple comme ça :
$histoProdPV = cmd::byId($cmdIdCompteurProdPV);
$histoProdPV->setvalue($delta);
sans rappeler la clé de la ligne composée de l’ID et de la date ???
Mais je n’arrive pas à récupérer la valeur de la ligne avec history::all alors que j’y arrivais avec history::getStatistique
$cmdIdCompteurProdPV = 916; // Commande Production PV (Wh) de l'équipement Shelly EM dans le Vide Sanitaire
$dateDebut = date("Y-m-d H:i:s", strtotime("-10 minute"));
$dateFin = date("Y-m-d H:i:s", strtotime("Now"));
$scenario->setLog("Date début : ".$dateDebut);
$scenario->setLog("Date fin : ".$dateFin);
$indexProdPV1 = history::getStatistique($cmdIdCompteurProdPV, $dateDebut, $dateFin)["min"];
$all = history::all($cmdIdCompteurProdPV, $dateDebut, $dateFin)["last"];
$scenario->setLog("Contenu de all : ".$all);
$indexProdPV2 = count($all) ? $all[count($all) - 1]->getValue() : null;
// $indexProdPV2 = history::getStatistique($cmdIdCompteurProdPV, $dateDebut, $dateFin)["last"];
$delta = ($indexProdPV2 - $indexProdPV1);
$scenario->setLog("Index ProdPV1 : ".$indexProdPV1);
$scenario->setLog("Index ProdPV2 : ".$indexProdPV2);
$scenario->setLog("Ecart PV2 - PV1 : ".$delta);
La variable $all ne s’affiche pas dans le log, mais c’est peut-être normal puisque c’est un array
Par contre $indexProdPV2 reste vide. A cause de history::all ou à cause du count auquel je ne comprend rien…
La différence $delta est inférieure à 1. Dans ce cas, je veux que l’objet contenant la valeur $ProdPV2 soit mis à jour en enregistrant comme valeur $ProdPV1 pour que le delta devienne 0.
Or l’objet ne se met pas à jour
Je ne sais pas si ça convient. Hier soir, je m’en suis sorti en reprenant addHistoryValue, mais en indiquant la bonne valeur de la date… et l’objet de history est bien mis à jour/modifié.
Mais mon problème maintenant c’est de m’être aperçu que mon algorithme ne fonctionne pas. Une première fois l’écart est inférieur à 1, mais la fois suivante il est supérieur à 1, puis à nouveau inférieur à 1. Je ne peux pas procéder en mettant à jour l’index du compteur du dispositif de mesure.
Il faut que je mémorise la progression de l’index d’origine dans une autre commande (virtuelle) en détectant le début de la période où l’écart entre 2 index devient inférieur à 1. Pour cela j’ai besoin d’un indicateur extérieur au bloc code du scénario… C’est ma nouvelle mission…
En tout cas merci beaucoup pour ton aide, grâce à tes retours j’ai appris des choses…