Api Tempo probléme application

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 partie 3: 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 :

label

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.

5 « J'aime »