Aller au contenu
Lazer

Quick App - Enphase Envoy

Recommended Posts

Il y a 9 heures, Lazer a dit :

J'ai pas trop le temps de relire ton code en ce moment, si tu es pressé, regarde ce que fait le code source de mon QuickApp, dans le fichier Library - Enphase v2.00.lua dans la function Enphase:getToken()

Salut Lazer,

Merci d'avoir répondu.

J'ai déjà pas mal étudié ton code tout le dimanche. Je n'ai pas les compétences pour tout comprendre et l'adapter à la HC2.

 

Mais je ne suis pas pressé, donc quand tu auras le temps à l'occaz ;)

 

 

Modifié par stipower

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui mais il ne s"agit pas de comprendre tout le code, je t'ai juste indiqué le nom de la fonction dans mon code qui fait ce que tu demandes, à savoir l'obtention du token, ça devrait te donner une bonne piste.

Par ailleurs, la HC2, j'ai laissé tombé il y a 3 ans, donc difficile d'adapter du code LUA dessus pour moi...

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut Lazer,

 

Je comprends.

 

Bon, un collègue m'a débloqué, j'ai pu terminé mon script.

 

Je poste mon Code pour scène HC2 qui est maintenant fonctionnel. Ca peut toujours servir à quelqu'un :

 

-- GetEnphaseToken
--[[
%% autostart
%% properties
%% events
%% globals
--]]
-- récupère le Token de Enphase pour faire les connexion sur le boitier Envoy

local IDNotifMailAdmin = 2
local TempsDeBoucle = 24 * 3600 * 1000 -- 1 journée

function RequestHTTP()

-- ************************************	 Get SessionID ************************************

	local EnphaseURLlogin = "https://enlighten.enphaseenergy.com/login/login.json?"
	local EnphaseURLToken = "https://entrez.enphaseenergy.com/tokens"
	local envoy_serial = "XXXXXXXX" -- sérial de l'installation Enphase
	local user ="XXXXXXXX"
	local password = "XXXXXXXX"
	local SessionID
	local http = net.HTTPClient()

	local DataEnphaseURLlogin = '{"user": {"email": "'.. user .. '", "password": "' .. password .. '"}}'  
		-- attendu : DataEnphaseURLlogin = '{"user": {"email": "XXXX", "password": "XXXX"}}' 
	
	fibaro:debug("Get session_id")

	http:request(EnphaseURLlogin, {
		options = {
			checkCertificate = false,
			method = 'POST',
			headers = {
				['Accept'] = 'application/json',
				['Content-Type'] = 'application/json',
				},
			data = DataEnphaseURLlogin,
			timeout = 10000
			},

		success = function(response)
			--fibaro:debug(response.status)
			if (response.status == 200 or response.status == 201) and type(response.data) == "string" and response.data ~= "" then
				-- réponse OK
				--fibaro:debug(response.data)
				--[[ reponse attendue : 
					{"message":"success",
					"session_id":"9beb21c28d7893090e9c42746830bdba",
					"manager_token":"eyJhbGciOiJIUzI......1NiJ9.eyJkYXRh",
					"is_consumer":true,"system_id":2438074}
					--]]
				SessionID = json.decode(response.data)
				SessionID = SessionID.session_id
				fibaro:debug("session_id = " .. SessionID)

-- ************************************	 Get Token ************************************
				fibaro:debug("Get Token")

				local DataEnphaseURLToken = '{"session_id" : "' .. SessionID .. '", "serial_num" : "' .. envoy_serial .. '", "username" : "' .. user .. '"}'
					-- attendu : DataEnphaseURLToken = '{"session_id" : "XXXX", "serial_num" : "XXXX", "username" : "XXXX"}'

				http:request(EnphaseURLToken, {
						options = {
							checkCertificate = false,
							method = 'POST',
							headers = {
								['Accept'] = 'application/json',
								['Content-Type'] = 'application/json',
								 },
							data = DataEnphaseURLToken,
							timeout = 10000
							},

						success = function(response)
							--fibaro:debug(response.status)
							if (response.status == 200 or response.status == 201) and type(response.data) == "string" and response.data ~= "" then
								if type(response.data) == "string" and response.data ~= "" then	
									-- réponse OK
									--fibaro:debug(response.data)
									local Token = response.data
									fibaro:debug("Token = " .. Token)
									fibaro:setGlobal("TokenEnphase",Token) --> envoie du Token dans une variable globale
								else
									-- réponse Pas OK
									fibaro:debug('GetEnphaseToken response code : ' .. response.status)
									local msg = 'GetEnphaseToken response code : ' .. response.data
									fibaro:debug(msg)
									SendMail(msg)
								end
							end
						end,

						error = function(err)
							local msg = "GetEnphaseToken Erreur : " .. err
							fibaro:debug(msg)
							SendMail(msg)
						end,
						}
					)
					
			else
				-- réponse Pas OK
				fibaro:debug('GetEnphaseSession response code : ' .. response.status)
				local msg = 'GetEnphaseSession response code : ' .. response.data
				fibaro:debug(msg)
				SendMail(msg)			
			end
		end,
		
		error = function(err)
			local msg = "GetEnphaseSession Erreur : " .. err
			fibaro:debug(msg)
			SendMail(msg)
		end,
		}
	)
end

function SendMail(MsgErr)
	fibaro:call(IDNotifMailAdmin, 'sendEmail', 'HC2 Erreur EnphaseToken', os.date("%x " .. "%X") .. " " .. MsgErr)
end

function loop()
	
	fibaro:debug(os.date("%x " .. "%X"))
	RequestHTTP()

	setTimeout(loop,TempsDeBoucle)
	
end
setTimeout(loop,0)

Code corrigé le 23/03/2024

Modifié par stipower
  • Like 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Top, bravo, et voilà qui devrait intéresser @Nico :)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu crois que@nico aura le temps de faire un copier coller

Envoyé de mon BLA-L29 en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Top. Du coup j'abuse, tu n'as pas le petit VD qui va bien... :)

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai corrigé mon code de scène HD2 et ai ajouté un envoi de mail en cas de mauvais logins/password.

Modifié par stipower

Partager ce message


Lien à poster
Partager sur d’autres sites

×