stipower Posté(e) le 15 septembre 2023 Signaler Posté(e) le 15 septembre 2023 Le 03/08/2023 à 08:51, stipower a dit : 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 ... Bonjour, Voici mon code pour une scène HD2 : Citation --[[ %% autostart %% properties %% events %% globals --]] -- date du Token = aout 2023 local Token = 'eyJraWQiOiCXXXXX...' local Bearer = 'Bearer ' .. Token local URL = "https://192.168....." local API = "/ivp/meters/readings" local http = net.HTTPClient() function RequestHTTP() 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 fibaro:setGlobal("TableEnvoy", response.data) --fibaro:debug(response.data) TableEnvoy = json.decode(response.data) fibaro:debug("activePower =" .. TableEnvoy[2].activePower) else -- réponse Pas OK fibaro:debug('response code : ' .. response.status) fibaro:debug("TableEnvoy -> False") fibaro:setGlobal("TableEnvoy", "False") --fibaro:debug(response.data) end end, -- Erreur sur la fonction error = function(err) fibaro:debug('function(err) : ' .. err) fibaro:debug("TableEnvoy -> False") fibaro:setGlobal("TableEnvoy", "False") end }) setTimeout(RequestHTTP,1*1000) -- boucle toute les secondes end setTimeout(RequestHTTP,0) --lance la function 1
TitiXsi Posté(e) le 18 septembre 2023 Signaler Posté(e) le 18 septembre 2023 (modifié) Hello, je reviens sur mes erreurs liant une saturation de la passerelle. Étant privé de connexion internet depuis 1 semaine, j'ai pu en profiter pour debugguer. Première chose, je confirme que la vérification du token, se fait bien en local, d'ailleurs, on peut mettre un vieux Token, du moment que la date encodé en unixbase n'est pas dépassé, c'est fonctionnel. La seconde, J'ai enfin trouvé le point bloquant qui "spammait" ma passerelle de requetes, j'ai rajouté un check dans le code qui permet de de vérifier qu'on est bien en présence d'un refresh, sinon on sort avec un callback. Ca semble fonctionner correctement . La dernière chose que j'ai pu noter, est dès qu'on essaie d'aller sur la passerelle via un navigateur en même temps que la QA tourne, on tombe face à une erreur d'accès côté QA. Ceci confirme qu'une limitation du nombre de "connexions" simultanées est présente. A ce sujet, je vois également passer quelques erreurs non liée à une double connexion coté user/qa, peut-être qu'elles sont liées à l'exportation des data via enlighten... et que durant ce même laps de temps, la QA n'a pas accès à l'api...? je ne sais pas. c'est peu fréquent et pas bloquant. J'avance sur mon fork et je viens de voir aujourd'hui que plusieurs MO arrêtent de produire par moment, certes, c'était un journée très très nuageuse et la prod n'était que de quelques W par panneaux, mais je trouve ceci intriguant. -> Ceci me conforte dans le choix d'aller vérifier qui produit toutes les 5 min du levé du soleil +1h au couché du soleil -1h. En revanche, je bloque toujours pour aller chercher les infos de la page : https://<ip gateway>/api/v1/production/inverters Impossible de récupérer les datas, je suis toujours bloqué avec une erreur de certificat...(Est-ce lié au fait que je n'ai pas internet, et que la vérification n'est pas possible..., je ne pense pas...) Je m'y prends surement très mal, je suis une vrai quiche en requêtes HTTP et autres... Voici mon code (pour le moment dans uns scène, je le transférerai en QA une fois fonctionnel) print("GET INVERTERS (MicroInverters details)") -- date du Token = aout 2023 local Token = 'eyJraWQiOiI3ZDEwMDA1ZC03ODk5LTRkMGQtYmNiNC0yNDRmOThlZTE1NmIiLCJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJhdWQiOiIxMjIxMzEwMjE4MzMiLCJpc3MiOiJFbnRyZXoiLCJlbnBoYXNlVXNlciI6Im93bmVyIiwiZXhwIjoxNzI2NDIxMTA2LCJpYXQiOjE2OTQ4ODUxMDYsImp0aSI6Ijg4MDRlNWU0LWNjZTItNGFiZC04N2EwLTI2YmQ3NTQ5NGY4ZiIsInVzZXJuYW1lIjoicmVtaS5tYWdhbmRAZ21haWwuY29tIn0.jiaR5_XA0Hew7TkmBZ_Kc-22zW4hTeQj6hd6VPpXc0xZq0PIyoBVdXD_4SIKTzz-IU94916J-54sU3GWT7U09g' local Bearer = 'Bearer ' .. Token local URL = "https://192.168.1.89" local API = "/api/v1/production/inverters" local http = net.HTTPClient() function RequestHTTP() print("START") http:request(URL .. API, { options = { method = 'GET', checkCertificate = 'false' , 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 print("OK") fibaro:setGlobal("TableEnvoy", response.data) hub.debug(response.data) TableEnvoy = json.decode(response.data) hub.debug("activePower =" .. TableEnvoy[2].activePower) else -- réponse Pas OK print("KO : ".. response.status) hub.debug('response code : ' .. response.status) hub.debug("TableEnvoy -> False") setGlobal("TableEnvoy", "False") hub.debug(response.data) end end, -- Erreur sur la fonction error = function(err) print("ER :".. err) hub.debug("TableEnvoy -> False") --setGlobal("TableEnvoy", "False") end }) --fibaro.setTimeout(1*1000,RequestHTTP) -- boucle toute les secondes end fibaro.setTimeout(0,RequestHTTP) print("END GET INVERTERS (MicroInverters details)") et la sortie qui va bien jusqu'au bout, mais présente l'erreur de certificat: Merci pour votre aide. (Merci @stipower pour ton code HC2 ;)) Rémi Modifié le 19 septembre 2023 par TitiXsi
Lazer Posté(e) le 18 septembre 2023 Auteur Signaler Posté(e) le 18 septembre 2023 Tu peux utiliser les balises de code, ce n'est pas très lisible sans cela : Essaye sans les guillemets, ça ira mieux, il faut un booléen, pas une string : checkCertificate = false Il y a 2 heures, TitiXsi a dit : on peut mettre un vieux Token, du moment que la date encodé en unixbase n'est pas dépassé, c'est fonctionnel ça c'est très fort Il y a 2 heures, TitiXsi a dit : plusieurs MO arrêtent de produire par moment, certes, c'était un journée très très nuageuse et la prod n'était que de quelques W par panneaux, mais je trouve ceci intriguant Tu as quels modèles de MO et quels panneaux ? C'est peut être normal, tu sais qu'il y a une tension minimale pour que les MO fonctionnent. C'est un des avantages des IQ7+ sur les IQ7A d'ailleurs, ils sont limités en puissance, mais produisent plus tôt/tard, donc c'est aussi valable en cas de temps très couvert quand la prod s'approche de 0W.
TitiXsi Posté(e) le 19 septembre 2023 Signaler Posté(e) le 19 septembre 2023 Il y a 13 heures, Lazer a dit : Tu peux utiliser les balises de code, ce n'est pas très lisible sans cela : J'ai pas compris, dès que je sélectionne Code et désigne un langage, j'au un truc tout pourri ... Il y a 13 heures, Lazer a dit : checkCertificate = false Same issue Il y a 13 heures, Lazer a dit : Tu as quels modèles de MO et quels panneaux ? C'est peut être normal, tu sais qu'il y a une tension minimale pour que les MO fonctionnent. C'est un des avantages des IQ7+ sur les IQ7A d'ailleurs, ils sont limités en puissance, mais produisent plus tôt/tard, donc c'est aussi valable en cas de temps très couvert quand la prod s'approche de 0W. 20 Sonnenstrom Fabrik M60 + 3 Bisol Bifacial, le tout en Iq7+ Je viens de remarqué que j'ai eu plusieurs micro coupures de courant (mes fils pilote Qubino on resetés...) c'est au même moment que j'ai perdu progressivement la prod pui qui est revenus. Je suspecte quelques baisses de tension ... Sinon, cette nuit, erreur de getProduction de 23h à 9h15 et depuis tout va bien ... il se passe des choses étranges avec cette passerelle ...
Lazer Posté(e) le 19 septembre 2023 Auteur Signaler Posté(e) le 19 septembre 2023 Je ne connais pas ces panneaux en particulier, mais si tu as des coupures de courant / chute de tension, alors c'est normal que les MO arrêtent de produire, c'est dans la norme pour des raisons de sécurité. A noter que même sans coupure de courant secteur, tu peux aussi avoir une coupure des MO si la tension à leur borne dépasse 253V, ce qui peut arriver si le câble trop long / de trop faible section provoque une chute de tension importante. 23h c'est l'heure à laquelle mon Envoy est indisponible, mais ça ne dure que quelques minutes chez moi.
TitiXsi Posté(e) le 19 septembre 2023 Signaler Posté(e) le 19 septembre 2023 il y a une heure, Lazer a dit : Je ne connais pas ces panneaux en particulier, mais si tu as des coupures de courant / chute de tension, alors c'est normal que les MO arrêtent de produire, c'est dans la norme pour des raisons de sécurité. A noter que même sans coupure de courant secteur, tu peux aussi avoir une coupure des MO si la tension à leur borne dépasse 253V, ce qui peut arriver si le câble trop long / de trop faible section provoque une chute de tension importante. On est bien d'accord, que lorsqu'il produit moins que la tension de démarrage des mo, ca coupe, c'était juste une remarque qui montre que j'ai un réseau de montagne, c'est pas tout lisse ... Sinon J'ai 3Qrelay et donc 3*30m de câble en 2.5 il y a une heure, Lazer a dit : 23h c'est l'heure à laquelle mon Envoy est indisponible, mais ça ne dure que quelques minutes chez moi. Pour le coup, ca c'est peut-être du à ma non connexion à internet. La passerelle essaie de transmettre ses infos (peut-être plus que l'envoi toutes les 15min) et un timeout de plusieurs heures en présent. On verra quand internet reviendra ... as tu pu essayer mon code ? :) Merci
Lazer Posté(e) le 19 septembre 2023 Auteur Signaler Posté(e) le 19 septembre 2023 30m en 2.5mm² derrière un disjoncteur de 20A, ça fait 11V de chute de tension, soit 4.80%, ça fait beaucoup je trouve. https://schema-electrique.net/calcul-chute-de-tension-electrique-formule-calcul-section-cable-triphase-monophase.html Après ça dépend aussi de la puissance sur chaque circuit (donc du nombre de MO), c'est peut être moins que ça, j'ai pris le pire cas de figure. Bon c'est pas le sujet mais quand même un peu important. Il est probable en effet que la passerelle Envoy essaye de se connecter au cloud Enphase. Non pas pour envoyer des infos (ce qu'elle fait tout au long de la journée tant que les MO produisent), mais peut être pour chercher ne dernière version de firmware ou autre truc dans le même genre... donc si elle n'arrive pas à se reconnecter au serveur, peut être qu'elle reste bloquée. Si c'est ça c'est quand même bien merdique comme fonctionnement... m'enfin si elle produit dès le matin, à la limite c'est sans impact réel. Non pas essayé ton code, mon QA me convient
TitiXsi Posté(e) le 19 septembre 2023 Signaler Posté(e) le 19 septembre 2023 Il y a 1 heure, Lazer a dit : Non pas essayé ton code, mon QA me convient Ce n'était pas sans ce sens là. Mais c'est pas un problème. Je viens de découvrir qu'il y avait 3 codes dans ton QA. du coup, ça change la donne, j'ai les infos qu'il me faut... je pensai depuis le début que les fonctions enphase:... était liée un l'API directement et j'essayais de trouver en vain des infos dessus.. la buse... enfin.. j'apprends
Lazer Posté(e) le 19 septembre 2023 Auteur Signaler Posté(e) le 19 septembre 2023 Ah désolé j'avais pas compris ça comme ça Oui effectivement mes QA sont découpés en plusieurs "fichiers", ce qui permet de structurer le code un peu plus proprement... enfin j'essaye La finalité, c'est de faciliter la réutilisation de bouts de codes entiers, sous forme de fichier, et qui s'apparente à des librairies comme il est de coutume en programmation. Les premiers développements sont plus long, mais le temps gagné par la suite est considérable : création des nouveaux QA, mise à jour d'une partie d'un QA, et ça m'a même aidé dans ma migration HC2=>HC3.
Lazer Posté(e) le 19 septembre 2023 Auteur Signaler Posté(e) le 19 septembre 2023 Tiens, comme tous les soirs à 23h, sauf que cette fois-ci j'étais devant le PC quand j'ai reçu la notification, donc j'ai fait une capture d'écran du log. La passerelle est indisponible pendant moins de 2 minutes.
TitiXsi Posté(e) le 20 septembre 2023 Signaler Posté(e) le 20 septembre 2023 Il y a 2 heures, Lazer a dit : Tiens, comme tous les soirs à 23h, sauf que cette fois-ci j'étais devant le PC quand j'ai reçu la notification, donc j'ai fait une capture d'écran du log. La passerelle est indisponible pendant moins de 2 minutes. La bonne nouvelle est que les commandes garde le tempo de 10sd. Chez moi ça vrillait plusieurs fois par sd..
Lazer Posté(e) le 20 septembre 2023 Auteur Signaler Posté(e) le 20 septembre 2023 En pratique je suis à 5s d'intervalle de rafraichissement, mais comme la requête se prend 10s de timeout, en conséquence ça fait 15s entre chaque message d'erreur.
TitiXsi Posté(e) le 28 septembre 2023 Signaler Posté(e) le 28 septembre 2023 (modifié) Hello, quelques news avec 4 bonnes nouvelles de mon côté : Le passage à la fibre à permis de gagner un peu de latence sur le l'interrogation de la passerelle en Wifi --> problème de saturation de la passerelle au bout d'une journée, au lieu de quelques heures (avec un Timing refresh de 60sd) J'ai enfin compris l'origine du problème de saturation de ma passerelle. --> Je pensais à Tord que le Timeout était "intelligent" et qu'il n’enverrai la requête suivante que lorsque la précédente était terminée (asynchronisme et callback)... Erreur, si la requête précédente à pris du retard, les 2 requêtes s’emplafonnent et la passerelle perd les pédales... --> J'ai donc j'ajouté un simple compteur qui est incrémenté à l'exécution d'une requête et décrémenté quand celle-ci revient "SUCCESS" ou "ERROR". Ensuite un petit check qui permet vérifier qu'aucune requête n'est en cours, si tout est Ok, on peut soumettre la nouvelle requête. C'est simple et au moins si la passerelle a du retard, la requête suivante ne partira pas, tout fonctionne pour le moment avec toujours des retards... Fichu Wifi ... (avec un Timing refresh de 30sd) Je viens de câbler en RJ45 ma passerelle et clairement c'est plus rapide, le ping répond en 2ms contre un temps variable de 40ms à 1.7s en Wifi. --> Je pense que là je n'aurais plus ou encore mois d'erreur. J'ai normalement terminée ma QA, elle est en test pendant 1 semaine histoire de fixer les dernières broutilles non anticipées... et je ferai un fil dédié Encore Merci pour votre indulgence sur mes nombreuses interrogations parfois bêtes... 6mois que j'ai une box domotique, on ne peut pas tout savoir dès la première semaine... Surtout si on mets les pattes dedans franchement avec des QA Modifié le 28 septembre 2023 par TitiXsi 2
Lazer Posté(e) le 28 septembre 2023 Auteur Signaler Posté(e) le 28 septembre 2023 Sacrée latence en Wi-Fi, c'est impressionnant même !
TitiXsi Posté(e) le 1 octobre 2023 Signaler Posté(e) le 1 octobre 2023 (modifié) Et voilà... je le voyais venir. Fin d'api au 30.09... @Lazer ça fonctionne toujours chez toi ? J'ai l'impression que le production.json n'est plus accessible depuis cette nuit... Bon en fait, j'ai rien dit, c'est toujours accessible, mais il faut valider un certificat pour accéder à la passerelle... Enphase et ses entourloupes ... Modifié le 1 octobre 2023 par TitiXsi
Lazer Posté(e) le 1 octobre 2023 Auteur Signaler Posté(e) le 1 octobre 2023 Oui chez moi le QuickApp fonctionne toujours.
TitiXsi Posté(e) le 1 octobre 2023 Signaler Posté(e) le 1 octobre 2023 il y a 46 minutes, Lazer a dit : Oui chez moi le QuickApp fonctionne toujours. Peut-être que ma qa est trop gourmande et plante par moment... j'avais lu un truc (peut-être gea) et sa capacité à détecter une sa ou un scénario dans les choux pour le redémarrer... je vais regarder .. mais étrange d'avoir un certificat à valider désormais sur la passerelle...
TitiXsi Posté(e) le 4 octobre 2023 Signaler Posté(e) le 4 octobre 2023 Salut @Lazer, j'ai une question pour toi J'ai vu dans le code qu'il était possible de mettre plusieurs seuils de déclenchement par Variable si on sépare les valeurs par une virgule : ProdThresUp : 1800,2000 Confirmes tu que c'est supporté et que la syntaxe est correcte ? Je rencontre un plantage lors que l'accès à getEvents si mon seuil dispose de plus d'une valeur. Merci Ps : J'apprends à utiliser les Events et c'est carrément Top ! Merci
Lazer Posté(e) le 4 octobre 2023 Auteur Signaler Posté(e) le 4 octobre 2023 Effectivement, on peut mettre plusieurs valeurs numériques pour la variable ProdThresUp, séparées par des virgules. Et normalement ça fonctionne, et ta syntaxe est correcte... en tout cas la dernière fois que j'ai essayé, car actuellement en production, je n'exploite plus cette possibilité (j'ai une seule valeur)
TitiXsi Posté(e) le 4 octobre 2023 Signaler Posté(e) le 4 octobre 2023 il y a 5 minutes, Lazer a dit : Effectivement, on peut mettre plusieurs valeurs numériques pour la variable ProdThresUp, séparées par des virgules. Et normalement ça fonctionne, et ta syntaxe est correcte... en tout cas la dernière fois que j'ai essayé, car actuellement en production, je n'exploite plus cette possibilité (j'ai une seule valeur) Merci, je vais me pencher sur le sujet
TitiXsi Posté(e) le 6 octobre 2023 Signaler Posté(e) le 6 octobre 2023 Hello, quelques news sur ce sujet ... Problème isolé, compris, fixé, c'est vraiment un cas tordu... si la valeur renvoyé est Pile poil un entier (sans virgule). Bon ok, ca doit arriver 1 fois sur 1 000 000 000 ... le %d n'est pas content seulement si il y a plus d'un seuil de définit... Surement que le split transforme la variable de float à integer dans ce cas là ... C'est étrange, je pensait que le %d transformait un integer en Float dans le pire des cas... C'est fixé dans le getEvents ;-)
Lazer Posté(e) le 6 octobre 2023 Auteur Signaler Posté(e) le 6 octobre 2023 Je viens seulement de remarquer que le 16 septembre, j'ai encore eu le compteur d'énergie cumulée des IQ7+ qui s'est réinitialisé à 0. C'est la seconde fois que ça le fait, la dernière fois je crois que c'était au moment de la mise à jour du firmware D7 en juillet 2023. Je n'ai pas noté le firmware que j'avais eu à cette époque.... mais là je suis en D7.6.175, du coup je ne sais pas dire si Enphase a forcé une nouvelle mise à jour ou non... Bref, plus que jamais il ne fait pas fair trop confiance aux infos remontées par les IQ7. Restons sur les mesures de l'Envoy (via les pinces)
TitiXsi Posté(e) le 7 octobre 2023 Signaler Posté(e) le 7 octobre 2023 C'est pour cette raison que je n'utilise pas le cumul... en revanche le json des microonduleurs semble fiable bien sûr réactualisé toutes les 15min..
stipower Posté(e) le 3 mars Signaler Posté(e) le 3 mars (modifié) 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 : Citation {"message":"success","session_id":"3aab3ebdff231af701f32a3ebdfd1f75","manager_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQeyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQeyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQeyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQeyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c","is_consumer":false,"system_id":1234567}% 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: Modifié le 5 mars par stipower
Lazer Posté(e) le 3 mars Auteur Signaler Posté(e) le 3 mars 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()
Messages recommandés