Page 1 sur 2

[PHP] Thermostat Netatmo - Lecture et statut

Publié : 14 déc. 2014, 20:28
par sarakha63
Bonjour,

Je vais vous joindre un de mes premiers scripts pour le thermostat netatmo (car il y en aura d'autres, et j'en ferais d'autres pour d'autres objets connectés). Tout d'abord que fait celui la et a quoi il sert.
Le script que je fournis permet de mettre à jour 3 capteurs virtuels (à créer au préalable):
1) un switch on/off : pour savoir si le système de chauffe (chaudière par exemple) est allumé ou pas
2) un virtual sensor de température : pour savoir la température mesurée par le thermostat
3) un virtual sensor (setpoint) : pour connaitre la température de consigne actuelle du thermostat.

Il faut donc comme à l'accoutumé dans domoticz créer les 3 capteurs au préalable et récupérer leurs idx.

Donc voici le script (à mettre dans un cron par exemple). Il est inspiré du script de Cyril E que j'ai beaucoup adapté à domoticz. Car même si vous le mettez en CRON toutes les deux minutes, je ne metterais à jour domoticz que si il y a un changement (ce qui permet de laisser la date last seen qui correspond a la date réelle de dernier changement)


Voici le script : (en php, meme si d'habitude je fais tout en python ou en sh)

Code : Tout sélectionner

<?php

// Ludovic SARAKHA script complet de lecture et maj de 3 capteurs domoticz (setpoint, temp et etat chaudière) avec les valeurs du thermostat netatmo   
// Script inspiré du script de Cyril E http://www.ituilerie.com

//parametrage individuel (a changer)

$password='XXXXXXXX';
$username='XXXXXXXX';
$app_id = 'XXXXXXXX';
$app_secret = 'XXXXXXXX';
$domoticz_ip_port='XXX.XXX.XXX.XXX:XXXX';
$chaudiere_idx ='XX';
$setpoint_idx='XX';
$temp_idx='XX';

//partie de communication avec netatmo
$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,
            'scope' => 'read_station read_thermostat write_thermostat'
    )
);

$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']."&app_type=app_thermostat";
$requete = @file_get_contents($api_url);
$url_devices = "https://api.netatmo.net/api/devicelist?access_token=" .  $params['access_token']."&app_type=app_thermostat";
$resulat_device = @file_get_contents($url_devices);	
$json_devices = json_decode($resulat_device,true);
$device1 = $json_devices["body"]["devices"][0]["_id"];
$module1 = $json_devices["body"]["modules"][0]["_id"];

//recuperation des valeurs netatmo
$url_thermostat1="http://api.netatmo.net/api/getthermstate?access_token=" .  $params['access_token']."&device_id=".$device1."&module_id=".$module1;
$value_thermostat1= file_get_contents($url_thermostat1);
$json_mesures_thermostat1 = json_decode($value_thermostat1, true);
$temperature_thermostat1 = $json_mesures_thermostat1["body"]["measured"]["temperature"];
$run_thermostat1 = $json_mesures_thermostat1["body"]["therm_relay_cmd"];
$setpoint_thermostat1=$json_mesures_thermostat1["body"]["measured"]["setpoint_temp"];

//transformation 0 en off et 100 en on
$stat_chaudiere="Off";
if ($run_thermostat1=="100") {
	$stat_chaudiere="On";
}

//construction des requetes denvoi a domoticz
$url_send_temp="http://" . $domoticz_ip_port . "/json.htm?type=command&param=udevice&idx=" . $temp_idx . "&nvalue=0&svalue=" . $temperature_thermostat1;
$url_send_consigne="http://" . $domoticz_ip_port . "/json.htm?type=command&param=udevice&idx=" . $setpoint_idx . "&nvalue=0&svalue=" . $setpoint_thermostat1;
$url_statut_chaudiere="http://" . $domoticz_ip_port . "/json.htm?type=command&param=switchlight&idx=" . $chaudiere_idx . "&switchcmd=" . $stat_chaudiere . "&level=0";

//recuperation des etats actuels domoticz et envoi uniquement si different (ce qui permet davoir la vraie info de lheure du dernier changement
$current_temp_domo=json_decode(file_get_contents("http://" . $domoticz_ip_port . "/json.htm?type=devices&rid=" . $temp_idx), true)["result"][0]["Temp"];
if ($current_temp_domo!=$temperature_thermostat1) {
	$send_temp_thermostat= file_get_contents($url_send_temp);
}
$current_consigne_domo=json_decode(file_get_contents("http://" . $domoticz_ip_port . "/json.htm?type=devices&rid=" . $setpoint_idx), true)["result"][0]["Data"];
if ($current_consigne_domo!=$setpoint_thermostat1) {
	$send_temp_consigne= file_get_contents($url_send_consigne);
}
$current_stat_chaudiere=json_decode(file_get_contents("http://" . $domoticz_ip_port . "/json.htm?type=devices&rid=" . $chaudiere_idx), true)["result"][0]["Data"];
if ($current_stat_chaudiere!=$stat_chaudiere) {
	$send_statut_chaudiere= file_get_contents($url_statut_chaudiere);
}
?>

Je compte fournir de meme le moyen d'interagir avec le thermostat de manière conviviale via domoticz.


J'essaie de me mettre au C++ car j'aimerais faire un plugin natif avec tout en un mais la c'est autre chose

Re: Thermostat Netatmo - Lecture et statut

Publié : 23 déc. 2014, 21:20
par sarakha63
J'ai mis a jour mon script avec en plus le nom du programme sur un sensor text

Re: Thermostat Netatmo - Lecture et statut

Publié : 04 janv. 2015, 19:55
par 6LE20
Bonjour,

Je suis novice en informatique, j'ai un peu de mal a appliquer ton script.

1/ j'ai créer un compte sur netatmo developer pour avoir des codes "client id" et "client secret" mais je ne sais pas quoi mettre ici :
$chaudiere_idx ='XX';
$setpoint_idx='XX';
$temp_idx='XX';
2/a quelle endroit tu enregistres ce script et comment est-il lancé

d'avance merci beaucoup

Re: Thermostat Netatmo - Lecture et statut

Publié : 04 janv. 2015, 21:45
par patrice
Bonjour

Bien que n'étant pas l'auteur du script, je réponds aux point concernant les idx et le lancement

1 -
Pour les idx il s'agit d'une notion importante dans Domoticz , il s'agit du numéro unique (de 1 a XXXXX) que possède un périphérique Domoticz (interrupteurs, switches virtuels, detecteurs ...)

sarakha63 te demandait de créer 3 capteurs virtuels un fois que cela est fait tu vas chercher leur fameux Idx
j'ai une illustration ici http://easydomoticz.com/detection-de-pr ... moticz_idx

et tu mets ca dans le script au bon endroit

2-
Le lancement du script à intervalles réguliers
cela passe par l'outil crontab -e
un article du blog en parle http://easydomoticz.com/domoticz-et-scr ... /#crontab_
il faudra bien sur que tu y mettes le chemin vers le script php


Bonne continuation

Re: Thermostat Netatmo - Lecture et statut

Publié : 05 janv. 2015, 21:59
par sarakha63
Je confirme tout ce qu'a dit patrice.

Je vais mettre a niveau le script avec la possibilité de changer la temperature de consigne via domoticz. Et aussi de mettre a jour un autre capteur virtuel texte avec le nom de programme en cours.

Le fait de changer la consigne c'est pas mal car ca permet d'overrider le parametrage du netatmo en fonction d'événements gérés par domoticz

Re: Thermostat Netatmo - Lecture et statut

Publié : 06 janv. 2015, 07:43
par patrice
Bonjour

une précision sur l'utilisation des script php

1 - il faut que php5-cli soit installé
2 - le script doit être exécutable
3 - on place le shebang php en 1ere ligne du script (avant <?php
4 - ça marche
ça fait donc :

1 - installe php-cli par un sudo aptitude install php5-cli
2 - chmod +x lenomduscript.php
3 - sur la 1ere ligne du script met #!/usr/bin/php
4 - lance ton script par ./lenomduscript.php ou dans un interrupteur avec scipt:///home/pi/domoticz/scripts/lenomduscipt.php
5 - :P

Re: Thermostat Netatmo - Lecture et statut

Publié : 07 janv. 2015, 16:17
par 6LE20
Bonjour,

Merci beaucoup pour votre aide, tout fonctionne bien. je vais essayer maintenant de rajouter les modules de ma station météo Netatmo.

:D

Re: Thermostat Netatmo - Lecture et statut

Publié : 07 janv. 2015, 17:01
par patrice
Cool
Pourrais tu marquer réglé (coche verte) sur ton 1er message
Merci et à bientot...

Re: Thermostat Netatmo - Lecture et statut

Publié : 07 janv. 2015, 17:02
par patrice
Cool
Pourrais tu marquer réglé (coche verte) sur ton 1er message
Merci

Re: Thermostat Netatmo - Lecture et statut

Publié : 26 janv. 2015, 11:01
par Olivier77260
Bonjour à tous,

Pour ma part, j'ai rencontré quelques soucis de fonctionnement car ce script n'était pas sur le même serveur que domoticz. Dans ce cas il ne faut pas oublier d'autoriser la connexion réseaux locaux en entrant l'adresse ip du serveur qui exécute le script dans les paramètres de domoticz.