
Yorino
Membres confirmés-
Compteur de contenus
99 -
Inscription
-
Dernière visite
-
Jours gagnés
1
Yorino a gagné pour la dernière fois le 30 août 2019
Yorino a eu le contenu le plus aimé !
Profile Information
-
Sexe :
Homme
-
Ville :
France
-
Box
Autre
Visiteurs récents du profil
Le bloc de visiteurs récents est désactivé et il n’est pas visible pour les autres utilisateurs.
Yorino's Achievements
-
Oui Lazer, j'ai essayé en démontant et en soudant. Si tu n'as pas l'électronique de la batterie, le téléphone s'allume mais au bout de 20 seconde il reboot. Donc c'est mort. Pour le coup me passer de JPI ne vas pas m'arranger, car en entrant il me sert beaucoup pour la gestion des scènes à partir d'un sms. Bref, c'est la merdouille...
-
Oui c'est mort. J'ai même essayé de remplacer la batterie par une alimentation stabilisée permanente, mais il y a désormais de l'électronique de contrôle dans les batteries, le smartphone boot mais reboot aussi vite...
-
Yorino a commencé à suivre Smartphone Android sans batterie.
-
Bonjour à tous, Je ne savais pas trop où poster, je vais le faire ici... J'utilise JPI (Djul) pour la gestion des messages de la hc2 et piloter pas mal de scènes par sms. Ça fonctionne bien, c'est top. Mais je l'ai installé sur un smartphone Android qui est donc pour le coup relié en permanence sur une prise électrique. Bien que je pilote ça recharge via une prise connectée (30-90%), le fait d'avoir une batterie lithium en charge sans surveillance dans mon sous-sol bof.... Aux utilisateurs de JPI, ou aux autres aussi d'ailleurs, connaissez vous un smartphone sans batterie, avec alimentation en permanence ou un équivalent qui pourrait héberger JPI avec une carte SIM ? Merci.
-
Bon, je suis parti sur l'option de travailler directement sur la String retournée en la découpant. Je ne vais récupérer que les 3 mêmes informations sur tous mes modules (T°, CO2 et Humidité) donc la découpe sera valable tout le temps, quelque soit le module interrogé. Il me reste à faire les créations des variables pour le stockage des infos, et la découpe finale. ;-) local function callback(response) if response.status == 200 then -- Action pour Réponse Ok fibaro:debug("Réponse Ok") ResultatMesure = string.sub(response.data, string.find(response.data, "body") + 21, string.find(response.data, "status") - 5) fibaro:debug(ResultatMesure)
-
J'ai essayé le json.decode mais sans succès. Je dois mal faire la manip je pense...
-
La réponse arrive bien et je récupère bien l'info qui m'intéresse à savoir la dernière mesure de la station. Et bien évidemment, bah je n'arrive pas à stocker les valeurs de la réponse dans des variables. Si vous avez une petite idée, pour ce soir j'arrête là je vais dodo... le code qui gère la réponse : if response.status == 200 then -- Action pour Réponse Ok fibaro:debug("Réponse Ok") fibaro:debug(response.data) Voila la réponse, et en gras la partie qui m'interesse : [DEBUG] 23:09:12: Réponse Ok [DEBUG] 23:09:12: {"body":{"1719346149":[24.8,433,65,1010.8,42]},"status":"ok","time_exec":0.017178058624267578,"time_server":1719349752}
-
Merci pour la réponse, alors j'ai testé le code ci dessus et même problématique. Du coup je suis reparti du code existant pour gérer le Token et Refresh Token et j'ai écris le code sur la même base et miracle, "Réponse Ok" ! Il ne me reste plus qu'à trouver comment décoder la réponse désormais.... ;-) Le morceau de code qui fonctionne : Clock = os.time()-3600 http:request("https://api.netatmo.net/api/getmeasure?", {options={ checkCertificate=false, method='POST', headers={['Content-Type']='application/x-www-form-urlencoded;charset=UTF-8'}, data="access_token="..accessToken.."&device_id="..DeviceID.."&scale=1hour&type=Temperature,CO2,Humidity,Pressure,Noise&limit=2&optimize=false&real_time=true&date_begin="..Clock.."date_end="..os.time()}, success = callback, error = callback })
-
Bonjour à tous, Je reviens sur le sujet Netatmo car je sèche complètement avec mes maigres compétences en LUA. Mon besoin : Lire la station météo pour récupérer la valeur d'humidité d'un module externe. J'ai réussi a gérer l'histoire des Token et refresh Token. Ca fonctionne nikel pour mes 2 présences, j'arrive toujours à les actionner malgré la dernère update de securité de NetAtmo. Par contre la station Météo, impossible de comprendre comment écrire la requete http. Je me retrouve toujours avec le retour suivant : [DEBUG] 21:41:28: Erreur lors de la requête [DEBUG] 21:41:28: Statut HTTP : 400 [DEBUG] 21:41:28: Réponse : {"error":{"code":10,"message":"Argument(s) is(are) missing"}} Voici mon code LUA écrit avec les pieds.... Si une âme charitable peut me dire quoi écrire poru gérer la demande et stocker le résultat dans une variable ca serait top. ------------------------------------------------------------------------------------------------------------------------ --[[ %% properties %% events %% globals --]] -------------------------------------------------------------------------------------- -- Déclaration des fonctions local function callback(response) if response.status == 200 then -- Action pour Réponse Ok fibaro:debug("Réponse Ok") -- Code pour gérer la réponse de la requete. Stockage dans variable du résultat. else -- Gérer les erreurs ici fibaro:debug("Erreur lors de la requête") fibaro:debug("Statut HTTP : " .. response.status) fibaro:debug("Réponse : " .. response.data) end end -------------------------------------------------------------------------------------- -- Début du code fibaro:debug("Début de la scène, nombre d'instance: "..fibaro:countScenes()) -- Limitation à une seule scène en même temps. if (fibaro:countScenes() > 1) then fibaro:abort() end -- Etape 1 - Chargement des informations + ID de la station météo fibaro:debug("Etape 1 - Chargement des variables") local http = net.HTTPClient() -- Chargement des variables NetAtmo local clientId = fibaro:getGlobal('NetAtmoMeteoCltId') local clientSecret = fibaro:getGlobal('NetAtmoMeteoCltSc') local accessToken = fibaro:getGlobal('NetAtmoMeteo_Tk') local refreshToken = fibaro:getGlobal('NetAtmoMeteo_RTk') local homeID = fibaro:getGlobal('NetAtmoHome_Id') fibaro:debug("Chargement des variables effectués") -- Etape 2 - Contrôle et Refresh des tokens -- Requête HTTP POST contrôle et renouvellement des Tokens fibaro:debug("Etape 2 - Debut de procédure Refresh Token") http:request("https://api.netatmo.com/oauth2/token", {options={ checkCertificate=false, method='POST', headers={['Content-Type']='application/x-www-form-urlencoded;charset=UTF-8'}, data="grant_type=refresh_token&client_id="..clientId.."&client_secret="..clientSecret.."&refresh_token="..refreshToken,timeout=40000}, success = function(response) label=pcall(function()chk_data=json.decode(response.data)if type(chk_data)~="table" then error() print("Erreur") else print("Table reçue") end end) fibaro:debug("Décodage des tokens reçus") -- affichage des informations reçues & traitement local NewToken = chk_data.access_token print("Nouveau Token:" .. NewToken) local NewRefresh = chk_data.refresh_token print("Nouveau RefreshToken:" .. NewRefresh) print("Délai expiration:" .. chk_data.expires_in) -- comparaison des données Token et action if accessToken ~= NewToken then fibaro:debug("Token différent - Remplacement dans les variables globales") fibaro:setGlobal('NetAtmoMeteo_Tk', NewToken) fibaro:debug("Nouveau Token :" .. fibaro:getGlobal('NetAtmoMeteo_Tk')) fibaro:setGlobal('NetAtmoMeteo_RTk', NewRefresh) fibaro:debug("Nouveau Refresh Token :" .. fibaro:getGlobal('NetAtmoMeteo_RTk')) else fibaro:debug("Token identique - Pas d'action") end -- comparaison des données RefreshToken et action if refreshToken ~= NewRefresh then fibaro:debug("RefreshToken différent - Remplacement dans les variables globales") fibaro:setGlobal('NetAtmoMeteo_RTk', NewRefresh) fibaro:debug("Nouveau Token :" .. fibaro:getGlobal('NetAtmoMeteo_RTk')) else fibaro:debug("Token identique - Pas d'action") accessToken = fibaro:getGlobal('NetAtmoMeteo_Tk') refreshToken = fibaro:getGlobal('NetAtmoMeteo_RTk') end -- Etape 2 - Interrogation Netatmo fibaro:debug("Début du code Action") accessToken = fibaro:getGlobal('NetAtmoMeteo_Tk') fibaro:debug(accessToken) refreshToken = fibaro:getGlobal('NetAtmoMeteo_RTk') fibaro:debug(refreshToken) DeviceID = fibaro:getGlobal('NetAtmoWeathSal_Id') fibaro:debug(DeviceID) ModuleID = fibaro:getGlobal('NetAtmoWeathGar_Id') fibaro:debug(ModuleID) http:request("https://api.netatmo.net/api/getmeasure", {options = {method = 'GET', headers = { ["Content-Type"] = "application/json", }, "access_token="..accessToken.."&device_id="..DeviceID.."&module_id="..ModuleID.."&scale=1hour&type=Humidity&limit=1&optimize=false&real_time=false&date_End="..os.date(), }, success = callback, error = callback }) end, error = function(error) fibaro:debug("Failed to authenticate: " .. error) end })
-
Bon bah du coup je viens de comprendre en rédigeant le post, c'est une question de droits que je n'avais pas accordé au niveau du HC2 à l'utilisateur JPI... Voilà au cas où !
-
Bonjour, Bon je ne sais pas si c'est le bon endroit pour poster ce type de demande, désolé d'avance. Bref, je galère sur une connerie sans doute.. J'ai un serveur JPI sur un smartphone, lui même alimenté via un wallplug fibaro. J'ai tenté de mettre dans les action de JPI au niveau du contrôle de la batterie un hc_turnon et hc_turnoff. J'ai bien mis le devine id du wallplug, mais JPI me retourne une erreur 404... Je pige pas. Une âme charitable pour m'aider ?
-
Je ne trouve aucune "grande marque" pour ce format. Je vais tenter Eve comme tu cites, on verra bien
-
Bonjour à tous, Question peut-être bête, mais où achetez vous vos piles ER1450 (détecteur ouverture) ? J'en ai une série achetées sur Amazon, mais franchement 1 sur 2 est considérée comme HS par la HC2.... Je suis preneur d'une bonne info. A+
-
Bon donc sur tes conseils et sur ton très bon post d'explication de la requête net.http, je pense avoir réussi à piloter a nouveau mes projecteurs Netatmo Presence ! J'attends de tester sur plusieurs jours avant de partager mon humble code sur un sujet dédié. A+
-
Yes, après avoir lu plusieurs fois, il faut que je continue mon code dans le success. Je vais donc y travailler.
-
Je viens de lire ton post, super intéressant, je ne l'avais pas trouvé avant. Pas certain d'avoir tout pigé mais je vais y bosser dessus.