Skip to content

Public RTE endpoint #70

@Rubilmax

Description

@Rubilmax

The integration can be simplified using the 2 following public endpoints:

https://www.services-rte.com/cms/open_data/v1/tempoLight
https://www.services-rte.com/cms/open_data/v1/tempo?season=2025-2026

If only interested in the colors of today and tomorrow:

rest:
  - resource_template: >-
      {% set y = now().year %}
      {% set start_year = y if now().month >= 9 else (y - 1) %}
      https://www.services-rte.com/cms/open_data/v1/tempo?season={{ start_year }}-{{ start_year + 1 }}
    method: GET
    scan_interval: 86400  # we don't rely on polling; automation triggers at 10:40
    sensor:
      - name: "RTE Tempo Calendar"
        unique_id: rte_tempo_calendar
        icon: mdi:calendar-sync
        value_template: >-
          {% set vals = value_json.get('values', {}) %}
          {% set k = now().strftime('%Y-%m-%d') %}
          {{ vals.get(k, 'UNKNOWN') }}
        json_attributes:
          - values


template:
  - sensor:
      - name: "RTE Tempo Color Today"
        unique_id: rte_tempo_color_today
        icon: >-
          {% set c = this.state %}
          {% if c == 'BLUE' %} mdi:circle
          {% elif c == 'WHITE' %} mdi:circle-outline
          {% elif c == 'RED' %} mdi:alpha-r-circle-outline
          {% else %} mdi:help-circle-outline
          {% endif %}
        availability: >-
          {% set vals = state_attr('sensor.rte_tempo_calendar','values') or {} %}
          {% set k = now().strftime('%Y-%m-%d') %}
          {{ vals.get(k) in ['BLUE','WHITE','RED'] }}
        state: >-
          {% set vals = state_attr('sensor.rte_tempo_calendar','values') or {} %}
          {% set k = now().strftime('%Y-%m-%d') %}
          {{ vals.get(k) }}
        attributes:
          fallback_used: >-
            {% set vals = state_attr('sensor.rte_tempo_calendar','values') or {} %}
            {% set k = now().strftime('%Y-%m-%d') ~ '-fallback' %}
            {{ vals.get(k, 'unknown') }}

      - name: "RTE Tempo Color Tomorrow"
        unique_id: rte_tempo_color_tomorrow
        icon: >-
          {% set c = this.state %}
          {% if c == 'BLUE' %} mdi:circle
          {% elif c == 'WHITE' %} mdi:circle-outline
          {% elif c == 'RED' %} mdi:alpha-r-circle-outline
          {% else %} mdi:help-circle-outline
          {% endif %}
        availability: >-
          {% set vals = state_attr('sensor.rte_tempo_calendar','values') or {} %}
          {% set k = (now() + timedelta(days=1)).strftime('%Y-%m-%d') %}
          {{ vals.get(k) in ['BLUE','WHITE','RED'] }}
        state: >-
          {% set vals = state_attr('sensor.rte_tempo_calendar','values') or {} %}
          {% set k = (now() + timedelta(days=1)).strftime('%Y-%m-%d') %}
          {{ vals.get(k) }}
        attributes:
          fallback_used: >-
            {% set vals = state_attr('sensor.rte_tempo_calendar','values') or {} %}
            {% set k = (now() + timedelta(days=1)).strftime('%Y-%m-%d') ~ '-fallback' %}
            {{ vals.get(k, 'unknown') }}

      - name: "RTE Tempo Past Blue Days"
        unique_id: rte_tempo_past_blue_days
        icon: mdi:circle
        unit_of_measurement: "jours"
        availability: >-
          {% set vals = state_attr('sensor.rte_tempo_calendar','values') %}
          {{ vals is mapping and (vals | count) > 0 }}
        state: >-
          {% set vals = state_attr('sensor.rte_tempo_calendar','values') or {} %}
          {% set ns = namespace(n=0) %}
          {% for k, v in vals.items() %}
            {% if k|length == 10 and v == 'BLUE' %}
              {% set ns.n = ns.n + 1 %}
            {% endif %}
          {% endfor %}
          {{ ns.n }}

      - name: "RTE Tempo Remaining Blue Days"
        unique_id: rte_tempo_remaining_blue_days
        icon: mdi:circle
        unit_of_measurement: "jours"
        availability: >-
          {{ states('sensor.rte_tempo_past_blue_days') != 'unknown' }}
        state: >-
          {% set past_days = states('sensor.rte_tempo_past_blue_days') | int %}
          {% set y = now().year %}
          {% set start_year = y if now().month >= 9 else (y - 1) %}
          {% set end_year = start_year + 1 %}
          {% set leap_year = (end_year % 4 == 0) and ((end_year % 100 != 0) or (end_year % 400 == 0)) %}
          {{ (301 if leap_year else 300) - past_days }}

      - name: "RTE Tempo Past White Days"
        unique_id: rte_tempo_past_white_days
        icon: mdi:circle-outline
        unit_of_measurement: "jours"
        availability: >-
          {% set vals = state_attr('sensor.rte_tempo_calendar','values') %}
          {{ vals is mapping and (vals | count) > 0 }}
        state: >-
          {% set vals = state_attr('sensor.rte_tempo_calendar','values') or {} %}
          {% set ns = namespace(n=0) %}
          {% for k, v in vals.items() %}
            {% if k|length == 10 and v == 'WHITE' %}
              {% set ns.n = ns.n + 1 %}
            {% endif %}
          {% endfor %}
          {{ ns.n }}

      - name: "RTE Tempo Remaining White Days"
        unique_id: rte_tempo_remaining_white_days
        icon: mdi:circle-outline
        unit_of_measurement: "jours"
        availability: >-
          {{ states('sensor.rte_tempo_past_white_days') != 'unknown' }}
        state: >-
          {% set past_days = states('sensor.rte_tempo_past_white_days') | int %}
          {{ 43 - past_days }}

      - name: "RTE Tempo Past Red Days"
        unique_id: rte_tempo_past_red_days
        icon: mdi:alpha-r-circle-outline
        unit_of_measurement: "jours"
        availability: >-
          {% set vals = state_attr('sensor.rte_tempo_calendar','values') %}
          {{ vals is mapping and (vals | count) > 0 }}
        state: >-
          {% set vals = state_attr('sensor.rte_tempo_calendar','values') or {} %}
          {% set ns = namespace(n=0) %}
          {% for k, v in vals.items() %}
            {% if k|length == 10 and v == 'RED' %}
              {% set ns.n = ns.n + 1 %}
            {% endif %}
          {% endfor %}
          {{ ns.n }}

      - name: "RTE Tempo Remaining Red Days"
        unique_id: rte_tempo_remaining_red_days
        icon: mdi:alpha-r-circle-outline
        unit_of_measurement: "jours"
        availability: >-
          {{ states('sensor.rte_tempo_past_red_days') != 'unknown' }}
        state: >-
          {% set past_days = states('sensor.rte_tempo_past_red_days') | int %}
          {{ 22 - past_days }}

automation:
  - id: rte_tempo_daily_refresh
    alias: "RTE Tempo Daily Refresh (10:40)"
    mode: single
    trigger:
      - platform: time
        at: "10:40:00"
    action:
      - service: homeassistant.update_entity
        target:
          entity_id:
            - sensor.rte_tempo_calendar

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions