[Article] Intégration Pronote : cours, devoirs, notes, etc (archive)

met le logging vers debug et voire les retours

    custom_components.pronote: debug

EDIT: je voix que c’est par ‹ parent ›… jamais testé ça (j’ai même pas une idée que sont mes coordonnees comme parent :slight_smile: )

je vais demander les codes à ma fille pour voir
edit : ajouté, j’attends de voir si quelque chose arrive…

J’ai donc deux comptes depuis hier :
image

@delphiki Rien de plus n’est arrivé (aucune entitée) , j’ai cherché dans les logs d’éventuelles erreurs :

14:54

2023-06-17 14:54:53.145 ERROR (MainThread) [homeassistant.components.sensor] Error while setting up pronote platform for sensor
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 320, in _async_setup_platform
    await asyncio.shield(task)
  File "/config/custom_components/pronote/sensor.py", line 117, in async_setup_entry
    lessons_period = await hass.async_add_executor_job(client.lessons, date.today(), date.today() + timedelta(days=LESSON_MAX_DAYS))
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/pronotepy/clients.py", line 401, in lessons
    l_list = response["donneesSec"]["donnees"]["ListeCours"]
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
KeyError: 'ListeCours'

puis 14:59

2023-06-17 14:59:03.503 INFO (SyncWorker_7) [pronotepy.pronoteAPI] INIT
2023-06-17 14:59:03.504 DEBUG (SyncWorker_7) [pronotepy.ent.generic_func] [ENT https://www.atrium-sud.fr/connexion/login] Logging in with coralie.XXX
2023-06-17 14:59:04.927 INFO (SyncWorker_7) [pronotepy.pronoteAPI] successfully logged in as 04F4B931D8EE
2023-06-17 14:59:05.019 INFO (SyncWorker_7) [pronotepy.pronoteAPI] got onglets data.
2023-06-17 14:59:05.019 INFO (SyncWorker_7) [custom_components.pronote.config_flow] XXX Coralie
2023-06-17 14:59:05.025 INFO (MainThread) [homeassistant.components.sensor] Setting up sensor.pronote
2023-06-17 14:59:05.027 INFO (SyncWorker_9) [pronotepy.pronoteAPI] INIT
2023-06-17 14:59:05.027 DEBUG (SyncWorker_9) [pronotepy.ent.generic_func] [ENT https://www.atrium-sud.fr/connexion/login] Logging in with coralie.XXX
2023-06-17 14:59:06.203 INFO (SyncWorker_9) [pronotepy.pronoteAPI] successfully logged in as 1BB80FE960BB
2023-06-17 14:59:06.299 INFO (SyncWorker_9) [pronotepy.pronoteAPI] got onglets data.
2023-06-17 14:59:06.300 INFO (SyncWorker_9) [custom_components.pronote.sensor] Client name: XXX Coralie
2023-06-17 14:59:06.677 ERROR (MainThread) [homeassistant.components.sensor] Error while setting up pronote platform for sensor
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 320, in _async_setup_platform
    await asyncio.shield(task)
  File "/config/custom_components/pronote/sensor.py", line 117, in async_setup_entry
    lessons_period = await hass.async_add_executor_job(client.lessons, date.today(), date.today() + timedelta(days=LESSON_MAX_DAYS))
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/pronotepy/clients.py", line 401, in lessons
    l_list = response["donneesSec"]["donnees"]["ListeCours"]
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^
KeyError: 'ListeCours'

Finalement que 2 fois depuis hier une erreur.

J’ai peur que ça soit une erreur liée à la lib pronotepy, on doit pouvoir le gérer côté intégration cela dit.
Je ne suis pas chez moi mais j’essaye de voir ça ce soir.

dans const.py essayer de changer

LESSON_MAX_DAYS = 15

vers

LESSON_MAX_DAYS = 2

Coralie a combien de jours de leçons restants dans pronote?

ça sont des devoirs, je cherche le # jours edt

Contenu et ressources pédagogiques ???

c’est bon ça fonctionne, c’était bien ça qui était bloquant
info @delphiki

Je t’ai envoyé la solution, tu peux remettre les jours vers 15 aussi.
PR changé…en attendant publication de @delphiki

1 « J'aime »

Tout est impec, je travaille sur les cartes maintenant, je vais faire un mix de celles de @vingerha et celles de @dathosim

Edit 23:02 c’est ok, un superbe écran pronote avec l’intégration toute neuve. :


Tous les codes sur mon blog.

1 « J'aime »

@delphiki pour ton info, j’ai ajouté quelques sensors-template pour avoir :
image
Les horaires de cours vont me permettre de caler l’heure de levée et l’alarme Alexa.
Voici les codes :

  - sensor:
      - name: Dernière mise à jour de Pronote
        unique_id: sensor.derniere_mise_a_jour_de_pronote
        icon: "mdi:update"
        state: "{{ state_attr('sensor.pronote_xx_coralie','updated_at').strftime('%d-%m-%Y à %H:%M') }}"        
        
  - sensor:
      - name: Début des cours de Coralie - Demain
        unique_id: sensor.debut_des_cours_de_coralie_demain
        icon: "mdi:clock-time-five-outline"
        state: >-            
                {% if state_attr('sensor.pronote_xx_coralie_timetable_tomorrow', 'lessons')[0] is defined %}
                    {{state_attr('sensor.pronote_xx_coralie_timetable_tomorrow', 'lessons')[0]['start_at'].strftime('%H:%M')}}
                {% else %}
                    Pas cours
                {% endif %}                 
  - sensor:
      - name: Début des cours de Coralie - Aujourd'hui
        unique_id: sensor.debut_des_cours_de_coralie_aujourd_hui
        icon: "mdi:clock-time-five-outline"
        state: >-            
                {% if state_attr('sensor.pronote_xx_coralie_timetable_today', 'lessons')[0] is defined %}
                    {{state_attr('sensor.pronote_xx_coralie_timetable_today', 'lessons')[0]['start_at'].strftime('%H:%M')}}
                {% else %}
                    Pas cours
                {% endif %}

Je ne sais pas si tu veux l’intégrer à ton intégration, sinon on fera en template, cela fonctionne facilement.

Il n’y a pas de nécessité pour des sensors, on peut le faire dans les cartes directement en utilisant des template (card-templater peut aider), même pour les automations.

Mais c’est bien pour ajouter ces idées dans la liste des exemples cartes/solutions :slight_smile:

1 « J'aime »

Je veux bien vous mettre le code de mes cartes, mais je suis désolé, ce ne doit pas être super propre.
C’est du bidouillage de débutant en prenant exemple sur les autres… :smiling_face:
Et honnêtement vous vous êtes déjà mieux débrouillé que moi.
A la rigueur si un point particulier vous intéresse ?

lol et tu crois que nous nous avons un diplôme de polytechnique ?? :rofl:

1 « J'aime »

Visiblement on est pas loin les uns des autres, c’est cool et complémentaire.
Je ne sais pas si l’intégration peut aller chercher ce qui manque, par exemple (pris sur pronote) :


On a les absences mais pas les défauts de carnet ou les retards

Non, mais vous avez l’air de savoir ce que vous faites, moi je copie/colle le code des autres et je vois ce que ça fait :rofl:

1 « J'aime »

Oui, mais ne sert à rien :rofl:

J’ai pas encore utilisé les trucs de VS. Pronotepy l’offre mais jamais testé comment ça marche. Il y a un accès spécififque pareil comme eleve ou parent, sais pas si besoin d’autres coordonnees… a voir (moi:
pas de temps cette semaine)

Clients - pronotepy documentation

EDIT: oui…des comptes specials sont nécessaire

ha ? c’est nouveau cette API !!!

Pas du tout, c’est la base ou avec sont crées les taffs de Dathosim, Delphiki et la mienne

ha ok, j’avais pas vu.
Et on peut aller chercher d’autres infos du coup ?