Aller au contenu
Rem's

Script Php

Recommended Posts

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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").. " % " )

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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);

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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 

Partager ce message


Lien à poster
Partager sur d’autres sites

Regarde dans ton php. Il faut 2 types d'identifiants.

Partager ce message


Lien à poster
Partager sur d’autres sites

Rem's, Tu peux utiliser les guillemets ou les apostrophes pour mettre identifiant et mot de passe

Partager ce message


Lien à poster
Partager sur d’autres sites

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!

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

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"

Partager ce message


Lien à poster
Partager sur d’autres sites

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 :P

Partager ce message


Lien à poster
Partager sur d’autres sites

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  :)

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Mon pauvre ami, je ne sais même pas faire de Ketchup (lol)  :huh: .

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).

Partager ce message


Lien à poster
Partager sur d’autres sites

Hs oui alors... Tiens nous au courant de l'avancement ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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)  :rolleyes:

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

×