cybersquat Posté(e) le 10 avril 2015 Signaler Posté(e) le 10 avril 2015 voila en tout cas merci du partage ...
AurelienC Posté(e) le 12 avril 2015 Signaler Posté(e) le 12 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. Leur plugin marche avec le thermostat ? Ils m'ont dit que non récemment, malgré qu'il apparaisse dans les nouveautés des dernières versions... J'ai uniquement un thermostat Netatmo et le plugin Fibaro (V4.040) me dit unqiuement "Account connected"...
HANSOLO Posté(e) le 12 avril 2015 Signaler Posté(e) le 12 avril 2015 oui il fonctionne avec le thermostat
AurelienC Posté(e) le 12 avril 2015 Signaler Posté(e) le 12 avril 2015 Donc j'ai un soucis avec leur plugin... mais aucune solution pour le résoudre Je vais les re-contacter en espérant qu'ils ne me redisent pas "pas encore implémenté"...
CASINOS Posté(e) le 12 avril 2015 Signaler Posté(e) le 12 avril 2015 Étant toujours en V3.6 auriez vous une solution a mon problème ? Merci
AurelienC Posté(e) le 12 avril 2015 Signaler Posté(e) le 12 avril 2015 Tu as fait un getdevice? Oui, je n'ai jamais eu autre chose que "Your account is connected." Pourtant avec mon script PHP j'arrive bien à récupérer les info. J'ai créé plusieurs fois le plugin, j'ai fais une seconde appli Netatmo, etc. Toujours rien ! :/
CASINOS Posté(e) le 24 avril 2015 Signaler Posté(e) le 24 avril 2015 Bonjour Frederic J'ai lu que tu avais modifier le php suite a l'erreur Ligne 16: Expected value but found invalid token at character 1 Peux tu me donner ta modification que tu as effectuécar j'ai le même probleme Merci
Fredric Posté(e) le 24 avril 2015 Signaler Posté(e) le 24 avril 2015 Non, désolé, je n'utilise pas ce script, je me servais du basic.Je n'ai pas donc cherché le problème de ce message mais @shyrka973 sera plus qualifié pour t'aider, c'est son script.Je te posterai les liens ce soir si tu n'as pas eu de réponse d'ici là le mien vient de la http://www.domotique-fibaro.fr/index.php/topic/167-station-m%C3%A9t%C3%A9o-netatmo/
Shyrka973 Posté(e) le 24 avril 2015 Auteur Signaler Posté(e) le 24 avril 2015 Salut CASINOS, Tu as cette erreur dans le VD ou le script PHP ? Peux-tu vérifier que cette ligne te retourne un tableau de tes modules Netatmo: http://ip_serveur/netatmo.php?display
CASINOS Posté(e) le 24 avril 2015 Signaler Posté(e) le 24 avril 2015 VOILA CE QUE L4OBTIENS Stations ID Name 0 92600 1 Cannes Modules ID Name Station 0 Terrasse-S Cannes 1 Chambre Cannes 2 Terrasse-N Cannes 3 Cuisine Cannes 4 Pluviomètre Cannes 5 TERRASSE 92600 6 CUISINE 92600 7 CHAMBRE 92600 8 BUREAU 92600 9 Pluviomètre 92600 Donc je peense que le php a l'air OK mais toujours l'erreur Expected value but found invalid token at character 1
CASINOS Posté(e) le 24 avril 2015 Signaler Posté(e) le 24 avril 2015 Quand je tape l'adresse sur Firefox, j'obtiens bien différent résultat exemple http://xxxxx.fr/xxxxxx/netatmo.php?station=0 >>>>{"status":"ok","body":[{"beg_time":1429879773,"value":[[23.9,454,41,1014.7,41]]}],"time_exec":0.010905981063843,"time_server":1429880050} http://xxxxx.fr/xxxxxx/netatmo.php?module=2 >>>>{"status":"ok","body":[{"beg_time":1429879245,"value":[[17.7,531,77]]}],"time_exec":0.016608953475952,"time_server":1429879691} Donc je pense que le php est OK mon code dans HC2 = Expected value but found invalid token at character 1 que je teste avec station = 0 ou module =2 local icon = 1020 fibaro:log("Updating ...") local HC2 = Net.FHttp("www.xxxxxxxx.fr") local station = 0 local response, status, errorCode = HC2:GET("/yyyyyyyy/netatmo.php" .. "?station=" .. station) -- module = 0 -- MODULE INTERIEUR EXTERIEUR PLUVIOMETRE JUSTE CHANGER LE NUMERO -- response, status, errorCode = HC2:GET("/Gilles3/netatmo.php" .. "?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] --STATION INTERIEURE Temp = values[1]; CO2 = values[2]; Hum = values[3]; Pres = values[4] ; Bruit = values[5] --MODULE EXTERIEUR --Temp = values[1]; Hum = values[2] --MODULE INTERIEUR --Temp = values[1]; CO2 = values[2]; Hum = values[3]; --MODULE PLUVIOMETRE --Pluie = values[1] 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) -- 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 une idée ou serait mon erreur dans mon code ???
Shyrka973 Posté(e) le 24 avril 2015 Auteur Signaler Posté(e) le 24 avril 2015 Peux-tu ajouter juste après le hC2:GET: fibaro;debug(response) et me donner le résultat du debug.
CASINOS Posté(e) le 24 avril 2015 Signaler Posté(e) le 24 avril 2015 fibaro;debug(response) >>> [ERROR] 16:51:25: line 10: attempt to call global 'debug' (a nil value) N'aurais je pas fait une erreur dans mon adaptation ligne 6 & 9 bien que c'est l'adresse 6+9 que j'ai utilisé ci-dessus pour obtenir les réponse depuis Firefox, a savoir http://xxxxxxxx.fr/yyyyyyy...o.php?station=0 >>>>{"status":"ok","body":[{"beg_time":1429879773,"value":[[23.9,454,41,1014.7,41]]}],"time_exec":0.010905981063843,"time_server":1429880050} http://xxxxxxx.fr/yyyyyyy...mo.php?module=2 >>>>{"status":"ok","body":[{"beg_time":1429879245,"value":[[17.7,531,77]]}],"time_exec":0.016608953475952,"time_server":1429879691}
Shyrka973 Posté(e) le 24 avril 2015 Auteur Signaler Posté(e) le 24 avril 2015 @CASINOS Une erreur de frappe de ma part: c'est un ":", pas un ";" fibaro:debug(response)
CASINOS Posté(e) le 24 avril 2015 Signaler Posté(e) le 24 avril 2015 La reponse : [DEBUG] 20:15:01: {"status":"ok","body":[{"beg_time":1429899053,"value":[[24.2,557,43,1012.4,41]]}],"time_exec":0.021649122238159,"time_server":1429899301} [ERROR] 20:15:01: line 15: Expected value but found invalid token at character 1 line 15 >>> jsonTable = json.decode(response)
Shyrka973 Posté(e) le 24 avril 2015 Auteur Signaler Posté(e) le 24 avril 2015 Je pense que le souci vient de l'encodage du script PHP. Peux-tu ré-enregistrer le fichier "netatmo.php" en ISO-8859-1 ?
CASINOS Posté(e) le 24 avril 2015 Signaler Posté(e) le 24 avril 2015 quel logiciel utiliser pour cette conversion en ISO-8859-1
Lazer Posté(e) le 24 avril 2015 Signaler Posté(e) le 24 avril 2015 Notepad++ Menu "Encodage", puis "Convertir en UTF-8 (sans BOM)". Tu as 3 caractères invisibles en début de ta chaine JSON, qui forment le "Byte Order Mark" utilisé dans l'encodage UTF. Avec la conversion proposée ci-dessus sous Notepad++, il va retirer le BOM afin d'être conforme à la norme d'échange JSON (qui ne doit pas contenir le BOM) Et la fonction json.decode() du LUA fourni par Fibaro ne tolère aucune exception à la règle.
CASINOS Posté(e) le 25 avril 2015 Signaler Posté(e) le 25 avril 2015 pres conversion : [DEBUG] 09:54:03: {"status":"ok","body":[{"beg_time":1429947880,"value":[[23.8,463,42,1010.9,40]]}],"time_exec":0.022494077682495,"time_server":1429948442} [ERROR] 09:54:03: line LuaScript: Mon code php <?php ########################################## # Author: Andre Duclos # Created: 2014-08-16 # Modified: 2014-08-23 # # Version: 0.1 # https://github.com/Shyrka973/Netatmo ########################################## $stationNo = 0; $moduleNo = -1; $display = 0; if (isset($_GET['station'])){ $stationNo = $_GET['station']; } if (isset($_GET['module'])){ $moduleNo = $_GET['module']; } if (isset($_GET['display'])){ $display = 1; } $password = ""; $username = "@"; $app_id = ""; $app_secret = ""; $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 = 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); $url_mesures = ""; $err = ""; $stations = $json_devices["body"]["devices"]; if ($display == 1) { $msg = ""; $num = 0; $arrstation = array(); $msg .= '<table border="2">'; $msg .= '<caption><h2>Stations</h2></caption>'; $msg .= '<tr>'; $msg .= '<th>ID</th>'; $msg .= '<th>Name</th>'; $msg .= '</tr>'; foreach ($stations as $station) { $stationname = utf8_decode($station["station_name"]); $arrstation[$station["_id"]] = $stationname; $msg .= '<tr>'; $msg .= '<td>' . $num . '</td>'; $msg .= '<td>' . utf8_decode($station["station_name"]) . '</td>'; $msg .= '</tr>'; $num += 1; } $msg .= '</table>'; $msg .= '<br/>'; $modules = $json_devices["body"]["modules"]; $num = 0; $msg .= '<table border="2">'; $msg .= '<caption><h2>Modules</h2></caption>'; $msg .= '<tr><th>ID</th><th>Name</th><th>Station</th></tr>'; foreach ($modules as $module) { $msg .= '<tr>'; $msg .= '<td>' . $num . '</td>'; $msg .= '<td>' . utf8_decode($module["module_name"]) . '</td>'; $msg .= '<td>' . $module["module_name"] . '</td>'; $msg .= '<td>' . $arrstation[$module['main_device']]. '</td>'; $msg .= '</tr>'; $num += 1; } $msg .= "</table>"; $head = '<head>'; $head .= '<title>Stations & Modules ID</title>'; $head .= '</head>'; echo '<html>' . $head . $msg . '</html>'; exit; } if ($stationNo < count($stations)) { $station = $stations[$stationNo]; $stationID = $station["_id"]; $modules = $json_devices["body"]["modules"]; if ($moduleNo != -1) { if ($moduleNo < count($modules)) { $module = $modules[$moduleNo]; $moduleID = $module["_id"]; switch($module["type"]) { case "NAModule1": # outdoor module $type = "Temperature,Humidity"; break; case "NAModule4": # indoor module $type = "Temperature,CO2,Humidity"; break; case "NAModule3": # rain gauge moule $type = "Rain"; break; case "NAPlug": # thermostat plug $type = "Temperature,Sp_Temperature,BoilerOn,BoilerOff"; break; case "NATherm1": # thermostat module $type = "Temperature,Sp_Temperature,BoilerOn,BoilerOff"; break; default: $err = "Type of module unknown"; } } else $err = "Unknown module"; } else $type = "Temperature,CO2,Humidity,Pressure,Noise"; } else $err = "Unknown station"; if ($err != "") { $mesures = '{"status":"ko","error":"'.$err.'"}'; } else { $url_mesures = "https://api.netatmo.net/api/getmeasure?access_token=" . $params['access_token'] . "&scale=max" . "&type=" . $type . "&date_end=last"; if ($moduleNo == -1) $url_mesures .= "&device_id=" . $stationID; else $url_mesures .= "&device_id=" . $module["main_device"] . "&module_id=" . $moduleID; $mesures = file_get_contents($url_mesures); } echo $mesures; ?> peut etre que dans la conversion un ou des caracteres ont mal été modifié ?
Shyrka973 Posté(e) le 27 avril 2015 Auteur Signaler Posté(e) le 27 avril 2015 Je ne sais pas où se trouve l'erreur car il n'y a pas de numéro de ligne. Peux-tu débugger en insérant dans le code des: fibaro:debug("ici") pour situer l'erreur. As-tu vérifier que le script fonctionne toujours après la conversion ?
Steven Posté(e) le 29 avril 2015 Signaler Posté(e) le 29 avril 2015 Juste pour info, depuis la v4.x on peut directement intégré ce script au sein de notre HC2 sans passé par PHP. http://www.domotique-fibaro.fr/index.php/topic/839-pluviomètre-hc2/?p=69172
Shyrka973 Posté(e) le 29 avril 2015 Auteur Signaler Posté(e) le 29 avril 2015 Merci Steven. Même si je n'ai pas besoin d'automatiser mon arrosage pour l'instant, je vais réutiliser ta scène et ton VD pour récupérer d'autres infos de la station Netatmo que le plugin Fibaro ne propose pas. Pour ceux qui liront ce fil, sachez que: - Le script PHP en début de ce fil est utile pour ceux qui veulent pas passer en V4. - Sur la V4, il y a le plugin Fibaro qui fonctionne convenablement depuis plusieurs versions. - La scène et le VD de Steven permettent de récupérer d'autres infos non disponible par le plugin Fibaro comme l'historique du pluviomètre. Il suffit juste de l'adapter car le principal est déjà fait. 1
flacon030 Posté(e) le 19 avril 2016 Signaler Posté(e) le 19 avril 2016 Le script php semble fonctionner chez moi car j'ai cette réponse quant je tape mon url {"body":[{"beg_time":1461090114,"value":[[23.9,15,39,1018.1,55]]}],"status":"ok","time_exec":0.031605958938599,"time_server":1461090705} Par contre je n'ai rien sur mon HC2 Quels sont les points a modifier pour que le scipt virtuel de la HC2 point vers le fichier netatmo.php? Se sont ces lignes sont a modifier? a la place de "IPAddress" je met l'adresse IP de mon serveur? a la place de "TCPPort" je met le port de mon serveur a savoir par defaut 80? a la place de /netatmo.php" je met le chemin de mon fichier avec ou sans le http://, avec ou sans l'adresse IP? Merci pour votre réponse local ip = fibaro:get(fibaro:getSelfId(), "IPAddress") local port = fibaro:get(fibaro:getSelfId(), "TCPPort"); local url = "/netatmo.php"
Lazer Posté(e) le 19 avril 2016 Signaler Posté(e) le 19 avril 2016 IP et port ne pas toucher, il va lire les infos dans les propriétés du VD (il faut que tu les renseignes bien sur) url => à toi de personnaliser en fct de ton NAS
Messages recommandés