⚡ Version BETA — Documentation en cours

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.

Fonctionnalité purement optionnelle Le plugin reste entièrement gratuit et open-source. Cette fenêtre n'apparaît que sur action de l'utilisateur.

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.

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.9+ · Debian 11/12 · Comptes élèves et parents.

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.

CommandeDescription
Nom de l'élèvePrénom et nom
ClasseIntitulé de la classe
ÉtablissementNom de l'établissement scolaire
PhotoChemin local de la photo de profil
URL iCalLien d'abonnement au calendrier Pronote
Nb absencesNombre d'absences sur la période en cours
Nb retardsNombre de retards sur la période
Nb punitionsNombre 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 / finPremière et dernière heure de cours du jour
EDT aujourd'hui — cours annulésNombre de cours annulés aujourd'hui
EDT prochain jour — date / début / finInformations sur le prochain jour de cours
EDT prochain jour — cours annulésCours annulés du prochain jour
Cours annulés (total période)Nombre total de cours annulés depuis la rentrée
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.

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

Historique des versions

1.0 — Avril 2026

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

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.9+ 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.