Présentation
ProJote est un plugin Jeedom qui récupère automatiquement les informations scolaires depuis PRONOTE : notes, emploi du temps, devoirs, absences, retards et punitions.
Il s'appuie sur la bibliothèque open source pronotepy pour communiquer avec l'API Pronote, et expose les données sous forme de commandes Jeedom utilisables dans vos scénarios et widgets.
Prérequis
| Élément | Version / Détail |
|---|---|
| Jeedom | 4.4 ou supérieur |
| Python | 3.8 minimum (vérifié à l'installation des dépendances) |
| Système | Debian 11, Debian 12 (Smart, Luna, Atlas, RPi, Docker, DIY) |
| Paquet système | python3-venv (installé automatiquement par Jeedom dans la plupart des cas) |
| Compte Pronote | Compte élève ou parent actif sur le portail Pronote de l'établissement |
| Réseau | Accès sortant HTTPS vers le serveur Pronote de l'établissement (et l'ENT si utilisé) |
| pronotepy | Branche 2.x (installation contrainte à >=2.14,<3.0 depuis la v1.0.1) |
Installation
- Accédez au Market Jeedom et recherchez ProJote.
- Cliquez sur Installer.
- Depuis la page du plugin, cliquez sur Installer les dépendances.
La première installation peut prendre quelques minutes (téléchargement de pronotepy et ses dépendances). - Activez le plugin, puis démarrez le démon.
- Créez un équipement via Ajouter et configurez la connexion.
Connexion
Deux méthodes sont disponibles. La méthode QR Code est recommandée car elle ne nécessite pas de stocker votre mot de passe.
Par identifiants (Login)
Renseignez les informations suivantes dans la configuration de l'équipement :
| Champ | Description |
|---|---|
| ENT / CAS | Sélectionnez votre espace numérique de travail. En cas de doute, essayez Aucun. |
| Type de compte | Élève ou Parent |
| Login | Votre identifiant Pronote |
| Mot de passe | Votre mot de passe (stocké chiffré, jamais affiché dans les logs) |
| URL | Adresse Pronote de l'établissement (voir exemples ci-dessous) |
# Compte élève
https://demo.index-education.net/pronote/eleve.html
# Compte parent
https://xxxxx.index-education.net/pronote/parent.html
Cliquez sur Valider. Le plugin se connecte, génère un token persistant et sauvegarde les données.
Par QR Code
1 — Générer le QR Code sur Pronote
Depuis votre navigateur, connectez-vous sur le site Pronote de l'établissement, puis :
- Cliquez sur votre avatar en haut à droite.
- Sélectionnez Générer un QR Code.
- Choisissez un code PIN à 4 chiffres de votre choix.
- Cliquez sur Générer.
2 — Capturer le QR Code
Sous Windows, utilisez la capture d'écran clavier pour copier le QR Code :
Windows + Shift + S → dessinez un rectangle autour du QR Code.
L'image est copiée dans le presse-papier.
3 — Coller le QR Code dans ProJote
- Dans la configuration de l'équipement, sélectionnez l'authentification QR Code.
- Faites un clic droit → Coller dans le cadre gris, ou importez l'image enregistrée.
- Saisissez le PIN à 4 chiffres choisi précédemment.
- Cliquez sur Valider.
Commandes disponibles
Une fois connecté, le démon synchronise les données Pronote toutes les heures (désactivé de 22h à 4h). Vous pouvez forcer une actualisation avec la commande Rafraîchir.
| Commande | Type | Description |
|---|---|---|
| Rafraîchir | action | Force une synchronisation immédiate avec Pronote (utilisable à toute heure, y compris durant la fenêtre nocturne). |
| Statut connexion | info | État courant : Connecté, Déconnecté : <raison> ou Erreur : <raison>. Utile pour scénarios d'alerte. |
| Dernière mise à jour | info | Horodatage de la dernière collecte réussie (commande LastLogin). |
| Nom de l'élève | info | Prénom et nom |
| Classe | info | Intitulé de la classe |
| Établissement | info | Nom de l'établissement scolaire |
| Photo | info | Chemin local de la photo de profil |
| URL iCal | info | Lien d'abonnement au calendrier Pronote |
| Nb absences / retards / punitions | info | Compteurs sur la période en cours |
| Nb devoirs (fait / non fait) | info | Devoirs de la semaine, ventilés par statut |
| Nb devoirs demain (fait / non fait) | info | Devoirs pour le prochain jour de cours |
| EDT aujourd'hui — début / fin / cours annulés | info | Repères horaires de la journée |
| EDT prochain jour — date / début / fin / cours annulés | info | Informations sur le prochain jour de cours |
| EDT J+1 à J+4 | info | Emploi du temps détaillé sur les 4 prochains jours scolaires |
| Cours annulés (total période) | info | Nombre total de cours annulés depuis la rentrée |
| Liste des devoirs / absences / retards / punitions | info | Détails formatés HTML pour le widget |
| — Menu cantine (v1.0.1) — | ||
| menu_midi_aujourdhui | info | Texte lisible du menu de midi du jour ("Entrée · Plat · Dessert…"). Vide si pas de menu. |
| menu_midi_demain | info | Idem pour le lendemain. |
| menu_semaine | info | HTML compact des menus sur 7 jours (consommé par le widget). |
| Nb_menus_semaine | info | Nombre de menus disponibles dans la fenêtre. |
| — Messagerie (v1.0.1) — | ||
| Nb_messages | info | Nombre total de discussions visibles. |
| Nb_messages_non_lus | info | Compteur des messages non lus. Idéal pour scénarios d'alerte (TTS, push…). |
| dernier_message_expediteur | info | Créateur (souvent un prof ou le CPE). |
| dernier_message_sujet | info | Objet du dernier message. |
| dernier_message_date | info | Date du dernier message dd/mm/yyyy HH:MM. |
| dernier_message_extrait | info | Contenu tronqué à 200 caractères. |
| messages_html | info | Liste HTML compacte de toutes les discussions (consommée par l'onglet Msg). |
| — Prochain DS / évaluation (v1.0.1) — | ||
| prochain_DS_matiere | info | Matière du prochain devoir surveillé détecté. Vide si aucun DS à venir. |
| prochain_DS_date | info | Date au format dd/mm/yyyy. |
| prochain_DS_dans_jours | info | Nombre de jours avant le DS (entier). Pratique pour scénarios mode révision. |
| prochains_DS_html | info | Liste HTML des 5 prochains DS détectés. |
| — Statistiques (v1.1.0) — | ||
| moyenne_generale | info | Moyenne générale pondérée sur 20, calculée par le démon à partir de toutes les notes (même formule que le widget). Historisée — exploitable dans un graphique d'historique Jeedom. Vide si aucune note exploitable. |
| matiere_en_baisse | info | Matière(s) dont la moyenne récente chute d'au moins 2 points sur 20 par rapport au début (matières ayant ≥ 4 notes). Plusieurs matières séparées par « · ». Vide si aucune baisse détectée. |
| — Centre d'alertes (v1.1.0) — | ||
| event | info | Libellé du dernier événement ProJote détecté (nouvelle absence/retard/punition, nouveau message, contrôle détecté, matière en baisse). Pratique comme déclencheur de scénario. La liste complète (50 derniers) est affichée dans l'onglet Alertes du widget. |
| nouvelle_note | info | Libellé de la dernière nouvelle note détectée par rapport à la sync précédente (ex. « Maths : 16/20 — DS trigonométrie »). Mise à jour uniquement sur une vraie nouveauté → déclencheur de scénario idéal. |
| nouveau_devoir | info | Libellé du dernier nouveau devoir détecté (ex. « Maths (12/03) : exercices p.42 »). Même logique de déclenchement que nouvelle_note. |
Nb_absences, Nb_retard, Nb_devoir_NF et
moyenne_generale sont historisées par défaut : Jeedom conserve
leur évolution dans le temps, consultable via un graphique d'historique (widget « historique »
ou page de la commande). L'historisation est activée automatiquement, y compris sur les
équipements créés avant la 1.1.0.
note/derniere_note— les notes chiffrées (sur 20, avec coefficients) utilisées pour le calcul de la moyenne.competences— les évaluations par compétences (acquis / non acquis, niveaux de maîtrise), sans valeur numérique et donc jamais intégrées à la moyenne.
Widget
Le widget principal (projote) regroupe toutes les informations sur un seul tuile de tableau de bord :
- En-tête — photo de profil · nom de l'élève · classe et établissement · date de dernière sync
- Vie scolaire — badges circulaires pour absences, retards, punitions, devoirs non faits
- Emploi du temps — cours d'aujourd'hui + navigation vers les 4 prochains jours scolaires, nombre de cours annulés depuis la rentrée
- Moyenne générale — barre dégradée rouge→vert avec tendance (hausse/baisse)
- Onglets — Devoirs · Notes · Absences · Retards · Punitions · Menu cantine (v1.0.1) · Messagerie (v1.0.1) · Statistiques (v1.1.0) · Alertes (v1.1.0)
- Onglet Statistiques (v1.1.0) — courbes d'évolution (sparklines) de la moyenne générale, des absences, retards et devoirs non faits sur ~120 jours, à partir des données historisées par Jeedom. Affiche aussi les éventuelles matières en baisse. L'onglet n'affiche des courbes qu'une fois assez d'historique accumulé.
- Onglet Alertes (v1.1.0) — centre regroupant les événements ProJote générés automatiquement (nouvelle absence, nouveau retard, nouvelle punition, nouveau message non lu, contrôle détecté, matière en baisse — historique des 50 derniers) et les notifications Pronote (informations & sondages). Un badge indique le nombre de notifications Pronote non lues.
- Allergènes / labels du menu (v1.1.0) — l'onglet Menu cantine affiche les labels Pronote (Bio, Local, Porc, allergènes…) sous forme de puces discrètes, lorsqu'ils sont renseignés par l'établissement.
- Badge "Prochain DS" (v1.0.1) — en-tête, libellé adaptatif aujourd'hui / demain / J-X. Visible uniquement si un DS est à venir. Un clic ouvre l'onglet Devoirs.
- Détail cours annulés (v1.0.1) — affichage
Matière · Professeur · Salle — Annulédans l'EDT. - Spinner de chargement — le logo ProJote tourne dans la zone avatar pendant la collecte ; un clic déclenche un rafraîchissement manuel
Personnalisation du widget
Les paramètres suivants sont accessibles dans la configuration de l'équipement, onglet Affichage → section Paramètres avancés :
| Paramètre | Valeurs | Défaut | Description |
|---|---|---|---|
| Couleur d'accentuation | Sélecteur de couleur | #94C904 (vert ProJote) |
Couleur des badges, de la barre de moyenne, des cours EDT et des éléments actifs. |
| Taille de police | 10 · 11 · 12 · 13 · 14 · 15 · 16 px | 12px |
Taille de base du texte dans l'ensemble du widget. Les autres tailles (titres, badges…) sont relatives à cette valeur. |
| Onglet par défaut | Devoirs · Notes · Absences · Retards · Punitions · Menu cantine · Messagerie · Statistiques | Devoirs | Onglet ouvert à l'affichage initial du widget. |
| Navigation EDT jours suivants | Jour suivant (J+1) · Flèches (J+1 à J+4) | Jour suivant (J+1) |
Jour suivant : affiche uniquement le prochain jour scolaire (comportement classique). Flèches : affiche des boutons ‹ › permettant de naviguer entre J+1 et J+4. La flèche gauche est grisée sur J+1, la flèche droite sur J+4. |
Calcul de la moyenne générale
Source de la moyenne
Le widget utilise en priorité la moyenne officielle Pronote transmise par le démon. Pronote publie cette valeur dans period.overall_average uniquement lorsque le bilan de la période est clôturé (fin de semestre ou de trimestre).
Si aucune moyenne officielle n'est disponible (période en cours, établissement ne la publiant pas), le widget bascule sur un calcul local à partir de toutes les notes reçues :
moyenne = Σ( (note ÷ sur) × 20 × coeff ) ÷ Σ(coeff)
Cas particuliers
| Cas | Comportement |
|---|---|
sur absent ou nul | Valeur par défaut 20 — la note est traitée comme si elle était sur 20 |
coeff absent | Valeur par défaut 1 |
coeff décimal (ex. 1.5) | Pris en compte tel quel |
coeff = 0 (note optionnelle / bonus) | Note exclue de la moyenne (contribue 0 au numérateur et 0 au dénominateur) |
note non numérique (ex. Absent, Dispensé) | Note exclue du calcul |
Export iCalendar (.ics) v1.1.0
ProJote expose un calendrier iCalendar natif généré à partir des données déjà collectées (emploi du temps et devoirs), abonnable depuis n'importe quelle application de calendrier (Google Agenda, Apple Calendrier, Thunderbird, Nextcloud…).
| Contenu | Détail |
|---|---|
| Cours (VEVENT) | Emploi du temps du jour, du prochain jour et des 4 jours suivants (J+1 à J+4), avec horaires, salle et professeur. Les cours annulés sont marqués STATUS:CANCELLED. |
| Devoirs (VTODO) | Devoirs à faire, avec échéance et statut (fait / à faire). |
URL d'abonnement :
https://<votre-jeedom>/plugins/ProJote/core/php/calendar.php?apikey=<clé_API>&id=<id_équipement>
- clé_API : la clé API du plugin ProJote (Réglages → Système → Configuration → API).
- id_équipement : l'identifiant de l'équipement ProJote (visible dans l'URL de sa page de configuration).
URL iCal
La commande URL_Ical pointe vers le calendrier fourni par Pronote (si
l'établissement l'active). L'export ci-dessus est généré localement par ProJote : il
fonctionne indépendamment de Pronote et inclut les devoirs en tâches (VTODO).
Exemples de scénarios
ProJote n'embarque aucun scénario prédéfini : il expose des commandes que vous combinez librement dans vos propres scénarios Jeedom. Voici cinq recettes prêtes à recopier. Chaque recette décrit le déclencheur, la condition et l'action — adaptez les seuils, équipements et messages à votre installation.
#[…]#) sont à remplacer par la référence de la commande
de votre équipement ProJote, via le sélecteur de commande de l'éditeur de scénario
Jeedom. Les noms entre crochets correspondent aux logicalId listés dans la section
Commandes disponibles.
1 — Réveil adaptatif selon l'heure du premier cours
Décale le réveil (ou l'annonce vocale) en fonction de l'heure réelle de début des cours du jour.
| Élément | Configuration |
|---|---|
| Déclencheur | Programmation (cron) chaque matin, ex. 30 6 * * 1-5 (6h30, du lundi au vendredi) |
| Condition | #[…][ProJote][edt_aujourdhui_debut]# n'est pas vide (sinon journée sans cours) |
| Action | Annonce vocale / notification : « Premier cours à #[…][ProJote][edt_aujourdhui_debut]# ». Optionnel : déclencher la lumière ou le réveil X minutes avant cette heure. |
2 — Anti-oubli des devoirs du lendemain
Rappelle en soirée s'il reste des devoirs non faits pour le jour scolaire suivant.
| Élément | Configuration |
|---|---|
| Déclencheur | Programmation (cron) en soirée, ex. 0 19 * * 0-4 (19h, veille de jour scolaire) |
| Condition | #[…][ProJote][Nb_devoir_Demain_NF]# > 0 |
| Action | Notification listant les devoirs : « #[…][ProJote][Nb_devoir_Demain_NF]# devoir(s) à faire pour demain » + contenu de #[…][ProJote][devoir_Demain]#. |
3 — Alerte parent en cas de nouvelle absence
Prévient dès que le compteur d'absences augmente.
| Élément | Configuration |
|---|---|
| Déclencheur | Sur changement de la commande #[…][ProJote][Nb_absences]# |
| Condition | La nouvelle valeur est supérieure à la précédente (utiliser une variable mémorisant l'ancien total, ou le déclencheur « valeur augmente ») |
| Action | Notification push aux parents avec le détail de #[…][ProJote][derniere_absence]#. |
4 — Mode révision avant un contrôle
Active une ambiance « révision » quand un DS approche (J-2 ou moins).
| Élément | Configuration |
|---|---|
| Déclencheur | Sur changement de #[…][ProJote][prochain_DS_dans_jours]#, ou cron quotidien le soir |
| Condition | #[…][ProJote][prochain_DS_dans_jours]# ≥ 0 ET ≤ 2 |
| Action | Rappel vocal / notification : « Contrôle de #[…][ProJote][prochain_DS_matiere]# le #[…][ProJote][prochain_DS_date]# ». Optionnel : tamiser l'éclairage du bureau, couper les notifications de loisir. |
5 — Annonce du menu de la cantine
Annonce le menu du midi au moment du départ pour l'école ou avant le repas.
| Élément | Configuration |
|---|---|
| Déclencheur | Programmation (cron), ex. 30 7 * * 1-5 (7h30) ou 0 11 * * 1-5 (11h) |
| Condition | #[…][ProJote][menu_midi_aujourdhui]# n'est pas vide |
| Action | Annonce vocale (TTS) : « Au menu ce midi : #[…][ProJote][menu_midi_aujourdhui]# ». |
6 — Notification WhatsApp à chaque nouvelle note v1.1.0
Envoie un message dès qu'une nouvelle note est saisie dans Pronote. La commande
nouvelle_note est mise à jour (et déclenche donc le scénario) uniquement quand une
note nouvelle est détectée par rapport à la synchronisation précédente.
| Élément | Configuration |
|---|---|
| Déclencheur | Sur changement de la commande #[…][ProJote][nouvelle_note]# |
| Condition | Aucune (le déclencheur ne se produit que sur une vraie nouveauté). Optionnel : #[…][ProJote][nouvelle_note]# n'est pas vide. |
| Action | Envoyer un message via votre plugin de messagerie (ex. plugin WhatsApp/jeewhatsapp, Telegram, Pushover…) avec le texte : « 📚 Nouvelle note : #[…][ProJote][nouvelle_note]# » (ex. « Maths : 16/20 — DS trigonométrie »). |
Variante nouveau devoir : même principe avec la commande
nouveau_devoir comme déclencheur.
Statut connexion permet aussi de
n'agir que lorsque la dernière synchronisation Pronote a réussi.
Historique des versions
1.2.0 — Juin 2026
| Type | Description |
|---|---|
| Nouveau | Notifications « nouvelle note » / « nouveau devoir » — le démon compare chaque synchronisation à la précédente et expose les commandes nouvelle_note et nouveau_devoir, mises à jour uniquement sur une vraie nouveauté. Idéal pour déclencher un scénario (notification WhatsApp/Telegram…). Les nouveautés alimentent aussi le centre d'alertes. Aucune alerte au premier branchement (anti-avalanche). |
| Sécurité | Apikey en POST — l'envoi de messages au centre Jeedom passe en POST (corps) au lieu de GET : la clé API n'apparaît plus dans les access logs du serveur web. [CWE-598] |
| Sécurité | Niveau de log initial réduit — le démon démarre en WARNING (au lieu de DEBUG) jusqu'à l'application de --loglevel, évitant toute fuite verbeuse sur stdout avant l'activation du masquage d'apikey. [CWE-532] · Rapport complet : SECURITY-AUDIT.md (score 88/100). |
| Fiabilité | Timeout dur par équipement — un compte Pronote injoignable (ENT qui timeout) n'immobilise plus le worker : au-delà de 120 s le traitement est abandonné et l'équipement suivant est traité. Le circuit breaker applique désormais un backoff exponentiel (60 s, 120 s, 240 s… plafonné à 1 h) au lieu d'un délai fixe. |
| Maintenance | Environnement Python allégé — le venv n'est plus versionné ; les dépendances sont épinglées dans resources/requirements.txt et installées via post-install.sh. Le venv est exclu des sauvegardes Jeedom (backupExclude). maxDependancyInstallTime porté à 120 s. |
1.1.0 — Mai 2026
| Type | Description |
|---|---|
| Nouveau | Onglet Statistiques — courbes d'évolution (sparklines) de la moyenne générale, des absences, retards et devoirs non faits sur ~120 jours, à partir des données historisées par Jeedom. Affiche les éventuelles matières en baisse. |
| Nouveau | Moyenne générale — nouvelle commande moyenne_generale (numérique, sur 20, historisée) calculée par le démon. Historisation activée par défaut sur Nb_absences, Nb_retard, Nb_devoir_NF (migration automatique des équipements existants). |
| Nouveau | Détection de matière en baisse — commande matiere_en_baisse : repère les matières dont la moyenne récente chute d'au moins 2 points (matières ayant ≥ 4 notes). |
| Nouveau | Centre d'alertes — nouvel onglet Alertes regroupant les événements ProJote générés automatiquement (nouvelle absence/retard/punition, nouveau message non lu, contrôle détecté, matière en baisse — 50 derniers) et les notifications Pronote. Nouvelle commande event (dernier événement, pratique comme déclencheur de scénario). |
| Nouveau | Export iCalendar natif — endpoint calendar.php générant un calendrier .ics (cours en VEVENT, devoirs en VTODO) abonnable depuis n'importe quelle application de calendrier. Indépendant de l'iCal Pronote. |
| Nouveau | Allergènes / labels du menu — l'onglet Menu cantine affiche les labels Pronote (Bio, Local, Porc, allergènes…) en puces discrètes. |
| Nouveau | Exemples de scénarios — nouvelle section de documentation avec 5 recettes prêtes à recopier (réveil adaptatif, anti-oubli devoirs, alerte absence, mode révision, annonce cantine). |
| Amélioration | Clarification compétences vs notes — documentation précisant la distinction entre notes chiffrées (intégrées à la moyenne) et évaluations par compétences (Pronote 2021+). |
| Amélioration | Onglet par défaut étendu — les onglets Statistiques et Alertes sont sélectionnables comme onglet par défaut du widget. |
| Qualité | Tests unitaires + intégration continue — suite de tests pytest sur les fonctions du démon (moyenne, menus, messages, évaluations…), CI GitHub Actions (lint Python/Shell/PHP + tests Python 3.8/3.11), validation automatique du manifest info.json. Le démon est désormais importable hors exécution (guard __main__). |
1.0.1 — Mai 2026
| Type | Description |
|---|---|
| Nouveau | Menu cantine — onglet dédié — la collecte des menus Pronote (déjà câblée côté démon) est désormais exposée en commandes Jeedom et rendue dans un onglet Menu du widget. Nouvelles commandes : menu_midi_aujourdhui, menu_midi_demain, menu_semaine (HTML), Nb_menus_semaine. Fenêtre de collecte étendue à 7 jours. |
| Nouveau | Messagerie Pronote (lecture) — nouvel onglet Msg dans le widget listant les discussions Pronote (sujet, expéditeur, date, extrait). Messages non lus mis en évidence et badge sur l'onglet. Nouvelles commandes : Nb_messages, Nb_messages_non_lus, dernier_message_expediteur, dernier_message_sujet, dernier_message_date, dernier_message_extrait, messages_html. |
| Nouveau | Badge "Prochain DS" — détection heuristique (mots-clés contrôle, DS, évaluation, interro, test, examen) sur la description et la matière des devoirs. Badge orange dans l'en-tête du widget (affiché uniquement si un DS est à venir), libellé adaptatif aujourd'hui / demain / J-X. Un clic ouvre l'onglet Devoirs. Nouvelles commandes : prochain_DS_matiere, prochain_DS_date, prochain_DS_dans_jours, prochains_DS_html. |
| Amélioration | EDT — détail des cours annulés — les créneaux annulés affichent désormais Matière · Professeur · Salle — Annulé au lieu de Matière · Salle — Annulé. Un tooltip reprend l'info complète au survol. |
| Amélioration | Onglet par défaut configurable étendu — les nouveaux onglets Menu cantine et Messagerie sont sélectionnables dans le paramètre Onglet par défaut (Affichage → Paramètres avancés). |
| Sécurité | pronotepy pinné — contrainte de version pronotepy>=2.14,<3.0 dans post-install.sh pour éviter qu'une future 3.x publiée en breaking change ne casse les démons en production. |
| Correction | Sortie de la collecte des menus — l'ancienne version retournait une liste plate inexploitable par le PHP. Refactorisée pour produire un dictionnaire structuré directement consommable par la boucle de callback Jeedom. |
| Correction | Tri chronologique des messages — le tri utilisait la string de date dd/mm/yyyy HH:MM ce qui produisait un ordre incorrect (15/01 passait avant 02/02). Refait sur clé ISO 8601 + extraction du « dernier message » via max() indépendamment du statut lu/non-lu. |
| Correction | Manifest plugin nettoyé — suppression de la description en_US (le plugin reste monolingue fr_FR) et correction de l'accord « destiné ». Aligné avec language: ["fr_FR"]. |
1.0.0 — Mai 2026 (stable)
| Type | Description |
|---|---|
| Nouveau | Commande info Statut_Connexion — expose en temps réel l'état de la connexion à Pronote (Connecté, Déconnecté : …, Erreur : …) pour bâtir des scénarios d'alerte sans parser les logs. |
| Amélioration | Script d'installation des dépendances robuste et idempotent — vérification stricte de Python ≥ 3.8, détection des paquets déjà présents pour éviter les ré-installations inutiles, capture explicite des erreurs pip dans le log Jeedom. Le script peut être relancé sans risque. |
| Sécurité | Licence AGPL v3 — migration officielle de la licence du plugin vers la GNU Affero General Public License v3 ; en-têtes de licence harmonisés sur les sources Python et PHP principales. |
| Amélioration | Icône au gabarit Jeedom — l'icône respecte désormais le format 309×348 attendu par le Market Jeedom. |
| Correction | Démon — module Python introuvable sur box Luna — le démon était lancé avec le Python système (/usr/bin/python3) au lieu du venv du plugin. Pronotepy étant installé uniquement dans le venv, le démon échouait avec No module named 'pronotepy'. Le démon utilise désormais systématiquement l'interpréteur du venv (resources/python_venv/bin/python3). |
| Correction | Moyenne générale — affichage « -1/20 » — Pronote retourne -1 comme valeur sentinelle quand la moyenne n'est pas encore calculée (début de période, trop peu de notes). Cette valeur est désormais filtrée côté démon Python et côté widget ; le widget affiche alors la moyenne calculée localement à partir des notes individuelles, ou – s'il n'y en a aucune. |
| Amélioration | Logs Python — horodatage, fichier et numéro de ligne — tous les messages de log Python (démon, LoginConnect, QRConnect) incluent désormais l'horodatage, le fichier source et la ligne dès le premier message, y compris les erreurs d'import précoces survenant avant l'initialisation complète du logger. Format : [YYYY-MM-DD HH:MM:SS][LEVEL] : fichier.py:N - message. |
| Amélioration | Logs — traçabilité de la moyenne Pronote — en mode Debug, le démon trace pour chaque période la valeur brute reçue de Pronote (overall_average), indique si elle est ignorée (sentinelle -1) et confirme la valeur finalement retenue. |
0.9b — Mars 2026
| Type | Description |
|---|---|
| Nouveau |
Photo de profil manuelle — il est désormais possible d'uploader une photo depuis l'onglet Affichage de l'équipement. La photo est stockée en local dans data/{id}/profile_picture_manual.jpg. Un bouton ✕ permet de la supprimer.
|
| Nouveau |
Sélecteur de source photo — nouveau paramètre Photo à utiliser :
|
| Nouveau | Prévisualisation du widget en temps réel — l'onglet Affichage affiche désormais une prévisualisation du widget sur deux colonnes : paramètres à gauche, rendu live à droite (bouton Rafraîchir). |
| Nouveau | Taille de police configurable — nouveau paramètre dans l'onglet Affichage (Paramètres avancés). Valeurs disponibles : 10 à 16 px, défaut 12 px. Toutes les tailles du widget s'adaptent proportionnellement. |
| Nouveau | Onglet par défaut configurable — nouveau paramètre Onglet par défaut dans l'onglet Affichage (Paramètres avancés). Valeurs : Devoirs (défaut), Notes, Absences, Retards, Punitions. |
| Nouveau |
Emploi du temps — navigation sur 4 jours — le démon collecte les 4 prochains jours scolaires (1 seul appel API). Nouveau paramètre Navigation EDT :
edt_J1 à edt_J4 sont disponibles pour les scénarios Jeedom. edt_prochainjour reste inchangé (rétro-compatibilité). La fenêtre de collecte est étendue à 28 jours pour couvrir les vacances scolaires.
|
| Amélioration | Largeur par défaut du widget — portée de 300 px à 360 px pour afficher correctement le layout deux colonnes sans redimensionnement manuel. |
| Amélioration | Sécurité — chiffrement AES lié à la clé API Jeedom — la clé AES-256-CBC utilisée pour chiffrer le mot de passe en transit (PHP → Python) était codée en dur. Elle est désormais dérivée de la clé API Jeedom via SHA-256 (hash('sha256', jeedom::getApiKey('ProJote')) côté PHP, hashlib.sha256(_apikey.encode()).hexdigest() côté Python). |
| Correction | Commandes « Nb devoir fait / non fait » — les compteurs ne se remettaient pas à zéro quand il n'y avait aucun devoir (bug de casse nb_ vs Nb_ dans le démon Python). |
0.9a — Mars 2026
| Type | Description |
|---|---|
| Nouveau | Token de secours automatique — lors de la connexion initiale (identifiants ou QR Code), un second token est généré en arrière-plan. Si le token principal expire, le plugin bascule silencieusement sur le token de secours sans demander de re-authentification. Les deux tokens sont ensuite renouvelés automatiquement. |
| Amélioration | Daemon multi-thread — chaque équipement est traité dans son propre thread Python. Plusieurs équipements peuvent se synchroniser simultanément sans se bloquer mutuellement. Un équipement lent (réseau, Pronote surchargé) n'impacte plus les autres. |
| Nouveau | Nouveau Widget — photo / nom + date de sync / classe + établissement, plus compact et lisible. |
| Nouveau | Widget — spinner de chargement — le logo ProJote tourne dans la zone avatar pendant la collecte. Un clic sur l'avatar déclenche un rafraîchissement manuel. |
| Nouveau | Widget — cours annulés depuis la rentrée — compteur affiché sous l'emploi du temps. |
| Sécurité | Suppression des mots de passe et jetons dans les logs (tous niveaux). |
| Sécurité | UUID de session au format RFC 4122 standard — le plugin ne s'identifie plus comme "ProJote" auprès de Pronote. |
| Corrections | Divers correctifs : chemins Python codés en dur, date de test dans l'emploi du temps, mauvais binaire Python sur Debian 12, page de configuration tronquée en hauteur, signature incorrecte de message::add(). |
0.8 — Février 2024
| Type | Description |
|---|---|
| Nouveau | Support multi-enfants pour comptes parents. |
| Amélioration | Stabilisation générale et optimisation des performances. |
| Amélioration | Gestion améliorée des tokens de reconnexion. |
0.5.2 — Janvier 2024
| Type | Description |
|---|---|
| Correction | Corrections de bugs divers sur la connexion QR Code. |
0.5 — Décembre 2023
| Type | Description |
|---|---|
| Nouveau | Connexion par QR Code. |
| Nouveau | Nouvelle interface de configuration. |
Versions antérieures
| Version | Date | Description |
|---|---|---|
| 0.0.2 | Novembre 2023 | Mise à jour de la documentation. |
| 0.0.1 | Octobre 2023 | Première version officielle. |
| Alpha | Septembre 2023 | Phase de test initiale. |
FAQ
Puis-je utiliser ce plugin avec un compte parent ?
Oui. Sélectionnez Parent comme type de compte et choisissez l'enfant à suivre après validation. Vous pouvez créer plusieurs équipements pour suivre plusieurs enfants.
Les données transitent-elles par un serveur externe ?
Non. Toutes les données restent sur votre installation Jeedom. Seule la connexion vers le serveur Pronote de l'établissement est effectuée — aucune télémétrie, aucun appel vers un serveur tiers.
À quelle fréquence les données sont-elles synchronisées ?
Toutes les heures par défaut, automatiquement désactivé entre 22h et 4h via le cron Jeedom. Vous pouvez forcer une synchronisation manuelle avec la commande Rafraîchir de l'équipement, ou en cliquant sur la photo/avatar dans le widget — cela fonctionne à toute heure, y compris la nuit.
Mon QR Code ne fonctionne pas, pourquoi ?
Chaque QR Code Pronote est à usage unique. Si la connexion a échoué ou si vous avez rechargé la page, retournez sur Pronote pour en générer un nouveau.
Comment changer mes identifiants stockés ?
Modifiez les champs dans la configuration de l'équipement et cliquez sur Valider pour re-générer un nouveau token. Les anciens identifiants sont immédiatement remplacés.
Le démon refuse de démarrer, que faire ?
Consultez la section Dépannage ci-dessous.
L'onglet Menu cantine est vide, pourquoi ? v1.0.1
Tous les établissements ne publient pas les menus dans Pronote. Si la cantine est gérée par un prestataire externe sans intégration Pronote, le démon n'aura simplement rien à collecter. Vérifiez dans Pronote (espace Communication → Menu) si les menus sont visibles côté navigateur — si oui mais que l'onglet reste vide dans Jeedom, ouvrez une issue GitHub avec les logs en mode Debug.
La messagerie n'affiche rien ou affiche une erreur v1.0.1
La messagerie utilise client.discussions() de pronotepy. Quelques cas connus :
- pronotepy < 2.14 : méthode indisponible — relancez l'installation des dépendances (la contrainte de version a été ajoutée en v1.0.1).
- Compte parent multi-enfants : la collecte porte sur l'enfant actuellement sélectionné. Vérifiez que c'est bien le bon.
- Établissement bloquant la messagerie côté API : certains établissements désactivent les discussions hors de l'interface web officielle. Aucun contournement possible.
Pourquoi le badge "Prochain DS" ne s'affiche pas ? v1.0.1
La détection est heuristique : elle parcourt la description et le nom de matière des devoirs pour
repérer les mots-clés contrôle, DS, évaluation, interro,
test, examen. Si vos profs n'utilisent jamais ces termes (ex : "Préparer le chapitre 5"),
rien ne sera détecté. Le badge reste également masqué s'il n'y a aucun DS dans les 120 prochains jours.
Sécurité
| Point | Détail |
|---|---|
| Mots de passe | Chiffrés par Jeedom (AES-256) en base de données. Jamais écrits dans les logs. |
| Tokens | Stockés dans /plugins/ProJote/data/[id]/, jamais synchronisés vers le cloud.
Les jetons ne sont pas loggés. |
| Identifiant de session | UUID RFC 4122 aléatoire — le plugin ne s'identifie pas comme "ProJote" auprès de Pronote. |
| Socket | Le port de communication interne (55369 par défaut) n'écoute que sur 127.0.0.1. |
| HTTPS | Accédez toujours à Jeedom via HTTPS pour éviter l'interception des tokens. |
| Logs | En mode debug, certaines métadonnées de connexion peuvent apparaître. Ne partagez jamais vos logs publiquement sans les avoir anonymisés. |
| Permissions fichiers | Le dossier data/ doit appartenir à www-data :
sudo chown www-data:www-data -R /var/www/html/plugins/ProJote/data |
Dépannage
Activer les logs détaillés
- Allez dans Administration → Configuration → Logs.
- Passez le niveau de ProJote en Debug.
- Relancez le démon ProJote.
- Consultez Administration → Logs → ProJote.
Erreurs courantes
| Message / Symptôme | Solution |
|---|---|
| Le démon ne démarre pas |
Vérifiez que Python 3.8+ est installé : python3 --versionVérifiez l'environnement virtuel : ls /var/www/html/plugins/ProJote/resources/python_venvRelancez les dépendances depuis la page du plugin. |
| Port déjà utilisé |
Changez le port dans la configuration (ex : 55370), ou libérez-le :sudo kill $(lsof -t -i :55369)
|
| Erreur d'authentification |
Testez vos identifiants directement sur le site Pronote. Vérifiez le type CAS/ENT (essayez Aucun en cas de doute). Pour le QR Code : assurez-vous que le PIN saisi est bien celui utilisé à la génération. |
| Session expirée (message dans le centre) |
Depuis la v0.9, un token de secours est utilisé automatiquement. Si l'erreur persiste, re-validez la connexion depuis la configuration de l'équipement. |
| Fichier JSON introuvable |
Vérifiez les permissions du dossier data/ et relancez une authentification.
|
| Données non mises à jour | Vérifiez que le démon est actif. Forcez un rafraîchissement via la commande Rafraîchir. Vérifiez que l'information est bien présente sur votre compte Pronote. |
Support
Avant de signaler un problème, vérifiez que :
- Le démon est démarré et les dépendances sont installées.
- L'information est bien présente sur votre compte Pronote (connexion directe sur le site).
- Vous avez consulté la section Dépannage et les logs en mode debug.
| Ressource | Lien |
|---|---|
| Signaler un bug | Issues GitHub — aldarande/ProJote |
| Forum communauté Jeedom | community.jeedom.com |
| Auteur | github.com/aldarande |