Voici le scenario qui liste les équipements avec leurs date de dernière communication (à copier dans un bloc code) :
$nbWarning=0;
$nbDanger=0;
$nbPasReponse=0;
$batt[0]='🟢';
$batt[1]='🟠';
$batt[2]='🔴';
$depuis[0]='🟩';
$depuis[1]='⬛';
$actif[0]='⛔';
$actif[1]='✅';
$n=0;
$m=0;
$exclude=array("camera","cloudsyncpro","Freebox_OS","geotrav","htmldisplay","import2calendar","jardin","mail","mode","script","sshmanager");
$msg="<style>table, th, td {border: 1px solid;}</style><h1>Rapport communication équipements</h1><br />";
$msg .= "<table style='border-collapse: collapse;'>";
$msg .="<tr><th>N°</th><th>Actif</th><th>Id</th><th>Équipement</th><th>Plugin</th><th>Alimentation</th><th>Dernière communication</th></tr>";
$batWarning=config::byKey('battery::warning');
$msg2="⚠️Alerte pas de communication depuis plus de 24 heures<br />";
$batDanger=config::byKey('battery::danger');
$list = array();
foreach (eqLogic::all() as $eqLogic) {
if ($eqLogic->getIsEnable() && !in_array($eqLogic->getEqType_name(),$exclude)) {
array_push($list, $eqLogic);
}
// }
}
usort($list, function($a, $b) {
return strcmp($a->getStatus('lastCommunication'), $b->getStatus('lastCommunication'));
});
foreach ($list as $hbeq) {
$n +=1;
$type=$hbeq->getEqType_name();
$value = $hbeq->getStatus('battery');
$batteryDateTime = $hbeq->getStatus('batteryDatetime');
$lastChange=$hbeq->getConfiguration('batterytime');
$lastCommunication = $hbeq->getStatus('lastCommunication');
$tsCommTime = strtotime($lastCommunication); // convert batteryDatetime to timestamp
$tsCheck = strtotime("now") - 86400; // convert today to timestamp and substract 1day (86400 seconds)
$niveau=0;
if ($hbeq->getIsEnable()&&$tsCheck > strtotime($lastCommunication)) {
$m+=1;
$msg2 .= $hbeq->getId() . " : " . $hbeq->getHumanName() . " (" . $hbeq->getEqType_name(). ") ".$hbeq->getConfiguration('battery_type', ''). " " . $lastCommunication . "<br />";
}
$msg .="<tr><td>" . $n . "</td><td>" . $actif[$hbeq->getIsEnable()] . "</td><td>" . $hbeq->getId() . "</td><td>" . $hbeq->getHumanName() . "</td><td>" . $hbeq->getEqType_name(). "</td><td align='center'>".$hbeq->getConfiguration('battery_type', '')."</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['#nbComm#'] = $m;
$tags['#rapport#'] = $msg;
$tags['#notif#']=$msg2;
$scenario->setTags($tags);
Ensuite c’est envoyé par mél et notification. Le scenario comme celui qui contrôle l’état des piles, est exécuté chaque nuit par le scenario qui sauvegarde Jeedom.
L’inconvénient est que cela liste également des équipements qui n’ont pas vocation à communiquer. Je pense ajouter un mot-clé dans le commentaire de ce type d’équipement pour pouvoir les exclure facilement. Il faut juste trouver un peu de temps…
Dans la même veine, j’ai aussi la page santé, le listing des scenarios actifs ou non, la liste des commandes historisée…
J’avais tout ça en place il y a longtemps, les rapports issus de Jeedom n’étant pas troujours lisibles et souvent tronqués selon le format de page demandé…
Ce n’est sûrement pas le plus efficace et il y a certainement des améliorations à apporter au niveau code, mais ça a été rapide à mettre en place et ça fait ce que j’en attends.