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

:idea:

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 :mrgreen:
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
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 :lol:

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 :mrgreen:

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? :lol:

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 :mrgreen:
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