Bonjour @myfp31,
merci j’ai essayé votre automatisation et j’ai cette erreur quand je la test :
Erreur : Error rendering data template: UndefinedError: 'dict object' has no attribute 'to_state'
Est ce normal ?
Bonjour @myfp31,
merci j’ai essayé votre automatisation et j’ai cette erreur quand je la test :
Erreur : Error rendering data template: UndefinedError: 'dict object' has no attribute 'to_state'
Est ce normal ?
Savez vous si il est possible de cacher les jours déjà passés dans le sensor.ecole_directe_XXX_XXX_timetable_period ?
J’ai exactement la même automatisation (au notify près), cela fonctionne très bien pour moi
Dans le sensor, pas de manière simple sauf a manipuler les infos.
Si tu parle juste de l’affichage, change l’option
dim_ended_lessons: true
J’ai tenté ca mais ca change rien, les jours antérieurs sont juste grisés en fait.
En effet, j’avais mal compris, ce n’est en effet pas prévu de base. Si jamais, tu peux modifier le fichier pronote.js (chez moi dans www/community/lovelace-pronote) remplace ligne 99
opacity: 0.3;
par
display: none;
Et redémarre HA.
Dépose une issue sur le GitHub du projet peut être un dev fera la modif de manière perenne.
Bonjour @Elmago
A priori oui. Lorsque tu lances l’automatisation manuellement, le trigger n’existe pas puisque qu’il n’a pas eu vraiment de modification.
Tu peux le tester en fixant le nombre de notes que tu veux remonter dans la boucle ou attendre une note pour le tester.
Pour ma part j’ai cette erreur:
Error: Error rendering data template: UndefinedError: 'dict object' has no attribute 'event'
L’action est:
action: notify.mobile_app_XXX_iphone
metadata: {}
data:
message: |
{{ trigger.event.data.data.subject }} : {{ trigger.event.data.data.name }}
title: Nouvelle note pour {{ trigger.event.data.child_name }}
@myfp31 Comment fait on cela ? Pour fixer la valeur ?
Cette automatisation fonctionne parfaitement chez moi :
alias: EcoleDirecte - nouvelle note
description: ""
mode: single
triggers:
- event_type: ecole_directe_event
event_data:
type: new_grade
trigger: event
conditions: []
actions:
- metadata: {}
data:
message: >-
{{ trigger.event.data.data.subject }} : {{
trigger.event.data.data.grade_out_of }} ({{
trigger.event.data.data.comment }})
title: Nouvelle note pour {{ trigger.event.data.child_name }}
action: notify.mobile_app_redmi_note_pro_12_5g
Je n’ai pas d’objet event dans l’objet trigger pour ma part:
trigger:
id: '0'
idx: '0'
alias: null
platform: state
entity_id: sensor.ecole_directe_noah_pachet_homework
from_state:
entity_id: sensor.ecole_directe_noah_pachet_homework
state: '3'
attributes:
updated_at: '2024-10-03T14:42:36.294830+00:00'
homework:
- date: '2024-10-04'
subject: ANGLAIS LV1
short_description: >-
Apprendre son rôle du dialogue ( Devon ou John )
pour une Evaluation Orale en interaction.
Apprendre la d
description: >
Apprendre son rôle du dialogue ( Devon ou John )
pour une Evaluation Orale en interaction.
Apprendre la description de Book cover
done: false
background_color: '#FFFFFF'
files: []
interrogation: null
- date: '2024-10-07'
Donc l’erreur que j’ai est logique, ou alors j’analyse mal la reponse de ecole directe?
EDIT: je m’auto repond, j’ai modifié le trigger tel que tu l’indiques pour qu’il y ait l’event, on verra donc si ca marche à la prochaine note. Merci!
Nouvelle release : v0.3.12!
Merci @Tu4n3r pour le fix des fichiers json!
J’ai ajouté 4 nouveaux sensors :
J’ai eu la mauvaise surprise de ne pas recevoir de notification dans l’application officielle lorsque j’ai reçu des messages. Alors j’ai ajouté un nouveau sensor pour la messagerie.
Maintenant je dois me faire une automatisation
Et 3 autres sensors pour les devoirs, un avec les devoirs de la semaine, un autre avec les devoirs de la semaine prochaine et un autre avec les devoirs de la semaine prochaine + 1
Donc il y a 3 semaines de devoirs, et évidemment compatible avec la carte Pronote.
Ainsi cela devrait corriger le soucis lorsqu’il y a trop de devoirs dans le sensor homework.
J’ai ajouté le libellé dans les sensors encouragements/sanctions/abscences/retards.
Super… merci beaucoup pour ta réactivité @Giga77 !!!
Nouvelle release : v0.3.14
Correction d’un bug avec les notes
Simplification des attributs de Messagerie:
Et l’automatisation qui va avec :
alias: EcoleDirecte - message non lu
description: ""
trigger:
- platform: state
entity_id:
- sensor.ecole_directe_messagerie
attribute: non lu
condition: []
action:
- action: notify.notify
data: {}
mode: single
Bonjour,
Tout d’abord merci pour cette integration, je l’ai longtemps attendu et est été ravis de voir a quelel point elle est fonctionnelle
J’ai le soucis suivant avec la carte absence:
Quand je vais dans le senseur d’absence, les infos sont bien remontées pourtant:
Est ce que quelqu’un pourrait me dire si je me plante quelquepart?
Le code de ma carte est le suivant:
type: custom:pronote-absences-card
entity: sensor.ecole_directe_XXX_YYY_absences
display_header: true
max_absences: null
child_name: null
Merci encore pour votre travail !!!
Les cartes Pronotes ne sont pas adaptées pour ces sensors :
Regarde ici :
Merci Giga 77,
J’ai du me planter, je croyais qu’elles etaient compatibles. Je teste cela de suite !
Merci!
Effectivement ca fonctionne BEAUCOUP mieux en utilisant le bon code.
C’est moins « joli » visuellement parlant, mais on a l info
J imagine que pour retard, sanctions et encouragement c est le meme principe, en changeant l’entité?
Merci encore!
Oui, les sensors sont construits avec les même attributs.
Bonjour à Tous…
J’ai enfin réussi à calculé la moyenne pondérée sur chaque matière… mais je trouve cela un peu lourd de devoir recopier ce code autant de fois qu’il y a de matière…
Je ne maîtrise malheureusement pas assez le yaml et sa syntaxe… (et chatgpt non plus )
Y aurait il un moyen de :
Les créer tous à partir d’une boucle en listant les matières ([‹ FRANCAIS ›, ‹ MATHEMATIQUES ›, ‹ APMATHS ›, ‹ PHYSIQUE-CHIMIE ›, ‹ SCIENCES VIE & TERRE ›, ‹ TECHNOLOGIE ›, ‹ HISTOIRE-GEOGRAPHIE ›, ‹ ANGLAIS LV1 ›, ‹ ESPAGNOL LV2 ›, ‹ ED.PHYSIQUE & SPORT. ›, ‹ UNSS ›, ‹ ARTS PLASTIQUES ›, ‹ IDD ›] afin d’éviter de recopier le code 13 fois?
De les placer dans une liste dans un attribut d’un unique sensor « moyennes » du style :
- matiere: FRANCAIS
moyenne_eleve: 12.6
moyenne_classe: 13.2
- matiere: MATHEMATIQUES
moyenne_eleve: 12.6
moyenne_classe: 13.2
, afin ensuite de pouvoir les afficher toutes en tableau (y compris moyenne générale) avec le carte ‹ flex-table-card ›??
Voici ci dessous le code pour les moyennes par matière,
- sensor:
- name: "Moyenne Pondérée Technologie"
state: >
{% set grades = state_attr('sensor.ecole_directe_samuel_balac_grades', 'grades') %}
{% set subject_grades = grades | selectattr('subject', 'equalto', 'TECHNOLOGIE') | list %}
{% if subject_grades | length == 0 %}
-1
{% else %}
{% set total_weight = namespace(value=0, sum_weights=0) %}
{% set total_grade = namespace(value=0) %}
{% for grade in subject_grades %}
{% set weight = float(grade.coefficient.replace(',', '.')) %}
{% set grade_value = float(grade.grade.replace(',', '.')) %}
{% set out_of = float(grade.out_of.replace(',', '.')) %}
{% set grade_value_on_20 = (grade_value / out_of) * 20 %}
{% set total_weight.sum_weights = total_weight.sum_weights + weight %}
{% set total_grade.value = total_grade.value + (grade_value_on_20 * weight) %}
{% endfor %}
{% if total_weight.sum_weights > 0 %}
{{ (total_grade.value / total_weight.sum_weights) | round(2) }}
{% else %}
-1
{% endif %}
{% endif %}
unit_of_measurement: ' / 20'
icon: mdi:calculator
attributes:
subject: "Technologie"
samuel_average: >
{% set grades = state_attr('sensor.ecole_directe_samuel_balac_grades', 'grades') %}
{% set subject_grades = grades | selectattr('subject', 'equalto', 'TECHNOLOGIE') | list %}
{% if subject_grades | length == 0 %}
-1
{% else %}
{% set total_weight = namespace(value=0, sum_weights=0) %}
{% set total_grade = namespace(value=0) %}
{% for grade in subject_grades %}
{% set weight = float(grade.coefficient.replace(',', '.')) %}
{% set grade_value = float(grade.grade.replace(',', '.')) %}
{% set out_of = float(grade.out_of.replace(',', '.')) %}
{% set grade_value_on_20 = (grade_value / out_of) * 20 %}
{% set total_weight.sum_weights = total_weight.sum_weights + weight %}
{% set total_grade.value = total_grade.value + (grade_value_on_20 * weight) %}
{% endfor %}
{% if total_weight.sum_weights > 0 %}
{{ (total_grade.value / total_weight.sum_weights) | round(2) }}
{% else %}
-1
{% endif %}
{% endif %}
class_average: >
{% set grades = state_attr('sensor.ecole_directe_samuel_balac_grades', 'grades') %}
{% set subject_grades = grades | selectattr('subject', 'equalto', 'TECHNOLOGIE') | list %}
{% if subject_grades | length == 0 %}
-1
{% else %}
{% set total_weight = namespace(value=0, sum_weights=0) %}
{% set total_class_average = namespace(value=0) %}
{% for grade in subject_grades %}
{% set weight = float(grade.coefficient.replace(',', '.')) %}
{% set class_avg = float(grade.class_average.replace(',', '.')) %}
{% set out_of = float(grade.out_of.replace(',', '.')) %}
{% set class_avg_on_20 = (class_avg / out_of) * 20 %}
{% set total_weight.sum_weights = total_weight.sum_weights + weight %}
{% set total_class_average.value = total_class_average.value + (class_avg_on_20 * weight) %}
{% endfor %}
{% if total_weight.sum_weights > 0 %}
{{ (total_class_average.value / total_weight.sum_weights) | round(2) }}
{% else %}
-1
{% endif %}
{% endif %}
```
Voici le code pour la moyenne générale (pas de pondération dans le cas de mon fils) :
``` - sensor:
- name: "Moyenne Détail Samuel Classe"
state: 0 # L'état reste à 0
unit_of_measurement: ' / 20'
icon: mdi:clipboard-list
attributes:
moyennes_details: >
{% set subjects = [
'Anglais',
'Français',
'Mathématiques',
'Espagnol',
'Sport',
'Histoire-Géographie',
'Arts Plastiques',
'IDD',
'Physique-Chimie',
'SVT',
'Technologie',
'UNSS',
'APMaths',
'Moyenne Générale'
] %}
{% set sensors = [
'sensor.moyenne_ponderee_anglais',
'sensor.moyenne_ponderee_francais',
'sensor.moyenne_ponderee_mathematiques',
'sensor.moyenne_ponderee_espagnol',
'sensor.moyenne_ponderee_sport',
'sensor.moyenne_ponderee_histoire_geographie',
'sensor.moyenne_ponderee_arts_plastiques',
'sensor.moyenne_ponderee_idd',
'sensor.moyenne_ponderee_physique_chimie',
'sensor.moyenne_ponderee_svt',
'sensor.moyenne_ponderee_technologie',
'sensor.moyenne_ponderee_unss',
'sensor.moyenne_ponderee_apmaths',
'sensor.moyenne_generale_samuel'
] %}
{% set result = [] %}
{% set invalid_subjects = [] %}
{% for i in range(subjects | length) %}
{% set sensor = sensors[i] %}
{% set samuel_average = state_attr(sensor, 'samuel_average') %}
{% set class_average = state_attr(sensor, 'class_average') %}
{% set subject = subjects[i] %}
{# Affichage des valeurs pour débogage #}
{{ 'DEBUG: ' ~ subject ~ ' - Samuel: ' ~ samuel_average ~ ' - Classe: ' ~ class_average }}
{# Vérification pour les notes valides #}
{% if samuel_average != -1 and class_average != -1 and
samuel_average != 'unavailable' and samuel_average != 'unknown' and
class_average != 'unavailable' and class_average != 'unknown' %}
{% set result = result + [subject ~ ': Samuel: ' ~ samuel_average ~ ', Classe: ' ~ class_average] %}
{% else %}
{% set invalid_subjects = invalid_subjects + [subject] %}
{{ subject ~ ' n\'est pas valide.' }} {# Afficher ce qui n'est pas valide #}
{% endif %}
{% endfor %}
{# Ajout de la moyenne générale dans le résultat #}
{% set moyenne_generale = state_attr('sensor.moyenne_generale_samuel', 'samuel_average') %}
{% set moyenne_classe = state_attr('sensor.moyenne_generale_samuel', 'class_average') %}
{% if moyenne_generale != -1 and moyenne_classe != -1 and
moyenne_generale != 'unavailable' and moyenne_generale != 'unknown' and
moyenne_classe != 'unavailable' and moyenne_classe != 'unknown' %}
{% set result = result + ['Moyenne Générale: Samuel: ' ~ moyenne_generale ~ ', Classe: ' ~ moyenne_classe] %}
{% endif %}
{# Sortie des résultats #}
{% if result | length > 0 %}
{{ result | join('\n') }}
{% else %}
Aucune matière valide.
{% endif %}
Merci par avance pour vos conseils!