Aller au contenu
Shyrka973

Netatmo: Un Autre Script Php

Recommended Posts

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

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
Partager sur d’autres sites

merci, je devais me pencher sur mon script pour récupérer les infos du pluviomètre, du coup je vais regarder de près ton script.

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Un problème sur la ligne 16 dans mon script PHP ?


 


Donne-moi plus de précision, svp.


Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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.

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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.

Partager ce message


Lien à poster
Partager sur d’autres sites

De ce pas...

 

 

Toujours que la station météo visualisé avec ?dispaly

Modifié par HANSOLO

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
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);

Partager ce message


Lien à poster
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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour à  tous,

 

est-ce toujours valable, dans les derniers firmwares, il y a un plugin netatmo?

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

×