Aller au contenu

Script Php


Rem's

Messages recommandés

Aaaahhhhhh  :unsure:

Quand je tape dans le navigateur http://192.168.0.46/Web_Scripts/netatmo.php /

{"status":"ok","body":[{"beg_time":1408201967,"value":[[31.7,33]]}],"time_exec":0.0095419883728027,"time_server":1408202484}.

(Ce ne sont pas les même séries de chiffres quand je tape dans le navigateur)

A force de bidouille dans le script, il s'avère que c'est le port 5005 qui plantait (5005 en lien avec les connexion Https sécurisé, donc pas pour HC2).

Je continue sur le VD dans le HC2, je crois qu'il me faut des labels ... 

Lien vers le commentaire
Partager sur d’autres sites

La fin est proche, j'en ai ras la casquette (et vous aussi de moi ... :( ).

J'ai créée un VD avec 2 Boutons :

"Extérieures"

local HC2 = Net.FHttp("192.168.0.46");
HC2:setBasicAuthentication("XXXX", "YYYY");

local response, status, errorCode = HC2:GET("/Web_Scripts/netatmo.php?intext=ext");

if tonumber(status) == 200 then
  -- decoding json string to table --
  if (response ~= nil) then
    local result = json.decode(response);
    fibaro:debug(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
 

 "Intérieures"

local HC2 = Net.FHttp("192.168.0.46");
HC2:setBasicAuthentication("XXXX", "YYYY");

local response, status, errorCode = HC2:GET("/Web_Scripts/netatmo.php?intext=int");

if tonumber(status) == 200 then
  -- decoding json string to table --
  if (response ~= nil) then
    local result = json.decode(response);
    fibaro:debug(response);

    local NetTempInt = result.body[1].value[1][1];
    local NetHumInt = result.body[1].value[1][3];
    local NetBruitInt = result.body[1].value[1][5];
    fibaro:setGlobal("NetTempInt", NetTempInt);
    fibaro:setGlobal("NetHumInt", NetHumInt );
    fibaro:setGlobal("NetBruitInt", NetBruitInt );
    fibaro:log(NetTempInt or "n.c"  .. " °C " ..NetHumInt or "n.c" .. " % "..NetBruitInt or "n.c" .. " Db " );

  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
 

Les données variables de l'int. Temp, CO2 et Bar, restent à  0. Sinon les autres valeurs se mettent à  jour.

Je n'ai pas d'affichage des données sur le VD (habituellement en vert, juste la température brute, et puis s'en va !).

 

C'est quoi le Pb ce coup ci (j'ai rajouté comme cité plus haut, les intext=int et intext=ext, à  la fin de ma phrase Http).

 

Merci encore pour votre aide  :rolleyes:  :60:

Lien vers le commentaire
Partager sur d’autres sites

J'ai changé de Bazar ... JM13, j'ai récuéré le script PHP sur ton lien (merci encore), je l'ai bidouillé.

J'ai en retour les paramètres de la station ext. En revanche rien sur l'int, les valeurs variables restent àO (sauf NetBruitInt et NetHumInt).

C'est bien le même script PHP pour les 2 modules Netatmo ?

Les Url fonctionnent dans le navigateur et dans le débug, affichage des paramètres de retour. J'ai rajouté "fibaro:debug(response");

Lien vers le commentaire
Partager sur d’autres sites

Peut^-être que le php que tu utilises ne gère pas toute les données, même si c'est la cas c'est facilement contournable en te basant sur le code pour le bruit et l'humidité ;)

Lien vers le commentaire
Partager sur d’autres sites

Sur le lien que je t'ai donné, il y a 3 scripts (un pour les données int, un pour les données ext ...et un pour les 2 en même temps)

 

Si en tapant la ligne de commande ci-dessous (avec le script pour les 2) tu as les retours dans ton navigateur AVEC des valeurs non nulles, ALORS tu as surement un problème dans la déclaration de tes variables globales sur HC2 car le script par conséquent marche  ;)

 

Données intérieures : http://192.168.0.35/Netatmo/netatmo.php?intext=int
Affichage : {"status":"ok","body":[{"beg_time":1399140377,"value":20.7,634,64,1012.2,56}],"time_exec":0.0072810649871826,"time_server":1399140622}

 

Données extérieures : http://192.168.0.35/Netatmo/netatmo.php?intext=ext
Affichage : {"status":"ok","body":[{"beg_time":1399140288,"value":13.8,64}],"time_exec":0.033488988876343,"time_server":1399140827}

Lien vers le commentaire
Partager sur d’autres sites


<?php

$intext=$_GET['intext'];

$password="mot_de_passe";

$username="nom utilisateur";

$app_id = "xxxxxxxxxxxxxxxxxxxxx";

$app_secret = "xxxxxxxxxxxxxxxxxx";

$token_url = "https://api.netatmo.net/oauth2/token";

$postdata = http_build_query(

array(

'grant_type' => "password",

'client_id' => $app_id,

'client_secret' => $app_secret,

'username' => $username,

'password' => $password

)

);

$opts = array('http' =>

array(

'method' => 'POST',

'header' => 'Content-type: application/x-www-form-urlencoded',

'content' => $postdata

)

);

$context = stream_context_create($opts);

$response = file_get_contents($token_url, false, $context);

$params = null;

$params = json_decode($response, true);

$api_url = "https://api.netatmo.net/api/getuser?access_token=" . $params['access_token'];

$requete = file_get_contents($api_url);

$url_devices = "https://api.netatmo.net/api/devicelist?access_token=" . $params['access_token'];

$resulat_device = file_get_contents($url_devices);

$json_devices = json_decode($resulat_device,true);

$module_interne = $json_devices["body"]["devices"][0]["_id"];

$module_externe = $json_devices["body"]["modules"][0]["_id"];

$url_mesures_internes = "https://api.netatmo.net/api/getmeasure?access_token=" . $params['access_token'] . "&device_id=" . $module_interne . "&scale=max&type=Temperature,CO2,Humidity,Pressure,Noise&date_end=last";

$mesures_internes = file_get_contents($url_mesures_internes);

$url_mesures_externes = "https://api.netatmo.net/api/getmeasure?access_token=" . $params['access_token'] . "&device_id=" . $module_interne . "&module_id=" . $module_externe . "&scale=max&type=Temperature,Humidity&date_end=last";

$mesures_externes = file_get_contents($url_mesures_externes);

if ($intext == "int")

echo $mesures_internes ;

else echo $mesures_externes ;

?>

Lien vers le commentaire
Partager sur d’autres sites

et la suite pour  HC2


-- ----------------------- DEVICE SETTINGS --------------------------------
local message = ""
local userID = 2;			-- User ID (email used to notify)
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);

Lien vers le commentaire
Partager sur d’autres sites

Dis donc Rem's, dans ton script tu n'utilises pas toutes les valeurs

    local NetTempInt = result.body[1].value[1][1];
    local NetHumInt = result.body[1].value[1][3];
    local NetBruitInt = result.body[1].value[1][5];
    fibaro:setGlobal("NetTempInt", NetTempInt);
    fibaro:setGlobal("NetHumInt", NetHumInt );
    fibaro:setGlobal("NetBruitInt", NetBruitInt );

il t'en manque 2

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]);
Lien vers le commentaire
Partager sur d’autres sites

Hop, hop, hop,

Je crois que ca y est. JM 13, j'avais pas vu ton dernier post .... je crois que enfin les valeurs variables se mettent àjour, int et ext, il me reste plus qu'àcréer les modules en fonction.

J'ai un peu mal au cheveux avec ces P ... de codes (j'imagine que vous en avez marre de moi .... :P ).

Je vous tien au jus pour le bouquet final ..... la démo àmaman (sans les coups de bâton)

Bonne App.

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...