Page 1 sur 6
API ecowatt RTE
Publié : 15 sept. 2022, 08:27
par Bochets34
Bonjour,
quelqu'un sait il si une interface Domoticz (addon / plugin) existe avec les données ecowatt disponibles par RTE ?
https://data.rte-france.com/catalog/-/a ... owatt/v4.0
d'après ma compréhension c'est un peu comme les signaux EJP et autre Tempo.
l'idée est évidemment de pouvoir agir par anticipation en cas d'éventuelles coupures du réseau électrique cet hiver ....
Olivier
Re: API ecowatt RTE
Publié : 15 sept. 2022, 18:31
par Keros
C'est la première fois que je vois cet API.
Je n'ai rien vu sur le forum, tu as recherché avec Github ?
Re: API ecowatt RTE
Publié : 15 sept. 2022, 20:59
par Neutrino
Je suis dessus depuis hier soir
Et c'est pas jojo...
Il faut créer un compte puis créer une application et enfin récupérer un id en base 64.
Avec cet id, il faut récupérer un token.
Avec ce token valable 2H seulement, il faut appeler l'API au MAXIMUM 1 fois toutes les 15 minutes.
Une sandbox est disponible pour les tests.
Pour faire simple, rien n'est simple.
Pas de fonctionnement par région.
Pour un truc qui pourrait fonctionner en open, bah non. On monte une usine à gaz à base de Oauth2.
Bref, j'ai un truc qui marche en sandbox, mais les données en prod SONT DIFFERENTES DE LA DOC !!!
ça marchotte, jusqu'à ce qu'ils changent encore un truc...
[edit]
ça donne ça :

- Capture d’écran 2022-09-15 233534.png (11.84 Kio) Consulté 5789 fois
Re: API ecowatt RTE
Publié : 20 sept. 2022, 20:50
par pierrotori
Pas mal je ferais des tests quand je récupérerais internet
Re: API ecowatt RTE
Publié : 20 sept. 2022, 21:21
par Chrominator
En alternative, on peut attendre l'app qui paraît-il serait en développement et livrable bientôt.
Le souci, c'est que bientôt on ne sait pas si c'est avant ou après l'hiver

Re: API ecowatt RTE
Publié : 20 sept. 2022, 23:37
par Neutrino
Pour commencer à vous amuser
C'est pas fini, pas commenté, en cours de débug et pas nettoyé, mais ça fonctionne
Code : Tout sélectionner
local scriptName = 'ecowatt'
local scriptVersion = '1.0'
--[[
- Créez un compte sur le site de RTE (https://data.rte-france.com/web/guest)
- Allez sur l'API Ecowatt (https://data.rte-france.com/catalog/-/api/consumption/Ecowatt/v4.0)
- Cliquez sur "Abonnez-vous à l'API", créez une nouvelle application
- Récuperez votre clé en cliquant sur "Copier en base 64"
]]
-- Dummy à créer :
local AlertEcoWatt = "EcoWatt" -- Alert device J
local AlertEcoWatt2 = nil -- Alert device J+1
local cleAPI = "VW5lIGJpw6hyZSBnYWduw6llIHBvdXIgbGUgcHJlbWllciBxdWkgdHJvdXZlIMOnYQ=="
return {
--active = false,
active = true,
logging = {
level = domoticz.LOG_DEBUG, -- Uncomment to override the dzVents global logging setting
marker = scriptName..' '..scriptVersion
},
on = {
--timer = {'at *:49'},
timer = {'every 15 minutes'},
httpResponses = {
scriptName,
scriptName..'at',
},
},
data = {
--access_token = {}
access_token = { history = true, maxItems = 1, maxMinutes = 30}
},
execute = function(domoticz, item)
if item.isTimer then
if domoticz.data.access_token.size == 0 then
--or domoticz.data.access_token.get(1).time.secondsAgo > 6000 then
local url = "https://digital.iservices.rte-france.com/token/oauth/"
domoticz.log('Requesting data from RTE', domoticz.LOG_DEBUG)
domoticz.openURL({
url = url,
method = 'POST',
headers = { ['Content-Type'] = 'application/x-www-form-urlencoded',
['Authorization'] = 'Basic '..cleAPI},
callback = scriptName..'at',
})
else
domoticz.log('access_token age: '..domoticz.data.access_token.get(1).time.secondsAgo, domoticz.LOG_DEBUG)
domoticz.log('access_token : '..domoticz.data.access_token.get(1).data, domoticz.LOG_DEBUG)
--local url = "https://digital.iservices.rte-france.com/open_api/ecowatt/v4/sandbox/signals"
local url = "https://digital.iservices.rte-france.com/open_api/ecowatt/v4/signals"
domoticz.log('Requesting data from RTE', domoticz.LOG_DEBUG)
domoticz.openURL({
url = url,
method = 'GET',
headers = { ['Content-Type'] = 'application/soap+xml;charset=UTF-8',
['Authorization'] = 'Bearer '..domoticz.data.access_token.get(1).data},
callback = scriptName,
})
end
end
if not item.isHTTPResponse then return end
local response = item
if response.trigger == scriptName..'at' then
local contents = response.json
domoticz.data.access_token.add(contents.access_token)
domoticz.log('access_token : '..domoticz.data.access_token.getLatest().data, domoticz.LOG_DEBUG)
elseif response.trigger == scriptName then
domoticz.log(response.data, domoticz.LOG_DEBUG)
local contents = response.json.signals
domoticz.log("jour : "..contents[1].jour )
domoticz.log("dvalue : "..contents[1].dvalue.." message : "..contents[1].message)
if contents[1].dvalue == 1 then
domoticz.devices(AlertEcoWatt).updateAlertSensor(domoticz.ALERTLEVEL_GREEN, contents[1].message)
elseif contents[1].dvalue == 2 then
domoticz.devices(AlertEcoWatt).updateAlertSensor(domoticz.ALERTLEVEL_ORANGE, contents[1].message)
elseif contents[1].dvalue == 3 then
domoticz.devices(AlertEcoWatt).updateAlertSensor(domoticz.ALERTLEVEL_RED, contents[1].message)
else
domoticz.devices(AlertEcoWatt).updateAlertSensor(domoticz.ALERTLEVEL_GREY, contents[1].message)
end
if AlertEcoWatt2 then
domoticz.log("jour2 : "..contents[2].jour )
domoticz.log("dvalue : "..contents[2].dvalue.." message : "..contents[2].message)
if contents[2].dvalue == 1 then
domoticz.devices(AlertEcoWatt2).updateAlertSensor(domoticz.ALERTLEVEL_GREEN, contents[2].message)
elseif contents[2].dvalue == 2 then
domoticz.devices(AlertEcoWatt2).updateAlertSensor(domoticz.ALERTLEVEL_ORANGE, contents[2].message)
elseif contents[2].dvalue == 3 then
domoticz.devices(AlertEcoWatt2).updateAlertSensor(domoticz.ALERTLEVEL_RED, contents[2].message)
else
domoticz.devices(AlertEcoWatt2).updateAlertSensor(domoticz.ALERTLEVEL_GREY, contents[2].message)
end
end
elseif (not response.ok) or (response.trigger ~= scriptName) then
domoticz.log('Last http response was not what expected. Trigger: '..response.trigger, domoticz.LOG_ERROR)
domoticz.log(response.data, domoticz.LOG_ERROR)
return
end
end
}
Re: API ecowatt RTE
Publié : 21 sept. 2022, 10:48
par lost
Neutrino a écrit : 15 sept. 2022, 20:59
Pour faire simple, rien n'est simple.
Pas de fonctionnement par région.
Pour un truc qui pourrait fonctionner en open, bah non.
Faire cette usine à gaz côté RTE est-il vu comme un moyen d'aider l'ex-GDF/Engie à faire le plein?
Obliger les gens à ouvrir un compte et subir un mode d'authentification cornecul pour obtenir une info globale/non nominative que l'on voudrait diffusée le plus largement possible, c'est en effet un sacré succès prévisible!
Il parait urgent d'attendre qu'un certain réalisme arrive devant l'inutilisation du machin.
Ou alors c'est volontaire: Depuis qq mois, on assiste quand même à un truc assez inédit avec le secteur de l'énergie faisant une sorte d'éducation canine brutale de nos dirigeants (i.e: Leur mettre le nez dans leur caca). En juin le trio EDF/Total/Engie s'y était mis. Là EDF a visiblement fait dans l'excès de zêle sur les pb de corrosion/soudure alors que l'ASN disait que cela pouvait être repoussé/étalé de qq mois... Et désormais, RTE sabote littéralement le plan d'information gouvernemental afin d'aider les consommateurs à lisser les pics!
La volonté parait claire de démontrer que le renouvelable imposant de piloter le réseau côté consommation plutôt que, comme cela a toujours été le cas, côté production va au crash...
Re: API ecowatt RTE
Publié : 21 sept. 2022, 14:35
par JulienP
Neutrino a écrit : 20 sept. 2022, 23:37
Pour commencer à vous amuser
C'est pas fini, pas commenté, en cours de débug et pas nettoyé, mais ça fonctionne
Bonjour et merci pour cette 1ere version du script !
Ca fonctionne chez moi.
Re: API ecowatt RTE
Publié : 22 sept. 2022, 14:41
par Chrominator
Super, merci Neutrino

Re: API ecowatt RTE
Publié : 24 sept. 2022, 17:49
par 38_mike
Bonjour,
je suis aussi dessus (comprenez : je sue aussi dessus ...)
L'API a été rendue accessible début septembre, et a déjà changé une fois la semaine dernière : les jours n'étaient pas donnés dans le bon ordre (J+3,J+2,J,J+1. Maintenant, c'est OK (J,J+1,J+2,J+3).
Une fois le cirque "demande token puis récup signal" (signal : c'est comme cela que les infos sont appelées) terminé, il reste ensuite à faire un joli parse du fichier récupéré, effectivement différent du fichier test de la sandbox.
Le fichier est en 1 seule ligne et format compliqué.
Mon but : récupérer les infos heure par heure du jour courant dans une variable et les infos globales (vert/jaune/rouge et textes associés) de jour/jour+1/jour+2/jour+3 dans une ou plusieurs autres variables.
Mon idée derrière :
1/ il est x heure, la situation est tendue, je vais attendre pour lancer le chauffe-eau électrique, ou bien j'allège le chauffage
2/ demain, c'est rouge, après-demain, c'est jaune : j'attends une journée (si je peux...) pour lancer les lessives
Le 1/ est piloté par Domoticz, le 2/ est humain
Je vous tiens au courant