Code Monkey home page Code Monkey logo

pronote2homeassistant's Introduction

Pronote dans Homeassistant

Ceci est un tutoriel pour intégrer Pronote dans Home assistant !
C'est une intégration mais qui n'est pas plug and play comme les intégrations standard de HA.
Elle se base sur un script python que j'ai développé et qui est basé sur l'API wrapper pronotepy.

Lovelace

Nouveautés - 16/10/2022

  • Externalisation de la configuration dans un fichier de [config.ini] qui permet de configurer plusieurs comptes pour plusieurs enfants - merci à pelrol

Nouveautés - 27/03/2022

  • Connexion via les ENT (si celle-ci est développée dans la lib pronotepy)
  • Ajout de la gestion des comptes "parents" de PRONOTE pour se connecter (plus uniquement les comptes elèves dont on n'a pas toujours le mot de passe)
  • Ajout des absences : dans le script et dans le lovelace

absence

Nouveautés - 11/03/2023

  • Ajout des évaluations - notes sous formes de lettre ou de couleurs

evaluation

Rappel :

Pronote est une application en ligne déployée dans plusieurs milliers de collèges et lycées français.
Elle permet aux élèves de voir leurs emploi du temps, leurs notes et leurs devoirs.
Vous pouvez voir une démo de l'application à l'adresse suivante :

https://demo.index-education.net/pronote/eleve.html?login=true

  • utlisateur : demonstration
  • mot de passe : pronotevs

L'idée consiste donc à remonter ces informations (emploi du temps, note, devoirs, absence...) dans HA pour créer des automatisations comme :

  • Régler l'heure de son réveil avec l'heure de début des cours du lendemain
  • Envoyer une notification (mobile, sms ou autre) si l'élève a une nouvelle note
  • Envoyer une notification si un cours est annulé (voir décaler l'heure du réveil)
  • Envoyer une notification en cas d'absence

Pré-requis :

  • Connaitre un minimum HomeAssistant
  • Avoir quelques bases en Python
  • Savoir installer un script python sur la VM qui héberge HA

Principe de base :

  • Un script python qui se connecte avec la lib pronotepy à Pronote et récupère les données dans un fichier JSON
  • Plusieurs sensor REST dans la configuration de HA qui se connectent en local au fichier JSON récupéré
  • Des Card Markdown dans Lovelace pour afficher les données

1. Installation de la lib pronotepy

Le script python que j'ai développé dépend d'une librairie python développé en open source : pronotepy (merci à bain3.
C'est cette librairie qui permet par exemple que le script se connecter à Pronote via les ENT (s'ils ont été implémentés et supportés par bain3)

Pour installer cette librairie sur votre système, je vous conseille d'utiliser la commande pip ou pip3.
Commande : pip install pronotepy
Recommandation : il est important de la mettre à jour régulièrement cette librairie.
Commande : pip install --upgrade pronotepy

2. Installation du script python

Je mets donc à disposition un script python pronote.py.
Ce script permet de se connecter à Pronote et récupère toutes les informations dans un JSON.
Ce script utilise un fichier de configuration config.ini qui est initialisé avec le compte de démo de Pronote > reste à l'adapter à vos identifiants en changeant les variables dans la section defaut.
Et si vous avez plusieurs enfants, ajoutez une nouvelle section comme dans le fichier config.ini d'exemple.

Il faut donc installer ce script ainsi que le fichier de configuration dans un dossier (nommé par exemple "python_script") dans le dossier /config de votre HA.
Ce script quand il est lancé génère un fichier JSON déposé dans /config/www/ de votre HA (comme défini via le paramètre output du fichier de config).

3. Exécution du script

Pour lancer le script il faut avoir accès en SSH et se placer dans le dossier créé précédement

cd /usr/share/hassio/homeassistant/python_scripts/

Et lancer le script avec la commande

python3 pronote.py

Et si vous avez créé une section pour un 2eme enfant dans le config.ini, alors :

python3 pronote.py enfant1

Il doit ensuite être lancé de façon régulière - toute les 5 ou 10 minutes - via la crontab par exemple.
Exemple :

*/10 * * * * /usr/bin/python3 /usr/share/hassio/homeassistant/python_scripts/pronote.py > /tmp/pronote.log 2>&1

4. Configuration YAML pour récupérer l'emploi du temps dans un sensor

Je fourni donc un fichier configuration.yaml configuration.yaml à copier à l'intérieur de celui de votre HA.
Attention : N'oubliez pas de mettre la bonne adresse IP interne de votre HA (ne pas laisser 192.168.XX.XX). Et renommer pour changer "demo" avec le nom qu vous voulez (votre enfant).

5. Test des sensors avec le Developper Tools de HA

Tester les sensors qui commencent par "pronote" avec le Developer Tools de Home assistant

devtools

6. Affichage dans les cartes Lovelace

Il suffit de créer un nouvel onglet dans HA et ensuite de copier coller le contenu du fichier lovelace.yaml lovelace.yaml

ça doit donner ça :

Lovelace

7. Notification

Vous trouverez dans le fichier automation.yaml des automatisations qui permettent d'être notifié (notif persistant pour l'exemple) en cas de :

  • cours annulé aujour'hui
  • cours annulé dans du prochain jour de cours
  • Nouvelle note

Lovelace

il vous suffit de créer une automatisation vide et de copier/coller chaque automatisation en mode d'edition yaml

pronote2homeassistant's People

Contributors

dathosim avatar delphiki avatar hervefox avatar pelrol avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

pronote2homeassistant's Issues

login via QR Code ?

Hello.
Je vois que pronotepy a implémenté le login par QR Code.
Possible d'ajouter cela ? Cela simplifierait la vie avec les ENT.

Merci.

configuration via agora6

bonjour,

je profite de cette journée de grèves pour essayer de me faire des alertes en cas d'absence de professeurs ....

par contre je suis un peu perdu dans la configuration !
j'ai bien le compte élève ( en tant que parent je passe par france connect depuis la page https://cas.agora06.fr/ )
du coup j'ai pris l'accès de mon enfant.
il se connecte également sur agora06 puis son pronote est sur ce lien : http://notes.clg-paul-langevin.ac-nice.fr/pronote/eleve.html?identifiant=xxxxx

quelqu'un a réussi à paramétrer avec un accès autre que index-education.net ?

on peut se logger via le QRcode sinon ?

merci de votre aide

PS: en fouillant un peut pronotepy connais bien agora06 , il me reste à le faire prendre en compte dans le python

Note plus disponible

Bonjour, depuis le mois de novembre, je n'arrive plus a recuperer les notes et evaluations?
Tout le reste fonctionne parfaitement. Pour info, je n'ai pas de ENT (faisant partie de l'académie de Bordeaux).

Nouveaux ' truc' dans les données: nom de lecons manquant

Chez mon fils..lecon de Lundi prochain sans Nom... et pronote plante avec erreurs
pic2

Ma solution pour le moment, en attendant que c' est une exception sur le nom

 for lesson in lessons:
                try:
                    jsondata['lessons'].append({
                        'lid': lesson.id,
                        'lessonDateTime': lesson.start.strftime("%Y/%m/%d %H:%M"),
                        'lessonStart': lesson.start.strftime("%H:%M"),
                        'lessonEnd': lesson.end.strftime("%H:%M"),
                        'lessonSubject': lesson.subject.name,
                        'lessonRoom': lesson.classroom,
                        'lessonCanceled': lesson.canceled,
                        'lessonStatus': lesson.status,
                })
                except AttributeError:
                    jsondata['lessons'].append({
                        'lid': lesson.id,
                        'lessonDateTime': lesson.start.strftime("%Y/%m/%d %H:%M"),
                        'lessonStart': lesson.start.strftime("%H:%M"),
                        'lessonEnd': lesson.end.strftime("%H:%M"),
                        'lessonSubject': "ereur_nom",
                        'lessonRoom': lesson.classroom,
                        'lessonCanceled': lesson.canceled,
                        'lessonStatus': lesson.status,
                })    

Circonvernir CAS (

J'ai installé le tout et pour 'demo' ça marche bien....alors pas vraiment un soucis avec votre sollution mais.... j'ai des soucis avec un CAS avant (agora06). Est-ce que vous êtes intéssés de l'intégrer ou est-ce que je doit utiliser une alternative avant (p.e. v0ltis
/Pronote-APIpy

Evaluations dans la dernière mise à jour

Hello @dathosim et bravo pour ce boulot, magnifique !

Ma fille est en évaluations et non en notes.
J'ai vu que tu avais publié une mise à jour du script et j'ai bien les évaluations dans le json.
Par contre quand tu as publié sur le dépôt, tu n'as pas ajouté le rest qui génère le sensor dans configuration.yaml
Sur la carte yaml, c'est bon, c'est prévu ensuite quand le sensor sera généré.

Tu as visiblement terminé le développement puisque on voit une copie d'écran sur le changelog.

Tu peux pousser les derniers fichiers ?
A ta dispo pour tester quoi que ce soit.

Merci, au plaisir

Cron impossible avec hassio

Bonjour, j'ai bien le script qui fonctionne en manuel dans ha os avec l'addon ssh. Comme tout est containérisé le script cron ne semble pas ce lancer et je n'ai pas de remonté de donnés à moins de lancer manuellement le script. De plus en cas de maj de l'addon ou de redémarrage du rpi, les données ne sont pas persistantes et l'installation de python et pronotepy sont supprimés également.
Est-ce qu'une version adaptée à ce type d'installation est possible ?
Merci

Besoin d'aide pour la 1ere étape

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

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.

Question concept: double enrégistrements

Bonjour, avec ta solution et aussi la mienne, je reçoit double lignes de temps en temps.
Example pour aujourd'hui: leçon annulé et re-enregistré dans un autre locale même heure...
J'ai aussi vu d'autre trucs curieux dans grades/ evaluations et j'assume que pour les profs, c'est pas trops evident de gérer pronote de leur part.
Question: est-ce que t'as déjà pensé d'une solution ou de l'accepter car probablement impossible de prevoir?

        {
            "id": "31A1292BDD1744",
            "date_heure": "21/03/2022, 17:00",
            "date": "21/03/2022",
            "heure": "17:00",
            "heure_fin": "18:00",
            "cours": "ENS. MORAL & CIVIQUE",
            "salle": "A102, A003 Peintres info, A003 bis Musiciens info",
            "annulation": false,
            "status": "Changement de salle",
            "background_color": "#FFFF80"
        },
        {
            "id": "31E54ED2DE1799",
            "date_heure": "21/03/2022, 17:00",
            "date": "21/03/2022",
            "heure": "17:00",
            "heure_fin": "18:00",
            "cours": "ENS. MORAL & CIVIQUE",
            "salle": "A102",
            "annulation": true,
            "status": "Cours annul\u00e9",
            "background_color": "#FFFF80"
        }

Colorisations et autre

Bonjour, n'importe quoi je fais, j'ai que des couleurs blanc ou jaunes comme 'background' dans les cards...svd, jaune si les devoirs sont faits. Est-ce que je manque un e parti de l'installation?

Erreur "Padding is incorrect"

Bonsoir,

Lorsque j'exécute la ligne de commande suivante pour tester l'exécution du script :
/usr/local/bin/python3 /config/python_scripts/pronote.py > /config/pronote.log 2>&1

J'ai cette erreur
`Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/pronotepy/pronoteAPI.py", line 261, in aes_decrypt
return Padding.unpad(cipher.decrypt(data), 16)
File "/usr/local/lib/python3.9/site-packages/Crypto/Util/Padding.py", line 92, in unpad
raise ValueError("Padding is incorrect.")
ValueError: Padding is incorrect.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/config/python_scripts/pronote.py", line 18, in
client = pronotepy.Client('https://'+prefix_url+'.index-education.net/pronote/eleve.html?login=true', username, password)
File "/usr/local/lib/python3.9/site-packages/pronotepy/clients.py", line 283, in init
super().init(pronote_url, username, password, ent)
File "/usr/local/lib/python3.9/site-packages/pronotepy/clients.py", line 78, in init
self.logged_in = self._login()
File "/usr/local/lib/python3.9/site-packages/pronotepy/clients.py", line 130, in _login
dec = e.aes_decrypt(bytes.fromhex(challenge))
File "/usr/local/lib/python3.9/site-packages/pronotepy/pronoteAPI.py", line 263, in aes_decrypt
raise CryptoError('Decryption failed while trying to un pad. (probably bad decryption key/iv)')
pronotepy.exceptions.CryptoError: Decryption failed while trying to un pad. (probably bad decryption key/iv)
`
J'ai trouvé le chemin de python en faisant :
which python3

J'ai également importer le module pronotepy avec la commande:
pip install pronotepy

Home Assistant tourne actuellement dans un container Docker dans mon synology.

Erreur avec config 2 enfants

Bonjour, J'ai une erreur en lançant le pronote.py

Traceback (most recent call last):
  File "/usr/share/hassio/homeassistant/python_script/pronote.py", line 273, in <module>
    absences = sorted(absences, key=lambda absence: absence.from_date, reverse=True)
TypeError: 'method' object is not iterable

Dans le config.i,i j'ai mis les infos de connexion de mon premier enfant dans defaut.
Dans la partie enfant 1 j'ai mis les infos de mon second enfant en précisant ent = il_de_france
La partie enfant 2 reste par défaut.

Je lance depuis le repertoire où sont les deux fichiers en root python 3 pronote.py et pronote.py enfant1 mais la même erreur dans les deux cas et les fichiers json ne sont pas créés.
Une idée?

Demande d'ajout ENT77

Bonjour,

Pouvez-vous ajouter ent77 svp.
Merci

  1. Dans le fichier ent.py :

section """Open ENT NG""" :

ent_seine_et_marne = partial(_open_ent_ng, url="https://ent77.seine-et-marne.fr/auth/login")
  1. Dans le fichier init.py :
ent_seine_et_marne,
  1. Dans le fichier pronote.py :
from pronotepy.ent import ent_seine_et_marne

...

elif ent == "ent_seine_et_marne":
        ent = ent_seine_et_marne

Discussion sur l'API

Bonjour @dathosim, ceci n'est pas une issue mais est-ce que je peux vous contacter pour de l'aide avec l'API Pronote de bain3 ?

Erreur de connexion pronote

En testant ce soir la connexion a pronote j'ai une erreur :

$ /usr/bin/python3.7 /home/pirate/Pronote2Homeassistant/pronote.py
[_Communication.initialise] Failed to parse html, retrying...
[_Communication.initialise] Failed to parse html, retrying...
[_Communication.initialise] Failed to parse html, retrying...
Erreur de connexion à Pronote (sans ENT) avec le compte parent - vérifier les paramètres
Traceback (most recent call last):
  File "/home/pirate/Pronote2Homeassistant/pronote.py", line 83, in <module>
    if client.logged_in:
NameError: name 'client' is not defined

J'ai vérifié les identifiants en me connectant directement sur le site.

installer python

Hey,
J'ai essayé de lancé la première ligne de code qui est demandé, mais impossible. Cela me donne `Error: unknown command "pip" for "ha"
Run 'ha --help' for usage.
FATA[0000] Error while executing rootCmd: unknown command "pip" for "ha"

Alors je préviens que je ne connais pas beaucoup Home Assistant. Merci de me guider. De plus je ne peux même pas ssh Home Assistant (ou alors je ne fait pas comme il faut...) Je fais dans cmd windows 10 :
ssh 192.168.1.84 <=== ip de Home Assistant.
Merci de votre aide.

Comment faire l'installation ?

Bonjour
Je ne suis pas très bon
Comment installer sur ha?
Merci de votre aide et pour superbe travail très utile
Mickaël

Pronote pyscript : probleme client

Bonjour, Merci pour cet addons.
J essais de le faire fonctionner sur HomeAssistant OS.
Lorsque je lance le script manuellement j´ai le message d erreur suivant:

[core-ssh ~]$ /usr/bin/python3 /config/python_scripts/pronote.py
Erreur de connexion via l'ENT avec le compte parent - vérifier les paramètres
Traceback (most recent call last):
  File "/config/python_scripts/pronote.py", line 94, in <module>
    if client.logged_in:
NameError: name 'client' is not defined

Avez vous une idée de ce que j´ai pu oublier?

KeyError: 'ListEvaluations'

Bonsoir,

D'abord, merci pour le travail accompli et petite suggestion pour les nouveaux utilisateurs de votre code, pourriez-vous corriger le pronote.py en retirant les () à la ligne 274 => absences = client.current_period.absences (ça évitera de chercher les issues aux nouveaux)

Enfin, voici mon souci :
image

Je ne trouve personne qui en parle, sauriez-vous de quoi il s'agit ?

Bonne fin de nuit

heure de debut de cours non mis a jour

Bonjour.
l'heure de début de cours n'est pas mis a jours si un cours est annulé en début de journée.
je ne reçois pas non plus de notification si un cours est annulé pour le lendemain alors que si c'est une cours qui est annulé le jour même oui.
est ce que cela peu être du à la même cause d'après vous ?

cant connect

Salt,
J'essaie de me connecter au compte pronote de mon fils, j'obtiens une erreur de connexion, j'arrive à me connecter directement sur le site par navigateur.

python3 pronote.py Erreur de connexion à Pronote (sans ENT) avec le compte eleve - vérifier les paramètres Traceback (most recent call last): File "/usr/share/hassio/homeassistant/python_pronote_script/pronote.py", line 83, in <module> if client.logged_in: NameError: name 'client' is not defined

`
[defaut]
#prénom de votre enfant par exemple - ne sert que pour le nom du fichier json - pas d'espace - pas d'accent !!
eleve_id = Sacha
#NOM Prénom de votre enfant - sert quand on se connecte avec un compte parent qui a plusieurs enfants !
eleve_nom_prenom = *** Sacha
#pronote_url = https://xxxxxxxx.index-education.net/pronote/

ou meme http://nimportequelsite.fr/pronote/

pronote_url = https://9720411p.index-education.net/pronote/
#eleve ou parent - si vous utlisez un compte parent ou eleve pour vous connecter
type_compte = eleve
#utlisateur pronote - a remplacer par le nom d'utilisateur pronote de l'élève ou du parent si type_compte=parent
username = s.****

mot de passe pronote - a remplacer par le mot de passe du compte de l'élève ou du parent si type_compte=parent

password = ****
#A initialiser si connexion via ENT - avec le nom technique de l'ENT - exemple : ent=paris_classe_numerique
ent = None

le fichier de destination

output = /usr/share/hassio/homeassistant/www/pronote_eleve.json

[enfant1]
eleve_id= sACHAD
eleve_nom_prenom = *** Sacha
pronote_url = https://9720411p.index-education.net/pronote/
type_compte = eleve
username= ***
password= ***
ent = None
output = /usr/share/hassio/homeassistant/www/pronote_eleve.json
`

note avec couleurs et non chiffre

Bonjour,
les notes de mon fils en 6eme sont avec des couleurs rouge , jaune, vert et vert+
pensez vous qu'il y a une moyen de les récupérer

Erreur récupération des absences

Le script retour l'erreur suivante :
Traceback (most recent call):
File "/config/pyscript/pronote.py", line 277, in
absences = client.current_period.absences()
TypeError: 'list' object is not callable

HACS ?

Hello, très bonne idée cette intégration, est-il prevu une version compatible HACS ?

Intégration sur HA OS via AppDaemon

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 "_"

System Health

version core-2021.12.10
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.9.7
os_name Linux
os_version 5.10.91
arch aarch64
timezone Europe/Paris
Home Assistant Community Store
GitHub API ok
Github API Calls Remaining 4985
Installed Version 1.20.0
Stage running
Available Repositories 1051
Downloaded Repositories 67
Home Assistant Cloud
logged_in true
subscription_expiration 20 février 2022 à 01:00
relayer_connected true
remote_enabled true
remote_connected true
alexa_enabled true
google_enabled true
remote_server eu-central-1-3.ui.nabu.casa
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 7.2
update_channel stable
supervisor_version supervisor-2021.12.2
docker_version 20.10.9
disk_total 56.6 GB
disk_used 26.7 GB
healthy true
supported true
board odroid-n2
supervisor_api ok
version_api ok
installed_addons File editor (5.3.3), Check Home Assistant configuration (3.9.0), InfluxDB (4.3.0), Glances (0.14.2), Samba share (9.5.1), Home Assistant Google Drive Backup (0.105.2), Z-Wave JS to MQTT (0.34.1), Z-Wave JS (0.1.52), Mosquitto broker (6.0.1), Ring-MQTT with Video Streaming (4.9.0), Studio Code Server (4.1.0), Terminal & SSH (9.3.0), Grafana (7.4.1), SQLite Web (3.2.1), Zigbee2mqtt (1.22.2-1), MariaDB (2.4.0), Enedisgateway2mqtt (0.7.7-3), phpMyAdmin (0.7.0), SSH & Web Terminal (10.0.2)
Lovelace
dashboards 3
resources 46
views 13
mode storage
Spotify
api_endpoint_reachable ok

pronote2mqtt

Hello,

J'ai mis ton script dans un docker hier qui se connecte ensuite en MQTT. Il me reste à faire la création des commandes auto (je vais m'appuyer sur ton configuration.yaml et regarder le json complet) Mais là j'ai déjà un docker qui publie le json complet en MQTT. Merci pour le script

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.