Aller au contenu

Netatmo: Un Autre Script Php


Shyrka973

Messages recommandés

Bonjour,

 

Je vous propose un autre script netatmo.php pour récupérer les infos d'une station Netatmo.

C'est une version améliorée du script de domotique-info. Il supporte tous les modules connus.

Il faut modifier cette partie:

$password = "password";
$username = "user";

$app_id = "id";
$app_secret = "secret";

Ce script accepte trois paramètres:

 

display:

L'url netatmo.php?display retourne l'ID de votre station et aussi celles que vous suivez avec leurs devices.

 

station:

L'url netatmo.php?station=0 retournera les mesures de la station #0.

 

module:

L'url netatmo.php?module=0 retournera les mesures du module #0.

 

 

  • Upvote 3
Lien vers le commentaire
Partager sur d’autres sites

J'utilise ce code lua dans un module virtuel pour récupérer les infos sur ma station:

local ip = fibaro:get(fibaro:getSelfId(), "IPAddress")
local port = fibaro:get(fibaro:getSelfId(), "TCPPort");
local url = "/netatmo.php"

local icon = 1020

local station = 0

fibaro:log("Updating ...")

local HC2 = Net.FHttp(ip, port)
local response, status, errorCode = HC2:GET(url .. "?station=" .. station)

if (tonumber(status) == 200 and tonumber(errorCode)==0) then
  jsonTable = json.decode(response)
  if jsonTable.status == "ok" then
    values = jsonTable.body[1].value[1]
    Temp = values[1]; CO2 = values[2]; Hum = values[3];
    Pres = values[4] ; Bruit = values[5]
    
    fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemp.value", Temp)
    fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblCO2.value", CO2)
    fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblHum.value", Hum)
    fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblPression.value", Pres)
    fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblBruit.value", Bruit)
  else
    fibaro:log(jsonTable.error)
    fibaro:debug("Error: " .. jsonTable.error)
  end
else
  fibaro:log("Error reading !")
  fibaro:debug("Error reading !")
end

fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", icon)

HC2 = nil

Pour le module extérieur:

local ip = fibaro:get(fibaro:getSelfId(), "IPAddress")
local port = fibaro:get(fibaro:getSelfId(), "TCPPort");
local url = "/netatmo.php"

local icon = 1021

local module = 0

fibaro:log("Updating ...")

local HC2 = Net.FHttp(ip, port)
local response, status, errorCode = HC2:GET(url .. "?module=" .. module)

if (tonumber(status) == 200 and tonumber(errorCode)==0) then
  jsonTable = json.decode(response)
  if jsonTable.status == "ok" then
    values = jsonTable.body[1].value[1]
    Temp = values[1]; Hum = values[2]
    
    fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemp.value", Temp)
    fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblHum.value", Hum)
  else
    fibaro:log(jsonTable.error)
    fibaro:debug("Error: " .. jsonTable.error)
  end
else
  fibaro:log("Error reading !")
  fibaro:debug("Error reading !")
end

fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", icon)

HC2 = nil

Pour les modules intérieurs:

 

local ip = fibaro:get(fibaro:getSelfId(), "IPAddress")
local port = fibaro:get(fibaro:getSelfId(), "TCPPort");
local url = "/netatmo.php"

local icon = 1021

local module = 1

fibaro:log("Updating ...")

local HC2 = Net.FHttp(ip, port)
local response, status, errorCode = HC2:GET(url .. "?module=" .. module)

if (tonumber(status) == 200 and tonumber(errorCode)==0) then
  jsonTable = json.decode(response)
  if jsonTable.status == "ok" then
    values = jsonTable.body[1].value[1]
    Temp = values[1]; CO2 = values[2]; Hum = values[3];
    
    fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemp.value", Temp)
    fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblCO2.value", CO2)
    fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblHum.value", Hum)
  else
    fibaro:log(jsonTable.error)
    fibaro:debug("Error: " .. jsonTable.error)
  end
else
  fibaro:log("Error reading !")
  fibaro:debug("Error reading !")
end

fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", icon)

HC2 = nil

 

Pour le pluviomètre:

local ip = fibaro:get(fibaro:getSelfId(), "IPAddress")
local port = fibaro:get(fibaro:getSelfId(), "TCPPort");
local url = "/netatmo.php"

local icon = 1022

local module = 2

fibaro:log("Updating ...")

local HC2 = Net.FHttp(ip, port)
local response, status, errorCode = HC2:GET(url .. "?module=" .. module)

if (tonumber(status) == 200 and tonumber(errorCode)==0) then
  jsonTable = json.decode(response)
  if jsonTable.status == "ok" then
    values = jsonTable.body[1].value[1]
    Pluie = values[1]
    
    fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblPluie.value", Pluie)
    
  else
    fibaro:log(jsonTable.error)
    fibaro:debug("Error: " .. jsonTable.error)
  end
else
  fibaro:log("Error reading !")
  fibaro:debug("Error reading !")
end

fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", icon)

HC2 = nil
  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Je te rassure, j'ai pas cherché longtemps, car j'avais déjà  créé tous mes modules avec variables et scènes, etc...

alors cela me faisait suer de tout refaire à  zéro.

J'ai réussi à  modifier le PHP initial.

 

cela venait certainement de ma config, je suis sur que cela marche très bien chez toi.

 

j'avais ça, Ligne 16: Expected value but found invalid token at character 1

Lien vers le commentaire
Partager sur d’autres sites

Pour l'instant, j'ai 5 modules/stations qui sont interrogés toutes les 5mn sans souci depuis une semaine.

 

Ce script fonctionne aussi pour le Thermostat Netatmo mais n'en possédant pas, je ne peux pas vérifier.

 

Si quelqu'un peut me faire un retour avec le Thermostat ... Merci.

Lien vers le commentaire
Partager sur d’autres sites

J'ai deux thermostats en plus d'une station avec pluviomètre.

 

?display ne visualise que les informations de la station et du pluviomètre

Pas trouvé comment interroger les thermostats

 

Peut être à  voir du coté de app_type de l'api Netatmo

Modifié par HANSOLO
Lien vers le commentaire
Partager sur d’autres sites

?display affiche uniquement les ID de la station et du pluviomètre ?

Il devrait afficher les thermostats aussi. 

 

J'ai mis à  jour le script car il y avait des espaces en trop dans la ligne des paramètres pour le thermostat.

 

Peux-tu faire un test avec le nouveau script ?

 

Merci.

Lien vers le commentaire
Partager sur d’autres sites

Shyrka973 merci pour le partage et même si je ne suis pas dans une région où le pluviomètre est un instrument connu  :15: et même si le Thermostat reste encore dans ma "To do list"...je vais regarder.

 

Par contre, tu utilises un truc étrange pour moi :

local icon = 1020

Comment fais-tu pour connaitre le n° exact d'un icone ? avec le ToolKit ?

 

de mon coté j'utilise

local selfId = fibaro:getSelfId();
local icon = fibaro:get (selfId, "deviceIcon"); -- en début de module pour sauvegarder l'icone

-- Après ...on remet l'icone principal
fibaro:call(selfId, "setProperty", "currentIcon", icon);
Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Dans le "Main Loop", je positionne l'icône "Point d'interrogation" avant d'appeler le bouton "Update".

Dans le bouton "Update", je positionne l'icône du module après avoir récupéré les valeurs.

Cela me permet de savoir visuellement quand le module fait des interrogations.

 

Pour récupérer le id de son icône, j'utilise l'API sous cette forme: "http://hc2/api/devices?id=" avec un parser json.

 

Je vais voir si je peux utiliser ta méthode pour éviter de mettre l'id de l'icône du module en dure dans le code.

J'utilise le même id pour l'icône "Point d'interrogation" dans tous mes modules qui interrogent.

Lien vers le commentaire
Partager sur d’autres sites

J'ai mis en place les scripts, ça fonctionne nickel :60:

Merci Shyrka :)

 

Là  où j'ai le plus galéré, c'est pour créer mon appli sur le site dev.netatmo.com, car tous les noms que j'ai pu essayer étaient déjà  pris :lol: : HC2, Home Center 2, Fibaro Home Center 2, Fibaro HC2, etc.... :o

Lien vers le commentaire
Partager sur d’autres sites

  • 5 mois après...
  • 1 mois après...

Bonjour

J'avais créer des Modules virtuel avec mes stations NetAtmo dont j'avais trouvé la source sur ce site il y a très longtemps

Après des problèmes de santé ou j'avais laissé tombé le suivi de ma HC2, j'ai mis HC2 a jour en 3.6 et plus rien ne marche

  1.  
  2. fibaro:debug("HC2 start script at " .. os.date());
  3.  
  4. FHTE = Net.FHttp ("www.monserveur.fr")
  5. response = FHTE:GET("/monfichierserveur/netatmo-home-center-2.php?intext=ext")
  6. result = json.decode (response)
  7.  
  8. fibaro:setGlobal("NetTempExt", result.body[1].value[1][1]);
  9. fibaro:setGlobal("NetHumExt", result.body[1].value[1][2]);
  10.  
  11.  
  12. NetTempExt = fibaro:getGlobalValue("NetTempExt").. " °C "
  13. NetHumExt = fibaro:getGlobalValue("NetHumExt").. " % "
  14.  
  15. fibaro:call(137, "setProperty", "ui.Label1.value", NetTempExt);
  16. fibaro:call(137, "setProperty", "ui.Label8.value", NetHumExt);
  17.  
  18.  
  19.  

et en debug j'ai comme message

  1.  
  2. [DEBUG] 09:41:20: HC2 start script at Fri Mar 6 09:41:20 2015
  3. [ERROR] 09:41:21: line 6: Expected value but found T_END at character 1
  4.  

Le php que j'ai mis sur mon serveur pour le NetAmo du bureau qui est mon 30 modules NetAtmo

  1.  
  2. <?php
  3.  
  4.  
  5. // Script développé par Cédric Locqueneux
  6. // adaptation par Zebk pour envoi data en JSON pour Fibaro HC2
  7.  
  8. $intext=$_GET['intext'];
  9. $password="PASSWORD";
  10. $username="USERNAME";
  11.  
  12.  
  13. $app_id = "XXXXXXXXXXXXXXXXXXXXXX";
  14. $app_secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
  15.  
  16. $postdata = http_build_query(
  17. array(
  18. 'grant_type' => "password",
  19. 'client_id' => $app_id,
  20. 'client_secret' => $app_secret,
  21. 'username' => $username,
  22. 'password' => $password
  23. )
  24. );
  25.  
  26. $opts = array('http' =>
  27. array(
  28. 'method' => 'POST',
  29. 'header' => 'Content-type: application/x-www-form-urlencoded',
  30. 'content' => $postdata
  31. )
  32. );
  33.  
  34. $context = stream_context_create($opts);
  35. $response = file_get_contents($token_url, false, $context);
  36.  
  37. $params = null;
  38. $params = json_decode($response, true);
  39. $api_url = "https://api.netatmo.net/api/getuser?access_token=" . $params['access_token'];
  40. $requete = file_get_contents($api_url);
  41.  
  42. $url_devices = "https://api.netatmo.net/api/devicelist?access_token=" . $params['access_token'];
  43. $resulat_device = file_get_contents($url_devices);
  44. $json_devices = json_decode($resulat_device,true);
  45. $module_interne = $json_devices["body"]["devices"][0]["_id"];
  46. $module_externe = $json_devices["body"]["modules"][3]["_id"];
  47.  
  48. $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";
  49. $mesures_internes = file_get_contents($url_mesures_internes);
  50.  
  51. $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,CO2,Humidity&date_end=last";
  52. $mesures_externes = file_get_contents($url_mesures_externes);
  53.  
  54. if ($intext == "int")
  55. echo $mesures_internes ;
  56. else echo $mesures_externes ;
  57.  
  58. ?>
  59.  

Avez vous une idée de ce qui aurait changé en V3.6 et n'étant pas encore passé en V4.03X que faudra t-il faire ensuite en V4

 

Merci de votre aide

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...
×
×
  • Créer...