Et voici l’équivalent pour les compétences…
// JSON reçu de Pronote (compétences)
$json = cmd::byId(23820)->execCmd(); // ⚠️ adapte l'ID à ton Jeedom
$competences = json_decode($json, true);
// Récupération sécurisée des clés (stockées en tableau PHP)
$cles_connues = config::byKey('pronote_competences_cles', 'projote', []);
if (!is_array($cles_connues)) {
$tmp = json_decode($cles_connues, true);
$cles_connues = is_array($tmp) ? $tmp : [];
}
// Fonction de nettoyage
function normalize($val) {
$val = preg_replace('/\s+/u', ' ', (string)$val);
return strtolower(trim($val));
}
// Fonction couleur selon la matière
function couleurMatiere($matiere) {
$mapping = [
'FRANCAIS' => '#27BBF5',
'PHYSIQUE-CHIMIE' => '#57C412',
'ESPAGNOL LV2' => '#99270B',
'MATHEMATIQUES' => '#098218',
'VIE DE CLASSE' => '#FFFFFF',
'ANGLAIS LV1' => '#FFE300',
'EDUCATION MUSICALE' => '#FFF2F2',
'HISTOIRE-GEOGRAPHIE' => '#E04B26',
'ARTS PLASTIQUES' => '#FFF2F2',
'ED.PHYSIQUE & SPORT.' => '#5585B5',
'TECHNOLOGIE' => '#E027F5',
'SCIENCES VIE & TERRE' => '#266E35',
];
$matiere = strtoupper(normalize($matiere));
return $mapping[$matiere] ?? '#B5559F'; // AUTRES
}
$nouvelles_competences = [];
// Debug
$scenario->setLog("=== Début exécution Pronote (compétences) ===");
$scenario->setLog("Clés connues AVANT : " . json_encode($cles_connues));
foreach ($competences as $comp) {
// Génération clé unique
$cle_comp = md5(
normalize($comp['date']) . '|' .
normalize($comp['nom']) . '|' .
normalize($comp['Sujet']) . '|' .
normalize($comp['professeur'])
);
$scenario->setLog("Compétence : {$comp['nom']} ({$comp['Sujet']} - {$comp['date']})");
$scenario->setLog("Clé calculée : $cle_comp");
if (!in_array($cle_comp, $cles_connues, true)) {
$scenario->setLog("➡️ Nouvelle compétence détectée !");
$nouvelles_competences[] = $comp;
$cles_connues[] = $cle_comp;
// Couleur selon matière
$color = couleurMatiere($comp['Sujet']);
// Construire la liste des acquisitions
$acquis_txt = "";
foreach ($comp['acquisitions'] as $acq) {
$nom = $acq['name'] ?: "(sans intitulé)";
$abbr = $acq['abbreviation'] ?: "-";
$acquis_txt .= "- Note : {$abbr} - {$acq['level']}
{$acq['domain']}
→ {$nom}\n";
}
// Message Discord
$message = "Le {$comp['date']}
Matière : {$comp['Sujet']}
Compétence : {$comp['nom']}
Professeur : {$comp['professeur']}
Paliers : " . implode(', ', $comp['Paliers']) . "
✅ Acquisitions :
{$acquis_txt}";
$options = [
'Titre' => "Pronote - Nouvelle compétence Noé",
'colors' => $color,
'description' => $message,
'footer' => ""
];
cmd::byString("#[Monitoring][Communication discord - Pronote][Envoi message évolué]#")->execCmd($options, $cache = 0);
} else {
error_log("✅ Déjà connue, ignorée.");
}
}
// Sauvegarde des clés
config::save('pronote_competences_cles', $cles_connues, 'projote');
// Debug final
$scenario->setLog("Clés connues APRÈS : " . json_encode($cles_connues));
$scenario->setLog("Nombre de nouvelles compétences : " . count($nouvelles_competences));
$scenario->setLog("=== Fin exécution Pronote (compétences) ===");
Si vous faites des tests, vouspouvez avoir besoin de vider les tables pour pouvoir renvoyer les notifications. Voici donc les codes à mettre dans un scenario.
Pour les notes
// Vider toutes les clés connues
config::save('pronote_cles', [], 'projote');
$scenario->setLog("Table des clés vidée !");
Pour les compétences
// Vider toutes les compétences connues
config::save('pronote_competences_cles', [], 'projote');
$scenario->setLog("Table des compétences vidée !");