Super, par contre je pense que tu n’as pas pris la dernière version, le nombres de jours restants devraient être 21
J’ai la version que vous avez donné un peu plus haut dans cette discussion…
Je l’ai mis à jour (en l’éditant) après le premier post.
hello
merci pour le taf !
hier ca fonctionne super et ce matin j’ai:
sensor.ejp_aujourd_hui unknown # Keep the last valid value if there’s an error
sensor.ejp_demain NON_EJP # Keep the last valid value if there’s an error
Bonjour @Aihua dans ton message je ne vois pas la subtilité EDIT ou EDIT2… Dans la fenêtre où on peut copier le code on est sur EDIT ou EDIT2?
Merci
Cordialement
Bonjour,
Demain Ejp et le nb est deja a 19…
La version du prg doit etre Edit…pas Edit2
Dans le retour de la requête on a bien nb…tires deja a 3…
La version Edit2 n’est pas a jour dans la fenetre…
Merci davance Aihua…
Jp
Bonsoir Aihua,
Depuis quelques jours rien ne va plus … la requête avec les deux bornes Inf et Sup ne fonctionne plus pour déterminer si EJP aujourd’hui ou demain.
j’ai tenté de trouver le pb .
Lorsque je tape dans un navigateur cette requête avec des dates fixes (ex 2023-12-04 et 2024-12-04) le site renvoi erreur !
si je tape 2023-12-4 et 2024-12-4 il me retourne un tableau de valeurs avec les dates , les jours EJP ou NON EJP et les jours HORS EJP.
Dans mon fichier REST.yaml, la requête est bien celle que tu as écrite dans ton fichier (sensors ou configuration) à savoir :
# Sensor EJP Aujourd'hui et demain
- resource_template: "https://api-commerce.edf.fr/commerce/activet/v1/calendrier-jours-effacement?option=EJP&dateApplicationBorneInf={{ (now().replace(year=now().year - 1) + timedelta(days=1)).strftime('%Y-%m-%d') }}&dateApplicationBorneSup={{ (now() + timedelta(days=1)).strftime('%Y-%m-%d') }}&identifiantConsommateur=src"
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)
scan_interval: 600 # mettre rafraîchissement toutes les heures
sensor:
- name: "EJP Aujourdhui"
value_template: >-
{% if value_json.errors | length == 0 %}
{% set today = now().strftime('%Y-%m-%d') %}
{% for day in value_json.content.options[0].calendrier %}
{% if day.dateApplication == today %}
{{ day.statut }}
{% endif %}
{% endfor %}
{% else %}
{{ states('sensor.ejp_aujourdhui') }}
{% endif %}
unique_id: ejp_aujourdhui
- name: "EJP Demain"
value_template: >-
{% if value_json.errors | length == 0 %}
{% set tomorrow = (now() + timedelta(days=1)).strftime('%Y-%m-%d') %}
{% for day in value_json.content.options[0].calendrier %}
{% if day.dateApplication == tomorrow %}
{{ day.statut }}
{% endif %}
{% endfor %}
{% else %}
{{ states('sensor.ejp_demain') }}
{% endif %}
unique_id: ejp_demain
- name: "EJP Infos1"
value_template: "{{ value_json}}"
unique_id: ejp_infos1
# nb jours restants
- resource_template: "https://api-commerce.edf.fr/commerce/activet/v1/saisons/search?option=EJP&dateReference={{ now().strftime('%Y-%m-%d') }}"
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)
scan_interval: 600 # mettre rafraîchissement toutes les heures
sensor:
- name: "EJP jours restants"
value_template: >-
{% if value_json.errors | length == 0 %}
{% set total_days = value_json.content[0].nombreJours %}
{% set used_days = value_json.content[0].nombreJoursTires %}
{{ total_days - used_days }}
{% else %}
{{ states('sensor.ejp_jours_restants') }}
{% endif %}
device_class: power
- name: "EJP infos2"
value_template: "{{ value_json }}"
Les données Infos1 et infos2 retournées sont :
il y a bien sûr dans le fichier « configuration.yaml »
rest: !include rest.yaml
Redémarrage HA …
je ne comprends pas … la deuxième requête fonctionne pas la première ?
Avez vous une idée ?
demain nous sommes encore en EJP …
Merci
JP
J’ai l’impression que l’API n’aime pas les dates comme 2024-12-06 mais plutot 2024-12-6. Ensuite, j’ai peur qu’il y ait un délai qui soit nécessaire entre les requêtes.
Bonjour,
la solution finale. qui fonctionne depuis deux jours … en attendant les prochains jours EJP
Le fichier REST.yaml (avec un scan toutes les 10 minutes)
# Sensor EJP Aujourd'hui et demain
- resource_template: "https://api-commerce.edf.fr/commerce/activet/v1/calendrier-jours-effacement?option=EJP&dateApplicationBorneInf={{ (now().replace(year=now().year - 1) + timedelta(days=1)).strftime('%Y-%m-%-d') }}&dateApplicationBorneSup={{ (now() + timedelta(days=1)).strftime('%Y-%m-%-d') }}&identifiantConsommateur=src"
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)
scan_interval: 600
sensor:
- name: "EJP Aujourdhui"
value_template: >-
{% if value_json.errors | length == 0 %}
{% set today = now().strftime('%Y-%m-%d') %}
{% for day in value_json.content.options[0].calendrier %}
{% if day.dateApplication == today %}
{{ day.statut }}
{% endif %}
{% endfor %}
{% else %}
{{ states('sensor.ejp_aujourdhui') }}
{% endif %}
unique_id: ejp_aujourdhui
icon: 'mdi:calendar'
- name: "EJP Demain"
value_template: >-
{% if value_json.errors | length == 0 %}
{% set tomorrow = (now() + timedelta(days=1)).strftime('%Y-%m-%d') %}
{% for day in value_json.content.options[0].calendrier %}
{% if day.dateApplication == tomorrow %}
{{ day.statut }}
{% endif %}
{% endfor %}
{% else %}
{{ states('sensor.ejp_demain') }}
{% endif %}
unique_id: ejp_demain
icon: 'mdi:calendar'
- name: "EJP Hier"
value_template: >-
{% if value_json.errors | length == 0 %}
{% set yesterday = (now() - timedelta(days=1)).strftime('%Y-%m-%d') %}
{% for day in value_json.content.options[0].calendrier %}
{% if day.dateApplication == yesterday %}
{{ day.statut }}
{% endif %}
{% endfor %}
{% else %}
{{ states('sensor.ejp_hier') }}
{% endif %}
unique_id: ejp_hier
icon: 'mdi:calendar'
# nb jours restants # rafraîchissement toutes les 10 min
- resource_template: "https://api-commerce.edf.fr/commerce/activet/v1/saisons/search?option=EJP&dateReference={{ now().strftime('%Y-%m-%d') }}"
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)
scan_interval: 600
sensor:
- name: "EJP jours restants"
value_template: >-
{% if value_json.errors | length == 0 %}
{% set total_days = value_json.content[0].nombreJours %}
{% set used_days = value_json.content[0].nombreJoursTires %}
{% if is_state('sensor.ejp_demain','EJP') %}
{{ total_days - used_days + 1 }}
{% else %}
{{ total_days - used_days }}
{% endif %}
{% else %}
{{ states('sensor.ejp_jours_restants') }}
{% endif %}
device_class: power
Notez le format dans srtftime ‹ %Y-%m-%-d › pour avoir une date sans zéro…
Ensuite le fichier sensors.yaml pour les sensors « ejp contact » et « ejp tarif en cours » :
- platform: template
sensors:
ejp_contact:
friendly_name: 'ejp_contact'
value_template: >-
{% set hc = now().hour %}
{% if (is_state('sensor.ejp_hier','EJP') and hc < 1) or (is_state('sensor.ejp_aujourdhui','EJP') and hc >= 7 ) %}
FERME
{% else %}
OUVERT
{% endif %}
icon_template: >-
{% if is_state('sensor.ejp_contact','OUVERT') %}
{{ 'mdi:electric-switch' }}
{% else %}
{% if is_state('sensor.ejp_contact','FERME') %}
{{ 'mdi:electric-switch-closed' }}
{% else %}
{{ 'mdi:none' }}
{% endif %}
{% endif %}
- platform: template
sensors:
ejp_tarif_en_cours:
friendly_name: "EJP tarif en cours"
value_template: >
{% if is_state('sensor.ejp_contact','FERME') %}
{{ 1.5197 }}
{% else %}
{{ 0.1758 }}
{% endif %}
icon_template: 'mdi:currency-eur'
device_class: monetary
Le résultat sur une card :
Super ! merci de ce travail. Je me demande si le sujet du 0 dans le numéro de jour ne va pas se poser aussi pour le numéro de mois. Va falloir attendre l’année prochaine
Merci aussi à Aihua !
Pour les mois de janvier à mars on mettra ‹ %Y-%-m-%-d › …
Bonjour JP, merci pour le boulot j’ai réussi à avoir les info EJP en recopiant ton code. J’y connais rien dans la programmation je ne fais que du copié collé. J’ai plusieurs questions
1 tu as réalisé un code pour ta carte ?
2 Ejp contact ouvert c’est un relais que tu as ajouté ?
3 tarif en cours je ne le trouve pas dans mes capteurs?
Cordialement Dom
Je n’ai plus de dysfonctionnement depuis que j’ai mis les headers qu’on trouve dans les commandes curl qu’on trouve plus haut :
J’ai adapté ce code à Node-red si ça interesse quelqu’un.
Bonjour,
Ejp_contact est un sensor avec deux etats Ouvert ou Ferme… que j’utilise dans une automation pour la commande de mon ballon eau chaude.
Ejp_tarif_en_cours est un sensor pour visualiser le cout …
pour la card avec les etats EJP HIER … DEMAIN : (trouvée plus haut dans ce post du temps de la requête avec le http://sitenord … qui ne fonctionne plus !)
type: vertical-stack
cards:
- square: false
type: grid
cards:
- type: custom:vertical-stack-in-card
cards:
- type: custom:button-card
entity: sensor.ejp_hier
name: HIER
show_state: true
styles:
grid:
- grid-template-areas: "\"n\" \"i\" \"s\""
icon:
- color: |
[[[
if (entity.state == 'NON_EJP') return 'green'
if (entity.state == 'HORS_PERIODE_EJP') return 'darkblue'
if (entity.state == 'EJP') return 'red'
else return 'grey';
]]]
icon: mdi:home-lightning-bolt-outline
- type: custom:vertical-stack-in-card
cards:
- type: custom:button-card
entity: sensor.ejp_aujourdhui
name: AUJOURD'HUI
show_state: true
styles:
grid:
- grid-template-areas: "\"n\" \"i\" \"s\""
icon:
- color: |
[[[
if (entity.state == 'NON_EJP') return 'green'
if (entity.state == 'HORS_PERIODE_EJP') return 'darkblue'
if (entity.state == 'EJP') return 'red'
else return 'grey';
]]]
icon: mdi:home-lightning-bolt-outline
- type: custom:vertical-stack-in-card
cards:
- type: custom:button-card
entity: sensor.ejp_demain
name: DEMAIN
show_state: true
styles:
grid:
- grid-template-areas: "\"n\" \"i\" \"s\""
icon:
- color: |
[[[
if (entity.state == 'NON_EJP') return 'green'
if (entity.state == 'HORS_PERIODE_EJP') return 'darkblue'
if (entity.state == 'EJP') return 'red'
else return 'grey';
]]]
icon: mdi:home-lightning-bolt-outline
columns: 3
title: EJP
Pour la card (avec des tuiles…) avec les sensors contacts et tarifs … :
type: custom:vertical-stack-in-card
cards:
- type: tile
entity: sensor.ejp_contact
show_entity_picture: true
color: green
hide_state: false
state_content: state
- type: tile
entity: sensor.ejp_jours_restants
icon: mdi:calendar-check
vertical: false
- type: tile
entity: switch.chauffe_eau_switch_1
icon: mdi:water-boiler
show_entity_picture: false
vertical: false
hide_state: false
tap_action:
action: none
icon_tap_action:
action: none
hold_action:
action: none
name: État du ballon eau chaude
- type: gauge
entity: sensor.ejp_tarif_en_cours
min: 0
max: 1.6
needle: true
severity:
green: 0
yellow: 0.17
red: 0.7
name: Tarif actuel
unit: €
- show_name: true
show_icon: true
type: button
tap_action:
action: toggle
entity: automation.marche_ballon
show_state: true
icon_height: 50px
Le Ejp_contact me sert aussi pour piloter mes appareils Lave Vaisselle, MAL, Sèche linge par l’intermédiaire de relais wifi (tuya), pas de câblage vers le relais EJP d’EDF au niveau du compteur. je peut modifier le câblage mais j’ai pas envi !
Maintenant, je cherche :
1 - comment déclencher l’exécution du fichier REST.yaml (qui contient les deux requêtes et les sensors HIER, AUJOURDHUI et DEMAIN) que dans la période du 1 novembre au 31 mars (pas de scan hors période) . On peut mettre # rest: !include rest.yaml (dans le configuration.yaml) manuellement après le 31 mars mais c’est pas de l’automatisme
2 - comment éviter les scan multiples (toutes la journée et toutes les heures) dès lors que nous avons eu une fois l’information comme quoi la journée est en EJP. Un reset à 1H du matin de toutes les informations (HIER, AUJOURDHUI et DEMAIN). Puis une lecture pour connaitre les informations HIER et AUJOURDHUI, et entre 13H et 15H … celle pour demain…
3 - refaire le calendrier EJP pour une vue globale des jours EJP…
Si vous avez des idées … je prends !
merci
Oui …
Il faut avoir charger l’integration HACS…puis le package vertical stack in card…
Je pense que j’ai pas fait d’erreur, mais j’ai toujours cet affichage. Il n’y a pas de fichier spécifique YAML à créer ?
Il te faut aussi le package button card…« Custum element does not exist button card » tjs dans hacs…
Merci pour vos réponses.