Intégration Ecole Directe (version 0.2.5)

Oui ce code est présent dans le fichier de config

Nouvelle version v0.0.5-alpha
Merci @Nardo et @roumano

Allez hop nouvelle version alpha 0.0.6…
ça devrait corriger les notes.

Mais pour le cahier de texte, je séche… :exploding_head: :face_with_symbols_over_mouth:
C’est compliqué de développer en aveugle… :crazy_face: :stuck_out_tongue_closed_eyes: :face_with_peeking_eye: :ghost:

version alpha 0.0.7
Je viens de voir que l’url pour le cahier de texte s’écrit:
https://api.ecoledirecte.com/v3/Eleves/id_eleve/cahierdetexte.awp?verbe=get
avec un E majuscule à Eleves… :sob:

Si ça ne marche pas, je change mes enfants d’école! :joy: :joy: :joy:

Hello,

Et bien deja grand merci pour l’initiative, je jalousai les users pronote !
install et test de la v0.07.

ok pour les notes
ko pour les devoirs

Prepare tes enfants au changement d’ecole :slight_smile:
Mauvaise blague a part, voici un extrait de log qui permet d’esperer issue positive ; ca cause.

* Error getting devoirs from ecole directe: Error with URL:[https://api.ecoledirecte.com/v3/Eleves/6634/cahierdetexte.awp?verbe=get&v=4.53.0]: b'{"code":200, "token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "host":"HTTP12", "data":{"2024-03-20":[{"matiere":"ITALIEN LV3", "codeMatiere":"ITA3", "aFaire":true, "idDevoir":16340, "documentsAFaire":false, "donneLe":"2024-03-15", "effectue":false, "interrogation":false, "rendreEnLigne":false}], "2024-03-21":[{"matiere":"ACCOMPAGNEMT. PERSO.", "codeMatiere":"ACCPE", "aFaire":true, "idDevoir":16269, "documentsAFaire":false, "donneLe":"2024-03-15", "effectue":false, "interrogation":false, "rendreEnLigne":false},{"matiere":"MATHEMATIQUES", "codeMatiere":"MATHS", "aFaire":true, "idDevoir":16555, "documentsAFaire":false, "donneLe":"2024-03-18", "effectue":false, "interrogation":false, "rendreEnLigne":false}], "2024-03-22":[{"matiere":"PHYSIQUE-CHIMIE", "codeMatiere":"PH-CH", "aFaire":true, "idDevoir":16447, "documentsAFaire":false, "donneLe":"2024-03-17", "effectue":false, "interrogation":false, "rendreEnLigne":false}], "2024-03-25":[{"matiere":"SCIENCES VIE & TERRE", "codeMatiere":"SVT", "aFaire":true, "idDevoir":15740, "documentsAFaire":true, "donneLe":"2024-03-11", "effectue":false, "interrogation":false, "rendreEnLigne":false},{"matiere":"PHYSIQUE-CHIMIE", "codeMatiere":"PH-CH", "aFaire":true, "idDevoir":16097, "documentsAFaire":true, "donneLe":"2024-03-13", "effectue":false, "interrogation":false, "rendreEnLigne":false},{"matiere":"ANGLAIS LV1", "codeMatiere":"AGL1", "aFaire":true, "idDevoir":15442, "documentsAFaire":false, "donneLe":"2024-03-07", "effectue":false, "interrogation":false, "rendreEnLigne":false},{"matiere":"PHYSIQUE-CHIMIE", "codeMatiere":"PH-CH", "aFaire":true, "idDevoir":16093, "documentsAFaire":true, "donneLe":"2024-03-13", "effectue":false, "interrogation":false, "rendreEnLigne":false}], "2024-03-29":[{"matiere":"ESPAGNOL LV2", "codeMatiere":"ESP2", "aFaire":true, "idDevoir":16553, "documentsAFaire":false, "donneLe":"2024-03-18", "effectue":false, "interrogation":true, "rendreEnLigne":false},{"matiere":"PHYSIQUE-CHIMIE", "codeMatiere":"PH-CH", "aFaire":true, "idDevoir":16089, "documentsAFaire":true, "donneLe":"2024-03-13", "effectue":false, "interrogation":false, "rendreEnLigne":false}], "2024-04-02":[{"matiere":"ESPAGNOL LV2", "codeMatiere":"ESP2", "aFaire":true, "idDevoir":16643, "documentsAFaire":false, "donneLe":"2024-03-19", "effectue":false, "interrogation":true, "rendreEnLigne":false}], "2024-04-03":[{"matiere":"ITALIEN LV3", "codeMatiere":"ITA3", "aFaire":true, "idDevoir":16328, "documentsAFaire":false, "donneLe":"2024-03-15", "effectue":false, "interrogation":false, "rendreEnLigne":false}], "2024-04-04":[{"matiere":"ESPAGNOL LV2", "codeMatiere":"ESP2", "aFaire":true, "idDevoir":16550, "documentsAFaire":false, "donneLe":"2024-03-18", "effectue":false, "interrogation":true, "rendreEnLigne":false}], "2024-04-05":[{"matiere":"PHYSIQUE-CHIMIE", "codeMatiere":"PH-CH", "aFaire":true, "idDevoir":16096, "documentsAFaire":true, "donneLe":"2024-03-13", "effectue":false, "interrogation":false, "rendreEnLigne":false}], "2024-04-22":[{"matiere":"ANGLAIS LV1", "codeMatiere":"AGL1", "aFaire":true, "idDevoir":15443, "documentsAFaire":false, "donneLe":"2024-03-07", "effectue":false, "interrogation":false, "rendreEnLigne":false}]}}'

Et encore merci pour ce boulot !

1 « J'aime »

Belli alors j’avais pas mis à jour depuis la version 3 de l’alpha il me semble !
Chose faite et pour les devoir je n’en ai pas ouf j’aurais pas à bosser :crazy_face:
Pour les notes il y a du monde mais faut que je regarde en détail comment il propose les choses car j’ai l’impression que c’est toutes on année en vrac non ?
Mon fils a 1 note sur le trim 3 et j’en vois bcp plus !
J’ai pas fait attention encore s’il y avait le choix de trimestre ou pas.

Il va falloir mettre ça en carte afin de rendre la lecture plus simple

En tout cas déjà super tag pour un non dev comme tu dis :clap:

:heart: Cool! Peux-tu faire un screenshot du sensor ?

Eh bah, non! car si tu regardes l’erreur, les devoirs sont là! :heart_eyes:
C’est l’erreur que j’attendais :stuck_out_tongue_winking_eye: (oui, je suis un peu mazo :grin:)
Maintenant, je dois formater ça correctement dans le sensor.

Oui, de ce que j’ai vu, il y a toutes les notes de l’année scolaires…

Je me disais qu’on pouvais utiliser les cartes de Pronote. Il faut juste que j’adapte les sensors.

Je te rassure, je suis un dev, mais ç’est ma première fois avec Python. :stuck_out_tongue_winking_eye:

Oui j’ai fait un raccourci de langage avec ce que tu disais en préambule mais tu fais bien de préciser
En tout bravo à toi

Bon par contre je vais tester 2 mois maxi car mon fils part ensuite au lycée et là c’est pas école direct ni pronote mais l’ENT

Hello,

Merci pour ton retour et content pour tes enfants :slight_smile:

Cool pour les devoirs !!! Je surveillerai nouvelle version pour re-test.
Sur les notes j’ai regardé un peu vite, mais en effet,c’est du vrac et incomplet (sous reserve que depuis l’espace développement/etat on voit l’intégralité des attributs). J’ai les notes jusqu’en novembre, rien au dela.

Bonjour,
J’ai installé l’intégration Ecole Directe.
Mon fils est en première année de prépa (PTSI) dans un lycée.

1 « J'aime »

Bonjour,

Voici un code pour afficher les notes d’un enfant avec :

  • Trié par date pour voir les nouvelles en premier.
  • si pas de note, on affiche pas dans la colonne
  • si la note > moyenne : en couleur vert
  • si la note <= 8 en couleur rouge
  • si la note + 2 > moyenne : en couleur vert clair
  • sinon en couleur orange

On peut adapter et/ou rajouter des colonnes (moi j’ai jamais de valeur dans minClasse / maxClasse par exemple )

ecole_direct_notes

type: custom:flex-table-card
title: Note Ecole Direct
strict: true
sort_by:
  - date-
columns:
  - name: Date
    data: notes
    modify: |
      x.date
    id: date
    align: left
  - name: Notes
    align: center
    data: notes
    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 + '&nbsp;</div>'
      else if ( parseFloat(x.valeur) <= 8 )
        '<div style="color:#E70B0B;">' + x.valeur +  ' / ' + x.noteSur + '&nbsp;</div>'
      else if (( parseFloat(x.valeur) + (parseFloat(2))) >=
      parseFloat(x.moyenneClasse))
        '<div style="color:#6fd442;">' + x.valeur +  ' / ' + x.noteSur + '&nbsp;</div>'
      else
        '<div style="color:#ff8200;">' + x.valeur +  " / " + x.noteSur + '&nbsp;</div>'
  - name: Moyenne
    align: center
    data: notes
    modify: |
      x.moyenneClasse
  - name: devoir
    align: center
    data: notes
    modify: x.devoir
  - name: libelleMatiere
    align: center
    data: notes
    modify: x.libelleMatiere
entities:
  include: sensor.ecole_directe_notesxxxx_yyyy
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;'

@Giga77 , Après, je sais pas pourquoi mais moi, j’ai peut de notes et seulement de septembre et d’octobre , …

Donc pour l’instant, ça me sert pas (mais comme c’est en alpha c’est sûrement normal)

Bonne journée a vous

3 « J'aime »

Oui, il y a juste les 15 premières notes fourni par Ecole Directe pour éviter de surcharger le sensor.
Je dois ordonner les notes par date pour avoir les 15 dernières.

Je suis en train de modifier les sensors pour utiliser les cartes de Pronotes : GitHub - delphiki/lovelace-pronote: Lovelace cards for the Pronote integration

3 « J'aime »

Nouvelle version 0.0.8!!! :partying_face:
:warning: J’ai fait pas mal de modifications. J’espère que je n’ai rien cassé :sweat_smile:

Pour les futures mises à jour, je vous invite à supprimer le répertoire ecole_directe, et à l’installer via HACS en suivant cette procédure :GitHub - hacf-fr/hass-ecoledirecte: Ecole directe integration for Home Assistant.
Ainsi vous pourrez mettre à jour via HACS. :grin:

Normalement, les entités sont compatibles avec les cartes Pronotes : GitHub - delphiki/lovelace-pronote: Lovelace cards for the Pronote integration
Mais il est fort probable que je doive faire un fork pour rajouter d’autres informations.
Je vous invite à les tester, et faite moi un retour :wink:

Les devoirs vont peut-être fonctionner :crossed_fingers: mais j’en doute :crazy_face:. Je dois faire d’autres appels à l’API pour obtenir plus d’infos et ensuite croiser les données… :unamused: ça m’étonnerait que j’y arrive du premier coup…

J’ai rajouté aussi un événement pour les nouvelles notes, donc vous pouvez créer des automatisations avec notifications :wink:

Cool, je teste ça ce weekend si j’ai le temps :+1: et te fais le retour :wink:

Salut,

Merci pour ton travail, depuis la MAJ 0.0.8 je n’ai plus de sensor l’intégration et vide

Bonne soiree

:cry:
Peux tu partager tes logs ?

Hello,
Mise à jour en 0.0.8 faite.
En effet, plus de sensor, voici les log :

Error while setting up ecole_directe platform for sensor
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 350, in _async_setup_platform
    await asyncio.shield(awaitable)
  File "/config/custom_components/ecole_directe/sensor.py", line 48, in async_setup_entry
    sensors.append(EDHomeworksSensor(coordinator, eleve))
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/ecole_directe/sensor.py", line 160, in __init__
    f"homeworks{self._child_info.get_fullname_lower()}",
                ^^^^^^^^^^^^^^^^
AttributeError: 'EDHomeworksSensor' object has no attribute '_child_info'

A ta dispo !! :slight_smile:

1 « J'aime »

Merci @U_Corsu
Nouvelle version v0.0.9 ç’est corrigé!

Hello,

De rien !

Mais nouvelle erreur :slight_smile:

Error doing job: Task exception was never retrieved
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1495, in _async_process_registry_update_or_remove
    self.async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 992, in async_write_ha_state
    self._async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1113, in _async_write_ha_state
    state, attr, capabilities, shadowed_attr = self.__async_calculate_state()
                                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1053, in __async_calculate_state
    attr.update(self.extra_state_attributes or {})
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/ecole_directe/sensor.py", line 181, in extra_state_attributes
    if homework.effectue is False:
       ^^^^^^^^^^^^^^^^^
AttributeError: 'EDHomework' object has no attribute 'effectue'
1 « J'aime »

As-tu un warning avant cette erreur ?
Si oui, peux-tu me donner son contenu ?