$idleMax = new DateTime("1 day ago"); // Délai maximum toléré dernière communication
$tsIdleMax = $idleMax->getTimestamp();
$commande='#[Telephonie][mail][Emailme]#';
// Fonction de tri des équipements basée sur la date de communication
function lastCommunication_sort ($a, $b) {
if ($a["lastCommunication"] == $bl["lastCommunication"]) {
return 0;
}
return ($a["lastCommunication"] < $b["lastCommunication"]) ? -1 : 1;
}
$eqList = array();
foreach (eqLogic::all() as $eqLogic) {
// Récupération de tous les équipements z2m avec une date
if (in_array($eqLogic->getEqType_name(), ["z2m"]) && $eqLogic->getStatus("lastCommunication")) {
array_push($eqList, ["lastCommunication" => $eqLogic->getStatus("lastCommunication"), "eqLogic" => $eqLogic]);
}
}
usort($eqList, "lastCommunication_sort");
foreach (array_values($eqList) as $item) {
$eqLogic = $item["eqLogic"];
$tsLastCommunication = strtotime($eqLogic->getStatus("lastCommunication"));
$dateFR = date("d/m/Y \à H\hi", $tsLastCommunication);
$messageLevel = $tsLastCommunication < $tsIdleMax ? "[WARNING]" : "[INFO]" ;
$scenario->setLog("$messageLevel Dernière communication le $dateFR : ". $eqLogic->getHumanName());
}
mais vous pouvez tester aussi: ouvrir votre boîte mail, coller le texte, entrer l’adresse du destinataire et un objet pour le message puis cliquer sur envoyer.
Dans le bloc code, en plus de faire un $scenario->setLog("$messageLevel Dernière communication le $dateFR : ". $eqLogic->getHumanName());
// Création du tag à passer au scénario contenant le message
$tags['#tosend#'] = $message;
$scenario->setTags($tags);
ou $message sera ce que tu veux envoyer par mail
Dans la suite du scénario jeedom tosend sera le tag recevant le truc et donc envoyer par mail avec la commande mail du plugin mail…
En fait, je passe pas mal de temps à répondre et à essayer d’aider des gens ici qui ont un besoin, mais qui ne savent pas forcément comment le réaliser ou bien qui ont essayés des choses mais sans succès.
C’est le principe d’entraide du community.
Mais bon la clairement le ton de ton message me dérange, on dirait que tu parles à des humains comme tu pourrais parler à une IA. « je veux ça »
Autant je n’ai pas de soucis pour aider les gens, autant la j’ai l’impression que t’a juste pas envie de te faire chier et que tu cherche une bonne poire pour le faire à ta place.
Pas de « j’ai essayé ça mais ça marche pas / J’ai le plugin mail mais je ne vois pas du tout comment l’interfacer avec ce scénario / … » La tu passes juste commande.
Je note tout de même qu’il y a un bonjour et un merci, c’est déjà pas mal car certains ne font même pas cet effort …
Cependant je t’invite à essayer d’avoir une démarche un peu plus « sympa » quand tu poses des questions à l’avenir, sinon nombreuses vont être les personnes qui ne vont pas être plus motivés que ça pour t’aider.
Bonsoir Tonio16
mon besoin est de tester Gemini et les interactions avec du code generé dans jeedom
la première partie fonctionne bien, mais avec un second code gemini, le message ne me parvient pas. Cela pour mieux comprendre le fonctionnement sans tout le temps poser des questions à la communauté et se faire rembarrer par des messages et des personnes qui s’ennuient et font des reponses de HPI.
// --- CONFIGURATION ---
$commandeMail = "#[Telephonie][mail][Envoyer email à]#"; // <--- REMPLACEZ PAR VOTRE COMMANDE MAIL
$seuilHeures = 1;
// ---------------------
$rapport = "";
$nbHS = 0;
$now = strtotime(date('Y-m-d H:i:s'));
foreach (eqLogic::all() as $eqLogic) {
// On ne vérifie que les équipements actifs et visibles
if ($eqLogic->getIsEnable() && $eqLogic->getIsVisible()) {
// On exclut les plugins qui ne communiquent pas physiquement (optionnel)
$plugin = $eqLogic->getPluginKey();
if ($plugin == 'virtual' || $plugin == 'variable') continue;
$lastCom = $eqLogic->getStatus('lastCommunication');
if ($lastCom != "") {
$diffHeures = ($now - strtotime($lastCom)) / 3600;
if ($diffHeures > $seuilHeures) {
$name = $eqLogic->getHumanName();
$dateFr = date('d/m/Y H:i', strtotime($lastCom));
$rapport .= "<li><b>$name</b> : Sans réponse depuis " . round($diffHeures, 1) . "h (Dernière com : $dateFr)</li>";
$nbHS++;
}
} else {
// Cas des modules qui n'ont jamais communiqué
$name = $eqLogic->getHumanName();
$rapport .= "<li><b>$name</b> : <span style='color:red;'>Aucune communication enregistrée</span></li>";
$nbHS++;
}
}
}
// Préparation du mail
if ($nbHS > 0) {
$sujet = "Jeedom : Rapport de santé modules ($nbHS alertes)";
$message = "<h3>Alerte : Modules sans communication depuis plus de $seuilHeures heures</h3>";
$message .= "<ul>" . $rapport . "</ul>";
$message .= "<br><p><i>Ceci est un message automatique de votre Jeedom.</i></p>";
$scenario->setLog("Envoi du mail d'alerte pour $nbHS modules.");
//$tags['#rapport#'] = $message;
// Envoi via le plugin
$cmd = cmd::byString($commandeMail);
cmd::byString($commandeMail)->execCmd($message);
// $commande='#[Telephonie][mail][Envoyer email à]#';
$cmd = cmd::byString($commandeMail);
$options=array('title'=>'Mon titre', 'message'=> 'Mon message');
$cmd->execCmd($options, $cache=0);
if (is_object($cmd)) {
$cmd->event(array('title' => $sujet, 'message' => $message));
}
} else {
$scenario->setLog("RAS : Tous les modules ont communiqué dans les dernières $seuilHeures heures.");
}
Bonsoir Aurel
Non pas besoin qu’on me fasse le code, juste qu’on m’oriente. j’ai testé un code qui fonctionne
mais je ne voyais pas comment récupérer le resultat pour mon besoin
merci à lperenna de m’avoir orienté
Bonjour
Le code fonctionnel pour ceux que cela peut intéresser, il n’est peut être pas le mieux optimisé mais fonctionnel
bonne journée
$idleMax = new DateTime("12 hours ago"); // Seuil de 12h comme demandé précédemment
$tsIdleMax = $idleMax->getTimestamp();
// Fonction de tri
function lastCommunication_sort ($a, $b) {
if ($a["lastCommunication"] == $b["lastCommunication"]) return 0;
return ($a["lastCommunication"] < $b["lastCommunication"]) ? -1 : 1;
}
$eqList = array();
foreach (eqLogic::all() as $eqLogic) {
// On filtre sur le plugin z2m et les équipements actifs
if ($eqLogic->getEqType_name() == "z2m" && $eqLogic->getIsEnable() && $eqLogic->getStatus("lastCommunication")) {
array_push($eqList, ["lastCommunication" => $eqLogic->getStatus("lastCommunication"), "eqLogic" => $eqLogic]);
}
}
usort($eqList, "lastCommunication_sort");
$messageComplet = "<h2>Rapport de communication des modules</h2><ul>";
$nbAlertes = 0;
foreach ($eqList as $item) {
$eqLogic = $item["eqLogic"];
$tsLastCommunication = strtotime($item["lastCommunication"]);
$dateFR = date("d/m/Y à H\hi", $tsLastCommunication);
// Si la com est plus vieille que le seuil (12h)
if ($tsLastCommunication < $tsIdleMax) {
$messageLevel = "<span style='color:red;'>[WARNING]</span>";
$messageComplet .= "<li>$messageLevel <b>" . $eqLogic->getHumanName() . "</b> : $dateFR</li>";
$nbAlertes++;
}
// Log dans le scénario pour suivi
$scenario->setLog("[Debug] " . $eqLogic->getHumanName() . " : " . $dateFR);
}
$messageComplet .= "</ul>";
// ENVOI DU MAIL (uniquement s'il y a des alertes)
if ($nbAlertes > 0) {
$scenario->setLog("Envoi du mail : $nbAlertes modules en retard.");
//@messagecomplet#=$messageComplet
$tags['#messagecomplet#']=$messageComplet;
$tags['#nbenalerte#']=$nbAlertes;
$scenario->setTags($tags);
if (is_object($cmd)) {
$cmd->event(array(
'title' => "Jeedom : Alertes communication modules ($nbAlertes)",
'message' => $messageComplet
));
}
} else {
$scenario->setLog("RAS : Tous les modules Z2M communiquent normalement.");
}