Vacances Scolaire - Mise en place API 2.1

Bien le bonjour,
En cherchant sur le forum une solution pouvant me donner les vacances scolaire correspondant à ma zone, je suis tombé sur les deux liens suivant.

Merci à @Sigalou pour son blog

Cependant, j’essaie de mettre en place l’API 2.1 de data.education.gouv.fr, mais je galère énormément.
Il faut savoir que j’ai diviser le code en deux. Une partie dans template.yaml et une dans sensors.yaml.

Dans mon fichier template.yaml j’ai ceci et ca fonctionne bien.

- binary_sensor:
    - name: vacances_scolaires_aujourdhui
      unique_id: binary_sensor.vacances_scolaires_aujourdhui
      icon: mdi:calendar-today
      state: |-
        {% 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 %}

- binary_sensor:
    - name: vacances_scolaires_demain
      unique_id: binary_sensor.vacances_scolaires_demain
      icon: mdi:calendar-arrow-right
      state: |-
        {% 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 %}

Dans mon fichier sensors.yaml, j’ai ceci :

- scan_interval: "12:00:00"
  resource_template: |-
    {% set location = 'Grenoble' %}
    {% 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 %}

Cependant j’obtiens des erreurs.
Voici l’erreur quand je fais une vérification de la configuration

Avertissements de configuration
Invalid config for 'sensor' at sensors.yaml, line 8: required key 'platform' not provided

Et si je rajoute - platform: rest, j’ai ceci

Avertissements de configuration
Invalid config for 'sensor.rest' at sensors.yaml, line 8: must contain at least one of resource, resource_template. '', got {'platform': 'rest'}
Invalid config for 'sensor' at sensors.yaml, line 9: required key 'platform' not provided

Je cherche à comprendre et corriger par moi-même mais j’ai beaucoup de mal à appréhender certains mécanisme de HA.

Merci pour l’aide que vous pourriez m’apporter

Salut

ç’est un sensor restful.

Dans ton fichier configuration.yaml, met ça :

rest: !include rest.yaml

Et met le code du sensor vacances_scolaires, dans le fichier ‹ rest.yaml ›

Hello,
J’ai fait ce que tu m’as recommandé mais j’ai toujours quelques problèmes.
Voici les trois fichiers que j’utilise ; ca pourrait servir à d’autres.

sensors.yaml

- platform: rest
  scan_interval: "12:00:00"
  resource_template: |-
    {% set location = 'Lyon' %}
    {% 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}}

rest.yaml

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 %}

template.yaml

- binary_sensor:
    - name: vacances_scolaires_aujourdhui
      unique_id: binary_sensor.vacances_scolaires_aujourdhui
      icon: mdi:calendar-today
      state: |-
        {% 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 %}

- binary_sensor:
    - name: vacances_scolaires_demain
      unique_id: binary_sensor.vacances_scolaires_demain
      icon: mdi:calendar-arrow-right
      state: |-
        {% 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 %}

Par contre j’ai ce type d’erreurs :

ERROR (MainThread) [homeassistant.setup] Unable to prepare setup for platform 'rest.sensor': Unable to set up component.
ERROR (MainThread) [homeassistant.setup] Error during setup of component rest

Désolé, tu n’as pas compris ce que je t’ai indiqué.
Il faut prendre tout le code et le mettre dans le fichier rest.yaml.

Comme ceci:
rest.yaml

- scan_interval: "12:00:00"
  resource_template: |-
    {% set location = 'Lyon' %}
    {% 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 %}

Dans ton fichier sensors.yaml, enlève tout le code avec platform: rest
Le fichier template.yaml, ç’est bon.

1 « J'aime »

@Giga77 ca me semble être bon.
Je vais voir s’il n’y a pas d’erreur dans les logs.
Merci pour ton aide

Au passage, je voudrai créer de nouveau sensor (nb de jours avant les vacances, nb de jours de vacances restantes, …) tu me conseils de créer le sensor dans rest ou dans template ?

Bonjour,

Je me permet de rebondir car étant novice sur HA, je me demandais ou est ce que l’on doit mettre les fichiers rest.yaml, template.yaml et sensors.yaml ?
Directement dans la racine via File Editor ou dans des dossiers bien précis ?

Merci par avance et pardonner mon ignorance.

Oui, tu mets à la racine du répertoire homeassistant.

1 « J'aime »