Effectivement, le seuil se trouve quelque part entre 87% et 92%. Pour les équipements qui n’ont pas communiqué tout de suite, la date de changement de pile correspond à leur retour dans la liste.
Pour les équipements ayant moins de 90% de batterie, les dates sont correctes chez moi.
Si vous avez quelque part un listing avec les dates de changement de piles, il est possible de les rétablir avec un scénario. C’est fastidieux car prévu pour corriger si je me trompais d’équipement ou si je remettais les anciennes piles en place.
Il faut connaitre, évidement, la date (et l’heure) de changement et l’Id de l’équipement que l’on trouve sur la page de configuration avancée :
Coller le texte suivant dans le bloc code d’un scenario, modifier l’Id (ici 317) de l’équipement et la date, sauvegardez et exécutez le scenario (ou faites un Ctrl+clic sur le bouton Exécuter).
$eqLogic = eqLogic::byId(317); // id (pas nom) à modifier
$newDate = '2025-06-21 11:12:56'; // date à remplacer
if (is_object($eqLogic)){
$eqLogic->setConfiguration('batterytime', $newDate);
$eqLogic->save();
}
else
{
$scenario->setLog($eqlLogic.' non trouvé !');
}
Comme je m’envoie, grâce au plug-in mail, un rapport des équipements sur piles toutes les nuits, j’ai pu rétablir tous mes équipements…
Pour ceux que cela intéresse :
Un bloc code :
// Liste tous les equipements qui contiennent un status battery
$nbWarning=0;
$nbDanger=0;
$nbPasReponse=0;
$batt[0]='🟢';
$batt[1]='🟠';
$batt[2]='🔴';
$depuis[0]='🟩';
$depuis[1]='⬛';
$msg="<style>table, th, td {border: 1px solid;}</style><h1>Rapport équipements sur batteries</h1><br />";
$msg .= "<table style='border-collapse: collapse;'>";
$msg .="<tr><th>État</th><th>Équipement</th><th>Niveau</th><th>Batteries</th><th>Date changement</th><th>Date information</th><th>Dernière communication</th></tr>";
$batWarning=config::byKey('battery::warning');
$batDanger=config::byKey('battery::danger');
//$scenario->setLog('Danger : '.json_encode($batDanger));
//$scenario->setLog('Warning : '.json_encode($batWarning));
$list = array();
foreach (eqLogic::all() as $eqLogic) {
if ($eqLogic->getStatus('battery', -2) != -2 && $eqLogic->getConfiguration('battery_type', '') != 'Batterie') {
array_push($list, $eqLogic);
}
}
usort($list, function($a, $b) {
return strcmp(floatval($a->getStatus('battery'))/100, floatval($b->getStatus('battery'))/100);
});
foreach ($list as $hbeq) {
$eqId = $hbeq->getId();
$value = $hbeq->getStatus('battery');
$batteryDateTime = $hbeq->getStatus('batteryDatetime');
$lastChange=$hbeq->getConfiguration('batterytime');
$lastCommunication = $hbeq->getStatus('lastCommunication');
$tsBatteryTime = strtotime($batteryDateTime); // convert batteryDatetime to timestamp
$tsCheck = strtotime("now") - 86400; // convert today to timestamp and substract 1day (86400 seconds)
$niveau=0;
if ($value <= $batDanger) {
$niveau=2;
$nbDanger += 1;
} elseif ($value <= $batWarning) {
$niveau=1;
$nbWarning += 1;
}
$msg .="<tr><td>" . $batt[$niveau] . "</td><td>" . $hbeq->getHumanName()." (".$eqId.")" . "</td><td align='center'> $value % </td><td align='center'>".$hbeq->getConfiguration('battery_type', '')."</td><td>". $lastChange." </td><td>".$depuis[$tsCheck > $tsBatteryTime]." $batteryDateTime </td><td>".$depuis[$tsCheck > strtotime($lastCommunication)]." $lastCommunication </td></tr>";
}
$msg .= "</table>";
//$scenario->setLog($msg);
$scenario->setLog(config::byKey('name'));
$tags = $scenario->getTags();
$tags['#jeedomName#']=config::byKey('name');
$tags['#nbWarning#'] = $nbWarning;
$tags['#nbDanger#'] = $nbDanger;
$tags['#rapport#'] = $msg;
$scenario->setTags($tags);
Suivi d’un bloc Action qui exploite les tags définis ci-dessus :
Et le résultat :