Vacances scolaires - API data.education.gouv.fr

En relisant le code dans sensors.yaml j’ai l’impression qu’il va chercher dans le fichier template mais vu que j’ai pas de fichier template c’est peut être ça ? Ci dessous la partie ou il parle de template :

 resource_template: |-
    {% set location = 'Amiens' %}
    {% set rows = '1'%}
    {% set aujourdhui = now().strftime('%Y-%m-%d')%}
    {% set dayOfYear =  now().strftime('%j') %}
    {% set year =  now().strftime('%Y') | int %}
    {% set lastYear = year - 1 %}
    {% set nextYear = year + 1 %}
    {% if dayOfYear > '244' %}
    {% set schoolYear = (year | string) + "-" + (nextYear | string) %}
    {%- else -%}
    {% set schoolYear = (lastYear | string) + "-" + (year | string) %}
    {%- endif %}
    https://data.education.gouv.fr/api/records/1.0/search/?dataset=fr-en-calendrier-scolaire&facet=start_date&facet=end_date&rows={{rows}}&refine.location={{location}}&sort=-end_date&q=end_date%3E={{aujourdhui}}
  value_template: |-
    {% set aujourdhui = now().strftime('%Y-%m-%d')%}
    {% for record in value_json.records -%}
    {% if aujourdhui >= record.fields.start_date and aujourdhui <= record.fields.end_date %} 
    {%- if record.fields.description %}{{record.fields.description}} jusqu'au {{ as_timestamp(record.fields.end_date) | timestamp_custom('%d-%m-%Y') }} {% endif %}
    {% else %} 
    {%- if record.fields.end_date > aujourdhui and record.fields.description %} prochaines : {{record.fields.description}} {{ as_timestamp(record.fields.start_date) | timestamp_custom('%d-%m-%Y') }}{% endif %}
    {% endif %}
    {%- endfor %}    

Je m’auto répond et j’invite toute personne qui se pose les mêmes questions que moi d’aller lire l’excellent post de McFly :wink:

Bonne soirée à tous

Bonjour à tous
J’ai essayé d’utiliser cette intégration pour avoir la remontée des vacances scolaires et l’utiliser pour mes automations.

Sauf qu’au redémarrage de HA, j’ai des erreurs :

Et voici les erreurs dans le journal

Source: config.py:942
S'est produit pour la première fois: 16:33:06 (1 occurrences)
Dernier enregistrement: 16:33:06

Invalid config for 'sensor' from integration 'rest' at sensors.yaml, line 9: invalid template (TemplateSyntaxError: unexpected char "'" at 563) for dictionary value 'resource_template', got '{% set location = \'Toulouse\' %}\n{% set rows = \'1\'%}\n{% set aujourdhui = now().strftime(\'%Y-%m-%d\')%}\n{% set dayOfYear = now().strftime(\'%j\') %}\n{% set year = now().strftime(\'%Y\') | int %}\n{% set lastYear = year - 1 %}\n{% set nextYear = year + 1 %}\n{% if dayOfYear > \'244\' %}\n{% set schoolYear = (year | string) + "-" + (nextYear | string) %}\n{%- else -%}\n{% set schoolYear = (lastYear | string) + "-" + (year | string) %}\n{%- endif %}\nhttps://data.education.gouv.fr/api/..., please check the docs at https://www.home-assistant.io/integrations/rest
Source: helpers/template.py:633
S'est produit pour la première fois: 16:34:15 (2 occurrences)
Dernier enregistrement: 16:34:15

Error while processing template: Template<template=({% set aujourdhui = now().strftime('%Y-%m-%d')%} {% if aujourdhui < state_attr('sensor.vacances_scolaires', 'start_date') or aujourdhui > state_attr('sensor.vacances_scolaires', 'end_date') %} false {% else %} true {% endif %}) renders=2>
Error while processing template: Template<template=({% set demain = (as_timestamp(now()) + (24*3600)) | timestamp_custom('%Y-%m-%d', True) %} {% if demain < state_attr('sensor.vacances_scolaires', 'start_date') or demain > state_attr('sensor.vacances_scolaires', 'end_date') %} false {% else %} true {% endif %}) renders=2>
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 631, in async_render
    render_result = _render_with_context(self.template, compiled, **kwargs)
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 2733, in _render_with_context
    return template.render(**kwargs)
           ~~~~~~~~~~~~~~~^^^^^^^^^^
  File "/usr/local/lib/python3.13/site-packages/jinja2/environment.py", line 1304, in render
    self.environment.handle_exception()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/local/lib/python3.13/site-packages/jinja2/environment.py", line 939, in handle_exception
    raise rewrite_traceback_stack(source=source)
  File "<template>", line 2, in top-level template code
TypeError: '<' not supported between instances of 'str' and 'NoneType'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 748, in async_render_to_info
    render_info._result = self.async_render(  # noqa: SLF001
                          ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
        variables, strict=strict, log_fn=log_fn, **kwargs
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/src/homeassistant/homeassistant/helpers/template.py", line 633, in async_render
    raise TemplateError(err) from err
homeassistant.exceptions.TemplateError: TypeError: '<' not supported between instances of 'str' and 'NoneType'
Source: components/template/template_entity.py:203
intégration: Template (documentation, problèmes)
S'est produit pour la première fois: 16:34:15 (2 occurrences)
Dernier enregistrement: 16:34:15

TemplateError('TypeError: '<' not supported between instances of 'str' and 'NoneType'') while processing template 'Template<template=({% set aujourdhui = now().strftime('%Y-%m-%d')%} {% if aujourdhui < state_attr('sensor.vacances_scolaires', 'start_date') or aujourdhui > state_attr('sensor.vacances_scolaires', 'end_date') %} false {% else %} true {% endif %}) renders=4>' for attribute '_state' in entity 'binary_sensor.vacances_scolaires_aujourdhui'
TemplateError('TypeError: '<' not supported between instances of 'str' and 'NoneType'') while processing template 'Template<template=({% set demain = (as_timestamp(now()) + (24*3600)) | timestamp_custom('%Y-%m-%d', True) %} {% if demain < state_attr('sensor.vacances_scolaires', 'start_date') or demain > state_attr('sensor.vacances_scolaires', 'end_date') %} false {% else %} true {% endif %}) renders=4>' for attribute '_state' in entity 'binary_sensor.vacances_scolaires_demain'

Je ne comprends pas du tout d’où pourrait provenir le problème, merci d’avance à ceux qui pourront m’aider

Si @Giga77 passe par là ou @Thomas_Mary , je les en remercie par avance

Tu as la réponse dans les logs :

Ligne 9, il y a une apostrophe qui n’est pas au bon endroit.

@Giga77 En faisant copié collé, je vois pas comment une apostrophe a pu se glisser, mais je vais essayer de la trouver

J’ai pas trouvé, mais en rechargeant HA, le message a un peu évolué, l’erreur est maintenant sur REST

Enregistreur: homeassistant.config
Source: config.py:942
S'est produit pour la première fois: 21:11:57 (1 occurrences)
Dernier enregistrement: 21:11:57

Invalid config for 'sensor' from integration 'rest' at sensors.yaml, line 17: 'sensor' is an invalid option for 'rest.sensor', check: sensor, please check the docs at https://www.home-assistant.io/integrations/rest

Pour info, voici le code du fichier sensors.yaml

- platform: rest
  scan_interval: "12:00:00"
  resource_template: |-
    {% set location = 'Toulouse' %}
    {% set rows = '1'%}
    {% set aujourdhui = now().strftime('%Y-%m-%d')%}
    {% set dayOfYear =  now().strftime('%j') %}
    {% set year =  now().strftime('%Y') | int %}
    {% set lastYear = year - 1 %}
    {% set nextYear = year + 1 %}
    {% if dayOfYear > '244' %}
    {% set schoolYear = (year | string) + "-" + (nextYear | string) %}
    {%- else -%}
    {% set schoolYear = (lastYear | string) + "-" + (year | string) %}
    {%- endif %}
    https://data.education.gouv.fr/api/explore/v2.1/catalog/datasets/fr-en-calendrier-scolaire/records?where=end_date%3E%22{{aujourdhui}}%22&order_by=end_date%20ASC&limit={{rows}}&refine=location%3A{{location}}
  sensor:
    name: vacances_scolaires
    json_attributes_path: "$.results[0]"
    json_attributes:
      - start_date
      - end_date
      - description
    value_template: |-
      {% set aujourdhui = now().strftime('%Y-%m-%d')%}
      {% for record in value_json.results -%}
      {% if aujourdhui >= record.start_date and aujourdhui <= record.end_date %} 
      {%- if record.description %}{{record.description}} jusqu'au {{ as_timestamp(record.end_date) | timestamp_custom('%d-%m-%Y') }} {% endif %}
      {% else %} 
      {%- if record.end_date > aujourdhui and record.description %} prochaines : {{record.description}} {{ as_timestamp(record.start_date) | timestamp_custom('%d-%m-%Y') }}{% endif %}
      {% endif %}
      {%- endfor %}

J’ai enlevé la ligne sensor et recalé les lignes suivantes et ça a l’air de fonctionner

Bonjour ,
nouveau sur HA , je suis également intéressé par l’intégration des jour d’école / congé sco ; pouvez vous me guidez un peut , j’ai déjà installé work day , mais ensuite ?
Merci

Bonjour,

sensor:
- name:

et non :
sensor:
name:

je n’arrive pas a reproduire les indentations

Cordialement