Aller au contenu

Messages recommandé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.

 

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

Posté(e)

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é"...

Posté(e)

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 ! :/

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

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

Posté(e)

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/

Posté(e)

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

Posté(e)

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

 

Posté(e)

 
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}

Posté(e)

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)

Posté(e)

Je pense que le souci vient de l'encodage du script PHP. Peux-tu ré-enregistrer le fichier "netatmo.php" en ISO-8859-1 ?

Posté(e)

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.

Posté(e)

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

Posté(e)

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 ?

Posté(e)

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.

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

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

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

×
×
  • Créer...