ma box est de retour en ligne 
voici mon script et ouf pas d’erreur finalement cf plus bas 
//mettre l'id de l'equipement <= a prendre sur le Panel du dashboard suiviconso
$id_equipement = 259;
$fin_hp = "22:00:00";
$fin_hc = "06:00:00";
$debut_hp = DateTime::createFromFormat('H:i:s', "06:00:01");
$debut_hc = DateTime::createFromFormat('H:i:s', "22:00:01");
#$scenario->setLog('debut_hp = ' . $debut_hp);
#$scenario->setLog('debut_hc = ' . $debut_hc);
//mettre les index de démarrage pour la 1er fois si vous voulez être raccord avec votre compteur. sinon mettez 0 donné au 16/09 pour moi
$hchp = 125439213;
$hchc = 61007697;
$hchp2 = 0;
$hchc2 = 0;
$hchp3 = 0;
$hchc3 = 0;
//mettre la commande du plugin Enedis
$commande_ConsoHoraire = cmd::byString("#[Maison][BB][Consommation Horaire]#");
$id_commande_ConsoHoraire = $commande_ConsoHoraire->getId();
//mettre la commande du plugin Ecowat//
$cmd = cmd::byString("#[Maison][Tempo][Maintenant]#");
$cmdId = $cmd->getId();
$scenario->setLog('idconsohoraire = ' . $id_commande_ConsoHoraire);
$scenario->setLog('idtempo = ' . $cmdId);
//choisir n le nombre de jours à recuperer, par défault 1 // A voir pour mettre une variable pour calculer le n
for ($n = 1 ; $n >= 1; $n--) {
//calcul du nombre d'occurrence à la date définie par n ..normalement 48, mettre 48 c'est mieux en cas de trou
#$r = history::getStatistique($id_commande_ConsoHoraire, date('Y-m-d H:i:s', strtotime("today - $n days 00:00:01")), date('Y-m-d H:i:s', strtotime("tomorrow - $n days 00:00:01")))["count"];
$r = 48;
$i = $r;
for ($r = 1; $r <= $i; $r++) {
// Calculer la date
$date = new DateTime();
$date->setTime(0, 0, 0);
$date->sub(new DateInterval('P' . $n . 'D'));
$date->add(new DateInterval('PT' . ($r * 30) . 'M'));
$date->sub(new DateInterval('PT1S')); // Soustraire une seconde
$scenario->setLog('date = ' . $date->format('Y-m-d H:i:s'));
// Calculer la datei
$datei = clone $date;
$datei->add(new DateInterval('PT1S'));
// Calculer le timestamp de la date
$timestamp = $date->getTimestamp();
#$timestamp = $timestamp - 1; //inutile maintenant201223
// Log du timestamp
$scenario->setLog('n = ' . $n);
$scenario->setLog('r = ' . $r);
$scenario->setLog('date = ' . $date->format('Y-m-d H:i:s'));
$scenario->setLog('datei = ' . $datei->format('Y-m-d H:i:s'));
$scenario->setLog('timestamp = ' . $timestamp);
//calcul la date d'injection à 59:59
$rec_date = $date->format('Y-m-d');
$date->add(new DateInterval('PT1S')); // Ajouter une seconde
$rec_time = $date->format('H:i:s');
$datei->add(new DateInterval('PT1S')); // Ajouter une seconde
$rec_timei = $datei->format('H:i:s');
$scenario->setLog('rec_date= ' .$rec_date);
$scenario->setLog('rec_time= ' .$rec_time);
$scenario->setLog('rec_timei ' .$rec_timei);
//recuperer les derniers index presents dans la table
$sql = "SELECT hchp, hchc, hchp2, hchc2, hchp3, hchc3 FROM `conso_teleinfo` WHERE id_equipement = $id_equipement ORDER BY timestamp DESC LIMIT 1";
$scenario->setLog("SQL = $sql");
$results = DB::Prepare($sql, NULL, DB::FETCH_TYPE_ALL);
foreach ($results as $result) {
$hchp = $result['hchp'];
$hchc = $result['hchc'];
$hchp2 = $result['hchp2'];
$hchc2 = $result['hchc2'];
$hchp3 = $result['hchp3'];
$hchc3 = $result['hchc3'];
$scenario->setLog("hchp =" . $hchp);
$scenario->setLog("hchc =" . $hchc);
$scenario->setLog("hchp2 =" . $hchp2);
$scenario->setLog("hchc2 =" . $hchc2);
$scenario->setLog("hchp3 =" . $hchp3);
$scenario->setLog("hchc3 =" . $hchc3);
}
//verification vs les index mis ci dessus
if ($hchp < $hchpi) { $hchp = $hchpi; } else { $hchp = $hchp; }
if ($hchc < $hchci) { $hchc = $hchci; } else { $hchc = $hchc; }
if ($hchp2 < $hchpi2) { $hchp2 = $hchpi2; } else { $hchp2 = $hchp2; }
if ($hchc2 < $hchci2) { $hchc2 = $hchci2; } else { $hchc2 = $hchc2; }
if ($hchp3 < $hchpi3) { $hchp3 = $hchpi3; } else { $hchp3 = $hchp3; }
if ($hchc3 < $hchci3) { $hchc3 = $hchci3; } else { $hchc3 = $hchc3; }
//determination de la couleur n
if ($rec_time > '00:00:00' && $rec_time <= '06:00:00') {
$debut = date('Y-m-d H:i:s', strtotime("yesterday - $n days 06:00:00"));
$fin = date('Y-m-d H:i:s', strtotime("today - $n days 05:59:59"));
$scenario->setLog("debut =" . $debut);
$scenario->setLog("fin =" . $fin);
} else if ($rec_time > '06:00:00' && $rec_time <= '23:59:59') {
$debut = date('Y-m-d H:i:s', strtotime("today - $n days 06:00:00"));
$fin = date('Y-m-d H:i:s', strtotime("tomorrow - $n days 05:59:59"));
}
$value = history::getStatistique($cmdId, $debut, $fin)["last"];
$scenario->setData("Couleur_n", $value);
$scenario->setLog('Couleur_n= ' .$value);
$scenario->setLog('debut= ' .$debut);
$scenario->setLog('fin= ' .$fin);
if ($rec_time > $debut_hp->format('H:i:s') && $rec_time <= $debut_hc->format('H:i:s')) {
$hp = history::getStatistique($id_commande_ConsoHoraire, $date->format('Y-m-d H:i:s'), $datei->format('Y-m-d H:i:s'))["sum"] / 2;
$hc = 0;
} else {
$hc = history::getStatistique($id_commande_ConsoHoraire, $date->format('Y-m-d H:i:s'), $datei->format('Y-m-d H:i:s'))["sum"] / 2;
$hp = 0;
}
//log
$hpchdate = $date;
$hpchdatei = $datei;
$scenario->setLog('hp = ' .$hp);
$scenario->setLog('hc = ' .$hc);
//calcul hp hc avec la couleur
$couleur = $scenario->getData("Couleur_n");
if ($couleur == "HPJB" || $couleur == "HCJB") {
$hchp = $hchp + ($hp * 1000);
$hchc = $hchc + ($hc * 1000);
$hchp2 = $hchp2 + 0;
$hchc2 = $hchc2 + 0;
$hchp3 = $hchp3 + 0;
$hchc3 = $hchc3 + 0;
if ($rec_time > $debut_hp->format('H:i:s') && $rec_time <= $debut_hc->format('H:i:s')) {
$ptec = "HPJB";
} else {
$ptec = "HCJB";
}
} elseif ($couleur == "HPJW" || $couleur == "HCJW") {
$hchp = $hchp + 0;
$hchc = $hchc + 0;
$hchp2 = $hchp2 + ($hp * 1000);
$hchc2 = $hchc2 + ($hc * 1000);
$hchp3 = $hchp3 + 0;
$hchc3 = $hchc3 + 0;
if ($rec_time > $debut_hp->format('H:i:s') && $rec_time <= $debut_hc->format('H:i:s')) {
$ptec = "HPJW";
} else {
$ptec = "HCJW";
}
} elseif ($couleur == "HPJR" || $couleur == "HCJR") {
$hchp = $hchp + 0;
$hchc = $hchc + 0;
$hchp2 = $hchp2 + 0;
$hchc2 = $hchc2 + 0;
$hchp3 = $hchp3 + ($hp * 1000);
$hchc3 = $hchc3 + ($hc * 1000);
if ($rec_time > $debut_hp->format('H:i:s') && $rec_time <= $debut_hc->format('H:i:s')) {
$ptec = "HPJR";
} else {
$ptec = "HCJR";
}
} else {
//La condition est fausse, on arrête la boucle.\n et .\r
$scenario->setLog("couleur ko en date du " .$hpchdate);
$scenario->setLog("à " .$hpchdatei);
scenario::stop();; // Cela arrête la boucle <= pas sur à vérifier et mettre un message dans la notification
}
//ajustement des données à injecter à 59 au lieu de 00
$rec_time = $date->format('H:i:s');
$date = new DateTime($rec_time);
$date->sub(new DateInterval('PT1S'));
$rec_time = $date->format('H:i:s');
$papp = ($hp + $hc) * 2000;
$scenario->setLog("timestamp =" .$timestamp);
$scenario->setLog("rec_date =" .$rec_date);
$scenario->setLog("rec_time =" .$rec_time);
$scenario->setLog("hchp =" .$hchp);
$scenario->setLog("hchc =" .$hchc);
$scenario->setLog("hchp2 =" .$hchp2);
$scenario->setLog("hchc2 =" .$hchc2);
$scenario->setLog("hchp3 =" .$hchp3);
$scenario->setLog("hchc3 =" .$hchc3);
$scenario->setLog("ptec =" .$ptec);
$scenario->setLog("papp =" .$papp);
$scenario->setLog("id_equipement =" .$id_equipement);
// insertion dans table conso_teleinfo
$sql = "INSERT INTO `conso_teleinfo` (timestamp, rec_date, rec_time, hchp, hchc, hchp2, hchc2, hchp3, hchc3, ptec, papp, id_equipement) VALUES (:timestamp, :rec_date, :rec_time, :hchp, :hchc, :hchp2, :hchc2, :hchp3, :hchc3, :ptec, :papp, :id_equipement) ON DUPLICATE KEY UPDATE timestamp = timestamp";
$parameters = array(
':timestamp' => $timestamp,
':rec_date' => $rec_date,
':rec_time' => $rec_time,
':hchp' => $hchp,
':hchc' => $hchc,
':hchp2' => $hchp2,
':hchc2' => $hchc2,
':hchp3' => $hchp3,
':hchc3' => $hchc3,
':ptec' => $ptec,
':papp' => $papp,
':id_equipement' => $id_equipement,
);
$results = DB::Prepare($sql, $parameters, DB::FETCH_TYPE_ALL);
}
}
//insertion dans table conso_teleinfo de la ligne fictive à J
$timestamp = $timestamp + 1;
$date = new DateTime();
$date->setTimestamp($timestamp);
$rec_date = $date->format('Y_m-d');
$rec_time = $date->format('H:i:s');
$scenario->setLog("timestamp =" .$timestamp);
$scenario->setLog("rec_date =" .$rec_date);
$scenario->setLog("rec_time =" .$rec_time);
$sql = "INSERT INTO `conso_teleinfo` (timestamp, rec_date, rec_time, hchp, hchc, hchp2, hchc2, hchp3, hchc3, ptec, papp, id_equipement) VALUES (:timestamp, :rec_date, :rec_time, :hchp, :hchc, :hchp2, :hchc2, :hchp3, :hchc3, :ptec, :papp, :id_equipement) ON DUPLICATE KEY UPDATE timestamp = timestamp";
$parameters = array(
':timestamp' => $timestamp,
':rec_date' => $rec_date,
':rec_time' => $rec_time,
':hchp' => $hchp,
':hchc' => $hchc,
':hchp2' => $hchp2,
':hchc2' => $hchc2,
':hchp3' => $hchp3,
':hchc3' => $hchc3,
':ptec' => $ptec,
':papp' => $papp,
':id_equipement' => $id_equipement,
);
$results = DB::Prepare($sql, $parameters, DB::FETCH_TYPE_ALL);
$scenario->setLog("well done ! :-)");
et il faut bien diviser par 2 car tu récuperes des puissances par 1/2h
par exemple :
19/03/2025 de 18:00:00 à 18:30:00 tu a soustiré 1,126 kW en 1/2h.
Sauf que nous nous sommes compté & facturé en kWh…
Donc 1.126 kW en 1/2h cela revient a avoir consommé 1.126/2=0.563 kW par 1/2h sur 1h…donc c’est 0.563 kWh
et (copier coller d’une réponse que j’avais faite l’année derniere) Enedis donne une valeur moyenne de la puissance consommée sur le pas de temps choisis (15’,30’ ou 1h).
Donc en fonction de votre pas de temps vous devez pour avoir des kWh (-kW pendant 1h-)
d’abord faire la somme des données par heure
et la diviser par le nombre de valeurs additionnés.
Donc pour un pas de 30’ il faut deux valeurs pour faire 60’(1h), donc il faut diviser la somme par 2… et pour 15’ par 4 et pour 60’ par 1
Le kWh prend en compte le temps de marche des appareils. Dis différemment le kilowatt-heure( kWh) met en relation la puissance à la durée de fonctionnement de l’appareil
Donc il est aussi logique que la somme de puissance instantané relevé avec linky sur 1h soit égale à la différence des index de début et fin de cette heure relevé par linky
Et il est tout aussi logique que la moyenne des puissances réelles ramenés à un pas de temps de 15’,30’,ou 60’ par Enedis soient le reflet quasi exacte de tes index.
La différence est surement du à ce que l’arrondi d’une somme n’est pas égal à la somme des arrondis
exemple :
additionnons 10,123 et 20,124
Arrondi de la somme : 10,123+ 20,124 = 30,247 l’arrondi est = à 30,50
Somme des arrondis : 10,12 + 20,12 = 30,44
Pour ton cas : la somme debug et consohoraire du 19 = 54.964 et tu as bien 59.964/2= 27.482 Kw/h d’afficher sur ton widget linky.
reste à iddentifier dans le log du scenario pourquoi ces deux lignes n’injectent pas la donnée…