Pronote dans HA - les notes, devoirs, absences et emploi du temps des enfants

L’ascenseur, c’est génial
mais comment faire pour garder l’entête toujours afficher ?
Je voudrais garder « évaluation » toujours afficher

actuel
photo ascenseur en haut

photo ascenseur plus bas

Utilise le ‹ titre › de la carte
image

*&^@&^#, j’avais collé le mauvais code, corrigé … essaie de nouveau stp

heuuu :grin:

image

Il faut jouer/essayer, je ne peux pas t’aider avec ces détails…
A part de ça, je ne vais plus inverstir du temps dans ‹ punishments › tant que mon soucis n’est pas résolu par pronotepy

ok,
je viens de mettre le titre
mais je souhaite remettre le même style dans ce titre et je n’y arrive pas
sais tu comment je dois faire ?
image

j’essais ça mais ça veut pas

      header {
          background-color:rgb(100, 100, 100);
          padding: 12px 12px;
          color:white;
          font-weight:normal;
          font-size:1.2em;
          border-top-left-radius: 5px; 
          border-top-right-radius: 5px; 
      }

je me réponds à moi même,
j’ai trouvé
au début de style, j’ai rajouté:


    $: |
      .card-header {
          background-color:rgb(100, 100, 100);
          padding: 0px 0px 0px 12px !important;
          color: white !important;
          font-weight: normal;
          font-size: 1.5em !important;
          border-top-left-radius: 5px; 
          border-top-right-radius: 5px; 
          height: 100%;
      }

et ça me donne:
image

Oui, j’ai vu pareil mais je ne sais pas en ce moment (pas spécialiste esthétique :slight_smile: )
Je vais voir si je trouve qqc (prio reduit)

moi, pour l’instant, ça me va bien.

maintenant,
je vais essayer de m’amuser avec le Punishments

y a t’il moyen d’avoir une liste de ce que l’on peut extraire de pronote ?

bonsoir,
vous pouvez m’aider à afficher dans ma vue les notes sur les 3 trimestres / ou toutes ?
seul le 3eme trimestre est extrait dans ma configuration

Solution trouvé avec le fix par bainf de pronotepy.
Donc il faut faire une maj de pronotepy vers master.zip en attendant un release (voir son github)

    punishments = client.current_period.punishments
    punishments = sorted(punishments, key=lambda punishment: punishment.given, reverse=True)
    jsondata['punishments'] = []

    #Transformation des punishments en Json
    for punishment in punishments:
        jsondata['punishments'].append({
            'id': punishment.id,
            'date': punishment.given.strftime("%Y/%m/%d"),
            'cours': punishment.during_lesson,
            'raisons': punishment.reasons,
            'circonstances': punishment.circumstances,
            'nature': punishment.nature,
            'duree': str(punishment.duration),
            'devoirs': punishment.homework,
            'exclusion': punishment.exclusion,                    
        })
    
    print(jsondata)  

bien joué , merci du partage

Bonjour, je vien de rehinstallée pronote sur mon ha, je me retrouve avec c’est erreur.

on trouve ou config.get???

ton fichier config.ini est il bien configuré ?
as tu laissé le compte demo pour les premiers essais ?

Non car je ne l’ai pas trouvé justement

Bonjour,
Mes sensors sont configurés dans sensors.yaml, et je n’arrive pas à y intégrer les sensors liés à la platform rest. Ils ne se créent pas malgré le fait qu’ils soient bien ajoutés au fichier :

 - platform: template    
    sensors:
        pronote_edt_baptiste_aujourdhui_cours_0_heure:
            friendly_name: "Baptiste / Début des cours"
            value_template: >-            
                {% if state_attr('sensor.pronote_edt_baptiste_aujourdhui', 'edt_aujourdhui')[0] is defined %}
                    {{state_attr('sensor.pronote_edt_baptiste_aujourdhui', 'edt_aujourdhui')[0]['heure']}}
                {% else %}
                    Pas cours
                {% endif %}                
                
        pronote_edt_baptiste_demain_cours_0_heure:
            friendly_name: "Baptiste / Début des cours demain"
            value_template: >-            
                {% if state_attr('sensor.pronote_edt_baptiste_demain', 'edt_demain')[0] is defined %}
                    {{state_attr('sensor.pronote_edt_baptiste_demain', 'edt_demain')[0]['heure']}}
                {% else %}
                    Pas cours
                {% endif %}            
        pronote_edt_baptiste_prochainjour_cours_0_heure:
            friendly_name: "Baptiste / Début des cours (J+1)"
            value_template: >-
                {% if state_attr('sensor.pronote_edt_baptiste_prochainjour', 'edt_prochainjour')[0] is defined %}
                    {{state_attr('sensor.pronote_edt_baptiste_prochainjour', 'edt_prochainjour')[0]['heure']}}  
                {% else %}
                    Pas cours
                {% endif %}    
           

  - platform: rest
    name: pronote_edt_baptiste_aujourdhui 
    resource: https://192.168.0.49:8123/local/pronote_baptiste.json
    scan_interval: 10
    json_attributes:
      - edt_aujourdhui
    value_template: >
        {% if value_json.edt_aujourdhui.0 is defined %}
            {{ value_json.edt_aujourdhui.0.date_heure }}
        {% else %}
            Pas cours
        {% endif %}
    

  - platform: rest
    name: pronote_edt_baptiste_aujourdhui_debut
    scan_interval: 10
    json_attributes:
      - edt_aujourdhui_debut
    value_template: >
        {% if value_json.edt_aujourdhui_debut.0 is defined %}
            {{ value_json.edt_aujourdhui_debut }}
        {% else %}
            Pas cours
        {% endif %}
    resource: https://192.168.0.49:8123/local/pronote_baptiste.json

  - platform: rest
    name: pronote_edt_baptiste_demain
    scan_interval: 10
    json_attributes:
      - edt_demain
    value_template: >
        {% if value_json.edt_demain.0 is defined %}
            {{ value_json.edt_demain.0.date_heure }}
        {% else %}
            Pas cours demain
        {% endif %}
    resource: https://192.168.0.49:8123/local/pronote_baptiste.json

  - platform: rest
    name: pronote_edt_baptiste_demain_debut
    scan_interval: 10
    json_attributes:
      - edt_demain_debut
    value_template: >
        {% if value_json.edt_demain_debut.0 is defined %}
            {{ value_json.edt_demain_debut }}
        {% else %}
            Pas cours demain
        {% endif %}
    resource: https://192.168.0.49:8123/local/pronote_baptiste.json


  - platform: rest
    name: pronote_edt_baptiste_prochainjour
    scan_interval: 10
    json_attributes:
      - edt_prochainjour
    value_template: >
        {% if value_json.edt_prochainjour.0 is defined %}
            {{ value_json.edt_prochainjour.0.date_heure }}
        {% else %}
            None
        {% endif %}
    resource: https://192.168.0.49:8123/local/pronote_baptiste.json


  - platform: rest
    name: pronote_edt_baptiste_prochainjour_debut
    scan_interval: 10
    json_attributes:
      - edt_prochainjour_debut
    value_template: >
        {% if value_json.edt_prochainjour_debut.0 is defined %}
            {{ value_json.edt_prochainjour_debut }}
        {% else %}
            None
        {% endif %}
    resource: https://192.168.0.49:8123/local/pronote_baptiste.json



  - platform: rest
    name: pronote_note_baptiste
    scan_interval: 10
    json_attributes:
      - note
    value_template: >
        {% if value_json.note.0 is defined %}
            {{ value_json.note.0.cours }} : {{ value_json.note.0.note_sur }} 
        {% else %}
            None
        {% endif %}
    resource: https://192.168.0.49:8123/local/pronote_baptiste.json


  - platform: rest
    name: pronote_devoir_baptiste
    scan_interval: 10
    json_attributes:
      - devoir
    value_template: >
        {% if value_json.devoir.0 is defined %}
            {{ value_json.devoir.0.date }} / {{ value_json.devoir.0.title }} 
        {% else %}
            None
        {% endif %}
    resource: https://192.168.0.49:8123/local/pronote_baptiste.json


  - platform: rest
    name: pronote_absence_baptiste
    scan_interval: 10
    json_attributes:
      - absence
    value_template: >
        {% if value_json.absence.0 is defined %}
            {{ value_json.absence.0.date_debut }} - {{ value_json.absence.0.nb_jours}}j - {{value_json.absence.0.nb_heures}}
        {% else %}
            None
        {% endif %}
    resource: https://192.168.0.49:8123/local/pronote_baptiste.json

Pourtant les sesnsors liés à la platform template, eux sont bien crées, je les retrouve bien dans mes entités

Bonjour,

Déjà, félicitations et merci pour le travail et l’aide que vous apportez.

je suis en train de suivre le tuto de @Dathosim malgré que ne respecte pas forcément les pré-requis :sweat_smile:, mais je suis curieux et ai envie d’apprendre.

j’ai un installer HA version OS dans une machine virtuelle Hyper-V pour me faire la main dessus en attendant de trouver une solution moins énergivore Genre Raspberry PI4 a moins de 12350€ :blush:.

donc, j’ai bien importé toute ma domotique existante dans mon HA sans trop de problème, jusqu’au moment ou je suis tombé sur ce topic. Ayant une fille de 14 ans en 4ème et un fils de 10 ans en CM2, j’ai trouvé ça super utile.
Je men suis donc lancé.
1 - installation de la Lib Pronotepy : OK
2- installation du script python : OK
3 - exécution du script : OK
4 - Configuration YAML pour récupérer l’emploi du temps dans un sensor : c’est là que ça coince:
quand je copie le contenu de votre fichier configuration.yaml à la suite du mien, le File Editor me met bien une check verte en haut a droite semblant valider les modifications apportées, MAIS, lors du rechargement de la config, je reçoi l’erreur:

2023-03-25 23:53:16.009 ERROR (MainThread) [homeassistant.components.homeassistant] The system cannot reload because the configuration is not valid: Invalid config for [sensor.template]: invalid slug pronote_edt_Zoé_aujourdhui_cours_0_heure (try pronote_edt_zoe_aujourdhui_cours_0_heure) for dictionary value @ data[‹ sensors ›]. Got OrderedDict([(‹ pronote_edt_Zoé_aujourdhui_cours_0_heure ›, OrderedDict([(‹ friendly_name ›, ‹ Zoé / Début des cours ›), (‹ value_template ›, "{% if state_attr(‹ sensor.pronote_edt_Zoé_aujourdhui ›, ‹ edt_aujourdhui ›)[0] is defined %}\n {{state_attr(‹ sensor.pronote_edt_Zoé_aujourdhui ›, ‹ edt_aujourdhui ›)[0][‹ heure ›]}}\n{% else %}\n Pas cours\n{% endif %} ")])), (‹ pronote_edt_Zoé_demain_cours_0_heure ›, OrderedDict([(‹ friendly_name ›, ‹ Zoé / Début des cours demain ›), (‹ value_template ›, … (See ?, line ?).
Invalid config for [binary_sensor.template]: invalid slug pronote_edt_Zoé_aujourdhui_cours_0_annulation (try pronote_edt_zoe_aujourdhui_cours_0_annulation) for dictionary value @ data[‹ sensors ›]. Got OrderedDict([(‹ pronote_edt_Zoé_aujourdhui_cours_0_annulation ›, OrderedDict([(‹ friendly_name ›, ‹ Edt Zoé Cours 0 annulation ›), (‹ value_template ›, « {{ state_attr(‹ sensor.pronote_edt_Zoé_aujourdhui ›, ‹ edt_aujourdhui ›)[0][‹ annulation ›] }} »)])), (‹ pronote_edt_Zoé_aujourdhui_cours_1_annulation ›, OrderedDict([(‹ friendly_name ›, ‹ Edt Zoé Cours 1 annulation ›), (‹ value_template ›, « {{ state_attr(‹ sensor.pronote_edt_Zoé_aujourdhui ›, ‹ edt_aujourdhui ›)[1][‹ annulation ›] }} »)])), ('pronote_edt_Zoé_aujourdhui_c… (See ?, line ?).
Invalid config for [binary_sensor.template]: invalid slug pronote_edt_Zoé_prochain_jour_cours_0_annulation (try pronote_edt_zoe_prochain_jour_cours_0_annulation) for dictionary value @ data[‹ sensors ›]. Got OrderedDict([(‹ pronote_edt_Zoé_prochain_jour_cours_0_annulation ›, OrderedDict([(‹ friendly_name ›, ‹ Edt Zoé Prochain Jour Cours 0 annulation ›), (‹ value_template ›, « {{ state_attr(‹ sensor.pronote_edt_Zoé_prochain_jour ›, ‹ edt_prochainjour ›)[0][‹ annulation ›] }} »)])), (‹ pronote_edt_Zoé_prochain_jour_cours_1_annulation ›, OrderedDict([(‹ friendly_name ›, ‹ Edt Zoé Prochain Jour Cours 1 annulation ›), (‹ value_template ›, "{{ state_attr(‹ sensor.pronote_edt_Zoé_prochain_jour ›, ‹ edt_prochainjour ›)[1]['annulati… (See ?, line ?).
2023-03-25 23:53:16.009 ERROR (MainThread) [homeassistant.components.websocket_api.http.connection] [139753719983424] Cannot quick reload all YAML configurations because the configuration is not valid: Invalid config for [sensor.template]: invalid slug pronote_edt_Zoé_aujourdhui_cours_0_heure (try pronote_edt_zoe_aujourdhui_cours_0_heure) for dictionary value @ data[‹ sensors ›]. Got OrderedDict([(‹ pronote_edt_Zoé_aujourdhui_cours_0_heure ›, OrderedDict([(‹ friendly_name ›, ‹ Zoé / Début des cours ›), (‹ value_template ›, "{% if state_attr(‹ sensor.pronote_edt_Zoé_aujourdhui ›, ‹ edt_aujourdhui ›)[0] is defined %}\n {{state_attr(‹ sensor.pronote_edt_Zoé_aujourdhui ›, ‹ edt_aujourdhui ›)[0][‹ heure ›]}}\n{% else %}\n Pas cours\n{% endif %} ")])), (‹ pronote_edt_Zoé_demain_cours_0_heure ›, OrderedDict([(‹ friendly_name ›, ‹ Zoé / Début des cours demain ›), (‹ value_template ›, … (See ?, line ?).
Invalid config for [binary_sensor.template]: invalid slug pronote_edt_Zoé_aujourdhui_cours_0_annulation (try pronote_edt_zoe_aujourdhui_cours_0_annulation) for dictionary value @ data[‹ sensors ›]. Got OrderedDict([(‹ pronote_edt_Zoé_aujourdhui_cours_0_annulation ›, OrderedDict([(‹ friendly_name ›, ‹ Edt Zoé Cours 0 annulation ›), (‹ value_template ›, « {{ state_attr(‹ sensor.pronote_edt_Zoé_aujourdhui ›, ‹ edt_aujourdhui ›)[0][‹ annulation ›] }} »)])), (‹ pronote_edt_Zoé_aujourdhui_cours_1_annulation ›, OrderedDict([(‹ friendly_name ›, ‹ Edt Zoé Cours 1 annulation ›), (‹ value_template ›, « {{ state_attr(‹ sensor.pronote_edt_Zoé_aujourdhui ›, ‹ edt_aujourdhui ›)[1][‹ annulation ›] }} »)])), ('pronote_edt_Zoé_aujourdhui_c… (See ?, line ?).
Invalid config for [binary_sensor.template]: invalid slug pronote_edt_Zoé_prochain_jour_cours_0_annulation (try pronote_edt_zoe_prochain_jour_cours_0_annulation) for dictionary value @ data[‹ sensors ›]. Got OrderedDict([(‹ pronote_edt_Zoé_prochain_jour_cours_0_annulation ›, OrderedDict([(‹ friendly_name ›, ‹ Edt Zoé Prochain Jour Cours 0 annulation ›), (‹ value_template ›, « {{ state_attr(‹ sensor.pronote_edt_Zoé_prochain_jour ›, ‹ edt_prochainjour ›)[0][‹ annulation ›] }} »)])), (‹ pronote_edt_Zoé_prochain_jour_cours_1_annulation ›, OrderedDict([(‹ friendly_name ›, ‹ Edt Zoé Prochain Jour Cours 1 annulation ›), (‹ value_template ›, "{{ state_attr(‹ sensor.pronote_edt_Zoé_prochain_jour ›, ‹ edt_prochainjour ›)[1]['annulati… (See ?, line ?).
Traceback (most recent call last):
File « /usr/src/homeassistant/homeassistant/components/websocket_api/commands.py », line 199, in handle_call_service
await hass.services.async_call(
File « /usr/src/homeassistant/homeassistant/core.py », line 1808, in async_call
task.result()
File « /usr/src/homeassistant/homeassistant/core.py », line 1845, in _execute_service
await cast(Callable[[ServiceCall], Awaitable[None]], handler.job.target)(
File « /usr/src/homeassistant/homeassistant/helpers/service.py », line 762, in admin_handler
await result
File « /usr/src/homeassistant/homeassistant/components/homeassistant/init.py », line 302, in async_handle_reload_all
raise HomeAssistantError(
homeassistant.exceptions.HomeAssistantError: Cannot quick reload all YAML configurations because the configuration is not valid: Invalid config for [sensor.template]: invalid slug pronote_edt_Zoé_aujourdhui_cours_0_heure (try pronote_edt_zoe_aujourdhui_cours_0_heure) for dictionary value @ data[‹ sensors ›]. Got OrderedDict([(‹ pronote_edt_Zoé_aujourdhui_cours_0_heure ›, OrderedDict([(‹ friendly_name ›, ‹ Zoé / Début des cours ›), (‹ value_template ›, "{% if state_attr(‹ sensor.pronote_edt_Zoé_aujourdhui ›, ‹ edt_aujourdhui ›)[0] is defined %}\n {{state_attr(‹ sensor.pronote_edt_Zoé_aujourdhui ›, ‹ edt_aujourdhui ›)[0][‹ heure ›]}}\n{% else %}\n Pas cours\n{% endif %} ")])), (‹ pronote_edt_Zoé_demain_cours_0_heure ›, OrderedDict([(‹ friendly_name ›, ‹ Zoé / Début des cours demain ›), (‹ value_template ›, … (See ?, line ?).
Invalid config for [binary_sensor.template]: invalid slug pronote_edt_Zoé_aujourdhui_cours_0_annulation (try pronote_edt_zoe_aujourdhui_cours_0_annulation) for dictionary value @ data[‹ sensors ›]. Got OrderedDict([(‹ pronote_edt_Zoé_aujourdhui_cours_0_annulation ›, OrderedDict([(‹ friendly_name ›, ‹ Edt Zoé Cours 0 annulation ›), (‹ value_template ›, « {{ state_attr(‹ sensor.pronote_edt_Zoé_aujourdhui ›, ‹ edt_aujourdhui ›)[0][‹ annulation ›] }} »)])), (‹ pronote_edt_Zoé_aujourdhui_cours_1_annulation ›, OrderedDict([(‹ friendly_name ›, ‹ Edt Zoé Cours 1 annulation ›), (‹ value_template ›, « {{ state_attr(‹ sensor.pronote_edt_Zoé_aujourdhui ›, ‹ edt_aujourdhui ›)[1][‹ annulation ›] }} »)])), ('pronote_edt_Zoé_aujourdhui_c… (See ?, line ?).
Invalid config for [binary_sensor.template]: invalid slug pronote_edt_Zoé_prochain_jour_cours_0_annulation (try pronote_edt_zoe_prochain_jour_cours_0_annulation) for dictionary value @ data[‹ sensors ›]. Got OrderedDict([(‹ pronote_edt_Zoé_prochain_jour_cours_0_annulation ›, OrderedDict([(‹ friendly_name ›, ‹ Edt Zoé Prochain Jour Cours 0 annulation ›), (‹ value_template ›, « {{ state_attr(‹ sensor.pronote_edt_Zoé_prochain_jour ›, ‹ edt_prochainjour ›)[0][‹ annulation ›] }} »)])), (‹ pronote_edt_Zoé_prochain_jour_cours_1_annulation ›, OrderedDict([(‹ friendly_name ›, ‹ Edt Zoé Prochain Jour Cours 1 annulation ›), (‹ value_template ›, "{{ state_attr(‹ sensor.pronote_edt_Zoé_prochain_jour ›, ‹ edt_prochainjour ›)[1]['annulati… (See ?, line ?).

Si une âme charitable parmi vous avait une idée et accepterai de la transmettre je lui serait très reconnaissant :smile:.

en attendant, merci par avance de ce que pourrez faire et continuez comme ça, c’est vraiment super ce que vous faites.

Cordialement
VD.

@fana13 Essaie sans le :8123 voir si ça corrige ton problème

Sans le :8123 je n’accède plus .json, l’accès via https://192.168.0.49:8123/local/pronote_baptiste.json se fait très bien.
Je pense que mon problème vient de la bonne syntaxe à mettre dans le fichier sensors.yaml
Les templates sont déclarées comme ça

- platform: template    
    sensors:

Les rest n’ont pas « sensors: » de déclaré et si je le rajoute, ma configuration n’est plus fonctionnelle.