Hello.
merci pour les réponses.
au final j’ai commencé hier la méthode sql, j’ai vu que ça comme possibilité.
voilà le scénario/code
// By DDelec24
// https://community.jeedom.com/t/recuperations-de-records-absolus/27587
// Scénario programmé 3x par jour, dont un obligatoirement à 23h59
// pour balayer l'history du jour avant qu'il soit archivé
// CRON => 59 8,16,23 * * *
$cmdId = 89; // ID de la commande info température
/* ### Premier lancement du scenario, recherche dans les archives ### */
if($scenario->getData('v_rechercheRecordsArchives') != 1) {
// Recherche dans l'historique le max
$sqlMax = "SELECT value, datetime FROM historyArch WHERE cmd_id=$cmdId ORDER BY CAST(value as decimal(5,2)) DESC, datetime DESC LIMIT 1;";
$resultMax = DB::Prepare($sqlMax, NULL, DB::FETCH_TYPE_ROW);
$scenario->setLog(json_encode($resultMax));
$scenario->setData('v_maxTemp', $resultMax['value']);
$scenario->setData('v_maxTempDate', $resultMax['datetime']);
// Recherche dans l'historique le min
$sqlMin = "SELECT value, datetime FROM historyArch WHERE cmd_id=$cmdId ORDER BY CAST(value as decimal(5,2)) ASC, datetime DESC LIMIT 1;";
$resultMin = DB::Prepare($sqlMin, NULL, DB::FETCH_TYPE_ROW);
$scenario->setLog(json_encode($resultMin));
$scenario->setData('v_minTemp', $resultMin['value']);
$scenario->setData('v_minTempDate', $resultMin['datetime']);
// On marque qu'on a fait le premier lancement
$scenario->setData('v_rechercheRecordsArchives', 1);
}
/* ### Désormais on recherche dans la table history du jour ### */
$currentMaxTemp = $scenario->getData('v_maxTemp');
$currentMinTemp = $scenario->getData('v_minTemp');
// Recherche dans l'historique le max
$sqlMax = "SELECT value, datetime FROM history WHERE cmd_id=$cmdId ORDER BY CAST(value as decimal(5,2)) DESC, datetime DESC LIMIT 1;";
$resultMax = DB::Prepare($sqlMax, NULL, DB::FETCH_TYPE_ROW);
if($resultMax['value'] > $currentMaxTemp) {
$scenario->setData('v_maxTemp', $resultMax['value']);
$scenario->setData('v_maxTempDate', $resultMax['datetime']);
}
// Recherche dans l'historique le min
$sqlMin = "SELECT value, datetime FROM history WHERE cmd_id=$cmdId ORDER BY CAST(value as decimal(5,2)) ASC, datetime DESC LIMIT 1;";
$resultMin = DB::Prepare($sqlMin, NULL, DB::FETCH_TYPE_ROW);
if($resultMin['value'] < $currentMinTemp) {
$scenario->setData('v_minTemp', $resultMin['value']);
$scenario->setData('v_minTempDate', $resultMin['datetime']);
}
ça peut s’appliquer et s’adapter pour plusieurs commandes via une boucle.
Au tout premier lancement il ira regarder dans historyArch (ce qui peut être assez long) mais les fois suivante il ira juste dans l’archive du jour pour mettre à jour les variables si nécessaire.
Si vous avez une suggestion d’amélioration pour optimiser les requêtes je dis pas non c’est pas mon fort ^^