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.

Développé avec l'aide de l'IA Depuis la version 0.9, l'évolution du plugin est assistée par intelligence artificielle (Claude — Anthropic), notamment pour la refonte du widget, les améliorations de sécurité, et la génération du token de secours.
Compatibilité Jeedom 4.4+ · Python 3.8+ · Debian 11/12 · Comptes élèves et parents.

Prérequis

ÉlémentVersion / Détail
Jeedom4.4 ou supérieur
Python3.8 minimum (vérifié à l'installation des dépendances)
SystèmeDebian 11, Debian 12 (Smart, Luna, Atlas, RPi, Docker, DIY)
Paquet systèmepython3-venv (installé automatiquement par Jeedom dans la plupart des cas)
Compte PronoteCompte élève ou parent actif sur le portail Pronote de l'établissement
RéseauAccès sortant HTTPS vers le serveur Pronote de l'établissement (et l'ENT si utilisé)
pronotepyBranche 2.x (installation contrainte à >=2.14,<3.0 depuis la v1.0.1)

Installation

  1. Accédez au Market Jeedom et recherchez ProJote.
  2. Cliquez sur Installer.
  3. 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).
  4. Activez le plugin, puis démarrez le démon.
  5. Créez un équipement via Ajouter et configurez la connexion.
Conseil Si les dépendances échouent à la première tentative, relancez l'installation — c'est normal lors du tout premier déploiement.

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.

Sélection de la méthode de connexion

Par identifiants (Login)

Renseignez les informations suivantes dans la configuration de l'équipement :

ChampDescription
ENT / CASSélectionnez votre espace numérique de travail. En cas de doute, essayez Aucun.
Type de compteÉlève ou Parent
LoginVotre identifiant Pronote
Mot de passeVotre mot de passe (stocké chiffré, jamais affiché dans les logs)
URLAdresse 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
Formulaire de connexion par identifiants

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 :

  1. Cliquez sur votre avatar en haut à droite.
  2. Sélectionnez Générer un QR Code.
  3. Choisissez un code PIN à 4 chiffres de votre choix.
  4. Cliquez sur Générer.
Génération QR Code Pronote

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

  1. Dans la configuration de l'équipement, sélectionnez l'authentification QR Code.
  2. Faites un clic droit → Coller dans le cadre gris, ou importez l'image enregistrée.
  3. Saisissez le PIN à 4 chiffres choisi précédemment.
  4. Cliquez sur Valider.
Zone de dépôt du QR Code
Token backup automatique Depuis la version 0.9, ProJote génère automatiquement un second token de secours lors de la connexion initiale. Si le token principal expire, le plugin bascule silencieusement sur le token de secours — aucune re-authentification n'est nécessaire. Les deux tokens sont alors renouvelés automatiquement, et un message de niveau WARNING est émis dans les logs ProJote pour traçabilité.
QR Code à usage unique Chaque QR Code Pronote ne peut être utilisé qu'une seule fois. Si l'authentification échoue, retournez sur Pronote pour en générer un nouveau.

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.

CommandeTypeDescription
RafraîchiractionForce une synchronisation immédiate avec Pronote (utilisable à toute heure, y compris durant la fenêtre nocturne).
Statut connexioninfoÉtat courant : Connecté, Déconnecté : <raison> ou Erreur : <raison>. Utile pour scénarios d'alerte.
Dernière mise à jourinfoHorodatage de la dernière collecte réussie (commande LastLogin).
Nom de l'élèveinfoPrénom et nom
ClasseinfoIntitulé de la classe
ÉtablissementinfoNom de l'établissement scolaire
PhotoinfoChemin local de la photo de profil
URL iCalinfoLien d'abonnement au calendrier Pronote
Nb absences / retards / punitionsinfoCompteurs sur la période en cours
Nb devoirs (fait / non fait)infoDevoirs de la semaine, ventilés par statut
Nb devoirs demain (fait / non fait)infoDevoirs pour le prochain jour de cours
EDT aujourd'hui — début / fin / cours annulésinfoRepères horaires de la journée
EDT prochain jour — date / début / fin / cours annulésinfoInformations sur le prochain jour de cours
EDT J+1 à J+4infoEmploi du temps détaillé sur les 4 prochains jours scolaires
Cours annulés (total période)infoNombre total de cours annulés depuis la rentrée
Liste des devoirs / absences / retards / punitionsinfoDétails formatés HTML pour le widget
— Menu cantine (v1.0.1) —
menu_midi_aujourdhuiinfoTexte lisible du menu de midi du jour ("Entrée · Plat · Dessert…"). Vide si pas de menu.
menu_midi_demaininfoIdem pour le lendemain.
menu_semaineinfoHTML compact des menus sur 7 jours (consommé par le widget).
Nb_menus_semaineinfoNombre de menus disponibles dans la fenêtre.
— Messagerie (v1.0.1) —
Nb_messagesinfoNombre total de discussions visibles.
Nb_messages_non_lusinfoCompteur des messages non lus. Idéal pour scénarios d'alerte (TTS, push…).
dernier_message_expediteurinfoCréateur (souvent un prof ou le CPE).
dernier_message_sujetinfoObjet du dernier message.
dernier_message_dateinfoDate du dernier message dd/mm/yyyy HH:MM.
dernier_message_extraitinfoContenu tronqué à 200 caractères.
messages_htmlinfoListe HTML compacte de toutes les discussions (consommée par l'onglet Msg).
— Prochain DS / évaluation (v1.0.1) —
prochain_DS_matiereinfoMatière du prochain devoir surveillé détecté. Vide si aucun DS à venir.
prochain_DS_dateinfoDate au format dd/mm/yyyy.
prochain_DS_dans_joursinfoNombre de jours avant le DS (entier). Pratique pour scénarios mode révision.
prochains_DS_htmlinfoListe HTML des 5 prochains DS détectés.
— Statistiques (v1.1.0) —
moyenne_generaleinfoMoyenne 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_baisseinfoMatiè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) —
eventinfoLibellé 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_noteinfoLibellé 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_devoirinfoLibellé du dernier nouveau devoir détecté (ex. « Maths (12/03) : exercices p.42 »). Même logique de déclenchement que nouvelle_note.
Historisation (v1.1.0) Les commandes 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.
Fenêtre de synchronisation Le cron Jeedom déclenche une collecte automatique toutes les heures, désactivé entre 22h et 4h pour ne pas solliciter Pronote la nuit. La commande Rafraîchir reste utilisable à toute heure.
Données manquantes ? Le plugin ne retourne que ce qui est présent dans Pronote. Si une information n'est pas disponible sur le portail Pronote de l'établissement, elle ne remontera pas.
Notes chiffrées vs compétences Depuis 2021, Pronote distingue deux systèmes d'évaluation, exposés par deux commandes distinctes dans ProJote : Selon l'établissement et la matière, l'un, l'autre, ou les deux peuvent être renseignés. Une matière évaluée uniquement par compétences n'apparaîtra pas dans la liste des notes.

Widget

Le widget principal (projote) regroupe toutes les informations sur un seul tuile de tableau de bord :

Personnalisation du widget

Les paramètres suivants sont accessibles dans la configuration de l'équipement, onglet Affichage → section Paramètres avancés :

ParamètreValeursDéfautDescription
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)
Le calcul local peut différer de la moyenne Pronote. Pronote utilise une méthode par moyenne de moyennes de matières (moyenne par matière pondérée par le coefficient matière) alors que le calcul local est une moyenne pondérée directe sur toutes les notes individuelles. L'écart est généralement faible mais peut atteindre quelques dixièmes.

Cas particuliers

CasComportement
sur absent ou nulValeur par défaut 20 — la note est traitée comme si elle était sur 20
coeff absentValeur 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
Tendance — L'indicateur ↗/↘ est calculé en comparant la moyenne des 3 dernières notes saisies avec la moyenne des 3 premières notes de l'année (tri chronologique). Il n'apparaît que si au moins 4 notes sont disponibles.

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…).

ContenuDé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>
Différence avec la commande 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).
Échéance des devoirs approximative Pronote ne transmet que le jour et le mois des devoirs (sans l'année) ; ProJote infère l'année (année scolaire en cours). L'échéance peut être décalée d'un an dans de rares cas en fin d'année civile.

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.

Comment lire ces recettes Les commandes citées (#[…]#) 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émentConfiguration
DéclencheurProgrammation (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)
ActionAnnonce 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émentConfiguration
DéclencheurProgrammation (cron) en soirée, ex. 0 19 * * 0-4 (19h, veille de jour scolaire)
Condition#[…][ProJote][Nb_devoir_Demain_NF]# > 0
ActionNotification 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émentConfiguration
DéclencheurSur changement de la commande #[…][ProJote][Nb_absences]#
ConditionLa nouvelle valeur est supérieure à la précédente (utiliser une variable mémorisant l'ancien total, ou le déclencheur « valeur augmente »)
ActionNotification 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émentConfiguration
DéclencheurSur changement de #[…][ProJote][prochain_DS_dans_jours]#, ou cron quotidien le soir
Condition#[…][ProJote][prochain_DS_dans_jours]# ≥ 0 ET ≤ 2
ActionRappel 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émentConfiguration
DéclencheurProgrammation (cron), ex. 30 7 * * 1-5 (7h30) ou 0 11 * * 1-5 (11h)
Condition#[…][ProJote][menu_midi_aujourdhui]# n'est pas vide
ActionAnnonce 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émentConfiguration
DéclencheurSur changement de la commande #[…][ProJote][nouvelle_note]#
ConditionAucune (le déclencheur ne se produit que sur une vraie nouveauté). Optionnel : #[…][ProJote][nouvelle_note]# n'est pas vide.
ActionEnvoyer 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.

Astuce Pour limiter le bruit, conditionnez vos scénarios à la présence d'une personne à la maison ou à un mode « semaine scolaire ». La commande 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

TypeDescription
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

TypeDescription
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

TypeDescription
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)

TypeDescription
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

TypeDescription
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 :
  • Aucune (initiales) — affiche les initiales de l'élève (défaut).
  • Photo Pronote — utilise la photo récupérée depuis Pronote.
  • Photo manuelle — utilise la photo uploadée manuellement.
  • Automatique — Pronote en priorité, photo manuelle en fallback.
La résolution est recalculée à chaque rendu du widget — aucun refresh du démon nécessaire.
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 :
  • Jour suivant (J+1) — affiche uniquement le prochain jour (comportement précédent).
  • Flèches (J+1 à J+4) — affiche le prochain jour avec des flèches ‹ › pour naviguer jusqu'à J+4.
Les commandes 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

TypeDescription
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

TypeDescription
NouveauSupport multi-enfants pour comptes parents.
AméliorationStabilisation générale et optimisation des performances.
AméliorationGestion améliorée des tokens de reconnexion.

0.5.2 — Janvier 2024

TypeDescription
CorrectionCorrections de bugs divers sur la connexion QR Code.

0.5 — Décembre 2023

TypeDescription
NouveauConnexion par QR Code.
NouveauNouvelle interface de configuration.

Versions antérieures

VersionDateDescription
0.0.2Novembre 2023Mise à jour de la documentation.
0.0.1Octobre 2023Première version officielle.
AlphaSeptembre 2023Phase 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.

Fenêtre nocturne et rafraîchissement manuel La plage 22h–4h désactive uniquement les synchronisations automatiques planifiées. Un rafraîchissement manuel (bouton Rafraîchir ou clic sur l'avatar du widget) est toujours exécuté immédiatement, quelle que soit l'heure.

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 :

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é

PointDé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

  1. Allez dans Administration → Configuration → Logs.
  2. Passez le niveau de ProJote en Debug.
  3. Relancez le démon ProJote.
  4. Consultez Administration → Logs → ProJote.

Erreurs courantes

Message / SymptômeSolution
Le démon ne démarre pas Vérifiez que Python 3.8+ est installé : python3 --version
Vérifiez l'environnement virtuel : ls /var/www/html/plugins/ProJote/resources/python_venv
Relancez 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 :

RessourceLien
Signaler un bugIssues GitHub — aldarande/ProJote
Forum communauté Jeedomcommunity.jeedom.com
Auteurgithub.com/aldarande
Contribution Les pull requests sont les bienvenues. N'hésitez pas à proposer des corrections ou des améliorations via GitHub.