Aller au contenu

Messages recommandés

Posté(e)

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
Posté(e)

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
Posté(e)

toujours un problème de caractère ligne 16 .....

cela me faisait tout modifier ce que j'avais déjà  fait alors j'ai opté pour la modification du PHP initial.

 

Merci quand même pour le partage  ;)

Posté(e)

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

Posté(e)

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.

Posté(e) (modifié)

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
Posté(e)

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

Posté(e)

J'ai utilisé ton script et il fonctionne très bien.

Merci pour le partage.

 

PI : J'ai 2 stations netatmo et un pluviomètre.

Posté(e)

@Nico33

 

Heureux que ce script puisse t'être utile.

 

@Tous

 

Quelqu'un pourrait-il tester ce script avec le Thermostat ? Je veux être sure que Hansolo n'est pas le seul à  avoir un souci avec ?

Posté(e)

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);
Posté(e)

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.

Posté(e)

ma méthode me parait plus simple en effet.

 

En effet, Il suffit de mettre un icone dans la zone "principale" et un autre dans le bouton. ;)

Posté(e)

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

Posté(e)

Je ne savais pas que le nom des applications était unique !!! ??vu le nombre d'utilisateurs de Netatmo...ça va vite devenir compliqué pour les derniers arrivants  ;)

Posté(e)

Cela fait plaisir à  entendre.

 

Merci à  tous.

 

Il semble que l'on va utiliser ce script pendant encore un moment car je ne vois pas venir de module Netatmo avec la V4  :(

  • Upvote 1
  • 5 mois après...
Posté(e)

Hello @shyrka973; merci pour le script.

Finalement quelqu'un a pu tester si on pourra lire les infos de la thermostat avec?

Merci d'avance

  • 1 mois après...
Posté(e)

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

  • 2 semaines après...
Posté(e)

Salut,

 

A partir de la v4, Fibaro a intégré un plugin Netatmo. Il fonctionne bien depuis les deux ou trois dernières version du firmware.

Ce script n'est donc plus nécessaire.

×
×
  • Créer...