Aller au contenu

Quick App - Enphase Envoy


Lazer

Messages recommandés

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
Lien vers le commentaire
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...

Lien vers le commentaire
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
Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...
×
×
  • Créer...