Rem's Posté(e) le 13 août 2014 Signaler Posté(e) le 13 août 2014 Bonjour à tous, Je tente de récupérer les données de ma station Netatmo. le script fonctionne appellé dans une page web. HC2 = Net.FHttp("192.168.0.46", 5005); response = HC2:GET("/web/Web_scripts/renetatmo.php"); -- decoding json string to table -- result = json.decode(response); fibaro:setGlobal("NetTempExt", result.body[1].value[1][1]); fibaro:setGlobal("NetHumExt", result.body[1].value[1][2]); fibaro:log(fibaro:getGlobalValue("NetTempExt").. " °C " ..fibaro:getGlobalValue("NetHumExt").. " % " ) La fonction debug me retourne en ligne 4 : Expected value but found invalid token at character 1. Cela inspire quelqu'un ... d'avance merci de votre aide.
Krikroff Posté(e) le 13 août 2014 Signaler Posté(e) le 13 août 2014 C'est qu'il y a un problème avec le retour de la requête et la valeur de la variable "response" pour éviter cela je te suggère d'utiliser dans tous les scripts les mécanismes de validation mis ànotre disposition par FHttp par exemple: local response, status, errorCode = HC2:GET("/web/Web_scripts/renetatmo.php"); if tonumber(status) == 200 then -- c'est ok, la suite est envisageable else -- oups il y a un problème... fibaro:debug("Err: " .. status); end Tu peux aussi faire plus avec un pcall mais le debug est alors plus délicat...
Rem's Posté(e) le 13 août 2014 Auteur Signaler Posté(e) le 13 août 2014 ca me sort en debug err : 401. Pourtant le lien entier s'ouvre dans mon navigateur avec la page en question. Une idée ? merci.
Krikroff Posté(e) le 13 août 2014 Signaler Posté(e) le 13 août 2014 Le problème n'est pas au niveau du HC2 mais bien au niveau de ton serveur php. Tu dois avoir une gestion d'authentification des utilisateurs et la ressource /web/Web_scripts/renetatmo.php doit réclamer une authentification depuis un accès extérieur. Dans ce cas il faut utiliser en plus HC2:setBasicAuthentication(username, password); Sinon, lorsque tu testes sur ton navigateur tu es en local sur ton serveur ou sur un autre ordi ?
Rem's Posté(e) le 13 août 2014 Auteur Signaler Posté(e) le 13 août 2014 Yes, je suis chez moi. Ce coup là, il me sort err : 404 HC2 = Net.FHttp("192.168.0.46", 5005); HC2:setBasicAuthentication("XXXXX", "YYYY"); local response, status, errorCode = HC2:GET("/web/Web_scripts/renetatmo.php"); if tonumber(status) == 200 then -- c'est ok, la suite est envisageable else -- oups il y a un problème... fibaro:debug("Err: " .. status); end fibaro:setGlobal("NetTempExt", result.body[1].value[1][1]); fibaro:setGlobal("NetHumExt", result.body[1].value[1][2]); fibaro:log(fibaro:getGlobalValue("NetTempExt").. " °C " ..fibaro:getGlobalValue("NetHumExt").. " % " )
Krikroff Posté(e) le 13 août 2014 Signaler Posté(e) le 13 août 2014 La 404 c'est lorsque la ressource n'existe pas ou est introuvable. Je pense que tu as vraiment un problème d'utilisateur... Avant d'aller plus loin il faut que tu valides l'accès depuis un navigateur externe (par exemple ipad ou autre). Sinon pour le code tu dois mettre la logique de traitement des données dans le bloc IF status == 200 et pas en fin de code... Status 200 est la reponse lorsque tout va bien donc tu peux continuer l’exécution des traitements, sinon hop gestion de l'erreur ... c'est un cycle local HC2 = Net.FHttp("192.168.0.46", 5005); HC2:setBasicAuthentication("XXXXX", "YYYY"); local response, status, errorCode = HC2:GET("/web/Web_scripts/renetatmo.php"); if tonumber(status) == 200 then -- decoding json string to table -- local result = json.decode(response); local NetTempExt = result.body[1].value[1][1]; local NetHumExt = result.body[1].value[1][2]; fibaro:setGlobal("NetTempExt", NetTempExt); fibaro:setGlobal("NetHumExt", NetHumExt ); fibaro:log(NetTempExt or "n.c" .. " °C " ..NetHumExt or "n.c" .. " % " ) else -- oups il y a un problème... fibaro:debug("Err: " .. status); end
Krikroff Posté(e) le 13 août 2014 Signaler Posté(e) le 13 août 2014 Tu peux aussi ajouter un vérification avant le décodage json et ainsi éviter le plantage de ton code lua. par exemple: local HC2 = Net.FHttp("192.168.0.46", 5005); HC2:setBasicAuthentication("XXXXX", "YYYY"); local response, status, errorCode = HC2:GET("/web/Web_scripts/renetatmo.php"); if tonumber(status) == 200 then -- decoding json string to table -- if (response ~= nil) then local result = json.decode(response); local NetTempExt = result.body[1].value[1][1]; local NetHumExt = result.body[1].value[1][2]; fibaro:setGlobal("NetTempExt", NetTempExt); fibaro:setGlobal("NetHumExt", NetHumExt ); fibaro:log(NetTempExt or "n.c" .. " °C " ..NetHumExt or "n.c" .. " % " ); else -- oups il y a un problème... fibaro:debug("Impossible de décoder la réponse, pas de données pour le traitement..."); end else -- oups il y a un problème... fibaro:debug("Err: " .. status); end
JM13 Posté(e) le 13 août 2014 Signaler Posté(e) le 13 août 2014 De mon coté, j'avais le script ci-dessous mais je vais ajouter les vérifications de décodage ! bonne idée local message = "" local userID = 2; -- User ID (email used to notify) 2 = admin local SmartPhone = 33; -- SmartPhone Admin local dtLog = os.date(); -- Datation local IP_NAS = "192.168.0.35" -- Affiche des dernières valeurs message = "Mise àjour en cours ..." fibaro:log(message); fibaro:debug(message); -- Récupération des nouvelles valeurs INTERNES FHTE = Net.FHttp(IP_NAS,80); response = FHTE:GET("/Netatmo/netatmo.php?intext=int"); -- decoding json string to table result = json.decode(response); fibaro:debug(response); -- Mise àjour des variables globales fibaro:setGlobal("NetTempInt", result.body[1].value[1][1]); fibaro:setGlobal("NetCO2", result.body[1].value[1][2]); fibaro:setGlobal("NetHumInt", result.body[1].value[1][3]); fibaro:setGlobal("NetPression", result.body[1].value[1][4]); fibaro:setGlobal("NetdB", result.body[1].value[1][5]); fibaro:sleep(500); -- Récupération des nouvelles valeurs EXTERIEURES FHTE = Net.FHttp(IP_NAS,80); response = FHTE:GET("/Netatmo/netatmo.php?intext=ext"); -- decoding json string to table result = json.decode(response); fibaro:debug(response); fibaro:setGlobal("NetTempExt", result.body[1].value[1][1]); fibaro:setGlobal("NetHumExt", result.body[1].value[1][2]); -- Confirme la mise àjour message = "Mise àjour effectuée!" fibaro:log(message); fibaro:debug(message);
Rem's Posté(e) le 13 août 2014 Auteur Signaler Posté(e) le 13 août 2014 Concernant la ligne (ici N°2), quelle est la syntaxe pour le login et mot de passe ? Ce sont bien des "" pour les 2 ? HC2:setBasicAuthentication("XXXXX", "YYYY"); Merci pour votre réponse.
Fredric Posté(e) le 13 août 2014 Signaler Posté(e) le 13 août 2014 comment ce fait t-il que tu n'as pas besoin de ?intext=int ou bout de la ligne local response, status, errorCode = HC2:GET("/web/Web_scripts/renetatmo.php"); parce que si je l'enlève, j'ai exactement la même erreur que ton premier message. mais biensùr, avec, cela fonctionne
JM13 Posté(e) le 13 août 2014 Signaler Posté(e) le 13 août 2014 Regarde dans ton php. Il faut 2 types d'identifiants.
Krikroff Posté(e) le 13 août 2014 Signaler Posté(e) le 13 août 2014 Rem's, Tu peux utiliser les guillemets ou les apostrophes pour mettre identifiant et mot de passe
JM13 Posté(e) le 13 août 2014 Signaler Posté(e) le 13 août 2014 Un petit complément car je suis resté coincé dessus pas mal de temps avant de comprendre quand j'ai mis en place ma station Netatmo. Tout d'abord, il faut que tu sois inscrit sur le site de Netatmo pour avoir les droits. Ci-dessous le début de mon script PHP (les valeurs sont changées bien sur )..avec les 4 données...mais si tu dis que ton script marche en ligne de commande ...ce doit être bon. <?php $intext=$_GET['intext']; $password="motdepasse"; $username="jm13@gmail.fr"; $app_id = "34536dfg51f345RET5678e78e9eEFEFEFf"; $app_secret = "QhvARtlIT546TYUJ768UYI6789xtm"; Ensuite, avec l'exemple en LUA lors de mon post précédent...cela devrait fonctionner!
Krikroff Posté(e) le 13 août 2014 Signaler Posté(e) le 13 août 2014 jM13, oui c'est impératif cependant les erreurs 401 et 404 de Rem's proviennent il me semble d'un problème de conf. Du serveur Php
JM13 Posté(e) le 14 août 2014 Signaler Posté(e) le 14 août 2014 Ha, tu as raison..je viens de mieux relire les posts. Par contre, je crois que c'est l'adresse du script qui n'est pas bonne (la nuit porte conseil ). Sur Synology (@Rem's as-tu un Syno comme NAS ? ) il ne faut pas mettre le répertoire /web On a en réalité : /volume1/web/ ...et dans ce répertoire "web" tous les sous-répertoires pour des sites, des scripts, etc... Si tu as crée un sous-répertoire Web_scripts comme je vois, il faut uniquement mettre "/Web_scripts/renetatmo.php" et non "/web/Web_scripts/Netatmo.php"
Rem's Posté(e) le 14 août 2014 Auteur Signaler Posté(e) le 14 août 2014 Salut JM 13, Effectivement je n'ai pas crée de compte, je ne comprenais pas pourquoi tous ces login au début de la page PHP, j'ai renseigné l'accès au NAS, et le compte de ma station. J'ai bien l'impression que l'adresse du NAS, on s'en fou. En revanche, j'ai rien compris à la façon de créer un compte http://dev.netatmo.com/ (je crois). Merci pour votre aide, je me sens moins seul dans ma piscine
JM13 Posté(e) le 14 août 2014 Signaler Posté(e) le 14 août 2014 Oui c'est ça ! Tu crées une application sur le site et tu vas récupérer les codes pour mettre dans ton php Ca marchera déjà un peut mieux. Ensuite fait un test dans ton navigateur : http://ip_de_ton_nas/Web_scripts/renetatmo.php avec son sans paramètre suivant ton php (je ne sais pas) Tu devrais recevoir en retour les valeurs T°, etc ...que tu as dans l'interface "normale" de Netatmo. Ensuite..tu verras pour le HC2
Krikroff Posté(e) le 14 août 2014 Signaler Posté(e) le 14 août 2014 Donc dans l'ordre : 1- tu créés ton application sur le site netatmo 2- tu valides que tout fonctionne avec ton php depuis un navigateur et de préférence pas depuis le serveur. 3- tu peux commencer l'intégration sur le HC2
Rem's Posté(e) le 14 août 2014 Auteur Signaler Posté(e) le 14 août 2014 Vous avez raison, je vais reprendre tout ça calmement, en commençant par la création d'un compte sur Netatmo. Mais j'ai l'impression que cela se fait par l'envoi d'un PHP, qui retourne ces fameux "api keys". Je comprends que moyennement, et ne sais pas trop comment m'y prendre pour le script. Je vous tiens au jus, merci pour votre aide.
Krikroff Posté(e) le 14 août 2014 Signaler Posté(e) le 14 août 2014 Lorsque tu crées une application sur netatmo tu récupère les api key. Juste une question: tu utilises un script php déjàfait ou tu le code you même ?
Rem's Posté(e) le 14 août 2014 Auteur Signaler Posté(e) le 14 août 2014 Mon pauvre ami, je ne sais même pas faire de Ketchup (lol) . J'ai récupéré le script sur domotique info, mais j'ai pas compris grand chose, car il parle de télécharger le zip, mais je n'ai besoin que d'une page PHP .... En revanche il est herbergé sur mon NAS, en local (via la freebox).
Krikroff Posté(e) le 14 août 2014 Signaler Posté(e) le 14 août 2014 Hs oui alors... Tiens nous au courant de l'avancement
JM13 Posté(e) le 14 août 2014 Signaler Posté(e) le 14 août 2014 Normalement tu n'as pas besoin d'une page PHP. Pour tester tape simplement http://ipdunas... Dans le script que tu as, il y a un "echo" àla fin qui affiche dans ton navigateur les valeurs
Rem's Posté(e) le 16 août 2014 Auteur Signaler Posté(e) le 16 août 2014 Re bonjour, J'ai enfin réussi à créer un compte sur http://dev.netatmo.com/. J'e suppose que je dois mettre à jour mon PHP sur le NAS avec ces infos. Lors de la création du compte, j'ai renseigné mon lien http://adresse IP locale:5005/volume1/web/Web_Scripts/netatmo.php Et après, je fais quoi ? ... quand je tape http://adresse IP locale:5005:5005/web/Web_Scripts/netatmo.php, la page s'ouvre (cad celle qui est sur mon NAS). Quand au script sur HC2, Err sur la ligne Result = Json decode. Merci de votre aide, je découvre tout cela avec un air de novice, pas facile de s'y retrouver (je taquine bien mieux mes tables de mix et mes lecteurs)
JM13 Posté(e) le 16 août 2014 Signaler Posté(e) le 16 août 2014 quand je tape dans mon navigateur : http://192.168.0.35/Netatmo/netatmo.php J'ai en réponse dans mon navigateur: {"status":"ok","body":[{"beg_time":1408175150,"value":[[20.1,59]]}],"time_exec":0.0093917846679688,"time_server":1408175228} Netatmo.php est le script qui te permettra de récupérer les infos... APRES, seulement APRES tu peux passer à l'étape suivante : - Soit une page PHP pour aficher qqle chose sur ton site web - Soit un script en LUA sur HC2. As-tu déjà la première réponse ?
Messages recommandés