¿La escuela mañana?

En el contexto de laintegración de Pronote, para permitir la creación automática de una alarma mañana por la mañana o para establecer la actualización de Pronote para no actualizarla en vacaciones escolares, necesito saber si estamos en vacaciones escolares y si hay escuela mañana.

¿Un día de trabajo?

Para saber si somos un día laborable o no, basta con instalar la extensión Día de trabajo

Nada más simple, todo está en documentación.

Lo añado dos veces. Para tener mañana, añadimos con un desfase de 1.

Discapacitados = día no laborable

¿De vacaciones escolares?

Para saber si estamos de vacaciones escolares o no, debe solicitar la API del Ministerio de Educación Nacional. El script utilizado está en V1, tiene un V2.0, si tengo algo de tiempo, cambiaré al V2.0 más adelante.

  • V1: https://data.education.gouv.fr/api/v1/console/datasets/1.0/search/
  • V2.0: https://data.education.gouv.fr/api/explore/v2.0/console

Recurso utilizado para estos sensores (gracias a su autor):

  • https://github.com/papo-o/home-assistant-config/blob/master/integrations/vacances_scolaires.yaml
  • https://pon.fr/home-assistant-vacances-scolaires/

Adición de un sensor de «vacaciones escolares _s»

En mi expediente Sensores.yaml, añado este sensor:

- plataforma: _intervalo de descanso: Nombre «00:30:00»: vacaciones_schools json_attributes_path: "$.records[0].fields" json _atributos: - start_date - end_date - description resource_template: |- {% ubicación establecida = 'Aix-Marsella' %} {% filas de conjuntos = '1'%} {% set today = now().strftime('%Y-%m-%d')%} {% set dayOfYear = now().strftime('%I') %} {% año establecido = now().strftime('%Y') | int %} {% set lastYear = año - 1 %} {% set nextAño = año + 1 %} {% if dayOfYear > '244' %} {% set schoolYear = (año | string) + "-" + (siguienteaño | string) %} {%- de lo contrario -%} {% set schoolYear = (último año | string) + "-" + (año | string) %} {%- endif %} https://data.education.gouv.fr/api/records/1.0/search/?dataset=en-calendrier-scolaire&facet=start_date&facet=end_date&rows={{rows}}&refine.location={{location}}&sort=-end_date&q=end _date={{hoy}}} valor _template: |- {% set today = now().strftime('%Y-%m-%d')%} {% para el registro en valor _json.records -%} {% si hoy >= record.fields.start _date y hoy <= record.fields.end _date %} {%- si record.fields.description %}{{record.fields.description}}} hasta {{ como _timestamp(record.fields.end_date) | timestamp _custom('%d-%m-%Y') }} {% endif %} {% de lo contrario %} {%- si record.fields.end _date > hoy y record.fields.description %} siguiente: {{record.fields.description}} {{ como _timestamp(record.fields.start _date) | timestamp _custom('%d-%m-%Y') }}{% endif %} {% endif %} {%- endfor %}    

Por supuesto, la academia necesita ser cambiada: «Córcega», «Polinesia», «Nueva Caledonia», «Guyane», «Aix-Marseille», «Amiens», «Besançon», «Bordeaux», «Clermont-Ferrand», «Créteil», «Dijon», «Grenoble», «Lille», «Limoges», «Lyon», «Montpellier», «Nancy-Metz», «Nantes», «Nice», «Orléans-Tours», «París», «Poitiers», «Reims», «Rennes», «Strasbourg», «Toulouse», «Versailles», «Mayotte», «Réunion», «Martinique», «Saint Pierre et Miquelon», «Wallis et Fuuna», «Caen», «Guermande», «Guerdie» 

Resultado de este sensor

Esta información debe ser capaz de extraer dos piezas de información en forma de _sensor binario que se puede utilizar en automatizaciones o scripts.

Adición de dos sensores binarios Vacaciones escolares hoy y Vacaciones escolares mañana

Actualizado el 03/10/2023, gracias al Observación pertinente desde Giga77, corrijo el siguiente código y lo sustituyo

states.sensor.vacances_scolaires.attributes["start_date"]
por
_attr('sensor.vacances_scolaires', 'start_date')

En mi expediente templates.yaml, añado estos sensores:

- binario_sensor: - nombre: _school vacaciones _now único _id: binario_sensor.vacances_schools_Estado actual: |- {% set today = now().strftime('%Y-%m-%d')%} {% si hoy < state_attr('sensor.vacances_scolaires', 'start_date') o hoy > state_attr('sensor.vacances_scolaires', 'end_date') %} falso {% de lo contrario %} verdadero {% endif %} - _sensor binario: - nombre: _vacaciones escolares_single tomorrow_id: binario_sensor.vacations_scolaires_demain Estado: |- {% establecido mañana = (como _timestamp(now()) + (24*3600)) | timestamp_custom('%Y-%m-%d', Verdadero) %} {% si mañana < state_attr('sensor.vacances_scolaires', 'start_date') o mañana > state_attr('sensor.vacances_scolaires', 'end_date') %} falso {% de lo contrario %} verdadero {% endif %}     

 

Resultado de estos sensores (probado en vacaciones)

A binary_sensor para permitir la actualización de Pronote

No es necesario actualizar Pronote durante los días festivos o no laborables.

He creado un _sensor binario que permitirá actualizar Pronote o no.

En mi expediente templates.yaml, añado este sensor:

- binario_sensor: - nombre: Autorizar _miseajour _pronote _id único: binary_sensor.authorise_miseajour_pronote estado: «{{ is_state('binary_sensor.vacances_scolaires_today', 'off') and is_state('binary_sensor.open_today', 'on')}}» (en inglés).

Agregar una condición para iniciar la actualización

Como se especifica en el Tutorial de integración de Pronote, agregamos una automatización para lanzar la actualización de Pronote regularmente, y con la nueva entidad binary_sensor.allow _miseajour _pronote, permitiremos la actualización solo si binary_sensor.allow _miseajour _pronote=on

Aquí está el código YAML completo de la automatización

alias: Descripción actualizada de la nota: Activador "": - plataforma: horario_pattern horas: /4 condición: - condición: _id, entidad estatal: binary_sensor.authorise_miseajour_pronote estado: Acción "en marcha": - servicio: shell_command.update_datos de la nota: Modo {}: soltero

Así, en días laborables, excluyendo las vacaciones escolares, se activa la autorización y Pronote se actualizará cada 4 horas.