Après la méthode de Sébastien pour collecter les données de la station météo NetAtmo vers une Vera, c’est à mon tour de vous expliquer comment faire de même avec le Home Center 2 de chez Fibaro…
Vous avez pu découvrir précédemment comment créer un bouton virtuel en Lua afin de récupérer les valeurs Json du module Eco-Devices pour suivre vos consommations.
Et bien pour exploiter la station NetAtmo nous allons voir que c’est sensiblement identique si ce n’est que nous allons devoir formater les valeurs en flux Json compatible avec le HC2.
Nota : Avant de poursuivre les étapes suivantes je vous invite à lire mon article sur la création de votre compte « API » NetAtmo nécessaire à l’authentification.
La première étape consiste à éditer un script PHP qui va permettre l’accès à la procédure d’identification de l’API afin de récupérer les valeurs Json de votre station.
Ce code PHP est basé sur celui de Cédric « Maison et Domotique » et de Zebk « http://www.eb-home.eu« , vous pouvez le télécharger ici.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <!--?php $intext=$_GET['intext']; $password="votre-mot-de-passe"; $username="votre-mail"; $app_id = "votre-app-id"; $app_secret = "votre-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 = 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"][0]["_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,Humidity&date_end=last"; $mesures_externes = file_get_contents($url_mesures_externes); if ($intext == "int") echo $mesures_internes ; else echo $mesures_externes ; ?> |
Editez le fichier et inscrivez vos identifiants et API Key.
$intext=$_GET[‘intext’];
$password= »Votre Mot de Passe« ;
$username= »Votre Adresse Mail« ;
$app_id = « Votre ID Key« ;
$app_secret = « Votre Secret Key« ;
Enregistrez votre fichier Netatmo.php et hébergez le sur votre espace web.
Créez un Device Virtuel sur votre HC2 et ajoutez un bouton en code « Lua » dans lequel il suffira d’insérer le code de lecture Json en pointant votre fichier PHP.
Collez le code Lua ci-joint correspondant à la lecture des données « value » renvoyées dans le flux Json.
FHTE = Net.FHttp(« www.domotique-info.fr »)
response = FHTE:GET(« /script/netatmo.php »)
— decoding json string to table
result = json.decode(response)
fibaro:setGlobal(« NetTempExt », result.body[1].value[1][1]);
fibaro:setGlobal(« NetHumExt », result.body[1].value[1][2]);
fibaro:log(fibaro:getGlobalValue(« NetTempExt »).. » °C « ..fibaro:getGlobalValue(« NetHumExt »).. » % « )
Les données sont renvoyées sur cette ligne Json à l’appel du fichier NetAtmo.php.
{« status »: »ok », »body »:[{« beg_time »:1379537111, »value »:[[23.4,664,65,1019.6,44]]}], »time_exec »:0.015914916992188, »time_server »:1379537717}
Ci-dessus nous avons toutes les valeurs de la station intérieure avec dans l’ordre :
value[1][1] = Température
value[1][2] = Qualité de l’air en ppm
value[1][3] = Humidité
value[1][4] = Pression en Mbar
value[1][5] = Bruit en Db
Il suffit de faire de même pour la station extérieure…
Nous avons également besoin d’enregistrer ces valeurs dans des variables, une option utilise pour se servir de ces valeurs dans des scénarios.
J’ai choisi comme vous pouvez le voir dans mon exemple de code Lua des noms de variables explicites que vous pourrez personnaliser.
Ex : NetTempInt, NetHumInt, etc…
Vous pouvez désormais tester l’appel de vos « devices virtuels » en cliquant sur leur bouton, si aucun erreur de code n’est présente vous devriez voir les valeurs s’affichaient dans la barre d’état comme ci-dessous.
J’ai volontairement partager les valeurs de ma station NetAtmo en plusieurs Devices afin d’avoir un visuel plus clair mais rien ne vous empêche de procéder différemment, à chacun sa méthode 😉
Dernière étape qui vous permettra d’avoir un rafraîchissement des données toutes les x secondes ou minutes, nous allons créer un scénario comprenant un script « PressButton« .
Voici un exemple de code Lua sur lequel vous n’aurez qu’à modifier la valeur de l’ID de vos devices virtuel, lignes fibaro:call.
–[[
%% autostart
%% properties
%% globals
–]]
local tmp = 0
local sourceTrigger = fibaro:getSourceTrigger();
if (sourceTrigger[« type »] == « autostart ») then
while true do
local currentDate = os.date(« *t »);
local startSource = fibaro:getSourceTrigger();
fibaro:call(437, « pressButton », « 1 »);
fibaro:call(446, « pressButton », « 1 »);
fibaro:call(449, « pressButton », « 1 »);
tmp =tmp +1;
fibaro:debug(tmp);
fibaro:sleep(1*10000);
end
end
Attention toutefois à ne pas appeler votre script trop rapidement sous peine de le bloquer temporairement, je pense qu’un rafraîchissement des valeurs NetAtmo toutes les 5 minutes me semble largement suffisant…
46 Comments
Krikroff
Bonjour Patrick et merci pour ton partage… Juste deux remarques:
Je pense que les lignes « local currentDate = os.date(« *t »);
local startSource = fibaro:getSourceTrigger(); » dans la boucle ne servent a rien ;-), pourquoi ne pas utiliser la MainLoop disponible maintenant dans les virtual devices pour rafraîchir les informations ?
Pascal STEPHANY
Bonjour Krikoff
Merci pour ton script 🙂
C’est effectivement une bonne remarque que je vais testé ce soir.
Quand au MainLoop maintenant dispo j’ai des soucis de plantage, c’est pour ça que je suis resté en PressButton.
N’hésites pas à partager ton expérience avec nous 😉
Pascal
Olivier M.
C’est depuis quelle version de la HC2 qu’on peut modifier une variable globale depuis un bouton virtuel ?
Pascal STEPHANY
Euh depuis 2 ou 3 versions voire plus 😉
Arnaud
Super boulot
J’aimerais faire la même chose avec la Zibase.
Est ce possible ?
Merci d’avance
Pascal STEPHANY
Bonsoir Arnaud
C’est également possible en récupérant les balises xml dans des variables.
Je dois faire un tuto pour récupérer les données de l’Eco-Devices sur Zibase, il suffira de faire de même en adaptant les requetes…
Pascal
David
Salut
Il manque plus qu’un affichage comme pour les devices de température « normaux » et ca sera parfait 😉
A+
Zyg0m4t1k
La station effectue un rafraîchissement toutes les 10 minutes. Donc cela ne sert à rien de faire moins.
Concernant la zibase, il faut créer une sonde virtuelle et récupérer les infos.
Cédric
Le fichier netatmo.php n’est plus dispo ? Je pense qu’il y a des modifs par rapport au mien ?
Sinon, oui, il manquerait juste de pouvoir représenter ces infos comme n’importe quel autre capteur de température, humidité, etc… Y’a de l’espoir pour pouvoir afficher des devices « normaux » suite aux données récupérée spar les devices virtuels ?
Pascal STEPHANY
Salut Cédric
Je pense qu’il devait être sur l’autre serveur et qu’il na pas suivi le déménagement 😉
Oui il est différent car il a été adapté pour récupérer les données en Json.
Pour l’affichage simuli capteur la demande a également été faite, il n’y a plus qu’à attendre 😉
Pascal
Cédric
Désolé, le script n’a pas dû suivre le dernier déménagement, il n’est encore plus dispo.
Hans-Christian Bohlmann
Merci, avez vous une solution pour intégrer le Netatmo dans la Zipabox ?
CharlyBoy
Bonjour,
Nickel ça, heureux possesseur d’une hc2 ça va me servir. Merci pour le tuto
En revanche y a t’il un moyen quel ces informations remplacent celle du widget météo sur iOS qui sont qd même approximative ? J’ai pas trouvé ?
Merci
Pascal STEPHANY
Bonjour
Ce n’est pas pour l’instant possible mais cette possibilité a été remontée par plusieurs utilisateurs…
Pascal
Eric
Merci, cela m’est très utile. Où puis-je trouver les icones netatmo du tuto ?
Pascal STEPHANY
Bonjour Eric
Tu peux m’envoyer un petit mail pour me les demander.
Pascal
xavier
Bonjour,
Merci pour le tutoriel et les explications fournies. Je tente, en m’inspirant des différents tutoriels, d’interroger ma box Eedomus et de remonter les valeurs de capteur EnOcean (capteur d’ouverture de porte).
J’arrive à récupérer la valeur de mon capteur de porte, insérer cette valeur dans une variable sur mon HC2 et l’afficher sur l’interface du HC2.
Par-contre, s’agissant d’un capteur à deux états (ouvert / fermé), est-il possible dans un module virtuel de faire varier l’icône afin de présenter graphiquement le status du capteur ?
En vous remerciant de votre aide.
Cordialement.
Xavier
Pascal STEPHANY
Bonjour Xavier
Ce n’est pas encore possible mais les devices virtuels vont encore évolués pour entre autre réalisé ce genre de méthode 😉
Tu utilises FHEM / ENOCEAN / HC2 comme dans notre tuto ?
Perso je l’utilise au quotidien pour toutes mes sondes EnOcean, plus besoin de changer les piles 🙂
xavier
J’utilise HC2 mais je n’ai pas bien saisi la différence entre HC2 / FTHE et ne savais pas qu’ENOCEAN était possible. Mais si le temps le permet, volontiers à l’occasion un petit tutoriel sur l’intégration du HC2 avec un système EnOcean (eedomus ou sybase). J’ai toujours l’espoir que Fibaro puisse implémenter le support EnOcean, mais je pense que cela n’est pas demain la veille.
xavier
PS: je n’avais pas saisi la question correctement. Non, j’utilise ma box eedomus avec clé usb EnOcean et j’interroge ma box eedomus via son API depuis le HC2. Je reçois un JSON en retour que je parse et insère la valeur récupérée dans une variable globale sur le HC2.
Je ne suis pas très satisfait du résultat actuel, je pense que cela n’est pas au top actuellement. L’information ne remonte pas correctement automatiquement, je dois cliquer sur le bouton virtuel pour obtenir la valeur de mon capteur.
Je débute sur le HC2 et parcourt donc les tutoriels pour essayer de comprendre au mieux le fonctionnement des devices virtuels. Un petit article sur ce sujet serait bienvenue…
Pascal STEPHANY
C’est prévu comme pas mal de scripts que j’utilise perso mais difficile par manque de temps….
cWal
Intéressant mais un peu trop énigmatique pour moi, je coince là : « Enregistrez votre fichier Netatmo.php et hébergez le sur votre espace web. »
Jamais entendu parler d' »espace web »… Si il faut posséder un serveur, genre Apache sous Linux, avec Python, PHP, My SQL et tout le tremblement, ça devient tout de suite beaucoup, beaucoup plus compliqué ! Pourtant je ne le lis rien nulle part là-dessus.
Arnaud
Bonjour Pascal, Merci pour ce tuto. Pourrais-tu nous dire si ce tuto reste d’actualité ?
Pascal STEPHANY
Bonjour
Ce tuto est toujours d’actualité et fonctionne parfaitement même si avec la prochaine V4 il y aura certainement un plugin NetAtmo…
Arnaud
Merci Pascal pour cette réponse rapide. J’ai tenté de suivre le tuto, mais je butte sur un point, je vois bien appraître le json lorsque je fais https://www.domotique-info.fr/netatmo.php?intext=int. Je vois bien le mien quand je fais la même chose pointer sur mon site. Mais pour cela je suis obligé de mettre http au lieu de https dans le script ! Qu’en penses-tu ?
Merci.
Pascal STEPHANY
Je ne comprend pas ta question. Tu as bien installé le script sur ton serveur ?
Arnaud
Oui, à l’adresse : http://www.dataflex.fr/script/netatmo.php – lorsque tu valides tu peux voir le json. Si j’utilise ton domaine cela fonctionne bien, quand j’utilise le mien avec les lignes https (dans le script) cela ne fonctionne pas du tout, si je mets http en lieu et place des 5x https, alors la j’ai le json que tu peux voir.
Arnaud
Si tu utilises l’adresse avec netatmos.php tu peux voir ce que cela fait avec la version standard (en https).
Pascal STEPHANY
Je ne comprends pas où tu trouves du HTTPS ? Sur ton script, ton hébergement ???
Arnaud
Dans le script, il y a 5 accès à l’API netatmo du genre : https://api.netatmo.net/oauth2/token et c’est dans ces 5 lignes de code qui font accès à l’api que si je laisse https, cela me donne le résultat de l’accès de netatmos.php et si j’enlève les « s » cela me donne le résultat de la page avec netatmo.php.
Arnaud
Peut-êtreque c’est à cause du domaine sur lequel j’ai placé le fichier ?
Pascal STEPHANY
Trés certainement car il faut certains services d’activés et tous les hébergeurs ne le font pas…
Arnaud
ok pourrais-je abuser et t’envoyer mon fichier pour valider cette possibilité ? si oui sur quelle adresse email ?
Merci
Arnaud
Après de nouvelles recherches, il semble que cela pourrait venir de l’UTF-8. le serveur que j’utilise doit être en ISO-8859-1. Et bizarrement, je pense que cela pose problème.
Arnaud
Ok J’ai enfin trouver d’ou venait le problème. Il faut enregistrer son script PHP au format ISO lorsqu’il est sur stocké sur un site en ISO. Autrement le décodage (complètement transparent au départ comme à l’arrivée) va le rendre impropre à l’utilisation par la commande json decode…
Merci à Pascal, pour le temps consacré à cette recherche.
Arnaud
Pascal STEPHANY
Super Arnaud si tu as pu trouver l’erreur 😉
Manu31
Bonjour,
Suite à la nouvelle MAJ de netatmo le script ne retourne que deux valeur dans « VALUE », même le tiens :
exemple :
{« status »: »ok », »body »:[{« beg_time »:1405386552, »value »:[[17.7,69]]}], »time_exec »:0.060107946395874, »time_server »:1405417686}
Et non pas
{« status »: »ok », »body »:[{« beg_time »:1379537111, »value »:[[23.4,664,65,1019.6,44]]}], »time_exec »:0.015914916992188, »time_server »:1379537717}
Question (car je dois pas être le seul):
Quelqu’un a planché dessus histoire de réparer ça ?
En vous remerciant
Fredric
Salut Manu31,
tu n’es pas seul dans ce cas, mais je ne connais pas la cause…. 🙁
Manu31
Merci Fred, ça me rassure.
Par contre migrant d’eedomus à HC2 le script php fait par cédric marche toujours.
le script : http://www.maison-et-domotique.com/scripts/netatmo.php?login=VOTRE_EMAIL&password=MOTDEPASSE
Il retourne les résultats en XML.
Reste à exploiter les donnée en JSON ou les intégrer différemment à la HC2…
Frederic
J’ai résolu mon problème 😉
–Pour données intérieur
FHTE = Net.FHttp(« xxx.xxx.xxx.xxx »)
response = FHTE:GET(« /netatmo/netatmo.php?intext=int »)
–Pour données Exterieur
FHTE = Net.FHttp(« xxx.xxx.xxx.xxx »)
response = FHTE:GET(« /netatmo/netatmo.php?intext=ext »)
Manu31
Bien joué Fred.
Merci beaucoup 🙂
Me reste plus qu’a coller une belle interface pour le module si vous avez des exemples logo etc.. je suis preneur.
Bonne soirée
Frederic
Je crois que c’est ça que tu cherches, tout en bas dans icônes
http://domotique-inf…enter-2-fibaro/
Manu31
Euh oui l’adresse complète ????
je débute sur HC2 dsl pour le spam 🙂
Hakan
Hi, Sorry I have no French, but how can I get the info from my 2 additional inside modules and my rain meter. Do I have to edit the PHP file? and how?
Fredric
« Salut, Désolé, je n’ai pas le français, mais comment puis-je obtenir les informations de mes 2 modules supplémentaires à l’intérieur et mon mètre pluie. Dois-je modifier le fichier PHP? et comment? »
Notre ami à raison, comment fait-on pour récupérer les données des module additionnel?
Thoma
Bonjour j’ai le fichier JSON suivant
{« Ph »:[{« id »: »1077731″, »title »: »pH », »min »: »7.3″, »max »: »7.6″, »value »: »7.73″, »texte »: »un peu haut », »couleur »: »f12c3e », »conseil »: »Le ph ne doit pas descendre en dessous de 6.5 et ne pas etre au dessus de 8.2… entre ces 2 valeurs, le maintenir au plus proche de 7.5 est id\u00e9al pour optimiser la qualit\u00e9 de l’eau, son odeur, et son contact avec la peau.\r\n\r\nLe pH est un param\u00e8tre important de l’eau de votre piscine. Il est la r\u00e9f\u00e9rence pour le Redox et l’efficacit\u00e9 des traitements.\r\n\r\nUn pH en dessous de 6.9 a tendance a corrod\u00e9 le m\u00e9tal et les joints b\u00e9ton. Dans le cas du chlore, risque d’odeurs naus\u00e9abondes et \u00e9ventuellement muqueuses irrit\u00e9es.\r\n », »date »: »2016-06-12 19:56:28″}]}
Je voudrais récupérer certaines données dans ma HC2 dans un module virtuel.
J’ai écrit le code suivant
result = json.decode(response)
PH = result.Ph.value
Je suppose que ceci ne doit pas être correct car ma variable ne se met pas à jour.
J’ai bien les deux premières lignes avec le GET du fichier PHP.
Y’a t’il quelqu’un susceptible de m’aider ?
D’avance un tout grand merci.
Bonne fin de soirée.