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

Super merci…

Je teste ça et on verra…

C’est top merci beaucoup !

Bonjour,

Je pense avoir mis le doigt sur un problème. La carte affiche bien les notes si nombre de notes >= max_grades.
Dès que nombre de notes < max_grades, la carte n’affiche plus rien. Il me semble que c’est une régression.

Merci en tout cas pour tout le travail effectué !

Pierre

@BBE @mguyard si vous voulez j’ai presque la même un peut modifier pour le jour même et pour le prochain jour de cour

alias: "Notification: modification emploi du temps nathan aujoud'hui"
description: Pronote notif emploi du temps aujoud'hui
trigger:
  - platform: state
    entity_id:
      - sensor.pronote_XXXX_nathan_timetable_today
    attribute: canceled_lessons_counter
    to: null
condition:
  - condition: template
    value_template: >
      {% set items = state_attr('sensor.pronote_XXXX_nathan_timetable_today',
      'lessons') %}

      {{ true if items | selectattr('canceled', '==', true) | list or items |
      selectattr('canceled', '==', false) | selectattr('status', '!=', none) |
      list else false }}
  - condition: not
    conditions:
      - condition: state
        entity_id: sensor.pronote_XXXX_nathan_timetable_today
        state: "0"
  - condition: state
    entity_id: calendar.vacances_nathan
    for:
      hours: 0
      minutes: 0
      seconds: 0
    state: "off"
action:
  - data:
      title: Pronote
      message: >-
        {% set items =
        state_attr('sensor.pronote_XXXX_nathan_timetable_today','lessons') %}
        {% if items | length > 0 %}
          {% for item in items %}
            {% if item.canceled == True %}
              {{ item.lesson }} : {{ item.status }}, aujourd'hui de {{ item.start_time }} à {{ item.end_time }}
            {% endif %}
            {% if item.canceled == false and item.status != None %}
              {{ item.lesson }} : {{ item.status }} le {{ as_timestamp(item.start_at) | int | timestamp_custom('%d/%m/%Y', true) }} de {{ item.start_time }} à {{ item.end_time }}/n
            {% endif %}      
          {% endfor %}
        {% else %}
          Aucun cours programmé pour aujourd'hui.
        {% endif %}
    enabled: true
    action: notify.telegram
mode: single

alias: "Notification: modification emploi du temps nathan du prochain jour"
description: Pronote notif emploi du temps du prochain jour
trigger:
  - platform: state
    entity_id:
      - sensor.pronote_XXXX_nathan_timetable_next_day
    attribute: canceled_lessons_counter
    to: null
condition:
  - condition: template
    value_template: >
      {% set items =
      state_attr('sensor.pronote_XXXX_nathan_timetable_next_day', 'lessons')
      %}

      {{ true if items | selectattr('canceled', '==', true) | list or items |
      selectattr('canceled', '==', false) | selectattr('status', '!=', none) |
      list else false }}
  - condition: not
    conditions:
      - condition: state
        entity_id: sensor.pronote_XXXX_nathan_timetable_next_day
        state: "0"
  - condition: state
    entity_id: calendar.vacances_nathan
    for:
      hours: 0
      minutes: 0
      seconds: 0
    state: "off"
action:
  - data_template:
      title: Pronote
      message: >-
        {% set items =
        state_attr('sensor.pronote_XXXX_nathan_timetable_next_day','lessons')
        %} {% if items %}
          {% for item in items %}
            {{ item.lesson }} : {{ item.status }} le {{ as_timestamp(item.start_at) | int | timestamp_custom('%d/%m/%Y', true) }} de {{ item.start_time }} à {{ item.end_time }}
          {% endfor %}
        {% else %}
          Aucun cours programmé pour le prochain jour.
        {% endif %}
    enabled: true
    action: notify.telegram
mode: single
1 « J'aime »

J’etais en train de modifier pour faire la même chose :wink:

Juste une question sur le trigger, vous n’avez pas un déclenchement intempestif à minuit lorsque le sensor saute d’un jour à l’autre?

Effectivement je viens de vérifier j’avais pas fait attention , je vais laisser comme sa du coup sa permet de faire un rappel pour les poisson rouge :rofl:

1 « J'aime »

Non j’ai pas un déclenchement tous les jours au moment du refresh. Il faut que la valeur de l’attribut « Canceled lessons counter » change pour que ca se déclenche.
Les cas où ca se déclenche c’est pour moi quand ca passe d’une valeur X et au moment du refresh repasse à 0.
Et dans ce cas, la condition fait qu’aucune notification est envoyée. Mais elle se déclenche quand même mais c’est pas grave

1 « J'aime »

Hello tout le monde,

J’ai remis Pronote pour la rentrée, par contre je viens de voir que les logs m’affichent cette erreur :

Error while processing template: Template<template=(<div>Absences de Maëlys</div><table> {% set items = [[abscences_attributes]] %} {% for i in range(0, items | count, 1) %} <tr> {%- if items[i].justified == True -%} <td> <mark> {{ items[i].from.strftime("%d-%m") }}</mark></td> {% else %} <td> <span>{{ items[i].from.strftime("%d-%m") }}</span></td> {%- endif -%} <td>{{ items[i].hours }}</td> <td>{{ items[i].reason }}</td> {% endfor %}) renders=54>
Error while processing template: Template<template=(<div>Absences de Maëlys</div><table> {% set items = [[abscences_attributes]] %} {% for i in range(0, items | count, 1) %} <tr> {%- if items[i].justified == True -%} <td> <mark> {{ items[i].from.strftime("%d-%m") }}</mark></td> {% else %} <td> <span>{{ items[i].from.strftime("%d-%m") }}</span></td> {%- endif -%} <td>{{ items[i].hours }}</td> <td>{{ items[i].reason }}</td> {% endfor %}) renders=58>
Error while processing template: Template<template=(<div>Absences de Maëlys</div><table> {% set items = [[abscences_attributes]] %} {% for i in range(0, items | count, 1) %} <tr> {%- if items[i].justified == True -%} <td> <mark> {{ items[i].from.strftime("%d-%m") }}</mark></td> {% else %} <td> <span>{{ items[i].from.strftime("%d-%m") }}</span></td> {%- endif -%} <td>{{ items[i].hours }}</td> <td>{{ items[i].reason }}</td> {% endfor %}) renders=62>
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 619, in async_render
    render_result = _render_with_context(self.template, compiled, **kwargs)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 2654, in _render_with_context
    return template.render(**kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/jinja2/environment.py", line 1304, in render
    self.environment.handle_exception()
  File "/usr/local/lib/python3.12/site-packages/jinja2/environment.py", line 939, in handle_exception
    raise rewrite_traceback_stack(source=source)
  File "<template>", line 1, in top-level template code
jinja2.exceptions.UndefinedError: 'list object' has no attribute 'justified'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 731, in async_render_to_info
    render_info._result = self.async_render(  # noqa: SLF001
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 621, in async_render
    raise TemplateError(err) from err
homeassistant.exceptions.TemplateError: UndefinedError: 'list object' has no attribute 'justified'

Vous savez à quoi cela peut être dû ?

Merci pour votre aide.

Petit test en cours avec un card custom :

Ligne courbé:

Ligne droite :

Reste à rajouter le graph pour avoir une représentation de l’élève par rapport à la moyenne de la classe

7 « J'aime »

Hello
Je me demandais s’il était possible de cacher les jours qui sont passés dans custom:pronote-timetable-card pour n’avoir que le jour actuel et les prochains jours?
Griser c’est bien mais regarder vers le futur ca serait beaucoup mieux :grin:
J’ai regardé dans les options ou l’entité je ne vois pas de « period » pour les jours prochains

Merci

Perso chez moi avec cette config : (next_day) j’ai pas le jour J

type: custom:pronote-timetable-card
entity: sensor.pronote_xxxxx_timetable_next_day
display_header: true
display_lunch_break: true
display_classroom: true
display_teacher: true
display_day_hours: true
dim_ended_lessons: true
max_days: 7
current_week_only: true

J’ai l’affichage de card suivant : (screenshot fais à l’instant).

idem si quelqu’un sais comment faire pour cacher le jour une fois les heure de cours terminé, je suis preneur

N’oublions pas de dire que @herveaurel a mis ses cartes à disposition sur github.
Jetez un oeil sur herveaurel/HomeAssistant: Mad-Geek : My Custom Dashboard (github.com)

1 « J'aime »

Merci pour @herveaurel qui a fait et fait un taf de fou pour lui et la communauté.
On ne le remerciera jamais assez de tout son partage. :clap:

3 « J'aime »

Superbe intégration, merci au devs.

J’ai un petit soucis en voulant récupérer la liste des events du calendar, lorsque je teste avec dev tools l’action get_events sur le calendrier généré par Pronote, j’ai l’impression que les dates de début, fin et duration ne sont pas prises en compte.

Suis je le seul a avoir ce comportement ?

Mon but est de récupérer le dernier évent de la journée pour m’envoyer une notification sur l’heure de fin des cours.

Bonjour,

J’essaye tant bien que mal de me connecter au Pronote de mon fils sans succès.

J’ai réussi les années précédentes, avec beaucoup de mal… mais cette année impossible.

J’ai essayé aussi bien avec et sans ENT. J’ai testé la connexion sur les sites Pronote et ent_hdf avec les identifiants respectifs, ça fonctionne.

Par contre, dans la configuration de l’intégration, j’ai systématiquement un message qui me dit :
Erreur d'authentification

Dans les journaux j’ai ça :

Cette erreur provient d'une intégration personnalisée

Enregistreur: custom_components.pronote.pronote_helper
Source: custom_components/pronote/pronote_helper.py:37
intégration: Pronote (documentation, problèmes)
S'est produit pour la première fois: 14:14:27 (7 occurrences)
Dernier enregistrement: 14:52:44

'ressource'
Fail to connect with Open NG https://enthdf.fr/auth/login : probably wrong login information

Que je me connecte avec ou sans ENT.

J’ai essayé de désinstaller l’intégration, de redémarrer HA, réinstaller, redémarré et de refaire un test, idem.

Je pense avoir essayé toutes les combonaisons !

Auriez-vous une idée ? Merci d’avance !

As tu essayé la technique via QR code.

J’étais dans ton cas et cette année il n’y a que ça qui a marché.

Oui, pareil, ça ne passe pas. Je l’avais pourtant déjà fait par le passé avec succès (pour un autre établissement).

J’ai des soucis de connexion avec la version 1.14.4
Downgrade en 1.14.3 pour voir si ça fonctionne

Je viens de tester, pareil…

Hello,

J’ai l’impression qu’il y a un bug avec les évaluations : ma fille a 17 éval en tout. Le compteur sensor.pronote_xxx_yyy_evaluations affiche bien 17 évaluations. Mais dans les attributs, il n’y en a que 14…
Avez-vous une explication ? (j’ai 2 filles, même cas de figure pour les 2)

Merci pour vos retours et bonne journée à tous