Monitoring dans Jeedom

Maintenant que mon installation est terminée (jusqu’à l’arrivée de la piscine) et que mes scenarii sont aux petits oignons, j’ai commencé à chercher la petite bête en regardant les intervalles de collecte des données des équipements présents dans mon installation.

Je me suis rendu compte qu’il arrivait que certains d’entres-eux pouvait ne plus transmettre pendant plusieurs heures et donc peuvent influencer négativement quelques scenarii. Par exemple, le miplant du jardin peut être inaccessible pendant plusieurs heures, voir même jusqu’au lendemain.

L’utilisation de jeeLink, comme décrit dans cet article, me permet de redémarrer le daemon BLEA si cela arrive et la collecte se fait quelques minutes après.

Perfectionniste dans l’âme, j’ai voulu aller plus loin en voulant avoir une information supplémentaire qui est le temps entre un instant T et la dernière collecte d’information. Il existe bien la fonction collectDate dans Jeedom mais cela affiche la date et heure de la dernière collecte alors que je veux le nombre de minutes depuis la dernière collecte.

Au risque de m’être fait des nœuds au cerveau car cela existe peut-être déjà, j’ai procédé comme suit pour avoir ce que je voulais.

Il faut tout d’abord créer un Virtuel avec un nom de commande par information que je veux afficher.

Ensuite, un petit scenario contenant un bout de code en PHP permet de récupérer la date et heure de la dernière collecte et calcule le nombre de minutes en la date et heure d’exécution du scénario. Ce dernier est exécuté à chaque changement d’état des équipements pour lesquels je vérifie les intervalles de collecte mais également toutes les 15 minutes.

Cette information peut être très intéressante à voir mais également utilisable dans un scénario pour notifier qu’une info n’a plus été remontée depuis un certain temps.

Le script est assez simple pour les connaisseurs. On stocke dans un tableau une liste de correspondance commande source / commande virtuelle cible afin de pouvoir  boucler sur la liste complète et mettre à jour les données dans le virtuel.

Par exemple, #[MaMaison][MonJardin][Température]# serait la commande source où on récupère la température extérieure et #[MaMaison][CollecteDonnées][jardin_temp]# serait la commande virtuelle cible où on écrira l’intervalle entre le moment où la vérification de l’heure de la dernière collecte et la dite heure de collecte.

Il suffit donc de créer un bloc CODE, et copier/coller le code ci-dessous en changeant les noms de commandes sources et cible.

$now=time();

$array = [

[« nom de la commande 1 source », »nom de la commande virtuelle 1 cible »],

[« nom de la commande 2 source », »nom de la commande virtuelle 2 cible »]

];

foreach ($array as list($source, $target)) {

$cmd = cmd::byString($source);

$value = $cmd->execCmd();

$collectDate = strtotime($cmd->getCollectDate());

$diff=($now-$collectDate)/60;

$nop=cmd::byString($target)->event((round($diff)));

}

Publié le 10 avril 2018
Mis à jour le 8 septembre 2022

3 réflexions sur “Monitoring dans Jeedom”

  1. collectDate(#[Maison][Objet][Equipement]#, U) donne le nombre de secondes depuis le 1er janvier 1970. Du coup, quand on fait :
    #timestamp# – collectDate(#[Maison][Objet][Equipement]#, U) ça donne le nombre de secondes depuis la dernière collecte.

  2. Et bien, je viens d’essayer. Cela ne fonctionne pas.
    Quand je le teste dans le testeur d’expression, voici ce que j’ai

    (1524147430 –  » 1524147213″)/60

    Il semble mettre des double-quots pour le résultat de la commande…. Une idée?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *