Aller au contenu

Yorino

Membres confirmés
  • Compteur de contenus

    96
  • 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

Newbie

Newbie (1/14)

  • First Post Rare
  • Collaborator Rare
  • Dedicated Rare
  • Week One Done Rare
  • One Month Later Rare

Recent Badges

8

Réputation sur la communauté

  1. 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)
  2. J'ai essayé le json.decode mais sans succès. Je dois mal faire la manip je pense...
  3. 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}
  4. 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 })
  5. 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 })
  6. Yorino

    JPI et contrôle de WallPlug

    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ù !
  7. 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 ?
  8. Yorino

    Marque Piles Er14250

    Je ne trouve aucune "grande marque" pour ce format. Je vais tenter Eve comme tu cites, on verra bien
  9. 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+
  10. Yorino

    Aide Lua... Utilisation des fonctions.

    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+
  11. Yorino

    Aide Lua... Utilisation des fonctions.

    Yes, après avoir lu plusieurs fois, il faut que je continue mon code dans le success. Je vais donc y travailler.
  12. Yorino

    Aide Lua... Utilisation des fonctions.

    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.
  13. Yorino

    Aide Lua... Utilisation des fonctions.

    Je suis sur Hc2. Et c'est bien ce que je pensais avoir compris en lisant d'autres sujet sur ce forum... Bon bah on va trouver une autre solution hein... Merci Lazer, toujours de bons conseils.
  14. Bonjour à tous, Je ne savais pas trop où poster ma demande, donc je choisis le Bistrot. Je ne suis pas programmeur, je bidouille. Et je bug sur l'utilisation des fonctions dans une scène écrite en lua. J'ai donc une scène qui doit avoir le déroulement suivant. Étape 1 - interrogation d'une api via un http.request Étape 2 - on récupère les données transmise à l'étape 1. Étape 3 - on fait une nouvelle interrogation d'une autre api. J'ai donc écris ce que je pense être la colonne vertébrale de mon programme avec les 3 étapes. Et pour chaque étape, j'appelle une fonction que j'ai déclaré dans au début de la scène. (Au dessus de mon code principal). Sauf que j'ai l'impression, en visualisant les fibaro:debug que j'ai mis un peu partout pour voir où en est mon code, que le programme n'attends pas la fin de l'exécution de la fonction pour poursuivre sa route. Je me trompe ?
  15. Yorino

    Plugin Netatmo

    J'ai vu des choses sur HC3 qui pilote a priori via l'IP local... Mais n'ayant pas de HC3 difficile de comprendre. Je ne trouve rien dans la Doc netatmo non plus. Bref je continue mes tests...
×
×
  • Créer...