je me demandais s’il existait un moyen/script pour remonter depuis la plugin zigbeelinker les éléments en défaut. zigbeelinker possède une page « santé et alertes » avec des éléments mis en rouge.
comment capter ces infos pour me les envoyer (telegram dans mon cas) ?
J’ai ajouté un tag sur les équipements à surveiller :
dans l’équipement → configuration avancée → tag = monitor_connexion
Ensuite j’ai un script qui tourne toutes les 6 heures et qui vérifie s’il ni aurait pas des équipements qui ne renvoient rien depuis plus de 4h. Dans l’affirmative il envoie une petite alerte télégram avec la liste des équipements concernés + mise à jour d’un virtuel dédié.
Voici le bloc code du scénario
//inspiré de jplp
// Paramétrage
$maxTime = 14400; // temps en secondes sans communication au delà du quel on considère qu'il y a un souci 14400s = 4h
$tag_monitor = "monitor_connexion"; // Nom du tag à rechercher dans les équipements
// fin Paramétrage
$scenario->setLog("Temps : " . $maxTime);
$scenario->setLog("Tag : " . $tag_monitor);
$scenario->setLog('Début monitoring');
$errEqLogics = array();
$nb_checked = 0; // Nombre d'équipements testés
$nb_KO = 0; // Nombre d'équipements testés Ok
$scenario->setData('monitor_Connect', ''); // vidange de la liste des équipements défaillants
$eqLogics = eqLogic::all(); // récupérations de tous les équipements
foreach($eqLogics as $eqLogic) // pour chaque équipement
{
// Lecture des tags de l'équipements avec une "," comme séparateur de tags
$tags = explode(",",$eqLogic->getTags());
//$scenario->setLog( '-- Tag ' . implode(",",$tags));
if (in_array($tag_monitor,$tags) == true){ // tag de monitoring trouvé, nous testons
$maxDate = strtotime($eqLogic->getStatus('lastCommunication'));
$elapsedTime = time() - $maxDate;
$nb_checked = $nb_checked + 1;
$scenario->setLog( '-- Equipement ' . $eqLogic->getHumanName());
$scenario->setLog( 'Last Communication Date ' . date('c', $maxDate));
if ($elapsedTime > $maxTime){
// -- /!\alert
$errEqLogics[] = $eqLogic->getHumanName(). '=> '. date('d-m-Y à H:i:s', $maxDate);
$nb_KO = $nb_KO + 1;
$scenario->setLog('! ALERTE !');
}
}
} // foreach
// Sauvegarde des erreurs pour envoie
// monitor_Connect sera vide si tout est ok ou bien contiendra la liste des équipements en défaut
$scenario->setData('monitor_Connect', implode("\n\r", $errEqLogics));
// Sauvegarde des nouvelles valeurs (Max et valeur) du nombre de modules Ok dans un virtuel [Synthèses][Statuts capteurs]
// virtuel avec :
// NB_connect_OK : info de type num
// Equipement(s) absent(s) : info de type autre
// Alerte_connexion : info de type binaire 0 = tout va bien
// bloc à décommander si souhait d'utiliser un virtuel affichant le résultat
//$maCmd = cmd::byString('#[Synthèses][Statuts capteurs][NB_connect_OK]#');
//$maCmd->setConfiguration('maxValue',$nb_checked);
//$maCmd->save();
//$maCmd->event($nb_checked - $nb_KO);
//$maCmd = cmd::byString('#[Synthèses][Statuts capteurs][Equipement(s) absent(s)]#');
//$maCmd->event(implode("<br />", $errEqLogics));
//$maCmd = cmd::byString('#[Synthèses][Statuts capteurs][Alerte_connexion]#');
//$maCmd->event($nb_KO > 0);
// log fin de traitement
$scenario->setLog( 'fin monitoring');
Le scénario peut ensuite être complété avec un bloc Si/alors/sinon avec comme test variable(monitor_Connect)!="" et déclencher d’autres actions comme envoyer un message jeedomconnect ou télégram… avec par exemple la liste des équipements en défaut en utilisant variable(monitor_Connect)