J’ai installé la version 0.0.9 et intégré la carte en exemple un peu plus haut:
En revanche, je n’ai que les notes du début de l’année!
Nouvelle version v0.0.10
Notes ordonnées par ordre décroissant
Nouveau fix pour les devoirs
Au top, merci !
Pour info,
il est possible d’avoir
- des notes sur 20
- ou sur une échelle de 1 à 4, où :
- 1 == Maîtrise insuffisante
- 2 == Maîtrise fragile
- 3 == Maîtrise satisfaisante
- 4 == Très bonne maîtrise
Exemple d’une note qui est elle meme une liste de résultat (représenter par 2 pastilles vertes sur l’appli ecole-directe) :
notes:
- date: "2024-03-25"
subject: A-PLA
comment: portrait en relief
grade: ""
out_of: "0"
default_out_of: "0"
grade_out_of: /0
coefficient: "0"
class_average: ""
max: ""
min: ""
is_bonus: null
is_optionnal: null
is_out_of_20: null
id: 10487329
devoir: portrait en relief
codePeriode: A003
codeMatiere: A-PLA
libelleMatiere: ARTS PLASTIQUES
codeSousMatiere: ""
typeDevoir: Travaux Pratiques
enLettre: false
commentaire: ""
uncSujet: ""
uncCorrige: ""
coef: "0"
noteSur: "0"
valeur: ""
nonSignificatif: false
dateSaisie: "2024-03-25"
valeurisee: false
moyenneClasse: ""
minClasse: ""
maxClasse: ""
elementsProgramme:
- descriptif: >-
Représenter le monde environnant ou donner forme à son imaginaire en
explorant divers domaines (dessin, collage, modelage, sculpture,
photographie, vidéo…).
idElemProg: 294
valeur: "4"
cdt: false
idCompetence: 82
idConnaissance: 0
libelleCompetence: Expérimenter, produire, créer
afc: 0
- descriptif: >-
Choisir, organiser et mobiliser des gestes, des outils et des
matériaux en fonction des effets qu’ils produisent.
idElemProg: 293
valeur: "4"
cdt: false
idCompetence: 82
idConnaissance: 0
libelleCompetence: Expérimenter, produire, créer
afc: 0
Pour les notes, je me suis contenté de prendre 2 champs : valeur et noteSur.
Rien ne t’empêche de faire la conversion toi-même.
Pour ton exemple, j’aurai besoin du json et des différentes représentations dans Ecole Directe.
Hello @Giga77,
Bon millésime cette 0.0.10 :
Affichage des notes ok (via carte proposée plus haut) mais KO via carte pronote.
Uniquement les plus récentes en décroissant, mais c’est deja bien.
Les devoirs font leur apparition avec un sensor qui me semble correctement rempli, mais KO via carte pronote et suis bien trop limité pour en fabriquer un
Ca progresse pas mal !
Nouvelle version béta v0.1.0
Vu que ça commence à ressembler à quelque chose, passage en béta
Pour la compatibilité avec les cartes pronotes, j’ai modifié les noms des sensors.
Donc pour cette version, je vous conseille de désinstaller/supprimer l’intégration et d’installer la nouvelle version.
Faite des screenshots pour que je vois à quoi ça ressemble, ou envoyez moi les bugs
Et voilà, la carte adaptée à cette nouvelle version:
type: custom:flex-table-card
title: Note Ecole Directe
strict: true
sort_by:
- date-
columns:
- name: Date
data: grades
modify: |
x.date
id: date
align: left
- name: Notes
align: center
data: grades
modify: >
if ( x.valeur.length === 0 && parseInt(x.noteSur) == 0 )
''
else if ( parseFloat(x.valeur) >= parseFloat(x.moyenneClasse) )
'<div style="color:#139523;">' + x.valeur + ' / ' + x.noteSur + ' </div>'
else if ( parseFloat(x.valeur) <= 8 )
'<div style="color:#E70B0B;">' + x.valeur + ' / ' + x.noteSur + ' </div>'
else if (( parseFloat(x.valeur) + (parseFloat(2))) >=
parseFloat(x.moyenneClasse))
'<div style="color:#6fd442;">' + x.valeur + ' / ' + x.noteSur + ' </div>'
else
'<div style="color:#ff8200;">' + x.valeur + " / " + x.noteSur + ' </div>'
- name: Moyenne
align: center
data: grades
modify: |
x.moyenneClasse
- name: devoir
align: center
data: grades
modify: x.devoir
- name: libelleMatiere
align: center
data: grades
modify: x.libelleMatiere
entities:
include: sensor.ecole_directe_xxxx_yyyy_grades
card_mod:
style: |
tbody tr:hover {
background-color: coral !important;
}
css:
table+: 'border-collapse: collapse; padding: 1px;'
th+: 'border: 1px solid white; padding: 3px;'
td+: 'border: 1px solid white; padding: 3px;'
Les données sont déjà dans les attributs, mais il faut voir comment les extraire.
Merci,
Si on veut réutiliser le dashboard pronote ( Pronote2Homeassistant/lovelace.yaml at main · dathosim/Pronote2Homeassistant · GitHub )
Il faut faire le jeux des 7 differences :
- la partie « devoir » qui était :
<div>Devoirs</div>
<table>
<tbody>
{%-for attr in states.sensor.pronote_devoir_demo.attributes.devoir -%}
<tr>
<td>
{%- if state_attr('sensor.pronote_devoir_demo', 'devoir')[loop.index-1]['done'] == true -%}
<mark>
{{state_attr('sensor.pronote_devoir_demo', 'devoir')[loop.index-1]['date']}}
</mark>
{%- else -%}
<span>
{{state_attr('sensor.pronote_devoir_demo', 'devoir')[loop.index-1]['date']}}
</span>
{% endif %}</td>
<td>{{state_attr('sensor.pronote_devoir_demo', 'devoir')[loop.index-1]['title']}}</td>
<td>{{state_attr('sensor.pronote_devoir_demo', 'devoir')[loop.index-1]['description']}}</td>
</tr>
{% endfor %}
</tbody>
</table>
devient
<div>Devoirs</div>
<table>
<tbody>
{%-for attr in states.sensor.ecole_directe_prenom_nom_homework.attributes.homework -%}
<tr>
<td>
{%- if state_attr('sensor.ecole_directe_prenom_nom_homework', 'homework')[loop.index-1]['done'] == true -%}
<mark>
{{state_attr('sensor.ecole_directe_prenom_nom_homework', 'homework')[loop.index-1]['date']}}
</mark>
{%- else -%}
<span>
{{state_attr('sensor.ecole_directe_prenom_nom_homework', 'homework')[loop.index-1]['date']}}
</span>
{% endif %}</td>
<td>{{state_attr('sensor.ecole_directe_prenom_nom_homework', 'homework')[loop.index-1]['subject']}}</td>
<td>{{state_attr('sensor.ecole_directe_prenom_nom_homework', 'homework')[loop.index-1]['description']}}</td>
</tr>
{% endfor %}
</tbody>
</table>
- et pour la partie notes :
<div>Notes</div>
<table>
<tbody>
{%-for attr in states.sensor.pronote_note_demo.attributes.note -%}
<tr>
<td>{{state_attr('sensor.pronote_note_demo', 'note')[loop.index-1]['date_courte']}}</td>
<td>{{state_attr('sensor.pronote_note_demo', 'note')[loop.index-1]['cours']}}</td>
<td width="25%">{{state_attr('sensor.pronote_note_demo', 'note')[loop.index-1]['note_sur']}}</td>
<td>(moy:{{state_attr('sensor.pronote_note_demo', 'note')[loop.index-1]['moyenne_classe']}})</td>
</tr>
{% endfor %}
</tbody>
</table>
devient
<div>Notes</div>
<table>
<tbody>
{%-for attr in states.sensor.ecole_directe_prenom_nom_grades.attributes.grades -%}
<tr>
<td>{{state_attr('sensor.ecole_directe_prenom_nom_grades', 'grades')[loop.index-1]['date_courte']}}</td>
<td>{{state_attr('sensor.ecole_directe_prenom_nom_grades', 'grades')[loop.index-1]['cours']}}</td>
<td width="25%">{{state_attr('sensor.ecole_directe_prenom_nom_grades', 'grades')[loop.index-1]['note_sur']}}</td>
<td>(moy:{{state_attr('sensor.ecole_directe_prenom_nom_grades', 'grades')[loop.index-1]['moyenne_classe']}})</td>
</tr>
{% endfor %}
</tbody>
</table>
avec ce résultat (j’ai tronqué la hauteur) :
je pense que je préfère l’affichage avec custom:flex-table-card
, …
je me suis basé sur ces cartes pronotes : GitHub - delphiki/lovelace-pronote: Lovelace cards for the Pronote integration
Normalement, il ya juste besoin de configurer la carte sans toucher au code
Effectivement ça semble bien mieux ces « vrais » cartes (j’ai « bêtement » suivi le lien du sujet pronote : Pronote dans HA - les notes, devoirs, absences et emploi du temps des enfants mais celle-ci semble obsolete )
par contre, les 2 cartes type: custom:pronote-homework-card
, type: custom:pronote-grades-card
sont vides (mais sans erreur)
Je sais pas trop comment d’où vient le souci et comment faire pour debugger ces parties-là , …
Dans la console de web delelopper de firefox , j’ai ce message d’erreur en boucle quand je suis sur le dashboard pronote :
13:03:40.804 Uncaught (in promise) TypeError: this.hass.states[e] is undefined
getCardHeader pronote.js:104
render pronote.js:123
update lit-element.ts:160
performUpdate reactive-element.ts:1329
scheduleUpdate reactive-element.ts:1261
_$Ej reactive-element.ts:1233
requestUpdate reactive-element.ts:1208
set reactive-element.ts:726
value hui-view.ts:190
value hui-view.ts:188
performUpdate reactive-element.ts:1329
scheduleUpdate reactive-element.ts:1261
_$Ej reactive-element.ts:1233
requestUpdate reactive-element.ts:1208
set reactive-element.ts:726
value hui-root.ts:512
_$AE reactive-element.ts:1378
performUpdate reactive-element.ts:1343
scheduleUpdate reactive-element.ts:1261
_$Ej reactive-element.ts:1233
requestUpdate reactive-element.ts:1208
set reactive-element.ts:726
j lit-html.ts:1883
_$AI lit-html.ts:1825
v lit-html.ts:1192
g lit-html.ts:1540
_$AI lit-html.ts:1384
z lit-html.ts:2183
update lit-element.ts:165
performUpdate reactive-element.ts:1329
scheduleUpdate reactive-element.ts:1261
_$Ej reactive-element.ts:1233
requestUpdate reactive-element.ts:1208
set reactive-element.ts:726
value partial-panel-resolver.ts:101
value hass-router-page.ts:91
performUpdate reactive-element.ts:1329
scheduleUpdate reactive-element.ts:1261
_$Ej reactive-element.ts:1233
requestUpdate reactive-element.ts:1208
Donc il semble que l’erreur est Uncaught (in promise) TypeError: this.hass.states[e] is undefined
T’as bien désinstaller Ecole directe ?
Sinon tu dois renommer ton capteur avec ce format :
ecole_directe_penom_nom
Le plus simple, ç’est de désinstaller pour être sûr qu’il n’y a plus de capteurs.
@Giga77
dans ton code plus haut, tu as laissé dans le sensor :
sensor.ecole_directe_notesXXXX_YYYY
j’ai mis celui là pour que ca fonctionne :
sensor.ecole_directe_XXXX_YYYY_grades
ç’est corrigé
Merci!
Super initiative
Je vais tester.
Les serveurs api d’ecole directe sont dans les choux ce matin (même pour l’utiliser avec le site web https://www.ecoledirecte.com
sur la page web, j’ai des
Erreur
Votre connexion Internet semble être hors ligne. La mise à jour des données peut ne pas aboutir.
et des
Erreur
Http failure response for https://api.ecoledirecte.com/v3/groupesFlexibles.awp?verbe=get&idEleve=2233&v=4.53.2: 503 OK
idéalement, si c’est possible, on devrait garder les anciennes valeurs/status si le serveur ne répond pas bien , …
Mar 27 10:08:05 pi hass[224514]: 2024-03-27 10:08:05.851 ERROR (MainThread) [homeassistant.config_entries] Error setting up entry Roumano for ecole_directe
Mar 27 10:08:05 pi hass[224514]: Traceback (most recent call last):
Mar 27 10:08:05 pi hass[224514]: File "/opt/homeassistant/lib/python3.12/site-packages/homeassistant/config_entries.py", line 504, in async_setup
Mar 27 10:08:05 pi hass[224514]: result = await component.async_setup_entry(hass, self)
Mar 27 10:08:05 pi hass[224514]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Mar 27 10:08:05 pi hass[224514]: File "/opt/homeassistant/.homeassistant/custom_components/ecole_directe/__init__.py", line 26, in async_setup_entry
Mar 27 10:08:05 pi hass[224514]: await coordinator.async_config_entry_first_refresh()
Mar 27 10:08:05 pi hass[224514]: File "/opt/homeassistant/lib/python3.12/site-packages/homeassistant/helpers/update_coordinator.py", line 283, in async_config_entry_first_refresh
Mar 27 10:08:05 pi hass[224514]: await self._async_refresh(
Mar 27 10:08:05 pi hass[224514]: File "/opt/homeassistant/lib/python3.12/site-packages/homeassistant/helpers/update_coordinator.py", line 460, in _async_refresh
Mar 27 10:08:05 pi hass[224514]: await super()._async_refresh(
Mar 27 10:08:05 pi hass[224514]: File "/opt/homeassistant/lib/python3.12/site-packages/homeassistant/helpers/update_coordinator.py", line 318, in _async_refresh
Mar 27 10:08:05 pi hass[224514]: self.data = await self._async_update_data()
Mar 27 10:08:05 pi hass[224514]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Mar 27 10:08:05 pi hass[224514]: File "/opt/homeassistant/.homeassistant/custom_components/ecole_directe/coordinator.py", line 87, in _async_update_data
Mar 27 10:08:05 pi hass[224514]: homeworks_json = await self.hass.async_add_executor_job(
Mar 27 10:08:05 pi hass[224514]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Mar 27 10:08:05 pi hass[224514]: asyncio.exceptions.CancelledError
Effectivement, t’as raison.
Nouvelle version v0.1.2-beta
Hello,
Juste pour te remercier !
0.1.2 installé.
Devoirs OK
Notes OK
Cartes pronote ok !
on a moyen de se faire un sensor sur nouvelles notes ou truc du genre ?
Hello,
tout est ok chez moi, Notes + devoirs
au top
merci
un sensor ? non
Une notification, oui!
Rajoute cette nouvelle automatisation :
alias: Ecole Directe - notification nouvelle note
description: >-
Notification en cas de nouvelle note sur Ecole Directe
trigger:
- platform: event
event_type: ecole_directe_event
event_data:
type: new_grade
action:
- service: notify.xxxxxxxxxxxx
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 }}
Et dis moi si ça fonctionne, car je ne peux pas la tester moi-même