Cette page documente les fonctionnalités en développement, pas encore dans la version stable. Consulter la documentation stable →
Nouveautés en cours
Bouton de don
Un bouton Don () est ajouté dans la page de gestion du plugin, à côté des boutons Ajouter et Configuration. Un clic ouvre une fenêtre modale proposant un don via Ko-fi.
Synchronisation de version à l'installation
Le fichier install.php lit désormais la version depuis info.json et la synchronise dans le système de mise à jour Jeedom lors de l'installation et de la mise à jour du plugin. Cela corrige les cas où la version affichée dans le gestionnaire de plugins Jeedom était désynchronisée.
ProJote_install() → _ProJote_setVersion()
ProJote_update() → _ProJote_setVersion()
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.
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 | Description |
|---|---|
| Nom de l'élève | Prénom et nom |
| Classe | Intitulé de la classe |
| Établissement | Nom de l'établissement scolaire |
| Photo | Chemin local de la photo de profil |
| URL iCal | Lien d'abonnement au calendrier Pronote |
| Nb absences | Nombre d'absences sur la période en cours |
| Nb retards | Nombre de retards sur la période |
| Nb punitions | Nombre de punitions sur la période |
| Nb devoirs (fait / non fait) | Devoirs de la semaine, ventilés par statut |
| Nb devoirs demain (fait / non fait) | Devoirs pour le prochain jour de cours |
| EDT aujourd'hui — début / fin | Première et dernière heure de cours du jour |
| EDT aujourd'hui — cours annulés | Nombre de cours annulés aujourd'hui |
| EDT prochain jour — date / début / fin | Informations sur le prochain jour de cours |
| EDT prochain jour — cours annulés | Cours annulés du prochain jour |
| Cours annulés (total période) | Nombre total de cours annulés depuis la rentrée |
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
- 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 | 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 |
Historique des versions
1.0 — Avril 2026
| Type | Description |
|---|---|
| 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.
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.9+ 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 |