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
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
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
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…
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
McFly
Janvier 5, 2024, 9:59
6
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.
Pozzi
Janvier 6, 2024, 8:43
10
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
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
McFly
Janvier 7, 2024, 8:18
15
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 :
dans configuration.yaml
rest: !include rest.yaml
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 }}"
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 »
lipphi
Janvier 11, 2024, 12:00
18
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
lipphi
Janvier 15, 2024, 10:16
21
Est-ce que tu as le lien pour récupérer les données sur le site EDF pour TEMPO stp? Merci