Intégration API Ecowatt

Hello.

J’essaie de reproduire une carte qui ressemble au site EcoWatt.
Ca donne ça pour le moment :
image

Encore quelques bidouilles à faire (focus date, transitions sur les jours, ajout des heures, …), mais globalement, je pense que ça ressemble à quelque chose.
Ca consomme les données brutes de l’API.
Je n’ai juste pas réussi à faire marcher les sensors REST dans la configuration en YAML (j’ai du faire une config NodeRed).

Si ça intéresse du monde, je tacherai de mettre ça sur github.

Hello, très intéressé par cette carte :slight_smile: As tu le lien de ton github? Merci d’avance !

!!! DISCLAIMER !!!
(Désolé, je suis obligé vue la qualité de ce que j’ai produit pour le moment :smiley: )

  1. c’est ma première publication (et mes premières armes avec github
  2. je suis en train de bosser dessus (donc pas forcément propre ni stable)
  3. je n’ai pas encore bossé sur la partie intégration; il faut que je la construise pour HACS
  4. je suis autodidacte bricoleur => soyez indulgents, svp, mais critiques constructives très largement acceptées !

Le repo :
alexandreaudrain/ecowatt-card: Home Assistant custom card for EcoWatt data (github.com)

Sans HACS, il faut builder le .JS et le déposer dans /www/community/ecowatt-card (enfin, vous savez où)

Hello, merci pour ce lien, je vais attendre une version plus stable. Mais félicitation pour le travail et ce premier GitHub, je n’ai pas encore franchi le pas et n’est malheureusement pas les compétences ^^ je vais suivre cela de près !

Hello.
Mon intégration devrait fonctionner avec HACS.

Bonjour @Gus1994,

Peut tu expliquer un peu plus ce qu’il faut mettre dans la configuration de la carte, je ne comprend pas ce qu’il faut indiquer comme entité qui porte les données de l’API EcoWatt

Hello.
Il faut une entité avec un attribut ‘signals’ comme ce que renvoie l’API EcoWatt (même données, même structure).
Je n’ai pas réussi à capter ces infos via un sensor Home Assistant REST (sans doute à cause de l’authentification).
J’ai utilisé du NodeRed.

Exemple avec Node Red:

[{"id":"53065ee3236d9e68","type":"http request","z":"6aa76aa605dbd61c","name":"Get Auth Token","method":"GET","ret":"obj","paytoqs":"ignore","url":"https://digital.iservices.rte-france.com/token/oauth","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[{"keyType":"other","keyValue":"content-type","valueType":"other","valueValue":"application/x-www-form-urlencoded"},{"keyType":"other","keyValue":"Authorization","valueType":"other","valueValue":"Basic XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}],"x":280,"y":100,"wires":[["03d1692c44acbde0"]]},{"id":"1b12b159637da09c","type":"http request","z":"6aa76aa605dbd61c","name":"Get data","method":"GET","ret":"obj","paytoqs":"ignore","url":"https://digital.iservices.rte-france.com/open_api/ecowatt/v4/signals","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[{"keyType":"other","keyValue":"Authorization","valueType":"msg","valueValue":"payload"},{"keyType":"other","keyValue":"Content-Type","valueType":"other","valueValue":"application/soap+xml;charset=UTF-8"}],"x":600,"y":100,"wires":[["994371fb027003a4"]]},{"id":"03d1692c44acbde0","type":"function","z":"6aa76aa605dbd61c","name":"Bearer Token","func":"msg.payload = msg.payload['token_type']+ ' ' + msg.payload['access_token']\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":450,"y":100,"wires":[["1b12b159637da09c"]]},{"id":"994371fb027003a4","type":"ha-sensor","z":"6aa76aa605dbd61c","name":"myecowatt2","entityConfig":"e9a719eb51690897","version":0,"state":"payload['signals'][0]['message']","stateType":"msg","attributes":[{"property":"signals","value":"payload['signals']","valueType":"msg"}],"inputOverride":"allow","outputProperties":[],"x":750,"y":100,"wires":[[]]},{"id":"8c3f9455728dfac5","type":"cronplus","z":"6aa76aa605dbd61c","name":"Every hour","outputField":"payload","timeZone":"","persistDynamic":false,"commandResponseMsgOutput":"output1","outputs":1,"options":[{"name":"schedule1","topic":"topic1","payloadType":"bool","payload":"true","expressionType":"cron","expression":"0 0 0/1 * * * *","location":"","offset":"0","solarType":"all","solarEvents":"sunrise,sunset"}],"x":110,"y":100,"wires":[["53065ee3236d9e68"]]},{"id":"e9a719eb51690897","type":"ha-entity-config","server":"c4ecaf2.db61b5","deviceConfig":"","name":"myecowatt2","version":"6","entityType":"sensor","haConfig":[{"property":"name","value":"Ecowatt Node Red"},{"property":"icon","value":"mdi:lightning-bolt"},{"property":"entity_category","value":""},{"property":"device_class","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""}],"resend":false,"debugEnabled":false}]

Avec XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX à remplacer par la clé en base 64 récupérée sur le site de RTE.

Ou alors, via un script python + MQTT qui est ensuite exécuté à intervalle régulier via une entrée dans le crontab (on peut le voir comme un ecowatt2mqtt :smiley: ):

#!/usr/bin/env python3
import requests
import json
import paho.mqtt.client as mqtt

host="digital.iservices.rte-france.com"
oauth_url="/token/oauth/"
ecowatt_url="/open_api/ecowatt/v4/signals"
#ecowatt_url="/open_api/ecowatt/v4/sandbox/signals"
api_key='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

token_headers = {'content-type': 'application/x-www-form-urlencoded', 'Authorization': 'Basic '+api_key}
r = requests.get('https://'+host+oauth_url, headers=token_headers)
if r.status_code != requests.codes.ok:
    print("Error: failed to get Auth token: {}".format(r.status_code))
    exit(1)

print("Got Auth token")
rep = r.json()

ecowatt_headers = {'Content-Type': 'application/soap+xml;charset=UTF-8', 'Authorization': 'Bearer '+rep["access_token"]}
r = requests.get('https://'+host+ecowatt_url, headers=ecowatt_headers)
if r.status_code != requests.codes.ok:
    print("Error: failed to get ecowatt data: {}".format(r.status_code))
    print(r.headers)
    print(r.text)
    exit(1)

print("Got ecowatt data")
attributes=r.json()
state=attributes['signals'][0]['message']
print(state)
attributes["icon"] = "mdi:lightning-bolt"
attributes["friendly_name"] = "Météo Enedis"
print(attributes)

client = mqtt.Client('ecowatt')
client.connect("ADRESSE IP DU SERVEUR MQTT", 1883)
sensor_t = "homeassistant/sensor/myecowatt"
config_t = sensor_t + "/config"
state_t  = sensor_t + "/state"
attr_t   = sensor_t + "/attributes"
config_p = '{"name": "myecowatt", "uniq_id": "myecowatt_202301161823", "stat_t": "'+state_t+'", "json_attr_t": "'+attr_t+'", "device": {"identifiers": ["MyEcowatt
"], "name": "Météo Ecowatt RTE", "model": "Ecowatt 4.0", "manufacturer": "RTE"}}'
client.publish(config_t, config_p, 1, True)
client.publish(state_t, state, 1, True)
client.publish(attr_t, json.dumps(attributes), 1, True)
client.disconnect()

Et pour le crontab une ligne du genre pour exécution toutes les 2 heures:

0 */2 * * * /home/user/ecowatt.py 1>/home/user/ecowatt.log 2>&1

Bonjour,
si je comprend bien ce n’est pas utilisable directement dans HA sans faire appel a des composants externes; il n’y a pas de liens direct possible entre rte-ecowatt et ta carte ?

J’ai ça toutes les heures depuis ce matin, je suis le seul?

2023-01-27 21:52:46.625 WARNING (MainThread) [custom_components.rte_ecowatt] Failure to fetch data from /shedding/state_js endpoint: <html>
<head><title>503 Service Temporarily Unavailable</title></head>
<body>
<center><h1>503 Service Temporarily Unavailable</h1></center>
</body>
</html>

@luke7110 idem de mon côté. Pas grand chose à faire si ce n’est attendre que le service réponde de nouveau…

Le site est visiblement coupé et ne répond plus du tout. Attendons quelques jours mais il est possible que le service soit fermé.
Enedis a visiblement ouvert un second service https://www.enedis.fr/panne-et-interruption mais qui demande de résoudre un captcha.

Ok, qu’est-ce qu’on a perdu ici comme info, l’entité du calendrier calendar.next_load_sheddings uniquement ? Ou plus?

juste cette entité. Le reste des entités (ecowatt) vient d’une autre api.

Hello
J’ai fais la dernière mise jour de HA en 2023-6
My eco watt ne fonctionne plus. Je ne sais pas si c’est liè a cette mise a jour ou si c’est l’api
D autres dans le meme probleme?

Merci

Oui pareil depuis 2023.6, les capteurs remontent en indisponible

Failure to fetch data from /shedding/state_js endpoint: 503 Service Temporarily Unavailable

503 Service Temporarily Unavailable

Bonjour je vais tester en 2023.6.
Le problème remonté par @Christophe69480 est celui de l’API d’Enedis qui a changé (cf Intégration API Ecowatt - #227 par kamaradclimber)

EDIT: le problème a été remonté sur github avec la stacktrace complète.
EDIT2: le problème est fixé dans la version 0.6.8

Je confirme retour à la normale avec la mise à jour 0.6.8
merci pour cette réactivité

idem merci pour la reactivité

Merci, j’ai que des soucis avec l’intégration ecowatt de hacf mais ça marche bien