Aller au contenu

stipower

Membres confirmés
  • Compteur de contenus

    97
  • Inscription

  • Dernière visite

  • Jours gagnés

    3

Tout ce qui a été posté par stipower

  1. Tu 'as aucun message d'erreur avec ton QA même à 3 secondes de refresh ? Ca peut aussi être du à la passerelle qui serait différente ou avec un autre firmware. Quelle est la version de firmware de ta passerelle Envoy ? La mienne est en D8.2.4264 (882efd) du 27 juin 2024
  2. Non pas du tout. Mon code marche dans une QA sur HC3 (et aussi ma HC2) toutes les 3 secondes. C'est ca que je trouve bizarre.
  3. Ce n'est pas un problème réseau. J'ai les même symptômes en WIFI (ping 3ms) et LAN (ping 1ms). Et j'aurais aussi les problème avec mon code. Peut-être plus sur net.HTTPClient() ? Ca c'est ma fonction qui choppe le token toutes les heures. local EnphaseURLlogin = "https://enlighten.enphaseenergy.com/login/login.json?" local EnphaseURLToken = "https://entrez.enphaseenergy.com/tokens" local envoy_serial = "XXXXXXX" -- sérial de l'installation Enphase local user ="XXXXXX" local password = "XXXXX" local SessionID local http = net.HTTPClient() local DataEnphaseURLlogin = '{"user": {"email": "'.. user .. '", "password": "' .. password .. '"}}' -- attendu : DataEnphaseURLlogin = '{"user": {"email": "XXXX", "password": "XXXX"}}' --fibaro.debug("test","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("test",response.status) if (response.status == 200 or response.status == 201) and type(response.data) == "string" and response.data ~= "" then -- réponse OK --.debug("test",response.data) --[[ reponse attendue : {"message":"success", "session_id":"XXXXXXXXXXX", "manager_token":"eyJhbGciOiJIUzI......1NiJ9.eyJkYXRh", "is_consumer":true,"system_id":XXXXXXXX} --]] SessionID = json.decode(response.data) SessionID = SessionID.session_id --fibaro.debug("test","session_id = " .. SessionID) -- ************************************ Get Token ************************************ --fibaro.debug("test","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("test",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("test",response.data) local Token = response.data fibaro.debug("test","Token = " .. string.format("Token ok","01")) self:setVariable("TokenEnphase",Token) --> envoie du Token dans une variable globale else -- réponse Pas OK fibaro.debug("test",'GetEnphaseToken response code : ' .. response.status) local msg = 'GetEnphaseToken response code : ' .. response.data fibaro.debug("test",msg) SendMail(msg) end end end, error = function(err) local msg = "GetEnphaseToken Erreur : " .. err fibaro.debug("test",msg) SendMail(msg) end, } ) else -- réponse Pas OK fibaro.debug("test",'GetEnphaseSession response code : ' .. response.status) local msg = 'GetEnphaseSession response code : ' .. response.data fibaro.debug("test",msg) SendMail(msg) end end, error = function(err) local msg = "GetEnphaseSession Erreur : " .. err fibaro.debug("test",msg) SendMail(msg) end, } ) fibaro.setTimeout(60 * 60 * 1000, function() GetEnvoyToken(self) end) end Ca c'est ma fonction qui choppe la table de l'envoy toutes les 3 secondes pour la mettre dans une variable : function GetEnvoyLive(self) -- TableEnvoyLive local Token = self:getVariable("TokenEnphase") --fibaro.debug("test","Token = " .. Token) local Bearer = 'Bearer ' .. Token local URL = "https://192.168.X.X" local API = "/ivp/meters/readings" local http = net.HTTPClient() http:request(URL .. API, { options = { checkCertificate = false, method = 'GET', headers = { ['Accept'] = 'application/json', ['Content-Type'] = 'application/json', ['Authorization'] = Bearer }, timeout = 10000 }, success = function(response) local result = response.data; if response.status == 200 or response.status == 201 then -- réponse OK self:setVariable("TableEnvoy", response.data) --fibaro.debug("test",response.data) TableEnvoy = json.decode(response.data) --fibaro.debug("test","activePower = " .. TableEnvoy[2].activePower) self:updateProperty("value", TableEnvoy[2].activePower) else -- réponse Pas OK fibaro.debug("test",'response code : ' .. response.status) fibaro.debug("test","TableEnvoy -> False") self:setVariable("TableEnvoy", "False") fibaro.debug("test",response.data) end end, -- Erreur sur la fonction error = function(err) fibaro.debug("test",'function(err) : ' .. err) fibaro.debug("test","TableEnvoy -> False") self:setVariable("TableEnvoy", "False") end }) fibaro.setTimeout(3 * 1000, function() GetEnvoyLive(self) end) end Et ca ma fonction qui choppe les values de la table toutes les 3 secondes (et qui les colle pour l'instant dans un label de ma Qapp). function GetTableEnvoy(self) -- récupération des valeur de l'Envoy ******************************************************************************************************** local JsonTableEnvoy = self:getVariable("TableEnvoy") -- donwload de la table en string --fibaro.debug("test",string.sub(JsonTableEnvoy,1,400)) -- affiche les 400 premiers caractères if JsonTableEnvoy == nil or string.len(JsonTableEnvoy) < 50 then -- creation de la variable global si necessaire (variable nulle ou corrompue) fibaro.debug("test","Table JsonTableEnvoy Corrompu") fibaro.debug("test",JsonTableEnvoy) else local TableEnvoy = json.decode(JsonTableEnvoy) -- conversion table string en table PowerPVautoconsoW = math.floor(TableEnvoy[1].activePower,'PowerPVautoconsoW') -- production solaire autoconsommation EnergieCompteurW = -math.floor(TableEnvoy[2].activePower,'EnergieCompteurW') -- Compteur linky puissance actrive en watts EnergieCompteurVA = math.floor(TableEnvoy[2].apparentPower,'EnergieCompteurVA') -- Compteur linky Puissance apparente en VA cosphi = TableEnvoy[2].pwrFactor,'cosphi' -- cosphi --fibaro.debug("test","EnergieCompteurW = " ..EnergieCompteurW) self:updateView("label_ID_0", "text", "PowerPVautoconsoW = "..PowerPVautoconsoW..", EnergieCompteurW = "..EnergieCompteurW) end fibaro.setTimeout(3 * 1000, function() GetTableEnvoy(self) end) end Si tu as un episte, je peux t'aider à faire des tests. Sinon, je vais chercher comment faire des childs (j'ai pas encore trouvé) pour me faire mon propre Qapp. Mais c'est dommage de refaire le même design que toi :/
  4. Salut Lazer, Je suis passé sur HC3. Je m'intéresse donc à ta Qapp qui me va très bien. J'ai néanmoins ces messages d'erreur dès que je passe à moins de 60 secondes de refresh (RefreshInterval) [07.11.2024] [22:01:29] [WARNING] [QA_ENPHASE_73]: Using old token [07.11.2024] [22:01:39] [ERROR] [QA_ENPHASE_73]: Can't get Enphase inventory : Operation canceled [07.11.2024] [22:01:54] [ERROR] [QA_ENPHASE_73]: Can't get new token : Operation canceled Et forcément, les childs sont sans valeur. J'ai réussis à porter mon code de HC2 vers HC3. Et j'ai bien un refresh de 3 secondes comme sur mon HC2 sans souci qui me donne les valeurs de conso, productions, etc. Je n'ai pas toutes les compétences pour décortiquer tout ton code qui est bien plus propre que le mien Et il y a surement des contraintes que je n'ai pas comprises, mais du coup je m'interroge sur pourquoi ta Qapp ne marche pas chez moi . Qu'en penses tu ?
  5. Bien vu ! Qapp / Avancé / Utiliser les nouvelles vues dans l'application mobile -> à décoché. Mes Qapps sont maintenant vu dans l'appli Yubii (la blancche). Ils étaient déjà vus dans la nouvelle appli Yubii Home (la bleue). Merci Jojo.
  6. Bonjour, Je fais mes 1ers Qapp (migration HC2). Ils ne s'affichent pas tous dans l'application ANDROID YUBII. Savez-vous quels sont les "type" de Qapp affichés dans Yubii. Le générique n'a pas l'air de s'afficher par exemple. Merci
  7. Merci pour le partage.
  8. Bonjour, Installé avec succès. Merci pour le partage.
  9. J'ai corrigé mon code de scène HD2 et ai ajouté un envoi de mail en cas de mauvais logins/password.
  10. Le VD qui va bien pour faire quoi ?
  11. 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
  12. 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
  13. Bonjour, Je cherche à automatiser la génération de token Envoy pour ma HC2 . Je bloque sur la 1ère étape qui consiste à s'authentifier sur https://enlighten.enphaseenergy.com/login/login.json? et récupérer le session_id. Je récupère un string de 50017 caractères alors que je devait récupérer un json du type : On dirait que je reçois tout le site en html avec la page d'auth et tout. Merci pour votre aide. doc : https://mesgeekeries.ch/2023/11/04/decouvrir-les-api-enphase-iq-gateway-envoy-s/ Mon code dans une scène HC2 : erreurs corrigés : voir post plus loin Le résultat : [DEBUG] 19:15:11: {"user[password]":"YYYYY","user":"XXXXXX"} [DEBUG] 19:15:11: Get session_id [DEBUG] 19:15:13: response.status : [DEBUG] 19:15:13: 200 [DEBUG] 19:15:13: response.data : type = string [DEBUG] 19:15:13: response.data : string.len = 50017 [DEBUG] 19:15:13: response.data (caract 1110 à 1249): [DEBUG] 19:15:13: Energy - Enlighten | Sign in to Enlighten [DEBUG] 19:15:13: [DEBUG] 19:15:13:
  14. Bonjour, Voici mon code pour une scène HD2 :
  15. Merci, c'est super. Je vais regarder cela et poster mon code au cas ou ca intéresse quelqu'un sur HD2. Même si ca sera beaucoup moins pro que toi ...
  16. Salut Lazer, Je suis sur HC2. J'essaye de faire un truc un peu comme toi (en moins poussé), pour continuer à manager ma production/consommation électrique sur quelques secondes. Je voudrais m'inspirer de ton code pour corriger/améliorer le miens. Je n'arrive pas à éditer ton fqa. Ca me fait planter notrepad++. Pourrais-tu partager ton code en clair ? Merci
  17. Mon code est 2 postes au dessus
  18. Merci pour tes réponses. Je vais donc passer par une scène avec httpClient.
  19. Je poste mes trouvailles. Ce code fonctionne pour les scènes avec net.HTTPClient : Je cherche comment le faire avec Net.Fhttp pour mon VD, mais je bloques sur les "headers". Quelqu'un sait comment mettre des headers avec Net.Fhttp ? -> : Error in FHttp
  20. Salut Lazer, Peux-tu partager le code de ta QA sur ton HC3 ? Ca pourrait peut-être m'aider. PS : convecteur électrique = 100% de rendement, mais tu oublies le rendement de la création de l'énergie électrique, qui est une Energie secondaire, contrairement au bois/gaz ...
  21. Bonjour Nico (et les autres !), Comme beaucoup de monde je pense suite à la mise à jour imposée de mon Envoyi y a un mois, je n'ai plus de remontées , donc je n'ai plus de gestion pilotée d'énergie (chauffe eau et autres). Il faut que je change mon code pour y inclure le token. J'utilisais à peut près ce code sans le Token avec l'ancienne version d'Envoy. Aurais-tu le code d'un VD HD2 avec la gestion du token pour l'Envoy V7 ? Je galère à trouver les infos dessus Merci et bonne journée.
  22. Bonjour, Merci pour ce super module php. Je suis en train de chercher pourquoi une commande sur un de mes actionneur mets jusqu'à 90 sec pour être exécutée. Ca va m'aider un peu. Un question : que veut dire le nombre qui est sur chaque lien sur le schéma ? Merci à vous. -> Je viens de comprendre. Ca désigne le module maitre. (par ou ca passe)
  23. Bonjour, D'abord merci pour le temps passé à développer Domachart et faire la procédure d'installation. Je l'utilise depuis pas mal de mois maintenant et c'est top. Mon problème : J'ai un erreur sur le graph energy. Je vois bien tous mes modules, mais le graph est vide depuis des mois. J'ai ce message d'erreur sur ma HC2 dans le debug du Virtual Device (partir Energy): [DEBUG] 11:47:52: Error 1062 : SQLSTATE[23000] Duplicate entry '2021-11-12-133' for key 'device_date' Auriez-vous une piste pour résoudre le problème ? Je vous remercie.
  24. Merci beaucoup pour ce super outil et tuto. Pas facile à mettre en place mais avec l'aide du tuto et du forum j'y suis arrivé.
  25. Nan ... Sika pour coller plastique contre metal. Si c'est ta femme qui rempli, c'est pas grave. Au pire t'as pas l'info. Ca empêche pas le poele de fonctionner.
×
×
  • Créer...