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¶m=udevice&idx=" . $temp_idx . "&nvalue=0&svalue=" . $temperature_thermostat1;
$url_send_consigne="http://" . $domoticz_ip_port . "/json.htm?type=command¶m=udevice&idx=" . $setpoint_idx . "&nvalue=0&svalue=" . $setpoint_thermostat1;
$url_statut_chaudiere="http://" . $domoticz_ip_port . "/json.htm?type=command¶m=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