Merci pour les explications mais j’avoue que j’ai pas tout compris si tu peux me montrer des captures de ce que tu as fait ça sera plus parlant pour moi
Pour les notifs, je ne reçois plus la note en unavailable mais des fois 2 à 3 fois la note en math, surement du au fait qu’il passe de unavailable à la note de ma fille mais c’est pas grave c’est déjà top
Je sais pourquoi tu recois plusieurs fois la meme note, j’ai le meme probleme.
Si une note tombe, mais que la note est pour le 1/3 par exemple, et qu’on est le 4/3, c’est la dernière remontée au 4/3 qui sera notifiée.
En gros, si tu recois 4 fois la meme note, c’est que tu as des notes incrites a des dates anterieures incrites par les profs aujourd’hui. Bref, je vais arreter les notifs pour le moment .
Merci pour les infos de toute façon je vais pas toucher cette partie déjà content que ça fonctionne
Lors d’une absence ou d’un déplacement de cours, le status est toujours renseigné par les professeurs. Du moins dans l’établissement de ma fille alors que quand un cours est juste déplacé, le capteur annulation n’est pas sur « true » du coup pas de notif.
Voici ce que je te propose:
Dans le configuration.yaml, il faut déclarer les capteur status:
sensor:
- platform: template
pronote_absence_prof_j0_h_0_status:
friendly_name: "Pronote_absence_prof_j0_h_0_status"
icon_template: mdi:school
value_template: "{% if state_attr('sensor.pronote_demo_edt_aujourdhui', 'edt_aujourdhui')[0] is defined %}
{{state_attr('sensor.pronote_demo_edt_aujourdhui', 'edt_aujourdhui')[0]['status']}}
{% else %}
unknown
{% endif %}"
pronote_absence_prof_j0_h_1_status:
friendly_name: "Pronote_absence_prof_j0_h_1_status"
icon_template: mdi:school
value_template: "{% if state_attr('sensor.pronote_demo_edt_aujourdhui', 'edt_aujourdhui')[1] is defined %}
{{state_attr('sensor.pronote_demo_edt_aujourdhui', 'edt_aujourdhui')[1]['status']}}
{% else %}
unknown
{% endif %}"
pronote_absence_prof_j0_h_2_status:
friendly_name: "Pronote_absence_prof_j0_h_2_status"
icon_template: mdi:school
value_template: "{% if state_attr('sensor.pronote_demo_edt_aujourdhui', 'edt_aujourdhui')[2] is defined %}
{{state_attr('sensor.pronote_demo_edt_aujourdhui', 'edt_aujourdhui')[2]['status']}}
{% else %}
unknown
{% endif %}"
pronote_absence_prof_j0_h_3_status:
friendly_name: "Pronote_absence_prof_j0_h_3_status"
icon_template: mdi:school
value_template: "{% if state_attr('sensor.pronote_demo_edt_aujourdhui', 'edt_aujourdhui')[3] is defined %}
{{state_attr('sensor.pronote_demo_edt_aujourdhui', 'edt_aujourdhui')[3]['status']}}
{% else %}
unknown
{% endif %}"
pronote_absence_prof_j0_h_4_status:
friendly_name: "Pronote_absence_prof_j0_h_4_status"
icon_template: mdi:school
value_template: "{% if state_attr('sensor.pronote_demo_edt_aujourdhui', 'edt_aujourdhui')[4] is defined %}
{{state_attr('sensor.pronote_demo_edt_aujourdhui', 'edt_aujourdhui')[4]['status']}}
{% else %}
unknown
{% endif %}"
pronote_absence_prof_j0_h_5_status:
friendly_name: "Pronote_absence_prof_j0_h_5_status"
icon_template: mdi:school
value_template: "{% if state_attr('sensor.pronote_demo_edt_aujourdhui', 'edt_aujourdhui')[5] is defined %}
{{state_attr('sensor.pronote_demo_edt_aujourdhui', 'edt_aujourdhui')[5]['status']}}
{% else %}
unknown
{% endif %}"
pronote_absence_prof_j0_h_6_status:
friendly_name: "Pronote_absence_prof_j0_h_6_status"
icon_template: mdi:school
value_template: "{% if state_attr('sensor.pronote_demo_edt_aujourdhui', 'edt_aujourdhui')[6] is defined %}
{{state_attr('sensor.pronote_demo_edt_aujourdhui', 'edt_aujourdhui')[6]['status']}}
{% else %}
unknown
{% endif %}"
Ensuite l’automation:
alias: Pronote notif cours annulé J0
description: ''
trigger:
- platform: state
entity_id: sensor.pronote_absence_prof_j0_h_0_status
from: unknown
- platform: state
entity_id: sensor.pronote_absence_prof_j0_h_1_status
from: unknown
- platform: state
entity_id: sensor.pronote_absence_prof_j0_h_2_status
from: unknown
- platform: state
entity_id: sensor.pronote_absence_prof_j0_h_3_status
from: unknown
- platform: state
entity_id: sensor.pronote_absence_prof_j0_h_4_status
from: unknown
- platform: state
entity_id: sensor.pronote_absence_prof_j0_h_5_status
from: unknown
- platform: state
entity_id: sensor.pronote_absence_prof_j0_h_6_status
from: unknown
condition:
- condition: time
after: '00:01'
before: '23:59'
action:
- variables:
idcours: '{{ trigger.entity_id.split(''_'')[5] }}'
- service: notify.notify
data:
message: ' ⚠Attention⚠, le {{state_attr('sensor.pronote_demo_edt_aujourdhui','edt_aujourdhui')[idcours]['date_heure']}}, {{state_attr('sensor.pronote_demo_edt_aujourdhui','edt_aujourdhui')[idcours]['cours']}}, {{state_attr('sensor.pronote_demo_edt_aujourdhui','edt_aujourdhui')[idcours]['status']}}'
mode: single
Et le résultat:
Tu pourras remarquer le is defined
dans les templates, servent à n’ y mettre une valeur dans le capteur que si elle existe sinon le {% else %} unknown
s’occupera de mettre « unknow » dedans (donc pas de « unavailable »).
Quand le status basculera de « unknow » à ‹ autre chose ›, la notif t’affichera alors ‹ autre chose › (cours annulé ou déplacé )
Pour les notes, en effet s’il y à 2 notes à la fois (chose qui arrive souvent), tu ne reçois que la dernière. Là j’ai creer un input.text
dans lequel j’injecte la valeur de l’avant dernière note ensuite dans mon automation note, quand elle se déclenche(càd qd une ou plusieurs nouvelles notes sont arrivées), je compare la dernière (qui doit se retrouver en 2nde position s’il n’y à eu qu’une note) avec mon input.text
. Si il correspond c’est qu’il n’y à eu qu’une seule note alors je notify la dernière note: « Tu as eu une note 15/20 » et je réinjecte la valeur de l’avant dernière note dans le input.text
, s’il ne correspond pas (la dernière note se retrouve en 3e voire 4e… position) c’est qu’il y en à eu au moins deux et je notify la dernière et l’avant-dernière note: « Tu as eu deux notes 15/20 et 17/20 » et je réinjecte la valeur de l’avant dernière note dans le input.text
.
Evidement ceci ne te notify qu’au max deux notes mais c’est rare qu’il y en ai plus à la fois. (tout dépend aussi de la fréquence de rafraichissement de ton script).
Je suis en test d’une autre manière de pouvoir les notifier sans en oublier une seule. En récupérant le nombre de notes totales depuis le début de l’année dans Pronote, c’est un compteur qui s’incrémente à chaque nouvelle note. Celui ci nous diras combien il y en à eue exactement et les notifier même si Pronote est down pendant un moment, quand il reviendra en ligne, le compteur de notes sera incrémenté de X notes donc je notifierai les X dernières notes.
ouah top de tout m’avoir expliqué, je suis en train de mettre en place les sensors par contre j’ai une question pourquoi tu as 3x le même nom pour ce template sensor qui se répètent : pronote_absence_prof_j0_h_0_status alors que les friendly name sont friendly_name: « Pronote_absence_prof_j0_h_1_status » ou friendly_name: « Pronote_absence_prof_j0_h_2_status » ?
Pardon, tu as tout à fait raison. Tapé un peu vite. C’est corrigé. Merci
c’est moi, merci, je continue, je vais essayer de mettre ça en place ce soir
Par contre pour la partie automation, elles sont basés sur Pronote notif cours annulé J1 donc avec des entités de type : sensor.pronote_absence_prof_j1_h_0_status sauf que dans l’étape du dessus lors de le création des templates on a créé des entités de type : Pronote_absence_prof_j0_h_1_status soit J0, du coup je comprends pas d’ou vient les sensors j1 , on les a pas créé ?
bien vu encore. C’est corrigé. C’est parce que j’ai fait j0 et j1 pour être averti des absences pour le lendemain aussi et me suis un peu mélangé.
Effectivement c’est inspiré du travail de @Dathosim, c’était juste pour t’expliquer la différence entre le capteur absence et status.
Merci et donc du coup je modifie cette partie également « prochainjour » par « aujourd’hui » ?:
message: ' ⚠Attention⚠, le {{state_attr('sensor.pronote_demo_edt_prochainjour','edt_prochainjour')[idcours]['date_heure']}}, {{state_attr('sensor.pronote_demo_edt_prochainjour','edt_prochainjour')[idcours]['cours']}}, {{state_attr('sensor.pronote_demo_edt_prochainjour','edt_prochainjour')[idcours]['status']}}'
mode: single
Évidemment… En même temps, je suis sur mon tel là, pas évident.
Merci !
Edit: corrigé
c’est bon j’ai tout mis en place par contre tous les sensors template que j’ai créé sont dans un état ; Unknown pour les sensors de type :Pronote_absence_prof_j0_h_0_status, Pronote_absence_prof_j0_h_1_status etc…
est-ce que c’est parce qu’il n’y pas de cours annulé aujourd’hui ?
pourtant ma fille n’a pas eu EPS aujourd’hui cours annulé …
S’ils sont sur unknown(d’ailleurs tu peux mettre ce que tu veux. J’ai mis unknown parce que je m’en sert ailleurs pour filtrer) c’est que tu n’as pas de cours annulé ou déplacé dans ton Json. Est-ce que cette absence est bien notifié sur Pronote? Si oui fait moi un screen de ton Json.
Désolé mais quand tu parles de json je suis largué il se trouve ou ce fichier ?
Tu vas dans Installer un module complémentaire puis tu y ajoute File editor par exemple.
Tu le lance en ouvrant l’interface Web puis ouvre le dossier blanc en haut à gauche, une liste s’ouvre, tu va tout en bas dans le dossier www. Dedans tu as le fichier au nom de ton enfant .Json dont je te parle.
désolé j’ai eu un trou, je savais plus ou était stocké mon json, j’ai trouvé les lignes concernés :
{
"id": "31523FD19B80BA",
"date_heure": "07/03/2022, 10:46",
"date": "07/03/2022",
"heure": "10:46",
"heure_fin": "12:39",
"cours": "EPS",
"salle": null,
"annulation": false,
"status": null,
"background_color": "#AD75AE"
},
Tu es allé voir sur Pronote ?
Dans pronote, j’ai le cours affiché il me semble, j’avoue que je ne me connecte jamais dessus
et dans HA :
Donc tout simplement ton cours n’est pas annulé en tout cas pas sur Pronote.
Maintenant essaye de changer manuellement la valeur du statut. De "status": null,
à "status": "cours annulé",
j"ai bien reçu la notif si je modifie le status en « cours annulé »