Get EDF Tempo information

Hi c4rr3r4

have you find a solution to integrate the RTE Api ?
can you share you code for the sensor and the display?
thank you

Here the last code I use :

configuration.yaml

rest: !include rest.yaml

rest.yaml

- resource_template: https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant={{now().strftime("%Y-%m-%d")}}
  scan_interval: 3600
  sensor:
    - name: "Tempo Demain"
      value_template: "{{ value_json.couleurJourJ1 }}"
    - name: "Tempo Aujourd'hui"
      value_template: "{{ value_json.couleurJourJ }}"
- resource: https://particulier.edf.fr/services/rest/referentiel/getNbTempoDays?TypeAlerte=TEMPO
  scan_interval: 3600
  sensor:
    - name: "Jours Rouge restants"
      value_template: "{{ value_json.PARAM_NB_J_ROUGE }}"
    - name: "Jours Blanc restants"
      value_template: "{{ value_json.PARAM_NB_J_BLANC }}"
    - name: "Jours Bleu restants"
      value_template: "{{ value_json.PARAM_NB_J_BLEU }}"

Using rest in place of sensors permits to get all data from one API call.

5 Likes

Hello,

L’API d’EDF n’a pas l’air fameuse et semble surtout en retard par rapport à RTE (ce qui est logique car c’est eux qui définissent la couleur du jour il me semble).

J’ai fait quelque tests et comme l’indique @Florent_Coste il est assez simple de récuprer les infos depuis l’api RTE. En revanche il faut nécessairement faire une integration dédié pour gérer l’Oauth2 il me semble.

S’il y en a qui ont de l’expérience dans l’écriture d’une intégration HA et qui veulent m’aider je veux bien essayer de coder la partie authentification et récupération de datas

Fred

Merci pour le boulot ça fonctionne bien chez moi.

Pourquoi interroger toutes les heures ? Est-ce qu’une ou 2 fois par jour ne suffirait pas ? Cela limitera le risque de ban.
Petit détail, est-ce qu’on pourrait faire un affichage de la couleur du jour un peu plus sexy avec une image de la couleur par exemple ?

ça fonctionne bien pour moi avec la dernière proposition de TangiX et rest.yaml
Merci!

Bonjour à tous.

J’ai testé la méthode de TangiX mais rien n’y fait. Mes sensors restent silencieux.

Leurs valeurs restent « inconnu »

L’adresse est elle toujours bonne ?

Merci à vous et merci pour le partage.

Bonjour Archimède,
Pour moi ça fonctionne parfaitement. Laseule modification que j’ai faite est purement estétique, j’ai ajouté un regex pour supprimer le texte TEMPO_.
Voici ce que ça donne

- resource_template: https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant={{now().strftime("%Y-%m-%d")}}
  scan_interval: 3600
  sensor:
    - name: "Tempo Demain"
      value_template: "{{ value_json['couleurJourJ1']|regex_replace(find='^TEMPO_', replace='') }}"
    - name: "Tempo Aujourd'hui"
      value_template: "{{ value_json['couleurJourJ']|regex_replace(find='^TEMPO_', replace='') }}"
- resource: https://particulier.edf.fr/services/rest/referentiel/getNbTempoDays?TypeAlerte=TEMPO
  scan_interval: 3600
  sensor:
    - name: "Jours Rouge restants"
      value_template: "{{ value_json.PARAM_NB_J_ROUGE }}"
    - name: "Jours Blanc restants"
      value_template: "{{ value_json.PARAM_NB_J_BLANC }}"
    - name: "Jours Bleu restants"
      value_template: "{{ value_json.PARAM_NB_J_BLEU }}"

As-tu bien inclus le fichier rest.yaml dans configuration.yaml?

2 Likes

Merci beaucoup Patrice pour ta réponse.

Je pense avoir trouver le problème. Je me suis fait bloqué par les serveurs EDF.
Ca fait donc deux jours.
Je vais voir si je peu les contacter demain pour débloquer la situation.
je vous tiendrais au courant.

Bonjours à tous.
Petit retour sur mon expérience. En essayant plusieurs code différents pour ajouter Tempo à mon assistance je me suis fais black-listé par le site d’EDF (sans doute trop de raquettes en trop peu de temps). Il m’a donc fallu attendre un peu plus de 48h pour pouvoir de nouveau envoyer des requêtes au serveur.
Du coup maintenant tout marche correctement.
J’ai même pu utiliser le dernier code de PatriceL qui intègre un regex utile pour la mise en page dans Lovelace.
Merci à tous pour le partage.

1 Like

Hi,
I would like to create an automation with this sensor. When it change from NON_DEFINI to BLEU or BLANC, I would do an action. The issue is I can’t put NON_DEFINI in the « FROM » box. Do you know why and what can I do ?

Thanks in advance

Hello Nouch77
I did this automation and it works fine for me. I received an alert on my mobile phone when the state moved from NON_DEFINI to BLEU.
Funilly enough, I forgot to put BLEU in the To: field, and I received the message, so you can do that if you just want to detect when the value change.
BR

Voici la carte que j’utilise à base de ‘multiple-entity-row’ installable via HACS :
image
C’est pas extraordinaire mais c’est compact et facilement lisible

type: entities
entities:
  - entity: sensor.tempo_aujourd_hui
    type: custom:multiple-entity-row
    icon: mdi:currency-eur
    name: Aujourd'hui
    show_state: false
    entities:
      - name: false
        icon: mdi:radiobox-blank
        icon_color: blue
        hide_if: TEMPO_BLEU
      - name: false
        icon: mdi:radiobox-marked
        icon_color: blue
        hide_if:
          - TEMPO_BLANC
          - TEMPO_ROUGE
          - ND
          - NON_DEFINI
          - unknown
      - name: false
        icon: mdi:radiobox-blank
        icon_color: light_grey
        hide_if: TEMPO_BLANC
      - name: false
        icon: mdi:radiobox-marked
        icon_color: light_grey
        hide_if:
          - TEMPO_BLEU
          - TEMPO_ROUGE
          - ND
          - NON_DEFINI
          - unknown
      - name: false
        icon: mdi:radiobox-blank
        icon_color: red
        hide_if: TEMPO_ROUGE
      - name: false
        icon: mdi:radiobox-marked
        icon_color: light_grey
        hide_if:
          - TEMPO_BLEU
          - TEMPO_BLANC
          - ND
          - NON_DEFINI
          - unknown
  - entity: sensor.tempo_demain
    type: custom:multiple-entity-row
    icon: mdi:currency-eur
    name: Demain
    show_state: false
    entities:
      - name: false
        icon: mdi:radiobox-blank
        icon_color: blue
        hide_if: TEMPO_BLEU
      - name: false
        icon: mdi:radiobox-marked
        icon_color: blue
        hide_if:
          - TEMPO_BLANC
          - TEMPO_ROUGE
          - ND
          - NON_DEFINI
          - unknown
      - name: false
        icon: mdi:radiobox-blank
        icon_color: light_grey
        hide_if: TEMPO_BLANC
      - name: false
        icon: mdi:radiobox-marked
        icon_color: light_grey
        hide_if:
          - TEMPO_BLEU
          - TEMPO_ROUGE
          - ND
          - NON_DEFINI
          - unknown
      - name: false
        icon: mdi:radiobox-blank
        icon_color: red
        hide_if: TEMPO_ROUGE
      - name: false
        icon: mdi:radiobox-marked
        icon_color: light_grey
        hide_if:
          - TEMPO_BLEU
          - TEMPO_BLANC
          - ND
          - NON_DEFINI
          - unknown
  - entity: sensor.jours_rouge_restants
    type: custom:multiple-entity-row
    icon: mdi:calendar-today
    name: Jours restants
    show_state: false
    entities:
      - entity: sensor.jours_bleu_restants
        name: false
      - entity: sensor.jours_blanc_restants
        name: false
      - entity: sensor.jours_rouge_restants
        name: false
title: Tempo

Bonjour,
quelqu’un aurait le code pour EJP au lieu de Tempo ? J’arrive toujours à récupérer le nombre de jours EJP restants mais plus EJP aujourd’hui ni EJP demain …
Merci

Bonjour,
idem pour moi, impossible de trouver le serveur qui fournit les données EJP du jour et du lendemain.
seul le nombre de jours est accessible.

si quelqu’un à la bonne adresse

merci

Salut,

désolé pour la réponse tardive.

Voici ce que j’ai fait pour utiliser l’API RTE (qui fonctionne de nouveau seulement depuis quelques jours, down depuis avril).

Il faut déjà que tu te crées une apiKey sur le site de l’API RTE Tempo-Like-Supply-Contract : API Catalog - API Data RTE
→ Abonnez-vous à l’API

Ensuite voilà ce que j’ai dans mon sensors.yaml (ancienne version, je n’ai pas mis à jour depuis)

  - platform: rest
    name: rte_token
    resource: https://digital.iservices.rte-france.com/token/oauth
    method: GET
    scan_interval: 7000
    headers:
      Authorization: Basic <ici_tu_mets_ton_apiKey_rte>
      Content-Type: application/x-www-form-urlencoded
    value_template: >
      {% if value_json.access_token %}
        {{value_json.access_token}}
      {% else %}
        KO
      {% endif %}
      
  - platform: command_line
    name: color_2days
    command: "curl -X GET 'https://digital.iservices.rte-france.com/open_api/tempo_like_supply_contract/v1/tempo_like_calendars?start_date={{now().strftime(states('input_text.date_format_rte'))}}&end_date={{(now()+timedelta(days=2)).strftime(states('input_text.date_format_rte'))}}' -H 'Authorization: Bearer {{ states('sensor.rte_token') }}'"
    scan_interval: 1800
    value_template: 'OK'
    json_attributes:
      - tempo_like_calendars

  - platform: template
    sensors:
      rte_today_color:
        friendly_name: Aujourd'hui
        value_template: >
          {% set today = now().strftime(states('input_text.date_format_rte')) %}
          {% set today_item = states.sensor.color_2days.attributes['tempo_like_calendars']['values'] | selectattr('start_date', 'eq', today) | list | first %}
          {{ today_item.value }}
      rte_tomorrow_color:
        friendly_name: Demain
        value_template: >
          {% set tomorrow = (now()+timedelta(days=1)).strftime(states('input_text.date_format_rte')) %}
          {% set tomorrow_item = states.sensor.color_2days.attributes['tempo_like_calendars']['values'] | selectattr('start_date', 'eq', tomorrow) | list | first %}
          {{ tomorrow_item.value }}

le premier appel rest te permet de te générer un token d’authentification pour appeler l’api tempo.
le deuxième appel rest te permet de récupérer les infos tempo dans un json et de ne récupérer que ‘tempo_like_calendar’
le template te permet de faire 2 sensors ‘today’ et ‘tomorrow’

(vous pouvez voir 2 façons de faire des appels Rest, soit par la platform ‘rest’ soit par la platform ‘commande line’ en faisant un ‘curl’, je ne suis pas arrivé à utiliser la platform ‘rest’ pour le 2ème appel mais ça fonctionne très bien)

vous remarquerez que j’ai mis le format de la date dans une variable (une entrée texte) ‘input_text.date_format_rte’, ça m’évitait à l’époque de redémarrer pour tester le format de cette foutue date.

Ensuite côté HA et Lovelace j’ai ça :
image

Avec le code suivant :

type: entities
entities:
  - entity: input_text.date_format_rte
  - entity: sensor.rte_token
    name: token
    secondary_info: last-updated
  - entity: sensor.color_2days
    secondary_info: last-updated
  - entity: sensor.rte_today_color
  - entity: sensor.rte_tomorrow_color
state_color: false
title: Paramètres globaux

Malheureusement je n’ai pas assez de temps à consacrer à tout ça pour l’optimiser mais ça fait une bonne base pour ceux qui veulent l’utiliser :wink:

3 Likes

Merci pour ce partage, c’est effectivement la manière la plus compacte.
Chez moi pas de couleurs affichées, on verra plus tard :slight_smile:

great job, please can you share your template code? steplait, steplait…

Je n’ai pas le template de cette présentation, c’est ce qu’il y a sur le site de rte-france.

J’avoue ne pas avoir de temps à consacrer à ça, dommage. :cry:

Voici mon oeuvre :slight_smile:

tempo HA
J’utilise une pile verticale de Lovelace et card_mod pour gérer l’affichage

Tuile N°1

show_name: true
show_icon: false
show_state: true
type: glance
entities:
  - entity: sensor.tempo_aujourd_hui
    card_mod:
      style: |
        :host .name {
          font-weight: normal;
          font-size: 80%;
           }
        :host {
          color: black;font-weight: bold;
          border-style: solid;
          border-radius: 15px;
          background: {% if is_state('sensor.tempo_aujourd_hui', 'ROUGE') %} 
                        red 
                      {% endif %}
                      {% if is_state('sensor.tempo_aujourd_hui', 'BLANC') %} 
                        white
                      {% endif %}
                      {% if is_state('sensor.tempo_aujourd_hui', 'BLEU') %} 
                        DodgerBlue
                      {% endif %}
                      {% if is_state('sensor.tempo_aujourd_hui', 'NON_DEFINI') %} 
                        lightgrey
                      {% endif %};
           color: {% if is_state('sensor.tempo_aujourd_hui', 'BLANC') %} 
                   black 
                  {% else %}
                   white 
                  {% endif %};
          }
  - entity: sensor.tempo_demain
    card_mod:
      style: |
        :host .name {
          font-weight: normal;
          font-size: 80%;
           }
        :host {
          color: black;font-weight: bold;
          border-style: double;
          border-radius: 15px;
          background: {% if is_state('sensor.tempo_demain', 'ROUGE') %} 
                        red 
                      {% endif %}
                      {% if is_state('sensor.tempo_demain', 'BLANC') %} 
                        white
                      {% endif %}
                      {% if is_state('sensor.tempo_demain', 'BLEU') %} 
                        DodgerBlue
                      {% endif %}
                      {% if is_state('sensor.tempo_demain', 'NON_DEFINI') %} 
                        lightgrey
                      {% endif %};
           color: {% if is_state('sensor.tempo_demain', 'BLANC') %} 
                   black 
                  {% else %}
                   white 
                  {% endif %};
          }
title: Couleur Tempo

Tuile N°2

show_name: true
show_icon: false
show_state: true
type: glance
entities:
  - entity: sensor.jours_bleu_restants
    card_mod:
      style: |
        :host {
          color: DodgerBlue;font-weight: bold;font-size: 24px;
           }
        :host .name {
          font-weight: normal;
          font-size: 12px;
           }
  - entity: sensor.jours_blanc_restants
    card_mod: null
    style: |
      :host {
        color: grey;font-weight: bold;font-size: 24px;
           }
      :host .name {
          font-weight: normal;
          font-size: 12px;
           }
  - entity: sensor.jours_rouge_restants
    card_mod: null
    style: |
      :host {
        color: tomato;font-weight: bold;font-size: 24px;
           }
      :host .name {
          font-weight: normal;
          font-size: 12px;
           }
7 Likes

Merci, c’est pas mal affiché comme ça !

Par contre pour la 1ère tuile, auj et demain sont blancs, ça donne du texte blanc sur fond blanc, du coup ça n’affiche rien :d