Je tiens d’abord a dire merci a l’auteur de rtetempo
Mais, moi, je suis contre de devoir crée un compte chez RTE pour récupérer 1 ou 3 fois par jour une information presque du domaine publique …
Et comme tempo est une spécificité d’EDF, je récupère cette information sur le site d’edf (au format json)
Alors, je vous propose une autre façon de faire (sûrement moins robuste mais qui fonctionne très bien depuis 10mois chez moi )
-
1/ installer multiscrape via hacs
ps : il est possible de passer par le scrape « normal » mais alors il faut augmenter le nombre de requêtes sur leurs API et résoudre les soucis de jours temps (un jour tempo commencer a 6h et fini a 6h). -
2/ changer le fichier configuration.yml avec
multiscrape: !include multiscrape.yaml
ps: état facultative, on peut mettre le code de la partie3:
directement dans configuration.yaml mais ça aide pas la lisibilité du code , … -
3/ Utiliser ce code dans multiscrape.yml
Code a mettre dans multiscrape.yml
- name: edf_tempo
resource: https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant={{now().strftime("%Y-%m-%d")}}
scan_interval: 0
headers:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Content-Type: application/json
User-Agent: Wget/1.20.3 (linux-gnu)
button:
- name: EDF Force refresh Tempo Information
unique_id: rte_refresh
sensor:
- name: EDF Tempo Couleur Aujourd'hui
unique_id: edf_tempo_current
icon: mdi:flash
value_template: >
{% if value_json.couleurJourJ in ['TEMPO_BLEU','TEMPO_BLANC','TEMPO_ROUGE'] %}
{{ value_json.couleurJourJ |regex_replace(find='^TEMPO_', replace='') }}
{% else %}
unknown
{% endif %}
- name: EDF Tempo Couleur Demain
unique_id: edf_tempo_tomorrow
icon: mdi:flash-outline
value_template: >
{% if value_json.couleurJourJ1 in ['TEMPO_BLEU','TEMPO_BLANC','TEMPO_ROUGE'] %}
{{ value_json.couleurJourJ1 |regex_replace(find='^TEMPO_', replace='') }}
{% else %}
unknown
{% endif %}
- name: EDF Tempo Tarif Demain
unique_id: edf_tempo_tomorrow_cost
icon: mdi:currency-eur
device_class: monetary
unit_of_measurement: "€/kWh"
value_template: >
{% if (value_json.couleurJourJ1 == 'TEMPO_BLEU') %}
0.1369
{% elif (value_json.couleurJourJ1 == 'TEMPO_BLANC') %}
0.1654
{% elif (value_json.couleurJourJ1 == 'TEMPO_ROUGE') %}
0.7324
{% else %}
0
{% endif %}
- name: EDF Tempo Tarif Aujourd'hui
unique_id: edf_tempo_current_cost
icon: mdi:currency-eur
device_class: monetary
unit_of_measurement: "€/kWh"
value_template: >
{% if (value_json.couleurJourJ == 'TEMPO_BLEU') %}
{% if ((now()| as_local).hour >= 22 or (now()|as_local).hour < 6) %}
0.1056
{% else %}
0.1369
{% endif %}
{% elif (value_json.couleurJourJ == 'TEMPO_BLANC') %}
{% if ((now()| as_local).hour >= 22 or (now()|as_local).hour < 6) %}
0.1246
{% else %}
0.1654
{% endif %}
{% elif (value_json.couleurJourJ == 'TEMPO_ROUGE') %}
{% if ((now()| as_local).hour >= 22 or (now()|as_local).hour < 6) %}
0.1328
{% else %}
0.7324
{% endif %}
{% else %}
0
{% endif %}
- name: EDF Tempo Hier
unique_id: edf_tempo_hier
icon: mdi:currency-eur
value_template: >
{{ states('sensor.edf_tempo_current') }}
- name: rte_tempo_planning
resource: https://particulier.edf.fr/services/rest/referentiel/getNbTempoDays?TypeAlerte=TEMPO
scan_interval: 86400
headers:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Content-Type: application/json
User-Agent: Wget/1.20.3 (linux-gnu)
sensor:
- name: EDF Tempo jours bleu restant
unique_id: edf_tempo_blue_remaining
value_template: "{{ value_json.PARAM_NB_J_BLEU | int }}"
unit_of_measurement: "jours"
icon: mdi:flash-outline
- name: EDF Tempo jours blanc restant
unique_id: edf_tempo_white_remaining
value_template: "{{ value_json.PARAM_NB_J_BLANC | int }}"
unit_of_measurement: "jours"
icon: mdi:flash
- name: EDF Tempo jours rouge restant
unique_id: edf_tempo_red_remaining
value_template: "{{ value_json.PARAM_NB_J_ROUGE | int }}"
unit_of_measurement: "jours"
icon: mdi:flash-alert
-
4/ Recharger la configuration de multiscrape via Outils de développement / YAML / MULTISCRAPE SCRAPING COMPONENT
-
5/ Crée une automation pour refresh tempo a la bonne heure
pour faire un refresh des infos temps juste pour résoudre « le souci des jours temps » et limiter le nombre de requetes, voici l’automatisation a utiliser :
Code a mettre dans automatisation.yaml
alias: EDF Tempo Force Refresh tempo Bleu/Blanc/Rouge Sensor/Tarif
description: Force refresh at 6h00, 11h40, 22h00
trigger:
- platform: time
at: 06:00:01
- platform: time
at: '11:40:00'
- platform: time
at: '22:00:01'
condition: []
action:
- service: multiscrape.trigger_edf_tempo
data: {}
mode: single
- 6/ Optionnel: notification attention demain tarif rouge
Voici un code pour faire une notification (texte & vocale) sur un smartphone si demain est un jour rouge
Code a mettre dans automatisation.yaml
id: '1673281984434'
alias: EDF Tarif Rouge Notification
description: 'Notification Alerte tempo : quand demain sera un tarifs rouge'
trigger:
- platform: state
entity_id:
- sensor.edf_tempo_tomorrow
from: unknown
to: ROUGE
condition: []
action:
- service: notify.mobile_app_XXXX
data:
message: TTS
data:
ttl: 0
priority: high
media_stream: alarm_stream_max
tts_text: Attention Demain EDF tarif Rouge
- service: notify.mobile_app_XXX
data:
title: EDF tarif Rouge
message: Attention Demain EDF tarif Rouge
data:
ttl: 0
priority: high
- 7/ Optionnel: affiche tempo via 2 badges
Il y a plein de façon d’afficher le « jour tempo » mais, pour moi, la plus visuel et réduite est avec les badges :
Sur le tableau de bord : Trois petits points : Modifier le tableau de bord / Trois petits points : Éditeur de configuration
code a mettre dans le dashboard
badges:
- entity: sensor.edf_tempo_current_cost
name: Aujourd'hui
card_mod:
style: |
:host {
{% set state = states('sensor.edf_tempo_current') %}
{% if state == 'BLEU' %}
--label-badge-red: DodgerBlue;
{% elif state == 'BLANC' %}
--label-badge-red: silver;
{% elif state == 'ROUGE' %}
--label-badge-red: red;
{% else %}
--label-badge-red: grey;
{% endif %}
}
- entity: sensor.edf_tempo_tomorrow_cost
name: Demain
card_mod:
style: |
:host {
{% set state = states('sensor.edf_tempo_tomorrow') %}
{% if state == 'BLEU' %}
--label-badge-red: DodgerBlue;
{% elif state == 'BLANC' %}
--label-badge-red: silver;
{% elif state == 'ROUGE' %}
--label-badge-red: red;
{% else %}
--label-badge-red: grey;
{% endif %}
}
Bon tempo à vous.