Avant toute chose merci de (re)prendre connaissance de la charte et de la respecter.
Pour résumer :
- Avant de poser une question, je cherche si la réponse existe
- Je suis poli, courtois et je respecte tout un chacun sur le forum
- Si un post m'agace : je m'en éloigne plutôt que de répondre d'une façon qui pourrait être mal interprétée


Il n'est jamais du luxe que de rappeler des choses simples :
Courtoisie, amabilité, politesse et bonne humeur sont les maîtres mots pour un forum sympathique, bienveillant et accueillant :)

Toute la communauté vous remercie

Plugin monitoring capteurs

Pour échanger sur les plugins classés en catégorie "Monitoring"
flomuson
Timide
Messages : 385
Inscription : 11 mai 2015, 11:28

Plugin monitoring capteurs

Message par flomuson » 29 nov. 2017, 13:14

Bonjour à tous,

je recherche un script ou plugin ou scénario qui vérifie si mes capteurs (xiaomi et autre) communiquent bien avec jeedom...

Je m'explique, le relevé des piles n'est pas forcément "fiable" et j'aimerai qqchose qui par exemple va vérifier une fois par jour que dans les 12 dernieres heures, j'ai bien toutes mes sondes qui ont envoyé qqchose (peut être à paramétrer par équipement) et m'envoyer un mail avec ceux qui n'ont pas répondu.

actuellement je le fais dans un scénario, par equipement je vais "vérifier" avec un collectDate si il est inférieur à 12h.. masi c'est fastidieux et je dois rajouter des que je mets un nouvel équipement... j'aimerai qqchose d'automatique...

Une idée ???

Merci

Avatar de l’utilisateur
Optim'HOME
Timide
Messages : 76
Inscription : 01 avr. 2016, 14:22
Localisation : Toulouse
Contact :

Re: Plugin monitoring capteurs

Message par Optim'HOME » 29 nov. 2017, 13:33

Je m'intéresse également à ce point.
Par exemple aujourd'hui je me rend compte que ma sonde de température extérieure n'a pas envoyé de données depuis 24h mais que celle-ci est toujours OK dans la page santé du plugin rfxcom.

Arrown
Timide
Messages : 37
Inscription : 03 mai 2016, 11:44
Contact :

Re: Plugin monitoring capteurs

Message par Arrown » 01 déc. 2017, 19:27

Le sujet m'intéresse too

flomuson
Timide
Messages : 385
Inscription : 11 mai 2015, 11:28

Re: Plugin monitoring capteurs

Message par flomuson » 01 déc. 2017, 21:03

alors en mode vite fait, j'ai essayé un bloc code qui récupère la date de derniere récup d'une infos "batterie"
Cependant les dates ne correspondent pas du tout avec celles sur le dashboard par exemple (quand on laisse la souris dessus)

par exemple :
- scénario : pile [SDB Famille][Sonde MI 1 Sdb Famile] - 2017-12-01 15:28:09
- sur le dashboard : Valeur du 2017-12-01 20:57:56, collectée le 2017-12-01 20:57:56

Code : Tout sélectionner

$sondes = eqLogic::all();
$scenario->setLog('Début monitoring batteries');
foreach($sondes as $sonde)
{
  try{
    $cmd = cmd::byString('#' . $sonde->getHumanName() . '[Batterie]#');
    $cmd->execCmd();
    $collectDate = $cmd->getCollectDate();
       $scenario->setLog( 'pile ' . $sonde->getHumanName() . ' - ' . $collectDate);
  }catch (Exception $e)
  {
  }
}
// log fin de traitement
$scenario->setLog( 'fin monitoring batteries');

pawnies
Timide
Messages : 107
Inscription : 08 août 2016, 21:22

Re: Plugin monitoring capteurs

Message par pawnies » 13 déc. 2017, 13:17

Pareil intéressé également

baqs
Timide
Messages : 60
Inscription : 26 févr. 2017, 23:45

Re: Plugin monitoring capteurs

Message par baqs » 18 déc. 2017, 23:16

+1

flomuson
Timide
Messages : 385
Inscription : 11 mai 2015, 11:28

Re: Plugin monitoring capteurs

Message par flomuson » 19 déc. 2017, 10:08

En fait j'ai trouvé mon erreur : je regarde la date de reception du niveau de batterie... ce qui ne correspond pas à ce que je cherche.. je dois donc trouver un moyen pour trouver la bonne commande (par exemple "température") et regarder sa date de reception...

Si qqun a une idée ? sinon je parcours toutes les commandes et la dernière date (peu importe la commande) fera "référence"...

Avatar de l’utilisateur
cadavor
Actif
Messages : 865
Inscription : 21 juin 2015, 22:00
Localisation : 34

Re: Plugin monitoring capteurs

Message par cadavor » 19 déc. 2017, 13:01

Avez-vous regardé du coté des Configurations Avancés (roue dentée) de chaque équipement, dans l'onglet "Alertes"?
Pour les modules z-wave, il y a la possibilité de mettre une "Alerte Communications" (voir Blog de Nechry : https://nechry-automation.ch/2017/08/14 ... -partie-3/)
Image

A voir si cela peut s'appliquer à tous les équipements...
Jeedom Stable 3.2.11
Rpi3 + SSD 120Go + Aeotec Z-Stick Gen5
Z-Wave FGR + FGMS + FGDS + FGFS + FGK + FGWPE + ZW062
Orvibo AllOne + Playbulb + Miband2 + Creative Axx20 (TTS)

flomuson
Timide
Messages : 385
Inscription : 11 mai 2015, 11:28

Re: Plugin monitoring capteurs

Message par flomuson » 11 janv. 2018, 10:03

Merci cadavor mais cela implique d'aller sur chaque module (ancien et nouveau) et tou configurer... je cherche quelque chose d'automatique...

J'ai donc un peu travaillé mon script et j'ai trouvé une solution..
Concrètement : je cherche les équipements qui contiennent la commande demandée (chez moi "Batterie") puis ensuite pour chaque équipement, je récupère la "collectDate" la plus élevé de toutes ces commandes.
Puis je teste cette date avec la date actuelle pour avoir le temps écoulé...

je ne suis pas spécialiste du PHP donc tous les commentaires/remarques/changements sont les bienvenues....

Code : Tout sélectionner

$maxTime = 3600; // temps en minute
$batterie = "Batterie"; // Nom de la commande à rechercher
$excludeEq = array("[Terrasse][Oeil Terrasse]" => 1); // Liste des équipements à ignorer (qui contiennent la commande "$batterie")

$_format = '%Y-%m-%d %H:%M:%S';

$eqLogics = eqLogic::all();
$scenario->setLog('Début monitoring');

foreach($eqLogics as $eqLogic)
{
  if ($excludeEq[$eqLogic->getHumanName()] == 1){
    $scenario->setLog( '-- Equipement ' . $eqLogic->getHumanName() . ' ignoré');
    continue;
  }
  
  try{
    if (isset($batterie)){
      	// si la commande n'existe pas, une exception est levée
    	$cmd = cmd::byString('#' . $eqLogic->getHumanName() . '['. $batterie .']#');
    }
    
    $scenario->setLog( '-- Equipement ' . $eqLogic->getHumanName());
    
    $allCmds = $eqLogic->getCmd();
    $maxDate = date($_format, "1970-1-1 00:00:00");
    if (count($allCmds) > 0)
    {
      foreach($allCmds as $cmd)
      {  
          $cmd->execCmd();
          $collectDate = $cmd->getCollectDate();
          $scenario->setLog( 'Commande ' . $cmd->getHumanName() . ' - ' . $collectDate);

          $maxDate = max($maxDate, strtotime($collectDate));

      }
      $scenario->setLog( 'Date max ' . date('c', $maxDate));
      $elapsedTime = time() - $maxDate;
      
      if ($elapsedTime > $maxTime){
        // -- /!\alert
      }
    }
    
  }catch (Exception $e)
  {
    // pas de commande
  }
}
// log fin de traitement
$scenario->setLog( 'fin monitoring');



benj29
Actif
Messages : 1904
Inscription : 26 mars 2017, 09:57

Re: Plugin monitoring capteurs

Message par benj29 » 12 janv. 2018, 10:29

Bonjour,

Excellente idée !
J'étais passé par des collectdate de chaque valeur via des virtuels et des scénarios mais c'est super lourd...

Tu pourrais détailler ce script pour les non-initiés ?
Qu'as-tu paramétré côté plugin script ?

Image

J'ai voulu mettre ton code en requête directement et Jeedom m'a insulté :D

Quelle est la syntaxe pour le tableau d'exclusion pour lister plusieurs éléments ?

Code : Tout sélectionner

$excludeEq = array("[Terrasse][Oeil Terrasse]" => 1); // Liste des équipements à ignorer (qui contiennent la commande "$batterie")

flomuson
Timide
Messages : 385
Inscription : 11 mai 2015, 11:28

Re: Plugin monitoring capteurs

Message par flomuson » 12 janv. 2018, 10:56

Salut,

Pour les détails :
C'est une bloc "Code" dans un scénario lancé toutes les 12h (cron 0 */12 * * *)

Les choses à paramétrer sont les 3 premières lignes :
$maxTime = 3600; // temps en minute avant de considérer qu'un équipement n'a plus de batterie

$batterie = "Batterie"; // Nom de la commande à rechercher (c'est ce qui détermine si un équipement est sur batterie)

$excludeEq = array("[Terrasse][Oeil Terrasse]" => 1); // Equipements à ignorer au format tableau PHP ( exemple : array("[OBJET1][EQUIPEMENT1]" => 1, "[OBJET2][EQUIPEMENT2]" => 1);

Pour les détails du code :

Code : Tout sélectionner

$maxTime = 3600; // temps en minute
$batterie = "Batterie"; // Nom de la commande à rechercher
$excludeEq = array("[Terrasse][Oeil Terrasse]" => 1); // Liste des équipements à ignorer (qui contiennent la commande "$batterie")

$_format = '%Y-%m-%d %H:%M:%S';

// -- récupère tous les équipements
$eqLogics = eqLogic::all();
$scenario->setLog('Début monitoring');

// -- Parcours tous les équipements
foreach($eqLogics as $eqLogic)
{
  // -- Si l'équipement se trouve dans la liste des équipements à ignorer : on passe au suivant
  if ($excludeEq[$eqLogic->getHumanName()] == 1){
    $scenario->setLog( '-- Equipement ' . $eqLogic->getHumanName() . ' ignoré');
    continue;
  }
  
  try{
    if (isset($batterie)){
      	// si la commande n'existe pas, une exception sera levée : cette équipement sera ignorée
    	$cmd = cmd::byString('#' . $eqLogic->getHumanName() . '['. $batterie .']#');
    }
    
    $scenario->setLog( '-- Equipement ' . $eqLogic->getHumanName());
    
     // -- Récupère toutes les commandes de l'équipement
    $allCmds = $eqLogic->getCmd();
    $maxDate = date($_format, "1970-1-1 00:00:00");
    if (count($allCmds) > 0)
    {
     // -- Parcours toutes les commandes
      foreach($allCmds as $cmd)
      {  
      	  // -- Récupère la date de dernière mise à jour de la commande
          $cmd->execCmd();
          $collectDate = $cmd->getCollectDate();
          $scenario->setLog( 'Commande ' . $cmd->getHumanName() . ' - ' . $collectDate);

      	  // -- Compare la date récupérée avec la date max des autres commandes de l'équipement
          $maxDate = max($maxDate, strtotime($collectDate));

      }
      $scenario->setLog( 'Date max ' . date('c', $maxDate));
      
      // -- Calcule le temps écoulé entre la date maximun et aujourd'hui (récuptat en minute)
      $elapsedTime = time() - $maxDate;
      
      if ($elapsedTime > $maxTime){
      	// -- le temps est supérieur au temps spécifié : alerte !!! (mail ? log ? sms?)
        // -- /!\alert
      }
    }
    
  }catch (Exception $e)
  {
    // pas de commande
  }
}
// log fin de traitement
$scenario->setLog( 'fin monitoring');


benj29
Actif
Messages : 1904
Inscription : 26 mars 2017, 09:57

Re: Plugin monitoring capteurs

Message par benj29 » 12 janv. 2018, 11:10

Ah, tu vois j'avais compris que tu passais par un script... du plugin du même nom :D

Merci !

benj29
Actif
Messages : 1904
Inscription : 26 mars 2017, 09:57

Re: Plugin monitoring capteurs

Message par benj29 » 12 janv. 2018, 11:15

Par contre, comment alertes-tu l'utilisateur via Jeedom (message ou autre ?).
En PHP, je sèche...

L'intérêt serait d'envoyer un SMS pour dire problème sur les modules - voir centre de message
Côté Jeedom, faire un message dans le centre du même nom.
(perso tous les messages sont renvoyés vers ma boite mail).

Code : Tout sélectionner

  if ($elapsedTime > $maxTime){
      	// -- le temps est supérieur au temps spécifié : alerte !!! (mail ? log ? sms?)
        // -- /!\alert
      }
De l'autre, je vois par exemple, un capteur HS volontairement est bloqué depuis le 9/1... mais je ne vois aucun message de log mise à part dans le log :

Code : Tout sélectionner

[2018-01-12 12:00:16][SCENARIO] -- Equipement [Portail][Portail (Xiaomi)]
[2018-01-12 12:00:16][SCENARIO] Commande [Portail][Portail (Xiaomi)][Etat] - 2018-01-09 17:54:38
[2018-01-12 12:00:17][SCENARIO] Commande [Portail][Portail (Xiaomi)][Rafraichir] -
[2018-01-12 12:00:17][SCENARIO] Commande [Portail][Portail (Xiaomi)][Absence de fermeture] - 2018-01-09 17:54:38
[2018-01-12 12:00:17][SCENARIO] Commande [Portail][Portail (Xiaomi)][Batterie] - 2018-01-09 18:02:13
[2018-01-12 12:00:17][SCENARIO] Commande [Portail][Portail (Xiaomi)][Pile Voltage] - 2018-01-09 18:02:13
[2018-01-12 12:00:17][SCENARIO] Date max 2018-01-09T18:02:13+01:00

benj29
Actif
Messages : 1904
Inscription : 26 mars 2017, 09:57

Re: Plugin monitoring capteurs

Message par benj29 » 19 janv. 2018, 16:54

Up, le script fait super bien le boulot, mais comment passer l'information quand la remontée de données dépasse un certain écart par rapport à l'heure et remonter cela dans Jeedom ?

Le coup du php est pas mal... mais faut savoir faire du php :D :lol:

benj29
Actif
Messages : 1904
Inscription : 26 mars 2017, 09:57

Re: Plugin monitoring capteurs

Message par benj29 » 30 janv. 2018, 13:40

Hello,

Toujours dans une tentative à rendre ce script fonctionnel...

Tentative aujourd'hui avec un capteur Xiaomi qui est HS. Un bel error dans le champ scénario ; pas de log à l'exception côté Jeedom sur la partie Xiaomi.

Code : Tout sélectionner

PHP Fatal error:  Call to a member function pingHost() on boolean in /var/www/html/plugins/xiaomihome/core/class/xiaomihome.class.php on line 657
Tu es sûr que ce code est fonctionnel ?

J'ai tenté avec quelqu'un plus à l'aise que moi en PHP de modifier le script pour piloter un booléen qui s'affiche si problème de remontées.

flomuson
Timide
Messages : 385
Inscription : 11 mai 2015, 11:28

Re: Plugin monitoring capteurs

Message par flomuson » 31 janv. 2018, 09:22

Hello,

désolé pour ma réponse tardive,

le script fonctionne bien chez moi (en tout cas quand un module ne répond plus, j'ai bien un message)...
Pour envoyer un message, je stocke en fait la liste des modules défaillants dnas un tableau PHP :
Au début du script j'ai rajouté :

Code : Tout sélectionner

$errEqLogics = array();
Et lorsqu'un module est "out" :

Code : Tout sélectionner

if ($elapsedTime > $maxTime){
        // -- /!\alert
        $errEqLogics[] = $eqLogic->getHumanName();
      }
Puis avant la fin, j'initialise une variable avece cette liste

Code : Tout sélectionner

  $scenario->setData('monitor', implode(",", $errEqLogics));
Ce qui donne :

Code : Tout sélectionner

$maxTime = $scenario->getData("TIMEOUT_TEMPERATURE"); //43200; // temps en minute

$scenario->setLog("Temps : " . $maxTime);

$batterie = "Batterie"; // Nom de la commande à rechercher
$excludeEq = array(); // Liste des équipements à ignorer (qui contiennent la commande "$batterie")

$errEqLogics = array();

$_format = '%Y-%m-%d %H:%M:%S';

$eqLogics = eqLogic::all();
$scenario->setLog('Début monitoring');

$scenario->setData('monitor', '');

foreach($eqLogics as $eqLogic)
{
  if ($excludeEq[$eqLogic->getHumanName()] == 1){
    $scenario->setLog( '-- Equipement ' . $eqLogic->getHumanName() . ' ignoré');
    continue;
  }
  
  try{
    if (isset($batterie)){
      	// si la commande n'existe pas, une exception est levée
    	$cmd = cmd::byString('#' . $eqLogic->getHumanName() . '['. $batterie .']#');
    }
    
    $scenario->setLog( '-- Equipement ' . $eqLogic->getHumanName());
    
    $allCmds = $eqLogic->getCmd();
    $maxDate = date($_format, "1970-1-1 00:00:00");
    if (count($allCmds) > 0)
    {
      foreach($allCmds as $cmd)
      {  
          $cmd->execCmd();
          $collectDate = $cmd->getCollectDate();
          $scenario->setLog( 'Commande ' . $cmd->getHumanName() . ' - ' . $collectDate);

          $maxDate = max($maxDate, strtotime($collectDate));

      }
      $scenario->setLog( 'Date max ' . date('c', $maxDate));
      $elapsedTime = time() - $maxDate;
      
      if ($elapsedTime > $maxTime){
        // -- /!\alert
        $errEqLogics[] = $eqLogic->getHumanName();
      }
    }
    
  }catch (Exception $e)
  {
    // pas de commande
  }
  
}

  $scenario->setData('monitor', implode(",", $errEqLogics));
// log fin de traitement
$scenario->setLog( 'fin monitoring');

Puis j'ai rajouté un autre bloc "SI/Alors/Sinon"

Code : Tout sélectionner

SI variable(monitor) != ''
    ALORS
    
    SINON

benj29
Actif
Messages : 1904
Inscription : 26 mars 2017, 09:57

Re: Plugin monitoring capteurs

Message par benj29 » 31 janv. 2018, 09:32

OK, par contre tu indiquais que ton temps était en minutes, il est en seconde non ?

Avatar de l’utilisateur
marmoul
Actif
Messages : 804
Inscription : 01 sept. 2015, 15:50
Localisation : Haute-Saône (70)

Re: Plugin monitoring capteurs

Message par marmoul » 31 janv. 2018, 10:21

Salut,

Merci pour le partage je viens de tester sa à l'air de fonctionner ( je n'ai pas de module dead du coup je vais attendre pour être sur mais dans les log sa va :) )
Je l'ai installer car j'ai un détecteur de mouvement xiaomi qui passe dead offline dans mihome des fois du coup je vais pouvoir surveiller.

Merci :D
Scenario_-_Jeedom.png
Scenario_-_Jeedom.png (157.07 Kio) Consulté 590 fois

benj29
Actif
Messages : 1904
Inscription : 26 mars 2017, 09:57

Re: Plugin monitoring capteurs

Message par benj29 » 31 janv. 2018, 21:54

Bonsoir,

Je ne comprends pas comment tu règles le maxtime pour détecter un capteur en défaut.

Code : Tout sélectionner

$maxTime = $scenario->getData("TIMEOUT_TEMPERATURE"); //43200; // temps en minute
D'où sort ce TIMEOUT_TEMPERATURE ? j'aimerai positionner un temps plus court, par exemple 6h soit 360 minutes. Il est rare qu'un capteur Xiaomi d'ailleurs ne communique pas au moins un élément du capteur toutes les 150/180 min...

J'ai un problème, je ne vois pas ce qui cloche.
J'ai pris ton code exact... sauf que dans le if dessous avec le champ '' ... en fait ma chaine comporte tous les capteurs testés ! :lol:

Je mets volontairement les dernières lignes pour montrer...
Les 2 derniers capteurs ne sont pas en erreur... mais pour autant, ils apparaissent dans le champ du if...

Code : Tout sélectionner

2018-01-31 22:06:56][SCENARIO] -- Equipement [WC1][WC 1er]
[2018-01-31 22:06:56][SCENARIO] Commande [WC1][WC 1er][Rafraichir] -
[2018-01-31 22:06:56][SCENARIO] Commande [WC1][WC 1er][Température] - 2018-01-31 22:01:36
[2018-01-31 22:06:56][SCENARIO] Commande [WC1][WC 1er][Humidité] - 2018-01-31 22:01:36
[2018-01-31 22:06:56][SCENARIO] Commande [WC1][WC 1er][Batterie] - 2018-01-31 22:01:36
[2018-01-31 22:06:56][SCENARIO] Commande [WC1][WC 1er][Pile Voltage] - 2018-01-31 22:01:36
[2018-01-31 22:06:56][SCENARIO] Date max 2018-01-31T22:01:36+01:00
[2018-01-31 22:06:56][SCENARIO] -- Equipement [WCr][WC RDC]
[2018-01-31 22:06:56][SCENARIO] Commande [WCr][WC RDC][Rafraichir] -
[2018-01-31 22:06:56][SCENARIO] Commande [WCr][WC RDC][Température] - 2018-01-31 22:01:36
[2018-01-31 22:06:56][SCENARIO] Commande [WCr][WC RDC][Humidité] - 2018-01-31 22:01:36
[2018-01-31 22:06:56][SCENARIO] Commande [WCr][WC RDC][Batterie] - 2018-01-31 22:01:36
[2018-01-31 22:06:56][SCENARIO] Commande [WCr][WC RDC][Pile Voltage] - 2018-01-31 22:01:36
[2018-01-31 22:06:56][SCENARIO] Date max 2018-01-31T22:01:36+01:00
[2018-01-31 22:06:57][SCENARIO] fin monitoring
[2018-01-31 22:06:57][SCENARIO] Exécution du sous-élément de type [condition] : if
[2018-01-31 22:06:57][SCENARIO] Evaluation de la condition : ["[Chambre d'Ami][Chambre Ami],[Chambre d'Ami][Fenêtre Chambre Ami],[Chambre Parents][Interrupteur Lit Parents],[Chambre Parents][Parents],[Chambre Parents][Porte Fenêtre Chambre Parents],[Chambre Raphaël][Chambre Raphaël],[Chambre Raphaël][Fenêtre Raphaël],[Couloir][Commun],[Cuisine][Congélo Cuisine],[Cuisine][Cuisine],[Cuisine][Fenêtre Cuisine],[Cuisine][Frigo Cuisine],[Dressing][Détecteur de Fumée Dressing],[Dressing][Dressing],[Dressing][Fenêtre Dressing],[Entrée][Détecteur de Fumée Entrée],[Entrée][Entrée Bas],[Entrée][Entrée Haut],[Entrée][Fenêtre Entrée],[Entrée][Porte Entrée],[Extérieur][EXT Nord],[Garage][Buanderie],[Garage][Congélo Buanderie],[Garage][Détecteur de Fumée Garage],[Garage][Détecteur Mouvement],[Garage][Fenêtre Garage],[Garage][Frigo Buanderie],[Garage][Garage],[Garage][Interrupteur Garage],[Garage][Porte Garage (Xiaomi)],[Garage][Porte Intermédiaire],[NAS - Box][TempNAS],[Portail][Portail (Xiaomi)],[Salle à Manger][Détecteur de Fumée SAM],[Salle à Manger][Fenêtre Salle à Manger],[Salle à Manger][SAM],[Salle d'eau][Salle dEau],[Salle de Bains][Fenêtre S2B],[Salle de Bains][Salle de Bains],[Salon][Baie Salon],[Salon][Fenêtre Salon],[Salon][Porte Fenêtre Salon],[Salon][Salon],[Terrasse][EXT Terrasse],[WC1][Fenêtre WC1er],[WC1][WC 1er],[WCr][WC RDC]" != ''] = Vrai
[2018-01-31 22:06:57][SCENARIO] Exécution du sous-élément de type [action] : then
[2018-01-31 22:06:57][SCENARIO] Exécution de la commande [Maison][Remontée des capteurs][Défaut] avec comme option(s) :
Array
(
[background] => 0
)
[2018-01-31 22:07:09][SCENARIO] Ajout du message suivant dans le centre de message : Problème de remontée sur les capteurs suivants : [Chambre d'Ami][Chambre Ami],[Chambre d'Ami][Fenêtre Chambre Ami],[Chambre Parents][Interrupteur Lit Parents],[Chambre Parents][Parents],[Chambre Parents][Porte Fenêtre Chambre Parents],[Chambre Raphaël][Chambre Raphaël],[Chambre Raphaël][Fenêtre Raphaël],[Couloir][Commun],[Cuisine][Congélo Cuisine],[Cuisine][Cuisine],[Cuisine][Fenêtre Cuisine],[Cuisine][Frigo Cuisine],[Dressing][Détecteur de Fumée Dressing],[Dressing][Dressing],[Dressing][Fenêtre Dressing],[Entrée][Détecteur de Fumée Entrée],[Entrée][Entrée Bas],[Entrée][Entrée Haut],[Entrée][Fenêtre Entrée],[Entrée][Porte Entrée],[Extérieur][EXT Nord],[Garage][Buanderie],[Garage][Congélo Buanderie],[Garage][Détecteur de Fumée Garage],[Garage][Détecteur Mouvement],[Garage][Fenêtre Garage],[Garage][Frigo Buanderie],[Garage][Garage],[Garage][Interrupteur Garage],[Garage][Porte Garage (Xiaomi)],[Garage][Porte Intermédiaire],[NAS - Box][TempNAS],[Portail][Portail (Xiaomi)],[Salle à Manger][Détecteur de Fumée SAM],[Salle à Manger][Fenêtre Salle à Manger],[Salle à Manger][SAM],[Salle d'eau][Salle dEau],[Salle de Bains][Fenêtre S2B],[Salle de Bains][Salle de Bains],[Salon][Baie Salon],[Salon][Fenêtre Salon],[Salon][Porte Fenêtre Salon],[Salon][Salon],[Terrasse][EXT Terrasse],[WC1][Fenêtre WC1er],[WC1][WC 1er],[WCr][WC RDC]
[2018-01-31 22:07:09][SCENARIO] Fin correcte du scénario
J'ai loupé quoi ?

Image

EDIT :

alors j'ai modifié le code en première ligne et j'ai mis (soit 4h max autorisé, j'affinerai en fonction des retours).

Code : Tout sélectionner

$maxTime = 14400; // temps en secondes
Par contre ce sont des secondes, pas des minutes. Tu fais un time() ensuite... et en php, c'est des secondes, non ?

Et ensuite j'ai modifié le if avec un "" et non ''.

Et là tout tourne :).

Image

Merci !

benj29
Actif
Messages : 1904
Inscription : 26 mars 2017, 09:57

Re: Plugin monitoring capteurs

Message par benj29 » 11 févr. 2018, 17:09

Bon, finalement, je pensais que ça tournait... mais non.

Un capteur lâche hier soir (le capteur du congélo). Je savais que la batterie allait lâcher, on se rapprochait des 0%.
Il lâche... mais aucune notification du script.

Je lance le scénario, il se lance bien, je vois en cours et au bout de quelques secondes ERREUR.
Par contre, aucun log depuis la dernière exécution qui correspond à la seule après le lâcher du capteur...

Je te mets le code du log juste où il est KO...

Code : Tout sélectionner

[2018-02-11 00:00:12][SCENARIO] -- Equipement [Garage][Congélo Buanderie]
[2018-02-11 00:00:12][SCENARIO] Commande [Garage][Congélo Buanderie][Température] - 2018-02-10 20:00:14
[2018-02-11 00:00:12][SCENARIO] Commande [Garage][Congélo Buanderie][Humidité] - 2018-02-10 20:00:14
[2018-02-11 00:00:12][SCENARIO] Commande [Garage][Congélo Buanderie][Pression] - 2018-02-10 20:00:14
[2018-02-11 00:00:12][SCENARIO] Commande [Garage][Congélo Buanderie][Batterie] - 2018-02-10 20:00:14
[2018-02-11 00:00:12][SCENARIO] Commande [Garage][Congélo Buanderie][Pile Voltage] - 2018-02-10 20:00:14
[2018-02-11 00:00:12][SCENARIO] Commande [Garage][Congélo Buanderie][Rafraichir] -
[2018-02-11 00:00:12][SCENARIO] Date max 2018-02-10T20:00:14+01:00
Le max time de ce capteur est à 20h hier alors que le script ... alors que j'ai autorisé 4h au max (14400 secondes).

Je vais voir quelques heures après... Et j'ai un beau "erreur" en Orange dans scénario.

En fouillant dans les logs de scenario-execution :

Code : Tout sélectionner

PHP Fatal error:  Call to a member function pingHost() on boolean in /var/www/html/plugins/xiaomihome/core/class/xiaomihome.class.php on line 657
PHP Fatal error:  Call to a member function pingHost() on boolean in /var/www/html/plugins/xiaomihome/core/class/xiaomihome.class.php on line 657
PHP Fatal error:  Call to a member function pingHost() on boolean in /var/www/html/plugins/xiaomihome/core/class/xiaomihome.class.php on line 657
Bref... Une idée ?

Je n'ai pas modifié le code d'origine sauf erreur de ma part :

Code : Tout sélectionner

$maxTime = 14400; // temps en secondes - 4h maximum

$scenario->setLog("Temps : " . $maxTime);

$batterie = "Batterie"; // Nom de la commande à rechercher
$excludeEq = array(); // Liste des équipements à ignorer (qui contiennent la commande "$batterie")

$errEqLogics = array();

$_format = '%Y-%m-%d %H:%M:%S';

$eqLogics = eqLogic::all();
$scenario->setLog('Début monitoring');

$scenario->setData('monitor', '');

foreach($eqLogics as $eqLogic)
{
  if ($excludeEq[$eqLogic->getHumanName()] == 1){
    $scenario->setLog( '-- Equipement ' . $eqLogic->getHumanName() . ' ignoré');
    continue;
  }
  
  try{
    if (isset($batterie)){
      	// si la commande n'existe pas, une exception est levée
    	$cmd = cmd::byString('#' . $eqLogic->getHumanName() . '['. $batterie .']#');
    }
    
    $scenario->setLog( '-- Equipement ' . $eqLogic->getHumanName());
    
    $allCmds = $eqLogic->getCmd();
    $maxDate = date($_format, "1970-1-1 00:00:00");
    if (count($allCmds) > 0)
    {
      foreach($allCmds as $cmd)
      {  
          $cmd->execCmd();
          $collectDate = $cmd->getCollectDate();
          $scenario->setLog( 'Commande ' . $cmd->getHumanName() . ' - ' . $collectDate);

          $maxDate = max($maxDate, strtotime($collectDate));

      }
      $scenario->setLog( 'Date max ' . date('c', $maxDate));
      $elapsedTime = time() - $maxDate;
      
      if ($elapsedTime > $maxTime){
        // -- /!\alert
        $errEqLogics[] = $eqLogic->getHumanName();
      }
    }
    
  }catch (Exception $e)
  {
    // pas de commande
  }
  
}

  $scenario->setData('monitor', implode(",", $errEqLogics));
// log fin de traitement
$scenario->setLog( 'fin monitoring');
Et voilà la suite du scenario après le code :

Image

EDIT Après avoir fouillé, en fait, le capteur en question n'existe plus côté Jeedom - Xiaomi en fait !
Donc du coup, l'intérêt du script est un peu limité j'avoue ! Car je n'ai jamais vu de cas où les capteurs sont présents et ne remontent pas de données.
Par contre, j'ai toujours des capteurs qui disparaissent car batterie HS ou autre chose d'un coup ... et au final, ni la surveillance de la batterie, ni la surveillance par ce script ne marche...
Le seul truc qui marche c'est le module alerte de chaque module Xiaomi que j'ai réglé à 300

Image

Répondre

Revenir vers « [Catégorie] Monitoring »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité