Bonjour,
J’ai découvert qu’il existait des sites qui faisaient des prévisions de couleur Tempo pour les prochains jours. Celui de Open DPE a particulièrement retenu mon attention et le développeur est à l’écoute et réactif.
En attendant qu’une proposition d’amélioration de l’intégration RTE Tempo soit proposée, on peut utiliser l’intégration Multiscrape pour lire le JSON de Open DPE et en extraire les données brutes des jours. Ces données brutes sont stockées dans des sensor.opendpe_raw_day1 à sensor.opendpe_raw_day9 avec ce code yaml pour Multiscrape :
multiscrape:
####### OpenDPE raw #######
- name: test_opendpe
resource: https://open-dpe.fr/assets/tempo_days_lite.json
scan_interval: 21600
sensor:
- name: "OpenDPE Raw Day 1"
unique_id: opendpe_raw_day1
value_template: >
{% if value_json[0] is defined %}
{{ value_json[0].date }}
{% else %}
unavailable
{% endif %}
attributes:
- name: "color"
value_template: >
{% if value_json[0] is defined %}
{{ value_json[0].couleur }}
{% endif %}
- name: "probability"
value_template: >
{% if value_json[0] is defined %}
{{ (value_json[0].probability) }}
{% endif %}
- name: "OpenDPE Raw Day 2"
unique_id: opendpe_raw_day2
value_template: >
{% if value_json[1] is defined %}
{{ value_json[1].date }}
{% else %}
unavailable
{% endif %}
attributes:
- name: "color"
value_template: >
{% if value_json[1] is defined %}
{{ value_json[1].couleur }}
{% endif %}
- name: "probability"
value_template: >
{% if value_json[1] is defined %}
{{ (value_json[1].probability) }}
{% endif %}
- name: "OpenDPE Raw Day 3"
unique_id: opendpe_raw_day3
value_template: >
{% if value_json[2] is defined %}
{{ value_json[2].date }}
{% else %}
unavailable
{% endif %}
attributes:
- name: "color"
value_template: >
{% if value_json[2] is defined %}
{{ value_json[2].couleur }}
{% endif %}
- name: "probability"
value_template: >
{% if value_json[2] is defined %}
{{ (value_json[2].probability) }}
{% endif %}
- name: "OpenDPE Raw Day 4"
unique_id: opendpe_raw_day4
value_template: >
{% if value_json[3] is defined %}
{{ value_json[3].date }}
{% else %}
unavailable
{% endif %}
attributes:
- name: "color"
value_template: >
{% if value_json[3] is defined %}
{{ value_json[3].couleur }}
{% endif %}
- name: "probability"
value_template: >
{% if value_json[3] is defined %}
{{ (value_json[3].probability) }}
{% endif %}
- name: "OpenDPE Raw Day 5"
unique_id: opendpe_raw_day5
value_template: >
{% if value_json[4] is defined %}
{{ value_json[4].date }}
{% else %}
unavailable
{% endif %}
attributes:
- name: "color"
value_template: >
{% if value_json[4] is defined %}
{{ value_json[4].couleur }}
{% endif %}
- name: "probability"
value_template: >
{% if value_json[4] is defined %}
{{ (value_json[4].probability) }}
{% endif %}
- name: "OpenDPE Raw Day 6"
unique_id: opendpe_raw_day6
value_template: >
{% if value_json[5] is defined %}
{{ value_json[5].date }}
{% else %}
unavailable
{% endif %}
attributes:
- name: "color"
value_template: >
{% if value_json[5] is defined %}
{{ value_json[5].couleur }}
{% endif %}
- name: "probability"
value_template: >
{% if value_json[5] is defined %}
{{ (value_json[5].probability) }}
{% endif %}
- name: "OpenDPE Raw Day 7"
unique_id: opendpe_raw_day7
value_template: >
{% if value_json[6] is defined %}
{{ value_json[6].date }}
{% else %}
unavailable
{% endif %}
attributes:
- name: "color"
value_template: >
{% if value_json[6] is defined %}
{{ value_json[6].couleur }}
{% endif %}
- name: "probability"
value_template: >
{% if value_json[6] is defined %}
{{ (value_json[6].probability) }}
{% endif %}
- name: "OpenDPE Raw Day 8"
unique_id: opendpe_raw_day8
value_template: >
{% if value_json[7] is defined %}
{{ value_json[7].date }}
{% else %}
unavailable
{% endif %}
attributes:
- name: "color"
value_template: >
{% if value_json[7] is defined %}
{{ value_json[7].couleur }}
{% endif %}
- name: "probability"
value_template: >
{% if value_json[7] is defined %}
{{ (value_json[7].probability) }}
{% endif %}
- name: "OpenDPE Raw Day 9"
unique_id: opendpe_raw_day9
value_template: >
{% if value_json[8] is defined %}
{{ value_json[8].date }}
{% else %}
unavailable
{% endif %}
attributes:
- name: "color"
value_template: >
{% if value_json[8] is defined %}
{{ value_json[8].couleur }}
{% endif %}
- name: "probability"
value_template: >
{% if value_json[8] is defined %}
{{ (value_json[8].probability) }}
{% endif %}
Ensuite, il faut créer des template_sensor pour faire correspondre les données avec les bons jours. Sinon, on risque, en cas de décalage des données du site, d’avoir des valeurs incohérentes.
Voici le code des capteurs (ici dans un fichier template.yaml) :
- sensor:
####### Prévisions Tempo OpenDPE #######
- name: "OpenDPE forecast J2"
unique_id: opendpe_forecast_j2
availability: > #Pour mettre à jours les capteurs sous-jacents lorsque le raw1 est mis à jour
{{ states('sensor.opendpe_raw_day1') not in ['unavailable', 'unknown', ''] }}
state: >
{% set target_date = (now() + timedelta(days=2)).strftime('%Y-%m-%d') %}
{% set ns = namespace(couleur='unknown') %}
{% for i in range(1, 12) %}
{% set sensor = 'sensor.opendpe_raw_day' ~ i %}
{% if states(sensor) == target_date %}
{% set ns.couleur = state_attr(sensor, 'color') | default('unknown') %}
{% endif %}
{% endfor %}
{{ ns.couleur }}
attributes:
date: "{{ (now() + timedelta(days=2)).strftime('%Y-%m-%d') }}"
probability: >
{% set target_date = (now() + timedelta(days=2)).strftime('%Y-%m-%d') %}
{% set ns = namespace(prob='') %}
{% for i in range(1, 12) %}
{% set sensor = 'sensor.opendpe_raw_day' ~ i %}
{% if states(sensor) == target_date %}
{% set ns.prob = state_attr(sensor, 'probability') | default('') %}
{% endif %}
{% endfor %}
{{ ns.prob }}
- name: "OpenDPE forecast J3"
unique_id: opendpe_forecast_j3
availability: > #Pour mettre à jours les capteurs sous-jacents lorsque le raw1 est mis à jour
{{ states('sensor.opendpe_raw_day1') not in ['unavailable', 'unknown', ''] }}
state: >
{% set target_date = (now() + timedelta(days=3)).strftime('%Y-%m-%d') %}
{% set ns = namespace(couleur='unknown') %}
{% for i in range(1, 12) %}
{% set sensor = 'sensor.opendpe_raw_day' ~ i %}
{% if states(sensor) == target_date %}
{% set ns.couleur = state_attr(sensor, 'color') | default('unknown') %}
{% endif %}
{% endfor %}
{{ ns.couleur }}
attributes:
date: "{{ (now() + timedelta(days=3)).strftime('%Y-%m-%d') }}"
probability: >
{% set target_date = (now() + timedelta(days=3)).strftime('%Y-%m-%d') %}
{% set ns = namespace(prob='') %}
{% for i in range(1, 12) %}
{% set sensor = 'sensor.opendpe_raw_day' ~ i %}
{% if states(sensor) == target_date %}
{% set ns.prob = state_attr(sensor, 'probability') | default('') %}
{% endif %}
{% endfor %}
{{ ns.prob }}
- name: "OpenDPE forecast J4"
unique_id: opendpe_forecast_j4
availability: > #Pour mettre à jours les capteurs sous-jacents lorsque le raw1 est mis à jour
{{ states('sensor.opendpe_raw_day1') not in ['unavailable', 'unknown', ''] }}
state: >
{% set target_date = (now() + timedelta(days=4)).strftime('%Y-%m-%d') %}
{% set ns = namespace(couleur='unknown') %}
{% for i in range(1, 12) %}
{% set sensor = 'sensor.opendpe_raw_day' ~ i %}
{% if states(sensor) == target_date %}
{% set ns.couleur = state_attr(sensor, 'color') | default('unknown') %}
{% endif %}
{% endfor %}
{{ ns.couleur }}
attributes:
date: "{{ (now() + timedelta(days=4)).strftime('%Y-%m-%d') }}"
probability: >
{% set target_date = (now() + timedelta(days=4)).strftime('%Y-%m-%d') %}
{% set ns = namespace(prob='') %}
{% for i in range(1, 12) %}
{% set sensor = 'sensor.opendpe_raw_day' ~ i %}
{% if states(sensor) == target_date %}
{% set ns.prob = state_attr(sensor, 'probability') | default('') %}
{% endif %}
{% endfor %}
{{ ns.prob }}
- name: "OpenDPE forecast J5"
unique_id: opendpe_forecast_j5
availability: > #Pour mettre à jours les capteurs sous-jacents lorsque le raw1 est mis à jour
{{ states('sensor.opendpe_raw_day1') not in ['unavailable', 'unknown', ''] }}
state: >
{% set target_date = (now() + timedelta(days=5)).strftime('%Y-%m-%d') %}
{% set ns = namespace(couleur='unknown') %}
{% for i in range(1, 12) %}
{% set sensor = 'sensor.opendpe_raw_day' ~ i %}
{% if states(sensor) == target_date %}
{% set ns.couleur = state_attr(sensor, 'color') | default('unknown') %}
{% endif %}
{% endfor %}
{{ ns.couleur }}
attributes:
date: "{{ (now() + timedelta(days=5)).strftime('%Y-%m-%d') }}"
probability: >
{% set target_date = (now() + timedelta(days=5)).strftime('%Y-%m-%d') %}
{% set ns = namespace(prob='') %}
{% for i in range(1, 12) %}
{% set sensor = 'sensor.opendpe_raw_day' ~ i %}
{% if states(sensor) == target_date %}
{% set ns.prob = state_attr(sensor, 'probability') | default('') %}
{% endif %}
{% endfor %}
{{ ns.prob }}
- name: "OpenDPE forecast J6"
unique_id: opendpe_forecast_j6
availability: > #Pour mettre à jours les capteurs sous-jacents lorsque le raw1 est mis à jour
{{ states('sensor.opendpe_raw_day1') not in ['unavailable', 'unknown', ''] }}
state: >
{% set target_date = (now() + timedelta(days=6)).strftime('%Y-%m-%d') %}
{% set ns = namespace(couleur='unknown') %}
{% for i in range(1, 12) %}
{% set sensor = 'sensor.opendpe_raw_day' ~ i %}
{% if states(sensor) == target_date %}
{% set ns.couleur = state_attr(sensor, 'color') | default('unknown') %}
{% endif %}
{% endfor %}
{{ ns.couleur }}
attributes:
date: "{{ (now() + timedelta(days=6)).strftime('%Y-%m-%d') }}"
probability: >
{% set target_date = (now() + timedelta(days=6)).strftime('%Y-%m-%d') %}
{% set ns = namespace(prob='') %}
{% for i in range(1, 12) %}
{% set sensor = 'sensor.opendpe_raw_day' ~ i %}
{% if states(sensor) == target_date %}
{% set ns.prob = state_attr(sensor, 'probability') | default('') %}
{% endif %}
{% endfor %}
{{ ns.prob }}
Vous pouvez ensuite utiliser ces données dans cette carte Lovelace
En espérant que l’intégration mise à jour arrive vite…










