Rapport watchdog & ChatGPT

Bonjour à tous,

Ca fait un moment que j’aimerais que Watchdog en plus des alertes, puisse m’envoyer à intervalle régulier un rapport (parce que si on est pris au moment de l’alerte c’est un coup à l’oublier derrière). Mais comme je suis une grosse feignasse assumée :slight_smile: et que je voulais expérimenter… J’ai demandé de l’aide, a ChatGPT

Je vous livre le résultat, alors il y a eu bien sûr un peu de prompt engineering et j’aurais sûrement passé moins de temps à le faire moi-même (quoique, vues mes compétences en PHP…) mais c’est quand même totalement bluffant, bien entendu c’est fonctionnel (testé et approuvé) et mis en production chez moi :slight_smile:

1. Dans Jeedom, allez dans le menu « Scénarios ».
2. Cliquez sur le bouton « + » pour créer un nouveau scénario.
3. Donnez un nom à votre scénario, par exemple « Rapport quotidien Watchdog ».
4. Dans l’onglet « Scénario », ajoutez un bloc « Code » en cliquant sur « Ajouter » puis « Code ».
5. Copiez et collez le code suivant dans le bloc « Code » :

// Récupérez tous les équipements de type "Watchdog"
$equipementsWatchdog = eqLogic::byType('Watchdog');

// Générez le rapport avec les pastilles vertes et rouges pour chaque contrôle inversé dans un tableau HTML
$rapport = "<table border='1' cellpadding='5' cellspacing='0'>";
$rapport .= "<tr><th>Pastille</th><th>Contrôle</th><th>État</th></tr>";
$greenImg = 'https://i.imgur.com/1zHTojw.png'; // URL d'une pastille verte en ligne
$redImg = 'https://i.imgur.com/pc2e1L7.png'; // URL d'une pastille rouge en ligne
foreach ($equipementsWatchdog as $equipement) {
    $cmds = $equipement->getCmd('info');
    foreach ($cmds as $cmd) {
        // Récupérez la valeur de "resultat" à partir de la configuration de la commande
        $config = $cmd->getConfiguration();
        $etatStr = $config['resultat'];
        $nom = $cmd->getName();

        // Convertissez la chaîne "True" ou "False" en un booléen
        $etat = ($etatStr === "True") ? 1 : 0;

        $pastille = ($etat == 0) ? "<img src='$greenImg' alt='OK'>" : "<img src='$redImg' alt='KO'>"; // Inversez la condition ici
        $ligne = "<tr><td>" . $pastille . "</td><td>" . $nom . "</td><td>" . ($etat == 0 ? 'OK' : 'KO') . "</td></tr>"; // Inversez la condition ici

        $rapport .= $ligne;
    }
}
$rapport .= "</table>";

$scenario->setData("rapport", $rapport);

// Générez la variable $title avec le titre de l'e-mail
$title = "Rapport quotidien des équipements Watchdog - " . date("Y-m-d");

// Rendez la variable $title disponible en dehors du bloc code
$scenario->setData("title", $title);

6. Enregistrez le scénario en cliquant sur le bouton « Sauvegarder ».
7. Ajoutez un bloc « Action » en cliquant sur « Ajouter » puis « Action ».
8. Dans le bloc « Action », sélectionnez la commande « Envoyer un mail » de votre équipement « Mail Test ».
9. Dans le champ « Titre », entrez variable(title) pour utiliser la variable $title générée par le bloc « Code ».
10. Dans le champ « Message », entrez variable(rapport) pour utiliser la variable $rapport générée par le bloc « Code ».
11. Enregistrez le scénario en cliquant sur le bouton « Sauvegarder ».
12. Dans l’onglet « Programmation », configurez le scénario pour qu’il s’exécute tous les matins à l’heure souhaitée. Par exemple, pour le programmer tous les jours à 8h00, entrez 00 8 * * * dans le champ « Programmation ».
13. Activez le scénario en cochant la case « Activer » en haut à droite, puis cliquez sur « Sauvegarder ».

Le scénario est maintenant configuré pour envoyer un e-mail quotidien avec l’état des équipements Watchdog et les pastilles vertes et rouges pour chaque contrôle. Les e-mails seront envoyés à l’adresse e-mail définie dans votre équipement « Mail Test ».

2 « J'aime »

Suite a une demande sur le discord de JeeMate voici le bloc code modifié pour être utilisable en notif JeeMate.

$cmdId = "876662"; // remplacer par l'id de la commande notification souhaitée.
$message = ""; // ne pas toucher.
$title = "Rapport quotidien des équipements Watchdog - " . date("Y-m-d"); // Motifier suivant le titre voulu.

$cmdNotif = cmd::byId($cmdId);

$eqLogics = eqLogic::byType('watchdog'); // Récupérez tous les équipements de type "Watchdog".

foreach ($eqLogics as $eqLogic) {
    $cmds = $eqLogic->getCmd('info');
  	$eqLogicName = $eqLogic->getName();
  	$message .= "Rapport pour l'équipement : <strong>" . $eqLogicName . "</strong><br>";
    foreach ($cmds as $cmd) {
        $etat = $cmd->getConfiguration()['resultat'];
        $nom = $cmd->getName();

        $pastille = ($etat == "True") ? "\u{1F535}" : "\u{1F534}"; // on affiche une pastille verte ou rouge suivant l'etat.
      	$isOk = ($etat == "True") ? '<strong>OK</strong>' : '<strong>KO</strong>'; // on affiche OK ou KO en gras suivant l'etat.
      
        $ligne = $pastille . " -> " . $nom . " - " . $isOk . "<br>"; // on crée une ligne pour chaque equipement
      
        $message .= $ligne;
    }
          $message .= "<br>";
}

$options = array('title'=>$title, 'message'=> $message);
$cmdNotif->execCmd($options);

Il y a juste besoin de :
Déclencheur : cron journalier
Scénario : modifier dans le bloc code l’id de la commande notification et si souhaité le titre. Rien de plus.

Pas besoin de commande action tout est fait par le bloc code.