[PHP] Thermostat Netatmo - Lecture et statut

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
sarakha63
Messages : 6
Inscription : 30 nov. 2014, 20:34

[PHP] Thermostat Netatmo - Lecture et statut

Message 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
sarakha63
Messages : 6
Inscription : 30 nov. 2014, 20:34

Re: Thermostat Netatmo - Lecture et statut

Message par sarakha63 »

J'ai mis a jour mon script avec en plus le nom du programme sur un sensor text
6LE20
Messages : 2
Inscription : 04 janv. 2015, 19:46

Re: Thermostat Netatmo - Lecture et statut

Message 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
Dernière modification par 6LE20 le 07 janv. 2015, 17:28, modifié 1 fois.
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Thermostat Netatmo - Lecture et statut

Message 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
Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
sarakha63
Messages : 6
Inscription : 30 nov. 2014, 20:34

Re: Thermostat Netatmo - Lecture et statut

Message 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
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Thermostat Netatmo - Lecture et statut

Message 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
Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
6LE20
Messages : 2
Inscription : 04 janv. 2015, 19:46

Re: Thermostat Netatmo - Lecture et statut

Message 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
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Thermostat Netatmo - Lecture et statut

Message par patrice »

Cool
Pourrais tu marquer réglé (coche verte) sur ton 1er message
Merci et à bientot...
Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
patrice
Messages : 1720
Inscription : 22 sept. 2014, 21:51

Re: Thermostat Netatmo - Lecture et statut

Message par patrice »

Cool
Pourrais tu marquer réglé (coche verte) sur ton 1er message
Merci
Raspberry pi 3, Dongle RfxCom et Zigate +, plugin de pipiche, Volets Roulants profalux, contrôle d'éclairage, détecteurs de présence, alarme incendie, pilotage livebox ...
Objectif : WAF > 1
Olivier77260
Messages : 53
Inscription : 26 janv. 2015, 09:39

Re: Thermostat Netatmo - Lecture et statut

Message 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.
Répondre