Shyrka973 Posté(e) le 24 août 2014 Signaler Posté(e) le 24 août 2014 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. 3
Shyrka973 Posté(e) le 24 août 2014 Auteur Signaler Posté(e) le 24 août 2014 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 1
HANSOLO Posté(e) le 24 août 2014 Signaler Posté(e) le 24 août 2014 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.
Fredric Posté(e) le 24 août 2014 Signaler Posté(e) le 24 août 2014 Merci @Shyrka973, j'essai tout de suite pour rajouter mon module intérieur
Fredric Posté(e) le 24 août 2014 Signaler Posté(e) le 24 août 2014 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
Shyrka973 Posté(e) le 24 août 2014 Auteur Signaler Posté(e) le 24 août 2014 Un problème sur la ligne 16 dans mon script PHP ? Donne-moi plus de précision, svp.
Fredric Posté(e) le 24 août 2014 Signaler Posté(e) le 24 août 2014 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
Shyrka973 Posté(e) le 24 août 2014 Auteur Signaler Posté(e) le 24 août 2014 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.
HANSOLO Posté(e) le 24 août 2014 Signaler Posté(e) le 24 août 2014 (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é le 24 août 2014 par HANSOLO
Shyrka973 Posté(e) le 24 août 2014 Auteur Signaler Posté(e) le 24 août 2014 ?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.
HANSOLO Posté(e) le 24 août 2014 Signaler Posté(e) le 24 août 2014 (modifié) De ce pas... Toujours que la station météo visualisé avec ?dispaly Modifié le 24 août 2014 par HANSOLO
lolomail Posté(e) le 27 août 2014 Signaler Posté(e) le 27 août 2014 Va falloir que je teste, merci pour le partage
Nico33 Posté(e) le 29 août 2014 Signaler Posté(e) le 29 août 2014 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.
Shyrka973 Posté(e) le 30 août 2014 Auteur Signaler Posté(e) le 30 août 2014 @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 ?
HANSOLO Posté(e) le 30 août 2014 Signaler Posté(e) le 30 août 2014 Ho oui un autre avec un thermostat
JM13 Posté(e) le 1 septembre 2014 Signaler Posté(e) le 1 septembre 2014 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 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);
Shyrka973 Posté(e) le 1 septembre 2014 Auteur Signaler Posté(e) le 1 septembre 2014 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.
JM13 Posté(e) le 1 septembre 2014 Signaler Posté(e) le 1 septembre 2014 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.
Lazer Posté(e) le 2 septembre 2014 Signaler Posté(e) le 2 septembre 2014 J'ai mis en place les scripts, ça fonctionne nickel 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 : HC2, Home Center 2, Fibaro Home Center 2, Fibaro HC2, etc....
JM13 Posté(e) le 2 septembre 2014 Signaler Posté(e) le 2 septembre 2014 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
Shyrka973 Posté(e) le 2 septembre 2014 Auteur Signaler Posté(e) le 2 septembre 2014 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 1
forumAD Posté(e) le 4 février 2015 Signaler Posté(e) le 4 février 2015 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
CASINOS Posté(e) le 28 mars 2015 Signaler Posté(e) le 28 mars 2015 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 fibaro:debug("HC2 start script at " .. os.date()); FHTE = Net.FHttp ("www.monserveur.fr") response = FHTE:GET("/monfichierserveur/netatmo-home-center-2.php?intext=ext") result = json.decode (response) fibaro:setGlobal("NetTempExt", result.body[1].value[1][1]); fibaro:setGlobal("NetHumExt", result.body[1].value[1][2]); NetTempExt = fibaro:getGlobalValue("NetTempExt").. " °C " NetHumExt = fibaro:getGlobalValue("NetHumExt").. " % " fibaro:call(137, "setProperty", "ui.Label1.value", NetTempExt); fibaro:call(137, "setProperty", "ui.Label8.value", NetHumExt); et en debug j'ai comme message [DEBUG] 09:41:20: HC2 start script at Fri Mar 6 09:41:20 2015 [ERROR] 09:41:21: line 6: Expected value but found T_END at character 1 Le php que j'ai mis sur mon serveur pour le NetAmo du bureau qui est mon 30 modules NetAtmo <?php // Script développé par Cédric Locqueneux // adaptation par Zebk pour envoi data en JSON pour Fibaro HC2 $intext=$_GET['intext']; $password="PASSWORD"; $username="USERNAME"; $app_id = "XXXXXXXXXXXXXXXXXXXXXX"; $app_secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; $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"][3]["_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,CO2,Humidity&date_end=last"; $mesures_externes = file_get_contents($url_mesures_externes); if ($intext == "int") echo $mesures_internes ; else echo $mesures_externes ; ?> 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
cybersquat Posté(e) le 10 avril 2015 Signaler Posté(e) le 10 avril 2015 Bonjour à tous, est-ce toujours valable, dans les derniers firmwares, il y a un plugin netatmo?
Shyrka973 Posté(e) le 10 avril 2015 Auteur Signaler Posté(e) le 10 avril 2015 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.
Messages recommandés