Monitoring des modules

Salut les jeedos,

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) ?

Merci
Tif.

Salut

Tu parles de zigbeelinker ou z2m?

Antoine

zigbeelinker - corrigé dans le post :slight_smile:

Bonjour,

Pour chaque équipement il te suffit d’utiliser les alertes de communications …
lastCommunication(équipement,format)

ex:
date("U") - lastCommunication(#[VOLTAÏQUE][LIXEE-Z2M]#,"U")
te donnera le nombre de secondes depuis la dernière communication

Oui j’avais commencé comme ca mais avec 40 modules… je trouve cela fastidieux. C’est pour cela que je cherchais à avoir les alertes du plugin

Sujet déjà traité sur community (mais je ne sais plus où)

en faisant un truc du style :

et dans le scenario :


La condition : intval(strpos("#msg#", " de message depuis plus de "))>0

à voir si ça fonctionne tj, car je l’ai désactivé pour ma part :wink:

Super !! Je teste cela et revient te dire si cela fonctionne toujours :wink:

1 « J'aime »

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)

1 « J'aime »