[TUTO] Intégration alerte EJP - [Béta Test]

Bonjour,

script réalisé sur mon serveur web qui réalise un json.

1. Intégration dans configuration.yaml
rest: !include rest.yaml

2. Création du fichier rest.yaml

resource: https://sitenord.fr/ejp.json
scan_interval: 60
sensor:
  - name: "Aujourd'hui"
    value_template: "{{ value_json.aujourdhui }}"
  - name: "Aujourd'hui tarif"
    value_template: "{{ value_json.aujourdhuiejp }}"
  - name: "Demain"
    value_template: "{{ value_json.demain }}"
  - name: "Demain tarif"
    value_template: "{{ value_json.demainejp }}"
  - name: "Nombre de jours"
    value_template: "{{ value_json.nbrjours }}"
  - name: "Jusqu'à"
    value_template: "{{ value_json.jusquau }}"

4 entités disponibles sur l’EJP

3. Exemple d’utilisation

  • Carte verticale
type: vertical-stack
cards:
  - type: picture
    image: https://sitenord.fr/edf_ejp_jours_0.png
    theme: Mushroom Shadow
    tap_action:
      action: none
    hold_action:
      action: none
  - square: false
    type: grid
    cards:
      - type: custom:vertical-stack-in-card
        cards:
          - type: custom:button-card
            entity: sensor.aujourd_hui_tarif
            name: AUJOURD'HUI
            show_state: true
            styles:
              grid:
                - grid-template-areas: '"n" "i" "s"'
              icon:
                - color: |
                    [[[
                          if (entity.state == 'Pas d\'EJP') return 'green' 
                          if (entity.state == 'Jamais EJP') return 'darkblue' 
                          if (entity.state == 'EJP') return 'red' 
                          else return 'grey';                  
                    ]]]
            icon: mdi:home-lightning-bolt-outline
          - type: custom:button-card
            entity: sensor.aujourd_hui
            show_state: true
            show_name: false
            show_icon: false
            styles:
              card:
                - font-size: 15px
                - margin-top: '-8%'
                - background-color: transparent;
      - type: custom:vertical-stack-in-card
        cards:
          - type: custom:button-card
            entity: sensor.demain_tarif
            name: DEMAIN
            show_state: true
            styles:
              grid:
                - grid-template-areas: '"n" "i" "s"'
              icon:
                - color: |
                    [[[
                          if (entity.state == 'Pas d\'EJP') return 'green' 
                          if (entity.state == 'Jamais EJP') return 'darkblue' 
                          if (entity.state == 'EJP') return 'red' 
                          else return 'grey';
                    ]]]
            icon: mdi:home-lightning-bolt-outline
          - type: custom:button-card
            entity: sensor.demain
            show_state: true
            show_name: false
            show_icon: false
            styles:
              card:
                - font-size: 15px
                - margin-top: '-8%'
                - background-color: transparent;
    columns: 2
  - type: entities
    entities:
      - entity: sensor.nombre_de_jours
        icon: mdi:calendar-check
        secondary_info: last-changed
    state_color: false
    theme: Mushroom Square Shadow

image

Si l’entité de la date est, soit trop haute, soit trop basse, faire varier le % de

- margin-top: '-8%'

Dans l’attente de vos remarques lors de l’utilisation et des modifications possibles

Bj

cela pourrait peut etre d’aider ou te mettre sur la voie

J’ai trouvé une solution que je propose en béta-test, si cela peut intéresser des personnes.

Je suis trés intéressé
Moi j’utilise :/particulier.edf.fr/services/rest/referentiel/historicEJPStore?searchType=ejp

Vous me direz si cela fonctionne sur votre HA
Je vais essayer de mettre sur les button-card l’information date.
J’ai fait cela en quelques heures, il faut que je paufine.

Si vous savez le faire, je suis preneur

HS mais je viens de regarder car je ne savais pas ce que c’était les EJP, mais c’est quoi l’avantage par rapport a Tempo ? Car 150c/kw de 7h a1h22 jours par an ca fait mal. Et surtout que le reste c’est 15c/kw.

L’offre tempo me semble clairement plus intéressante.

C’est à dire la date?

Mettre la date du relevé

  • ajout de la date de l’entité
  • modification de la présentation
  • prise en compte de la couleur ‹ grey › si J+1 n’est pas encore défini, c’est à dire avant 15h00

image

Hello, je ne connaissais pas aussi l’option tarifaire EJP (petit conseil : expliquer un peu le contexte en début de tuto), mais bon cette offre s’arrête et les souscriptions sont fermées !

Bonjour,
l’offre EJP est fini depuis un moment , je crois. Mes parents ont c’est offre depuis plus de 30 ans. Comme EDF peut pas annuler les contrats, il on flambé les prix de L’EJP :rofl:

Il est possible d’avoir ton script pour la génération du Jason pour le modifier
Merci

Voici

<?php


$url = "https://selectra.info/energie/fournisseurs/edf/ejp/calendrier";

$ch = curl_init();

// Ignorer la vérification du certificat SSL
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$content = curl_exec($ch);

if (curl_errno($ch)) {
    die('Erreur cURL : ' . curl_error($ch));
}

curl_close($ch);



// lecture des deux jours
$pattern = '/<h2 class="card__title">(.*?)<\/h2>/s';
preg_match_all($pattern , $content, $out);
// Enlève EJP au début
$jour1 = trim(substr($out[1][0],4));
$jour2 = trim(substr($out[1][1],4));

// lecture EJP
$pattern = '/<div class="card-ejp__icon">(.*?)<\/div>/s';
preg_match_all($pattern , $content, $out);
$ejp1 = $out[1][0]; $ejp1 = trim(strip_tags($ejp1));
$ejp2 = $out[1][1]; $ejp2 = trim(strip_tags($ejp2));
// Traitement des réponses longues
if ($ejp1=="Jamais EJP le samedi")      $ejp1 = "Jamais EJP"; 
if ($ejp1=="Jamais EJP le dimanche")    $ejp1 = "Jamais EJP"; 
if ($ejp2=="Jamais EJP le samedi")      $ejp2 = "Jamais EJP"; 
if ($ejp2=="Jamais EJP le dimanche")    $ejp2 = "Jamais EJP"; 

// lecture Nombre de jours restants
$pattern = '/<p class="card__title h4 col-xs-12 col-md-6">(.*?)<\/p>/s';
preg_match_all($pattern , $content, $out);
$nbr_jours = $out[1][0];

// lecture Nombre de jours restants
$pattern = '/<small>(.*?)<\/small>/s';
preg_match_all($pattern , $content, $out);
$jusquau = substr($out[1][0],9);


//echo $jour1."<br>";
//echo $jour2."<br>";
//echo $ejp1."<br>";
//echo $ejp2."<br>";
//echo $nbr_jours."<br>";
//echo $jusquau."<br>";




$fp = fopen('ejp.json', 'w');
if ($fp) {
    fwrite($fp, '{');
    fwrite($fp, '"aujourdhui": "');
    fwrite($fp, $jour1);
    fwrite($fp, '", "demain": "');
    fwrite($fp, $jour2);
    fwrite($fp, '", "aujourdhuiejp": "');
    fwrite($fp, $ejp1);
    fwrite($fp, '", "demainejp": "');
    fwrite($fp, $ejp2);
    fwrite($fp, '", "nbrjours": "');
    fwrite($fp, $nbr_jours);
    fwrite($fp, '", "jusquau": "');
    fwrite($fp, $jusquau);
    fwrite($fp, '"}');
    fclose($fp);
    
} else {
    
}
curl_close($ch);
?>

Effectivement, après votre remarque, j’ai refait mes prévisions pour 2024 avec le changement tarifaire pour cette année.

En 2023, le calcul était équivalent entre mon compteur EJP 18 kW, qui je le rappelle, avait un prix d’abonnement identique 6, 9, 12, 18… ce qui n’est plus le cas, j’aurais payé la même facture qu’avec un tempo 9 kW.

Ce matin, j’ai refait mes prévision sur un excel, et là, surprise.

  • augmentation de l’abonnement compteur (impossibilité de descendre la puissance, contrat bloqué)
  • augmentation (énorme) du kW EJP (rouge)
  • augmentation du kW toute l’année

Ainsi, entre février 2020 et janvier 2024, le prix du kWh en jour EJP a augmenté de 383%, passant de 0,31€ à 1.4958€ aujourd’hui . Sur les 10 dernières années, le prix des jours non EJP a augmenté de 53% tandis que les jours EJP ont augmenté de 187%.

Les avantages jusqu’à ce jour de rester en EJP est de n’avoir que deux tarifications.

  • Tarif creux toute l’année (- 22J) 24h/24
  • Ne pas réfléchir pour mettre en route les machines, la recharge de la voiture…

Conclusion:

  • Nous avons profité d’un prix très compétitif depuis 1989, ce qui n’est plus vrai aujourd’hui.
  • Je demande au service EDF de me téléphoner demain pour passer en tempo.

Merci & bonne journée

Merci pour ta réponse, car je ne comprenais pas trop, mais des fois il y a des explications que l’on ne pense pas.

Au final tu ne reflechira pas plus car a part le tarif rouge en journée le reste du temps c’est moins chere que.les HC classique.

1 « J'aime »

Bonjour,

Tout d’abord un grand merci à @Alain_L , ton travail m’a énormément aidé a comprendre comment cela fonctionne. (j’y connais pas grand chose à HA)

Tes cartes ne fonctionnent pas complètement chez moi mais c’est normal j’ai le HA de base, pas de custom card ou autre.

Bref ça m’a décidé à essayer de récupérer les données de https://particulier.edf.fr/services/rest/referentiel/historicEJPStore?searchType=ejp

Si ça intéresse quelqu’un je le mets en dessous :

  1. dans configuration.yaml

rest: !include rest.yaml

  1. dans rest.yaml
- resource_template: https://particulier.edf.fr/services/rest/referentiel/historicEJPStore?searchType=ejp
  scan_interval: 3600
  sensor:
    - name: "ejp_dernier"
      value_template: "{% set ejp_dernier = value_json.listeEjp.pop().dateApplication %}{{ (as_datetime((ejp_dernier|string)[:10]).astimezone() | string)[:10] }}"
    - name: "ejp_avant_dernier"
      value_template: "{% set ejp_dernier = value_json.listeEjp.pop().dateApplication %}{% set ejp_avant_dernier = value_json.listeEjp.pop().dateApplication %}{{ (as_datetime((ejp_avant_dernier|string)[:10]).astimezone() | string)[:10] }}"
    - name: "ejp_demain_etat"
      value_template: "{% set ejp_dernier = value_json.listeEjp.pop().dateApplication %}{{ (now().date() + timedelta(days=1)) | string == (as_datetime((ejp_dernier|string)[:10]).astimezone() | string)[:10] }}"
    - name: "ejp_demain_date"
      value_template: "{{ (now().date() + timedelta(days=1)) }}"
    - name: "ejp_aujourdhui_etat"
      value_template: "{% set ejp_dernier = value_json.listeEjp.pop().dateApplication %}{% set ejp_avant_dernier = value_json.listeEjp.pop().dateApplication %}{{ (now().date()) | string == (as_datetime((ejp_avant_dernier|string)[:10]).astimezone() | string)[:10] or (now().date()) | string == (as_datetime((ejp_dernier|string)[:10]).astimezone() | string)[:10] }}" 
    - name: "ejp_aujourdhui_date"
      value_template: "{{ now().date() }}"
    - name: "ejp_date_debut_periode"
      value_template: "{{ value_json.dateDebutPeriode }}"
    - name: "ejp_date_fin_periode"
      value_template: "{{ value_json.dateFinPeriode }}"
    - name: "ejp_jours_restants"
      value_template: "{{ value_json.nbEjpRestants }}"
  1. exemple de carte markdown
{% set jours = ["Lundi", "Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"] %}

{% if (now().date()) | string == (as_datetime((states('sensor.ejp_avant_dernier')|string)[:10]).astimezone() | string)[:10] or (now().date()) | string == (as_datetime((states('sensor.ejp_dernier')|string)[:10]).astimezone() | string)[:10] %}
aujourd'hui : <font color=red>**EJP**</font>  - {{ jours[as_datetime(states('sensor.ejp_aujourdhui_date')).weekday()]  }} {{ as_datetime(states('sensor.ejp_aujourdhui_date')).strftime('%d/%m') }}
{% else %}
aujourd'hui : <font color=darkgreen>Pas EJP</font>  - {{ jours[as_datetime(states('sensor.ejp_aujourdhui_date')).weekday()]  }} {{ as_datetime(states('sensor.ejp_aujourdhui_date')).strftime('%d/%m') }}
{% endif %}
{% if (now().date() + timedelta(days=1)) | string == (as_datetime((states('sensor.ejp_dernier')|string)[:10]).astimezone() | string)[:10] %}
demain : <font color=red>**EJP**</font> - {{ jours[as_datetime(states('sensor.ejp_demain_date')).weekday()]  }} {{ as_datetime(states('sensor.ejp_demain_date')).strftime('%d/%m') }}
{% else %}
 {% if now().hour >= 15 %}
demain : <font color=darkgreen>Pas EJP</font> - {{ jours[as_datetime(states('sensor.ejp_demain_date')).weekday()]  }} {{ as_datetime(states('sensor.ejp_demain_date')).strftime('%d/%m') }}
  {% else %}
  demain : <font color=darkgrey>Indéfini</font> - {{ jours[as_datetime(states('sensor.ejp_demain_date')).weekday()]  }} {{ as_datetime(states('sensor.ejp_demain_date')).strftime('%d/%m') }}
{% endif %}
{% endif %}

Jours restants : {{states('sensor.ejp_jours_restants')}}

    ---
    ```
    avant dernier jour EJP : {{ jours[as_datetime((states('sensor.ejp_avant_dernier')|string)[:10]).astimezone().weekday()]  }} {{as_datetime((states('sensor.ejp_avant_dernier')|string)[:10]).astimezone().strftime('%d/%m')}}
    dernier jour EJP       : {{ jours[as_datetime((states('sensor.ejp_dernier')|string)[:10]).astimezone().weekday()]  }} {{as_datetime((states('sensor.ejp_dernier')|string)[:10]).astimezone().strftime('%d/%m')}}
    ```

    ```
    Sensor                 | Etat
    -----------------------|:--------------
    ejp_dernier            | {{ states('sensor.ejp_dernier') }}
    ejp_avant_dernier      | {{ states('sensor.ejp_avant_dernier') }}
    ejp_demain_etat        | {{ states('sensor.ejp_demain_etat') }}
    ejp_demain_date        | {{ states('sensor.ejp_demain_date') }}
    ejp_aujourdhui_etat    | {{ states('sensor.ejp_aujourdhui_etat') }}
    ejp_aujourdhui_date    | {{ states('sensor.ejp_aujourdhui_date') }}
    ejp_date_debut_periode | {{ states('sensor.ejp_date_debut_periode') }}
    ejp_date_fin_periode   | {{ states('sensor.ejp_date_fin_periode') }}
    ejp_jours_restants     | {{ states('sensor.ejp_jours_restants') }}
    ```

1 « J'aime »

Merci pour le travail, mais suite au commentaire @McFly j’ai refait le calcul de ma consommation.
L’EJP a vu ses prix flamber

Ainsi, entre février 2020 et janvier 2024, le prix du kWh en jour EJP a augmenté de 383%, passant de 0,31€ à 1.4958€ aujourd’hui. Sur les 10 dernières années, le prix des jours non EJP a augmenté de 53% tandis que les jours EJP ont augmenté de 187%.

Ce qui était vrai en 1989 lors de la signature de mon contrat avec EDF ne l’est plus pour moi en 2024.
J’ai demandé donc un transfert sur du tempo. J’abandonne l’EJP

1 « J'aime »

Bonjour,
Je débute sur Home Assistant et j’ai un contrat EJP depuis 1990… C’est vrai que ça a flambé les tarifs ces 2 dernières années en jour rouge et je me suis posé la question l’an dernier d’abandonner EJP au profit de TEMPO. Après une simulation avec Excel j’ai trouvé une différence de 80€ sur l’année et vu les jours BLANC je me suis dit que ça ne valait pas le coup. On verra l’année prochaine peut-être…
En attendant comme je débute si quelqu’un avait un tutoriel pour me dire comment récupérer l’info d’EJP jour ROUGE du lendemain je suis preneur.
Merci d’avance

Avec la méthode d’Alain c’est sensor.demain_tarif , avec ma methode c’est sensor.ejp_demain_etat qui va indiquer si c’est jour rouge ou pas.

Si tu ajoutes une carte markdown a ton tableau de bord comme ça par exemple :

type: markdown
content: |
  {# avec la methode d'Alain #}
  Jour rouge demain ? : {{ states('sensor.demain_tarif') }}

  {# avec ma méthode #}
  Jour rouge demain ? : {{ states('sensor.ejp_demain_etat') }}
title: EJP

ça va afficher ça :

EJP

Jour rouge demain ? : Jour EJP

Jour rouge demain ? : True

Est-ce que tu as le lien pour récupérer les données sur le site EDF pour TEMPO stp? Merci