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

Waouh, super impressionnant ! Bravo. Juste quand je l’applique chez moi, j’ai un petit bug sur la moyenne en math qui n’apparait pas en rouge alors qu’elle est inférieure à la moyenne de classe.

Je confirme ce que te dis @vingerha : que ce soit par QR code ou en obtenant un login « direct » par la méthode donnée par @Cedrix ici: [BETA] Intégration Pronote - #123 par Cedrix
L’intégration Pronote fonctionne très bien, y compris dans les Hauts-de-Seine :slight_smile:
L’« issue » GitHub ne concerne que la connexion via le CAS, qui est inutile en réalité…

Petite nouveauté, en test via la version 0.11.0 : les events lors de nouvelle note, retard ou absence.

Quand il y a une nouvelle note par exemple, vous aurez un event de ce type :

Les data renvoyées sont du format :

child_name: NOM Prénom
child_slug: nom_prenom
type: new_grade # ou new_delay ou new_absence
data:
  # ici on retrouve la donnée concernée

Avec ça vous pourrez déclencher des notif, par exemple :

alias: Pronote > notif nouvelle note
description: ""
trigger:
  - platform: event
    event_type: pronote_event
    event_data:
      type: new_grade
action:
  - service: notify.VOTRE_DEVICE
    data:
      message: >-
        {{ trigger.event.data.data.subject }} : {{
        trigger.event.data.data.grade_out_of }}
      title: Nouvelle note pour {{ trigger.event.data.child_name }}
4 « J'aime »

Et oui, promis, je ferai bientôt une documentation plus détaillée des sensors, events, etc.

3 « J'aime »

Bonjour
J’ai installé l’intégration hier, super boulot, bravo !
Je rencontre par contre un problème sur un cours qui a un statut annulé dans homeassistant alors qu’il est bien maintenu sur pronote. Quelqu’un a déjà rencontré ce cas ?


image

Hello,
Est-ce que tu peux montrer la totalité des cours de la journée stp ?
Parfois j’ai par exemple :

  • un cours de maths annulé
  • un cours de maths mis à la même heure
    Du coup dans pronote, c’est transparent, ça n’affiche pas le cours annulé, alors que l’API renvoie bien le cours annulé + le cours qui remplace.
1 « J'aime »

Néanmoins, @radar a un soucis incomprehensible dans hds …on attend pronotepy

1 « J'aime »

Hello
Pas grand chose de plus sur cette journée :

Je parlais de ce que tu as dans le sensor :slight_smile:

Ah merde, désolé

Voila le contenu du sensor :

updated_at: 2023-10-18T10:02:19.601554
lessons: 
- start_at: '2023-10-18T08:00:00'
  end_at: '2023-10-18T08:50:00'
  start_time: '08:00'
  end_time: '08:50'
  lesson: MATHEMATIQUES
  classroom: B12
  canceled: false
  status: null
  background_color: '#195A46'
  classrooms:
    - B12
  outing: false
  memo: null
  group_name: null
  group_names: []
  exempted: false
  virtual_classrooms: []
  num: 318
  detention: false
  test: false
- start_at: '2023-10-18T08:50:00'
  end_at: '2023-10-18T09:40:00'
  start_time: '08:50'
  end_time: '09:40'
  lesson: SOUTIEN OU APPROFON.
  classroom: B12
  canceled: false
  status: null
  background_color: '#FFFFFF'
  classrooms:
    - B12
  outing: false
  memo: null
  group_name: '[6G APPRO MATHS]'
  group_names:
    - '[6G APPRO MATHS]'
  exempted: false
  virtual_classrooms: []
  num: 888
  detention: false
  test: false
- start_at: '2023-10-18T10:00:00'
  end_at: '2023-10-18T10:50:00'
  start_time: '10:00'
  end_time: '10:50'
  lesson: EDUCATION MUSICALE
  classroom: B15
  canceled: false
  status: null
  background_color: '#C5B074'
  classrooms:
    - B15
  outing: false
  memo: null
  group_name: null
  group_names: []
  exempted: false
  virtual_classrooms: []
  num: 846
  detention: false
  test: false
- start_at: '2023-10-18T10:50:00'
  end_at: '2023-10-18T11:40:00'
  start_time: '10:50'
  end_time: '11:40'
  lesson: ANGLAIS LV1
  classroom: B14
  canceled: false
  status: null
  background_color: '#CE6DA6'
  classrooms:
    - B14
  outing: false
  memo: null
  group_name: null
  group_names: []
  exempted: false
  virtual_classrooms: []
  num: 441
  detention: false
  test: false
- start_at: '2023-10-19T08:00:00'
  end_at: '2023-10-19T08:50:00'
  start_time: '08:00'
  end_time: '08:50'
  lesson: FRANCAIS
  classroom: B05
  canceled: false
  status: null
  background_color: '#E73A1F'
  classrooms:
    - B05
  outing: false
  memo: null
  group_name: null
  group_names: []
  exempted: false
  virtual_classrooms: []
  num: 583
  detention: false
  test: false
- start_at: '2023-10-19T08:50:00'
  end_at: '2023-10-19T09:40:00'
  start_time: '08:50'
  end_time: '09:40'
  lesson: MATHEMATIQUES
  classroom: B12
  canceled: false
  status: null
  background_color: '#195A46'
  classrooms:
    - B12
  outing: false
  memo: null
  group_name: null
  group_names: []
  exempted: false
  virtual_classrooms: []
  num: 317
  detention: false
  test: false
- start_at: '2023-10-19T10:00:00'
  end_at: '2023-10-19T10:50:00'
  start_time: '10:00'
  end_time: '10:50'
  lesson: FRANCAIS
  classroom: B05
  canceled: false
  status: null
  background_color: '#E73A1F'
  classrooms:
    - B05
  outing: false
  memo: null
  group_name: null
  group_names: []
  exempted: false
  virtual_classrooms: []
  num: 585
  detention: false
  test: false
- start_at: '2023-10-19T10:50:00'
  end_at: '2023-10-19T11:40:00'
  start_time: '10:50'
  end_time: '11:40'
  lesson: HISTOIRE-GEOGRAPHIE
  classroom: D1
  canceled: false
  status: null
  background_color: '#41768B'
  classrooms:
    - D1
  outing: false
  memo: null
  group_name: null
  group_names: []
  exempted: false
  virtual_classrooms: []
  num: 191
  detention: false
  test: false
- start_at: '2023-10-19T13:10:00'
  end_at: '2023-10-19T14:00:00'
  start_time: '13:10'
  end_time: '14:00'
  lesson: ARTS PLASTIQUES
  classroom: B17
  canceled: false
  status: null
  background_color: '#5B215F'
  classrooms:
    - B17
  outing: false
  memo: null
  group_name: null
  group_names: []
  exempted: false
  virtual_classrooms: []
  num: 800
  detention: false
  test: false
- start_at: '2023-10-19T14:00:00'
  end_at: '2023-10-19T14:50:00'
  start_time: '14:00'
  end_time: '14:50'
  lesson: ANGLAIS LV1
  classroom: B14
  canceled: false
  status: null
  background_color: '#CE6DA6'
  classrooms:
    - B14
  outing: false
  memo: null
  group_name: null
  group_names: []
  exempted: false
  virtual_classrooms: []
  num: 438
  detention: false
  test: false
- start_at: '2023-10-19T15:05:00'
  end_at: '2023-10-19T15:55:00'
  start_time: '15:05'
  end_time: '15:55'
  lesson: DEVOIRS FAITS
  classroom: B04
  canceled: false
  status: null
  background_color: '#A2C62B'
  classrooms:
    - B04
  outing: false
  memo: null
  group_name: '[6GP.1]'
  group_names:
    - '[6GP.1]'
  exempted: false
  virtual_classrooms: []
  num: 1416
  detention: false
  test: false
- start_at: '2023-10-20T08:00:00'
  end_at: '2023-10-20T08:50:00'
  start_time: '08:00'
  end_time: '08:50'
  lesson: MATHEMATIQUES
  classroom: B12
  canceled: false
  status: null
  background_color: '#195A46'
  classrooms:
    - B12
  outing: false
  memo: null
  group_name: null
  group_names: []
  exempted: false
  virtual_classrooms: []
  num: 316
  detention: false
  test: false
- start_at: '2023-10-20T08:50:00'
  end_at: '2023-10-20T09:40:00'
  start_time: '08:50'
  end_time: '09:40'
  lesson: FRANCAIS
  classroom: B05
  canceled: true
  status: Cours annulé
  background_color: '#E73A1F'
  classrooms:
    - B05
  outing: false
  memo: null
  group_name: null
  group_names: []
  exempted: false
  virtual_classrooms: []
  num: 584
  detention: false
  test: false
- start_at: '2023-10-20T08:50:00'
  end_at: '2023-10-20T09:40:00'
  start_time: '08:50'
  end_time: '09:40'
  lesson: FRANCAIS
  classroom: B05
  canceled: false
  status: null
  background_color: '#E73A1F'
  classrooms:
    - B05
  outing: false
  memo: null
  group_name: null
  group_names: []
  exempted: false
  virtual_classrooms: []
  num: 2047
  detention: false
  test: false
- start_at: '2023-10-20T10:00:00'
  end_at: '2023-10-20T11:40:00'
  start_time: '10:00'
  end_time: '11:40'
  lesson: ED.PHYSIQUE & SPORT.
  classroom: null
  canceled: false
  status: null
  background_color: '#F4DAD7'
  classrooms: []
  outing: false
  memo: null
  group_name: null
  group_names: []
  exempted: false
  virtual_classrooms: []
  num: 13
  detention: false
  test: false

day_start_at: 2023-10-18T08:00:00
day_end_at: null
canceled_lessons_counter: 1

l’intégration donne chaque ligne dans pronote, peut-^tre c’était annulé avant et reactivé après…donc 2 lignes…pire(plusqieurs fois dans notre école) cours > annulé > changé > maintenu …4 lignes

Merci pour la mise à jour et les nouvelles fonctions :+1:

J’ai mis en place la notification pour les nouvelles notes, ça marche bien,
cependant j’essaye de rendre cette notification clickable, pour pouvoir ouvrir le dashboard dédié à Pronote, mais je n’y arrive pas…
Savez vous comment faire pour « naviguer » sur un dashboard à partir du click de la notif ?
J’arrive à lancer une action etc… mais pas ouvrir un dashboard :exploding_head:

Exemple pour shopping list
A bien savoir que sur le iPhones il faut pas toucher longtemps ou après un autre pop-up dit : aller au URL

service: notify.mobile_app_iphonea
data:
  message: "{{states.sensor.shopping_list.state}}"
  title: Boodschappen herinnering
  data:
    actions:
      - action: URI
        title: Open Url
        uri: /shopping-list
1 « J'aime »

merci @vingerha
j’ai réussi en mettant ça :

action:
  - service: notify.mobile
    data:
      message: >-
        {{ trigger.event.data.data.subject }} : {{
        trigger.event.data.data.grade_out_of }}
      title: Nouvelle note pour {{ trigger.event.data.child_name }}
      data:
        clickAction: /pronotes-notes
        url: /pronotes-notes
1 « J'aime »

Cet événement ne peut contenir qu’une seule data?
ex : S’il y a 2 nouvelles notes cela se traduit par 2 événements?
Merci

1 « J'aime »

Oui, c’est ça, chaque nouvel « élément » (note / retard / absence) déclenche un événement, 2 nouvelles notes = 2 événements.

1 « J'aime »

Merci pour cette nouveauté !

Comment je m’y prends, si c’est possible, a partir de l’event, pour avoir des infos plus précises car actuellement j’ai cette notif complète, adaptée a chaque enfant :

  title: Pronote Léane
  message: >-
    {% if states('sensor.pronote_xxx_l_ane_delays') != 'unavailable' %}{% set
    delay = state_attr('sensor.pronote_xxx_l_ane_delays','delays')[0] %}

    {% if delay.justified %}🟢{%else%}😡{%endif%} Retard {% if delay.justified
    %}justifié{%else%}non justifié{%endif%} de Léane

    {{delay.minutes}} minutes de retard le  {{delay.date.strftime('%d/%m/%Y')}}
    à {{delay.date.strftime('%H:%M')}} => {{delay.justification}} /
    {{delay.reasons}}{%endif%} 

Dois-je créé un template qui dirai
« if trigger.event.data.child_name == Léane … elif trigger.event.data.child_name == Tom »
etc…?

quelqu’un pourrait me donner un exemple des données envoyées pour un retard ?
je cherche à faire une carte retards mais pour l’instant j’en ai pas.
A moins que quelqu’un ait déjà une carte de retards ?

je me suis peut être mal exprimé, je veux créer une carte de retard mais je ne sais pas quelles données elles renvoient puisque pour l’instant je n’ai aucun retard de mes enfants.
J’aurais voulu avoir les noms de données pour pouvoir concevoir la carte.

Ou sinon si une aide charitable a déjà créer une carte, je suis preneur du code :grin: