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

Tu n’as que ça comme erreur ?

J’ai un correctif en attente de livraison que je teste chez moi ce moment, c’est possiblement lié.

1 « J'aime »

Il semblerait que oui, j’en ai d’autres, mais liées à mes cards.

J’ai vu ca aussi, réglé par une auto qui reload si « unavailable »… Qui elle, ne fonctionne pas a chaque fois d’ailleurs…

Sur l’accueil du dashboard, je résume les infos importantes.

Un template assez long, qui regroupe les heures de réveils, et de débuts de cours du jour et de demain, la semaine avec ou sans enfant… Et voici ce que ça peut donner :

A savoir :

  • si semaine avec enfants, le paragraphe s’intitule « Réveils », sinon, « Cours ».
  • si tous les capteurs de tout le monde indique « Pas cours » pour aujourd’hui et demain, alors juste en gras « Pas cours » (comme dans l’exemple « Aucun réveil »)
  • si réveils, alors heure réveil + heure de début de cours (avant 14h, c’est l’heure du jour, puis affiche l’heure de début de cours de demain)

etc…

Réveils + heure de cours

Aucun réveil prévu mais des cours :

Semaine sans enfant en garde :

Je pense ajouter des indicateurs comme :bangbang: ou :warning: en cas de retard ou d’absence injustifiés, au bout de la ligne de l’enfant, qui indiquera qu’il faut consulter l’onglet Pronote (en cours de customisation) pour voir le détail.

2 « J'aime »

Par contre concernant les automatisations pour les notifications d’évènements, comme les absences, je doute sur le trigger…

Que mettez vous ?

trigger:
  - platform: state
    entity_id:
      - sensor.pronote_xxx_tom_absences
    attribute: absences
   to: "null"

Ce truc ne fonctionne pas avec ce state « null »… J’essaie sans.

EDIT:

Si je mets ce trigger, je recois les notifs a chaque relaod de l’intégration, ce qui ne va pas non plus !

trigger:
  - platform: state
    entity_id:
      - sensor.pronote_xxx_tom_absences
    attribute: absences

ha oui toi tu rigole pas, à peine installé tu nous sors des truc de fou.
je n’arrive à rien avec les automations dommage ce serait pratique. j’ai trouvé des truc la mais ça me ramene des erreurs
Pronote2Homeassistant/automation.yaml at main · dathosim/Pronote2Homeassistant (github.com)

1 « J'aime »

Je suis en train de bosser sur une petite évol qui devrait faciliter tout ce qui est notif de notes, absences, etc.

Le principe serait de déclencher un event quand il y a un changement (avec les infos qui vont bien dans l’event), comme ça, ça vous simplifiera grandement la mise en place de notifs derrière.

3 « J'aime »

C’est bon ca merci ! Sinon j’ai pigé mon erreur pour le trigger je crois… faut virer les " " autour de null

J’ai ré-essayé que maintenant mais toujours un pb avec ‹ str object › has no attribute ‹ strftime › :hushed:

il faut que tu remplace le
.strftime(« %d-%m)
par
| as_datetime | as_timestamp | timestamp_custom( » %d-%m ")

Un truc que je n’arrive pas à écrire, c’est de recevoir toutes les nouvelles notes et non que la dernière… Il y a quelques minutes je reçois ceci

Mais quand je consulte le relevé, il y a Latin en plus…

Mon template pour la notif :

    {% set evals = state_attr('sensor.pronote_xxx_manon_grades','grades')[0]
    %}  Manon a eu un {{evals.grade_out_of}} en {{evals.subject}} :
    {{evals.comment}}. Moyenne de classe : {{evals.class_average}}

J’ai conscience que [0] appelle le dernier élément, mais je ne trouve pas de soluce pour trier meme par date…
J’ai tenté « si evals.date == a la date du jour ou de la veille », mais l’attribut date ne semble pas etre dans un format date mais en texte brut, alors je n’y arrive pas…

Une idée, ou bien on est bloqué au dernier élement pour la notif ?

En attendant mieux, pour ceux qui comme moi voudrait dans leur notif, au moins les 3 derniers éléments, j’ai écris une solution de dépannage qui va vérifier la date du dernier élément appelé [0] et la comparer a celle de l’élément [1] puis [2]…

Ainsi, au moins, si les 3 éléments ont la même date, ils seront dans la notif…

      Manon a eu : {{"\n"}}
      {%- set evals = state_attr('sensor.pronote_xxx_manon_grades','grades')[0] -%}       
      {{evals.grade_out_of}} en {{evals.subject}} {{"\n"}}         
      {%- set verif = states.sensor.pronote_xxx_manon_grades.attributes.grades[0].date -%}     
      {%- set evals = state_attr('sensor.pronote_xxx_manon_grades','grades')[1] -%}      
      {%- if evals.date == verif -%}      
      {{evals.grade_out_of}} en {{evals.subject}}{{"\n"}}    
      {%- endif -%}          
      {%- set verif = states.sensor.pronote_xxx_manon_grades.attributes.grades[0].date -%}     
      {%- set evals = state_attr('sensor.pronote_xxx_manon_grades','grades')[2] -%}      
      {%- if evals.date == verif -%}      
      {{evals.grade_out_of}} en {{evals.subject}}    
      {% endif %}

Ce qui donne

Vous pouvez dupliquer à volonté évidemment pour vérifier encore plus d’items.

Bon logiquement si une 3e note tombe après, j’aurais les 3 notes dans la prochaine notif tant que la date est la même… Mais je préfère ca que une seule notif avec un seul item…

Avez-vous mieux ?

EDIT :

Bon…

Ca fontionne que si il y a déjà autant d’éléments existants que cités dans le template.
Si l’item [2] n’existe pas, le template est en erreur, donc ne fonctionne pas. :face_with_spiral_eyes:

2 « J'aime »

La question que je me pose aussi, et je vois que tu es dans le cas égalemement @herveaurel, c’est pourquoi reçevons nous les notes de la veille, après minuit ?

Bon…

Ca fontionne que si il y a déjà autant d’éléments existants que cités dans le template.
Si l’item [2] n’existe pas, le template est en erreur, donc ne fonctionne pas. :face_with_spiral_eyes:

Je poursuis mon monologue… :slight_smile:

Un moyen simple, efficace, et normalement fiable, serait d’avoir la dernière note, puis le relevé daté pour jeter un oeil …

    {%- set evals = state_attr('sensor.pronote_xxx_manon_grades','grades')[0] -%}  
    Manon a eu un nouvelle note !{{"\n"}}
    {{evals.grade_out_of}} en {{evals.subject}}{{"\n"}}
    {%- set items = state_attr('sensor.pronote_xxx_manon_grades','grades')-%}     
    {{"\n"}}Relevé :{{"\n"}}
    {%- for i in range(0, items | count, 1) -%}
    {{items[i].grade_out_of}} en {{items[i].subject}} le {{items[i].date}}{{"\n"}}
    {%- endfor %}

Le meme style pour les évals :

{%- set evals = state_attr('sensor.pronote_xxxx_tom_evaluations','evaluations')[0] -%}
{%- set acquisitions = evals.acquisitions[0].level -%}
Tom a eu un nouvelle évaluation !{{"\n"}}
{%- if acquisitions == 'Très bonne maîtrise' -%}💚
{%- elif acquisitions == 'Maîtrise satisfaisante'-%}🟢
{%- elif acquisitions == "Début de maîtrise" -%}🟡
{%- elif acquisitions == 'Maîtrise fragile' -%}🟡
{%- elif acquisitions== 'Maîtrise insuffisante' -%}🟠
{%- else -%}?
{%- endif -%}
{{" "}}{{acquisitions}} en {{evals.subject}}{{"\n"}}  
{%- set items = state_attr('sensor.pronote_xxxx_tom_evaluations','evaluations')-%} 
{{"\n"}}Relevé :{{"\n"}}
{%- for i in range(0, items | count, 1) -%}
{%- set acquisitions = items[i].acquisitions -%}
{% for j in range(0,acquisitions|count,1) %}
{%- if acquisitions[j].level == 'Très bonne maîtrise' -%}💚
{%- elif acquisitions[j].level == 'Maîtrise satisfaisante'-%}🟢
{%- elif acquisitions[j].level == "Début de maîtrise" -%}🟡
{%- elif acquisitions[j].level == 'Maîtrise fragile' -%}🟡
{%- elif acquisitions[j].level== 'Maîtrise insuffisante' -%}🟠
{%- else -%}?
{%- endif -%}{% endfor -%}
{{" "}}{{acquisitions[i].level}} en {{items[i].subject}} le {{items[i].date}}{{"\n"}} 
{% endfor %}
2 « J'aime »

Il doit avoir un bug dans le script car y a que tu n’as que des bonnes notes, moi quand j’essaye j’ai pas les memes résultats :smiley:

4 « J'aime »

Peut tu faire voire ce que tu as?

OPTIMISATION !

A mettre dans Message du service notify…

Pour les notes :

{%- set evals = state_attr('sensor.pronote_xxx_manon_grades','grades')[0] -%}
 Manon a une nouvelle note :{{"\n"}} {{evals.grade_out_of}} en {{evals.subject}}{{"\n"}}{{"\n"}}
{%- set evals = state_attr('sensor.pronote_xxx_manon_grades','grades') -%}
 Relevé :{{"\n"}}
{%- for i in range(0, evals | count, 1) -%}   
 {{evals[i].grade_out_of}} en {{evals[i].subject}}{{"\n"}}
 {%- endfor -%}

Pour les évaluations :


    {%- set evals = state_attr('sensor.pronote_xxx_manon_evaluations','evaluations')[0] -%}
     Manon a une nouvelle évaluation :{{"\n"}}{{evals.acquisitions[0].abbreviation}} en {{evals.subject}}{{"\n"}}{{"\n"}}
    {%- set items = state_attr('sensor.pronote_xxx_manon_evaluations','evaluations')-%}
    {%- for i in range(0, items | count, 1) -%}
     Relevé :{{"\n"}}
    {%- set acquisitions = items[i].acquisitions -%}
    {%- for j in range(0,acquisitions|count, 1) -%}
    {{acquisitions[j].abbreviation}} en {{ items[i].subject }}{{"\n"}}
    {%- endfor -%}{%- endfor -%} 

Bonjour à tous, je débute sur Home Assistant et j’ai beaucoup de mal avec certaines notions.
J’ai installé l’intégration (Merci Delphiki.) et la connexion avec le Pronote de mon fils fonctionne. Malheureusement, je n’arrive pas à créer les cartes pour afficher les données.
J’ai repris le code fourni par Sigalou (Merci également.) sur la page. « Je travaille sur les cartes HA de Pronote », modifié les entités et coller dans une carte de type Markdown. Mais je n’obtiens par le résultat affiché dans les copies d’écran. J’espère être au bon endroit pour poster…

bonsoir tt le monde

j’ai reussi a avoir uniquements les dernieres notes via notifications

que j’en ai 1 ou plusieurs en meme temps ne seras pas un probleme

le rendu donne ceci

il y avait deja une note précedente en maths qui comme on le vois n’as pas été prise en compte pour la notifs (c’est ce que je voulais , car j’avais deja eu la notifs quelques jour avant)

pour gerer la notification je passe par une variables (extension hacs ‹ variables ›)

ci dessous les parties du script de notifcation pour les notes

le message de notification : (value_template de la notification , je passe par la variable (varaibles de script ) ci dessous)

      notification_note_emma: |
        {% set lastindex = states('var.notif_notes_emma')|int %}
        {% set evals = state_attr('sensor.pronote_XXXXemma_grades','grades') %}
        {% set newindex = evals | count %}
        {% for i in range(0, newindex-lastindex) %}
        {% if evals[i].grade_out_of | rregex_replace('/[0-9][0-9]*','') >= '15' %}💙{% elif
        evals[i].grade_out_of | regex_replace('/[0-9][0-9]*','') >= '10' %}🟢{% elif
        evals[i].grade_out_of | regex_replace('/[0-9][0-9]*','')>= '5' %}😩{% elif
        evals[i].grade_out_of | regex_replace('/[0-9][0-9]*','') < '5'  %}😡{% endif %} Emma a eu un {{evals[i].grade_out_of}}  en {{evals[i].subject}}.
        {%- endfor %}

en fait je recupere la valeur de l’ancien nombre de grades (enregistrés lors de ma derniere notification dans la variable var.notif_notes_emma quet je soustrait a la nouvelle valeur de grades pour ne prendre en compte que ce que je n’ai pas notifié :face_with_hand_over_mouth: :face_with_hand_over_mouth:

il faut egalement recuperer la valeur actuelle des grades pour l’enregistrer dans ma variable

newindex_note_emma: |
        {{ state_attr('sensor.pronote_XXXXX_emma_grades','grades')| count }}

puis l’action du script

    then:
      - service: notify.notif_pronote_parents_emma
        data:
          title: Notes Emma
          message: "{{notification_note_emma}}"
      - service: var.set
        data:
          entity_id:
            - var.notif_notes_emma
          value: "{{newindex_note_emma}}"
1 « J'aime »