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

Un template editor, tu la eut ou?

J’ai 3 comptes pronote sur l’intégration, les cartes sont identiques pour les 3.


Bonjour @titof2375

dans la partie outil de dev / modèle

Ha ok je pensé à une intégration.

Vérifiez sur pronote web si il y à bien les devoirs pour les 2 comptes qui donnent une erreur.
De mon côté, les devoirs sont sur l’ent. C’est certainement le même cas pour vous car c’était pour moi la même erreur.

Donnez un peu plus details, cliquez sur l’erreur dans le journal. vous êtes certainement dans le même cas que @albattar .

Je n’ai pas beaucoup plus de détails…

Première installation, j’ai activé les log de debug dans le fichier conf. Je n’ai que ça.

Pas de soucis pour voir les devoirs, absence, planning,ect sur Pronote directement.

J’ai fais la connexion sans le /parents.html

Cliquez sur les erreurs pour plus de détails.

Hello,

Un soucis avec la carte des menus ? Je reçois bien les attribus sur l’entité pourtant mais plus rien ne s’affiche sur la carte

EDIT: voici l’erreur qui apparaît dans « templates »:

UndefinedError: list object has no element 0

slt
je pense que c’est la meme erreur que j’avais , regarde plus haut dans la discution , j’ai mis ma carte cantine modifiée qui justement ne genere pas d’erreur quand un plat est manquant
(tu dois avoir dans tes plats un plat sans accompagnement )

ci dessous une carte emploi du temps dynamique qui met en evidence le cours actuel : (surlignage en bleu de la matiere) (ce n’est pas a l’instant T mais basé sur le dernier raffraichissement de pronote (tous les 1/4 d’heure)
une fois que tous les cours sont passés , l’emploi du temps du jour reste encore 1 heure puis est remplacé par l’emploi du temps du lendemain
pour les personnes intéréssées , voici le lien

Timetable today and tomorow

je suis partir d’une carte de @Sigalou (merci a lui) la mise en forme n’est pas modifiée (sauf peut etre les couleurs du span et mark)

2 « J'aime »

Effectivement c’était bien le cas, merci pour la carte !
En revanche le contenu dépasse des bords, j’ai tenté de modifier les valeurs dans la partie card-mod mais en vain. Une idée ?

je n’ai pas ce pbm , ma vue etant configurée en panneau

Ben effectivement, c’était mon soucis … Merci !

Si pas de panneau on peut penser de grouper par date et le lister vertical au lieu d’horizontal

1 « J'aime »

Pas vraiment plus de détail :

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

Logger: custom_components.pronote.coordinator
Source: custom_components/pronote/coordinator.py:203
Integration: Pronote (documentation, issues)
First occurred: 19:08:26 (1 occurrences)
Last logged: 19:08:26

Unexpected error fetching Robert Dugesclin (via compte parent) data: Unknown error from pronote: 20 | La page a expiré ! (11)
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/pronotepy/clients.py", line 759, in post
    return self.communication.post(function_name, post_data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/pronotepy/pronoteAPI.py", line 181, in post
    raise PronoteAPIError(
pronotepy.exceptions.PronoteAPIError: Unknown error from pronote: 20 | La page a expiré ! (11)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 293, in _async_refresh
    self.data = await self._async_update_data()
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/pronote/coordinator.py", line 221, in _async_update_data
    raise ex
  File "/config/custom_components/pronote/coordinator.py", line 203, in _async_update_data
    homeworks = await self.hass.async_add_executor_job(client.homework, date.today())
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  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 502, in homework
    response = self.post("PageCahierDeTexte", 88, json_data)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/pronotepy/clients.py", line 768, in post
    return self.communication.post(function_name, post_data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/pronotepy/pronoteAPI.py", line 181, in post
    raise PronoteAPIError(
pronotepy.exceptions.PronoteAPIError: Unknown error from pronote: 20 | La page a expiré ! (11)

Page expiré …

Si, les détails sont important pour debug. Peut-être qu’il y a plus, mais vous avez bien un problème avec les « homeworks ».
J’ai dû modifier mon intégration pour qu’elle fonctionne. J’ai rajouté un try : exept: sur les devoirs pour continuer le log s’il y à une erreur.
Si @delphiki passe par là pour l’ajouter.
C’était le même problème pour certains avec les menus.
D’ailleurs, c’est aussi ce qui fesait complétement planter ha en fin d’année scolaire dernière. En mettant un try: exept sur tout les appels de periodes particulières (Devoirs, menus, edt,…) l’intégration ne plantait plus et ne faisait plus planter ha.

            try:
                homework_period = await self.hass.async_add_executor_job(client.homework, date.today(), date.today() + timedelta(days=HOMEWORK_MAX_DAYS))
                self.data['homework_period'] = sorted(
                    homework_period, key=lambda homework: homework.date)
            except:
                homework_period = []

En attendant, vous pouvez vous le faire vous même pour vous dépanner.

1 « J'aime »

oui, mets en plein écran sur une carte en panneau.

1 « J'aime »

C’est déjà ce que j’ai fait dans ma version de dev pour tous les sensors, ils passent en state unavailable s’il y a un souci pour récupérer les infos. Je vais essayer de sortir une version d’ici fin de semaine.

1 « J'aime »

Super. Ça va en dépanner plus d’un. Merci.

Nouveaux trucs pour des scrollbars… j’ai maintenant le ‹ header › fixé.
image

A faire:

  • ajouter section thead et tbody comme ci-dessous
  • ajouter thead/tbody dans le css (completement en bas)
  • virer overflow du CSS " ha-card ha-markdown"

Exemple:

type: markdown
content: >-
  <table> 

  {% set items =
  state_attr('sensor.pronote_parent_fanny_timetable_period','lessons') %}
    <thead><tr>
    <td><h4>Start</td>
    <td><h4>End</td>
    <td><h4>Course</td>
    <td><h4>Room</td>
    </tr></thead>
    <tbody>
  {% for i in range(0, items | count, 1) %}

  {% if i == 0 %}

  <tr><td colspan="5"><b>{{ items[i].start_at.strftime("%A %d") }}</td></tr>

  {% endif %}

  {% if items[i].start_at.strftime("%F") > items[i-1].start_at.strftime("%F")
  %} 

  <tr><td colspan=4><p><b>{{ items[i].start_at.strftime("%A %d") 
  }}</p></td></tr>

  {% endif %}

  <tr>

  {%- if items[i].canceled != True -%}

  <td> <mark>{{ items[i].start_time }}</td>

  <td> <mark>{{ items[i].end_time }}</td></mark>

  {% else %}

  <td><del>{{ items[i].start_time }}</td>

  <td><del>{{ items[i].end_time }}</td>

  {%- endif -%} 

  <td>{{ items[i].lesson }}

  {% if items[i].status != None %}

  <span>{{ items[i].status }}</td> 

  {% endif %}

  <td>{{ items[i].classroom }}</td>

  {% endfor %}
  </tbody>
title: Lesson Period
card_mod:
  style:
    .: |
      ha-card ha-markdown {
                padding:0px
                border-top: 1px groove var(--divider-color);
                height: 300px;
              }
      ha-card ha-markdown.no-header {
        padding:0px
      }
    $: |
      h1.card-header {
        background-color:rgb(100, 100, 100);
          padding: 0px 0px 0px 12px !important;
          color: white !important;
          font-weight: normal;
          font-size: 1.5em !important;
          border-top-left-radius: 5px; 
          border-top-right-radius: 5px; 
          height: 100%;
      }        
    ha-markdown $: |
      h1 {
          font-weight: normal;
          font-size: 24px;
      }
      div {
          background-color:rgb(100, 100, 100);
          padding: 12px 12px;
          color:white;
          font-weight:normal;
          font-size:1.2em;
            border-top-left-radius: 5px; 
            border-top-right-radius: 5px; 
      }
      table{
        border-collapse: collapse;
        font-size: 0.9em;
        font-family: Roboto;
        width: 100%;
        outline: 0px solid #393c3d;
        margin-top: 10px;
      } caption {
          text-align: center;
          font-weight: bold;
          font-size: 1.2em;
      } td {
          padding: 5px 5px 5px 5px;
          text-align: left;
          border-bottom: 0px solid #1c2020;
      }
      tr {
          border-bottom: 0px solid #1c2020;
      }
      tr:last-of-type {
          border-bottom: transparent;
      }
      tr:nth-of-type(even) {
          background-color: rgb(54, 54, 54, 0.3);
      }
      mark {
          background: lightgreen;
          border-color: green;
          border-radius: 10px;
          padding: 5px;
      }
      span {
          background: orange;
          color: #222627;
          border-radius: 5px;
          padding: 5px;
      }
      tr:nth-child(n+2) > td:nth-child(2) {
        text-align: left;
      }
      thead, tbody { display: block; }
      thead {
          margin-top: -20px;
          height: 35px;
          padding: 5px;
      }
      tbody {
          height: 300px;       /* Just for the demo          */
          overflow-y: auto;    /* Trigger vertical scroll    */
          overflow-x: hidden;  /* Hide the horizontal scroll */
      }
1 « J'aime »