Tutoriel pour lister l’etat des daemons sous forme d’une notification Telegram, agrémentée d’émoticônes.
Prérequis :
- Plugin Telegram fonctionnel
- Plugin Jeelink installé afin d’avoir la remontée de l’état de chaque équipement
Tout d’abord, il faut créer deux variables :
- « IconOK » avec la valeur « 🆗 » qui correspond à l’émoticone « OK » en valeur décimale
- « IconKO » avec la valeur « 🆘 » qui correspond à l’émoticône « SOS » en valeur décimale
Ensuite, créer un nouveau scénario, puis ajouter un bloc « Code »
Puis ajouter les lignes suivantes :
// On efface la variable message
$message='';
// on indique la liste des demons à verifier
$ListeDaemons = array('Caméra','ESPeasy','Homebridge','RfPlayer','RfPlayer2','SMS','Xiaomi Home','Z-Wave');
// on capture la liste de tous les équipements
$ListeEquipements = eqLogic::all();
// on ajoute une ligne dans le log
$scenario->setLog('Début Monitoring des Demons');
// pour chaque equipement dans la liste complete des equipements
foreach($ListeEquipements as $Equipement)
{
// pour chaque entree dans la liste des demons renseignée plus haut
for ($i = 0; $i < count($ListeDaemons); $i++)
{
try
{
// on recupere le chemin de l'equipement recherché : #[Maison][jeelink][Démon XXX]#
$cmd = cmd::byString('#' . $Equipement->getHumanName() . '[Démon '.$ListeDaemons[$i].']#');
// on recupere la valeur de l'équipement et on stocke dans $ValeurDaemon (soit 0 ou 1)
$ValeurDaemon = $cmd->execCmd();
// on ajoute dans le log " Daemon XXX - 0" (ou 1)
$scenario->setLog( 'Daemon '.$ListeDaemons[$i].' - '.$ValeurDaemon);
// si le daemon est a 1, on veut faire afficher l'emoticon OK stockée au préalable dans la variable core "IconOK"
// sous une valeur décimale
// si Daemon ok (=1)
if($ValeurDaemon == '1')
{
// Récupère la valeur de la variable core "IconOK"
$valeur=$scenario->getData('IconOK');
}
// si Daemon ok (=0)
if($ValeurDaemon == '0')
{
// Récupère la valeur de la variable core "IconKO"
$valeur=$scenario->getData('IconKO');
}
// on ajoute le texte "|Démon XXX - EmoticonOK/KO" (le | permet de distinguer le retour a la ligne
$message=$message.'|Daemon '.$ListeDaemons[$i].' - '.$valeur;
}catch (Exception $e)
{
}
}
}
// on remplace tous les | par un retour à la ligne (\n) dans la variable message
$message=str_replace("|","\n",$message);
// on selectionne la commande telegram correspondante au destinataire du message
$cmd=cmd::byString('#[Maison][Telegram][Utilisateur_Destinataire]#');
// on envoie le contenu de la variable message via telegram
$cmd->execCmd($options=array('title'=>'Jeedom', 'message'=> "$message"), $cache=0);
// on log la fin de la verification des démons
$scenario->setLog( 'Fin monitoring des démons');
2eme version plus compacte
Cette version indique si tout est OK et combien de daemons sont ok.
Si un demon est KO, son nom sera listé juste en dessous.
// On efface la variable $message
$message='';
// RAZ des variables Compteurs
$NbDaemonsOK="0";
$NbDaemonsKO="0";
// on cree un tableau vide pour y ajouter la liste des daemons KO
$ListeDaemonKO = array();
// on indique la liste des demons à verifier
$ListeDaemons = array('Caméra','ESPeasy','Homebridge','RfPlayer','RfPlayer2','SMS','Xiaomi Home','Z-Wave');
// on capture la liste des équiepents
$ListeEquipements = eqLogic::all();
// on ajoute une ligne dans le log
$scenario->setLog('Début Monitoring des Demons');
// pour chaque equipement dans la liste complete des equipements
foreach($ListeEquipements as $Equipement)
{
// pour chaque entree dans la liste des demons renseignée plus haut
for ($i = 0; $i < count($ListeDaemons); $i++)
{
try
{
// on recupere le chemin de l'equipement recherché : #[Maison][jeelink][Démon XXX]#
$cmd = cmd::byString('#' . $Equipement->getHumanName() . '[Démon '.$ListeDaemons[$i].']#');
// on recupere la valeur de l'équipement et on stocke dans $ValeurDaemon (soit 0 ou 1)
$ValeurDaemon = $cmd->execCmd();
// on ajoute dans le log " Daemon XXX - 0" (ou 1)
$scenario->setLog( 'Daemon '.$ListeDaemons[$i].' - '.$ValeurDaemon);
// si Daemon ok (=1)
if($ValeurDaemon == '1')
{
// on incremente le nombre de daemons OK
$NbDaemonsOK++;
}
// si Daemon ok (=0)
if($ValeurDaemon == '0')
{
// on incremente le nombre de daemons KO
$NbDaemonsKO++;
array_push($ListeDaemonKO, "$ListeDaemons[$i]");
}
}catch (Exception $e)
{
}
}
}
// si $ListeDaemonKO est vide
if (empty($ListeDaemonKO)) {
// recuperation du code de l'emoticone OK
$Emoticon=$scenario->getData('IconOK');
$scenario->setLog('Etat des démons : OK ('.count($ListeDaemons).')');
$message='<b><u>Etat des démons :</u></b> '.$Emoticon.' ('.count($ListeDaemons).')';
}
else
{
// recuperation du code de l'emoticone KO
$Emoticon=$scenario->getData('IconKO');
$message='<b><u>Etat des démons :</u></b> '.$Emoticon.' <i>('.count($ListeDaemonKO).' KO sur '.count($ListeDaemons).')</i> |';
$message=$message.'<b><u>Liste des démons KO :</u></b> <i>';
for ($i = 0; $i < count($ListeDaemonKO); $i++)
{
if($i == (count($ListeDaemonKO)-1))
{
$message=$message.$ListeDaemonKO[$i];
}
else
{
$message=$message.$ListeDaemonKO[$i].',';
}
}
$message=$message."</i>";
}
// on remplace tous les | par un retour à la ligne (\n) dans la variable $message
$message=str_replace("|","\n",$message);
$cmd=cmd::byString('#[Maison][Telegram][Destinataire]#');
$cmd->execCmd($options=array('title'=>'Jeedom', 'message'=> "$message"), $cache=0);
$scenario->setLog( 'Fin monitoring des demons');