Pronote dans HA - les notes, devoirs, absences et emploi du temps des enfants

Je voulais vous partager mes travaux d’intégration de Pronote à Home assistant :


Pronote est très répandu en france ! c’est un outils en ligne pour les collégiens et lycéens qui leur permet de voir leur emploi du temps, leur note et leur devoirs.

Et bien j’arrive après quelques longues heures passées à régler automatiquement tous les soirs le réveil de mes enfants en fonction de l’emploi du temps du lendemain (et croyez-moi ça changer tous les jours au lycée donc c’est bien pratique)

Je peux aussi leur envoyer une notification mobile quand ils ont une nouvelle note mais aussi quand un cours est annulé !
Et ce n’est que le début ! (La suite : bloquer la PlayStation tant que tous les devoirs ne sont pas cochés fait dans Pronote ! :crazy_face:)
Nb : les réveils sont en faites des enceintes connectés Google sur lesquels j’ai ajouté un réveil réglable dans HA

Tout ça est dispo sur un tutoriel sur Github :

Nouveautés (27/03/2022) :

  • Ajout des absences pour le trimestre en cours - merci à @sosordinet pour sa contribution
  • Ajout des modalités pour la connexion via un ENT
  • Ajout de la gestion des compte parent - il est possible d’utiliser les comptes Pronote des parents et plus celui uniquement de son enfant (dont on connait pas nécessairement le mot de passe) - merci @Elekrea !
19 « J'aime »

Malgré que je n’ai plus d’enfants qui vont à l’école, je trouve que c’est une bonne idée :+1:.
Par contre pas sur que les enfants vont apprécier le blocage de la playstation :grin:, d’un autre côté il y a encore des devoirs ? :joy:

1 « J'aime »

Pareil, mes filles sont grandes maintenant mais belle idée et réalisation.

1 « J'aime »

Bon, j’avance, mais je suis bloque.
A l’execution du script, erreur sur les dernieres lignes du pronote.py. Il n’aime pas les doubles underscore autours de location et file

2022-01-29 13:33:51 ERROR (SyncWorker_6) [homeassistant.components.python_script] Error loading script pronote.py: Line 128: "__location__" is an invalid variable name because it starts with "_", Line 128: "__file__" is an invalid variable name because it starts with "_", Line 129: "__location__" is an invalid variable name because it starts with "_"
2022-01-29 13:33:55 ERROR (SyncWorker_5) [homeassistant.components.python_script] Error loading script pronote.py: Line 128: "__location__" is an invalid variable name because it starts with "_", Line 128: "__file__" is an invalid variable name because it starts with "_", Line 129: "__location__" is an invalid variable name because it starts with "_"

Bravo pour l’avancement !
ah ok pour le nom de variable : et bien tu peux renommer la variable sans les underscore
Je vais corriger le script et enlever les « __ » > c’est fait !

toujours une erreur avec les doubles underscore file

Logger: homeassistant.components.python_script
Source: components/python_script/__init__.py:154
Integration: Python Scripts (documentation, issues)
First occurred: 15:23:10 (1 occurrences)
Last logged: 15:23:10

Error loading script pronote.py: Line 128: "__file__" is an invalid variable name because it starts with "_"

Et quand j’enleve les double underscore autours de file, nouvelle erreur

Logger: homeassistant.components.python_script.pronote.py
Source: components/python_script/__init__.py:222
Integration: Python Scripts (documentation, issues)
First occurred: 15:25:14 (1 occurrences)
Last logged: 15:25:14

Error executing script: __import__ not found
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/python_script/__init__.py", line 222, in execute
    exec(compiled.code, restricted_globals)
  File "pronote.py", line 1, in <module>
ImportError: __import__ not found

Bonjour et super boulot.

Si je comprend bien on modifie les lignes suivantes :

          <td id="LC9" class="blob-code blob-code-inner js-file-line"><span class=pl-s1>eleve</span><span class=pl-c1>=</span><span class=pl-s>&quot;demo&quot;</span></td>
        </tr>
        <tr>
          <td id="L10" class="blob-num js-line-number js-code-nav-line-number" data-line-number="10"></td>
          <td id="LC10" class="blob-code blob-code-inner js-file-line"><span class=pl-s1>prefix_url</span> <span class=pl-c1>=</span> <span class=pl-s>&quot;demo&quot;</span></td>
        </tr>
        <tr>
          <td id="L11" class="blob-num js-line-number js-code-nav-line-number" data-line-number="11"></td>
          <td id="LC11" class="blob-code blob-code-inner js-file-line"><span class=pl-s1>username</span><span class=pl-c1>=</span><span class=pl-s>&quot;demonstration&quot;</span></td>
        </tr>
        <tr>
          <td id="L12" class="blob-num js-line-number js-code-nav-line-number" data-line-number="12"></td>
          <td id="LC12" class="blob-code blob-code-inner js-file-line"><span class=pl-s1>password</span><span class=pl-c1>=</span><span class=pl-s>&quot;password&quot;</span></td>

On remplace par les logins et mot de passe d’accès à pronote. Ensuite on modifie les deux occurrences par le prénom de l’enfant c’est ça?
Ne faut il pas une url particulière propre à l’établissement?
Merci d’avance de tes lumières

Merci !

en effet, les 4 variables a modifier sont :

eleve="demo" #changer avec le nom de son enfant
prefix_url = "demo" #changer par le prefix de l'url de votre Pronote qui se forme comme ça https://PREFIX.index-education.net/pronote/eleve.html?login=true
username="demonstration" # c'est le nom d'utilisateur de votre enfant dans pronote
password="pronotevs" : # le mot de passe du compte de votre enfant

Mais il faut connaitre l’adresse complète de son Pronote :
Exemple : https://0750362l.index-education.net/pronote/eleve.html?login=true
Alors le prefix_url = « 0750362l »

Mais mon conseil c’est déjà :

  • d’essayer de se connecter à Pronote via une url du type https://PREFIX.index-education.net/pronote/eleve.html?login=true et le login et pass de son enfant
  • de faire tourner la premiere fois le script avec le compte de démo
  • et ensuite remplacer les variables

Merci.
Pour le nom de l’enfant c’est sous quelle forme ? Nom de famille, Prénom ou prénom espace nom.

D’autres variables à modifier?

Je connais pas trop python. Comment on le lance a la main?
Depuis le linux je pense.
Idem pour le crontab?
Désolé si c’est beaucoup de questions.

nom de l’enfant : il sert juste pour le nom du fichier json - donc éviter les accents

les variables a modifier :

eleve="demo" #changer avec le nom de son enfant
prefix_url = "demo" #changer par le prefix de l'url de votre Pronote qui se forme comme ça https://PREFIX.index-education.net/pronote/eleve.html?login=true
username="demonstration" # c'est le nom d'utilisateur de votre enfant dans pronote
password="pronotevs" : # le mot de passe du compte de votre enfant

oui ! a lancer depuis linux
idem pour la crontab
il faut python sur votre linux et ne pas oublier d’ajouter les module os, date et pronotepy à python
via des commande du type :

pip install os 
pip install pronotepy
pip install date

ou pip3 suivant la version de python installé

si on a python 3.9.7, il faut remplacer pip par pip3 pour toutes tes lignes de codes?

a priori oui !
python3 vient avec pip3
il suffit d’essayer en tapant pip3 tout seul
nb : pour comprendre un minimum, pip sert à installer des lib ou module dépendant dans python

Sur mon PI2 j’ai bien python 3 mais pip install os et pip install date donnent une erreur 404

Could not install packages due to an EnvironmentError: 404 Client Error: Not Found for url: https://pypi.org/simple/os/

je crois que je dis une bêtise : tu as juste besoin de faire pip install pronotepy (date et os sont installé de base)

Quand je lance le scripte j’ai une erreur :

  File "pronote.py", line 7
    <!DOCTYPE html>
    ^
SyntaxError: invalid syntax

Merci pour le script et les fichiers yaml

Mes fils ne souhaitant pas me donner leur mot de passe (dans l’absolu ils ont raison), on peut modifier très légèrement le script python pour passer par l’authentification parent au lieu d’élève, et si plusieurs élèves, il ne faut pas oublier de sélectionner le bon.

Voila les lignes :

#Connection à Pronote
client = pronotepy.ParentClient('https://'+prefix_url+'.index-education.net/pronote/parent.html?login=true', username, password)

#Si on est bien connecté
if client.logged_in:
    client.set_child('Nom + Prénom de l élève')
1 « J'aime »

Bonjour,
Comme beaucoup de grand parents, nous utilisons Pronote tous les mercredis et le reste de la semaine on s’amuse avec Home Assistant :slight_smile:

J’aimerai bien utiliser cette méthode pour remonter les informations (pour impressionner mes petits-enfants la semaine prochaine) mais je ne connais pas assez Pyton alors j’hésite a me lancer dans l’installation du script et du cronjob de peur de démolir mon installation HA.

Serait-il possible de détailler un peu la procédure pour installer ce script dans un dossier ; est-ce qu’il faut juste le copier dans le dossier avec Samba ?

Pour la crontab, j’ai besoin d’aide, je ne vois pas comment il faut procéder?

Pour le reste, je pense pouvoir me débrouiller.

Merci d’avance et félicitations pour ce travail, je progresse tous les jours grâce à vous.

Merci pour vos retours
Lancez-vous ! Aucun risque de démolir votre installation.

il suffit juste de savoir se connecter en ligne de commande sur le serveur en SSH.
Installer le script c’est le poser au bon endroit (d’ailleurs ça peut être n’importe ou mais il faudra adapter le chemin du fichier json qu’il génère.
Enfin, pour la contrab rien de bien compliqué

Oh merci ! c’es vrai je n’avais pas pensé au enfants qui ne veulent pas donner leur mot de passe.
D’ailleurs c’est vrai qu’il n’est pas nécessaire d’avoir un compte eleve ! tout est visible dans le compte parent.
As-tu testé ? cela fonctionne ? Toutes les données remonte dans HA ?

NB : il faudra un compte élève le jour ou on voudra que les enfants cocher leur devoir fait dans HA…mais on n’y est pas

Oui cela fonctionne parfaitement tout remonte dans home assistant, par contre il faut bien faire le set_child lorsque tu as plusieurs enfants, sinon tu n’as pas les bonnes notes :rofl: