Vacances scolaires - API data.education.gouv.fr

Bonjour,

Oui j’ai installé et configuré l’intégration Workday,
Peux-tu m’en dire un peu plus sur les attributs « start_date » et « end_date » de mon entité sensor.vacances_scolaires ?
Je débute avec Home Assistant, j’étais sous Jeedom pendant quelques années,

Merci pour ton aide,
Bonne journée,

Je viens de teste sur ma pro est ca fonctionne

Verifie que tu as bien positionné
platform: rest en dessous de sensor:
pareil pour le binary_sensor

je te met les codes yaml

template:
     
  - binary_sensor:
      - name: vacances_scolaires_aujourdhui
        unique_id: binary_sensor.vacances_scolaires_aujourdhui
        state: |-
          {% set aujourdhui = now().strftime('%Y-%m-%d')%}
          {% if aujourdhui < states.sensor.vacances_scolaires.attributes["start_date"] or aujourdhui > states.sensor.vacances_scolaires.attributes["end_date"] %}
            false
          {% else %} 
            true
          {% endif %}

  - binary_sensor:
      - name: vacances_scolaires_demain
        unique_id: binary_sensor.vacances_scolaires_demain
        state: |-
          {% set demain = (as_timestamp(now()) + (24*3600)) | timestamp_custom('%Y-%m-%d', True) %}
          {% if demain < states.sensor.vacances_scolaires.attributes["start_date"] or demain > states.sensor.vacances_scolaires.attributes["end_date"] %} 
          false
          {% else %} 
          true
          {% endif %} 

et

sensor:

  - platform: rest
    scan_interval: '00:30:00'
    name: vacances_scolaires
    json_attributes_path: "$.records[0].fields"
    json_attributes:
      - start_date
      - end_date
      - description
    resource_template: |-
      {% set location = 'Aix-Marseille' %}
      {% 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 %}  

Salut
Ton soucis vient de ça :


source: Templating - Home Assistant

Au démarrage, l’entité est unavailable, et ça te donne cette erreur.
Change ton code :
states.sensor.vacances_scolaires.attributes["start_date"]
par
state_attr('sensor.vacances_scolaires', 'start_date')

Et fait la même chose partout.

Oui, mais Il est possible que tu ais la même erreur dans tes logs.

@Sigalou Toi aussi, tu dois avoir cette erreur.

1 « J'aime »

Bien vue @Giga77 :+1:

Et j’ai pas pensé aux entité unavailable !!

Je viens de rentrer de ma balade avec ma chienne je teste de suite vos recommandations,

Je vous tiens au courant,
Merci,

Merci beaucoup
J’ai corrigé ma page

3 « J'aime »

Merci pour ce nouveau sensor.

Pour utiliser la V2, t’as juste besoin d’utiliser cette URL :

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

Edit:
Voici mon sensor (dans le fichier rest.yaml) adapté à la V2:

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

ça apporte un truc la V2 ? vaut mieux l’utiliser ? ¦

A priori, ça n’apporte rien, mais il vaut mieux l’utiliser :


https://help.opendatasoft.com/apis/ods-search-v1/#search-api-v1

Bonsoir à tous,

Je viens de porter les modifications, je rencontre toujours des erreurs dans mon journal:

Logger: homeassistant.components.template.template_entity
Source: components/template/template_entity.py:537
Integration: Template (documentation, issues)
First occurred: 22:20:21 (4 occurrences)
Last logged: 22:22:31

TemplateError('UndefinedError: 'homeassistant.helpers.template.TemplateState object' has no attribute 'start_date'') while processing template 'Template<template=({% set aujourdhui = now().strftime('%Y-%m-%d')%} {% if aujourdhui < states.sensor.vacances_scolaires["start_date"] or aujourdhui > states.sensor.vacances_scolaires["end_date"] %} false {% else %} true {% endif %}) renders=4>' for attribute '_state' in entity 'binary_sensor.vacances_scolaires_aujourdhui'
TemplateError('UndefinedError: 'homeassistant.helpers.template.TemplateState object' has no attribute 'start_date'') while processing template 'Template<template=({% set demain = (as_timestamp(now()) + (24*3600)) | timestamp_custom('%Y-%m-%d', True) %} {% if demain < states.sensor.vacances_scolaires["start_date"] or demain > states.sensor.vacances_scolaires["end_date"] %} false {% else %} true {% endif %}) renders=4>' for attribute '_state' in entity 'binary_sensor.vacances_scolaires_demain'

Merci pour vos retours,
Au plaisir, bonne soirée,

Ce n’est pas bon. Regarde le blog de Sigalou. Il a corrigé les sensors.

C’est tout bon,
Je n’avais pas fait attention, la journée fût longue,

Merci beaucoup pour m’avoir aidé, et pour toutes vos explications
Bonne soirée à tous,

Bonsoir,
Je viens de me rendre compte que si je modifie Grenoble par Rouen, je n’ai plus aucune donnée qui remonte

As-tu rechargé les entités REST ou redémarrer HA ?
As-tu regardé les logs ?

A priori, l’académie de Rouen n’existe plus. C’est Normandie.

Je n’ai que ça dans mes journaux:

Logger: homeassistant.components.rest.util
Source: components/rest/util.py:33
Integration: RESTful (documentation, issues)
First occurred: 21:29:36 (1 occurrences)
Last logged: 21:29:36

JSON result was not a dictionary or list with 0th element a dictionary

Je viens de modifier par Normandie,
C’est good, je récupère bien les informations,

Désolé pour le dérangement,
Merci pour ton aide,
Bonne soirée,
Tom,

1 « J'aime »

Bonjour à tous,

Je viens vers vous afin d’avoir un peu d’aide pour bien comprendre le rouage de HA et ses fichiers YAML;) enfin surtout pour que mes rouages s’alignent correctement dans ce qui me sert de cerveau !!! LOL

Je désire donc mettre en place Vacances Scolaires que Sigalou a partagé sur son blog mais je n’arrive pas à récupérer le sensors Vacances scolaire quand je vais dans outils de développement.

  • J’ai pourtant bien créer le fichier sensors.yaml
  • j’ai copié le code de Sigalou ou j’ai aussi testé avec le code de Giga77 ( V2 ) qui a partagé juste au dessus.
  • J’ai bien sûr redémarrer mon HA après avoir mis le code dans sensors.yaml

Mais toujours rien qui remonte, est ce qu’il ne faut pas rajouter un lien dans configuration.yaml pour qu’il passe voir comment ça se passe dans sensors.yaml ?
C’est cette partie que j’ai du mal à bien comprendre, le côté obscur de la force me fait peur :wink: LOL

Merci d’avance
Ludo

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