L’hiver est là. Savez vous s’il y a eu des avancées sur eedomus et la nouvelle API Google ? Ce serait très très cool !

Bonne soirée.
Alex
<?
$user = "";//Login HomeBridge
$mdp = "";// Mdp HomeBridge
$IP = "https://";//IP ou URL Homebridge
//URL à générer
$url_login = $IP."/api/auth/login";
$url_accessories = $IP."/api/accessories";
//Initialisation variables à nul pour savoir si format ok.
$value='';
$var='';
//Verifie les données et existance de la variable "presence"
if(isset ($_GET['presence']))
{
if (($_GET['presence'] == 0 || $_GET['presence'] == 1)&& is_numeric($_GET['presence']))
{
$value=$_GET['presence'];
$var="presence";
$characteristicType="On";//Indique le format qui sera attendu par la requête.
}
}
//Verifie les données et existance de la variable "presence"
if(isset ($_GET['mode']))
{
if (($_GET['mode'] == 0 || $_GET['mode'] == 1)&& is_numeric($_GET['mode']))
{
$value=$_GET['mode'];
$var="mode";
$characteristicType="TargetHeatingCoolingState";//Indique le format qui sera attendu par la requête.
}
}
//Verifie les données et existance de la variable "target_temp"
if(isset ($_GET['target_temp']))
{
if ($_GET['target_temp'] > 8 && $_GET['target_temp'] < 33 && is_numeric($_GET['target_temp']))//Uniquement entre 9 et 32
{
$value=$_GET['target_temp'];
$var="target_temp";
$characteristicType="TargetTemperature";//Indique le format qui sera attendu par la requête.
}
else exit("Température non adaptée");
}
//Fonction qui emet des requêtes json via CURL
function callAPI($method, $url, $data, $token){
$curl = curl_init();
switch ($method){
case "POST":
curl_setopt($curl, CURLOPT_POST, 1);
if ($data)
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
case "PUT":
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
if ($data)
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
default:
if ($data)
$url = sprintf("%s?%s", $url, http_build_query($data));
}
// OPTIONS:
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer '.$token,
'Content-Type: application/json',
));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
// EXECUTE:
$result = curl_exec($curl);
if(!$result){die("Connection Failure");}
//echo (curl_getinfo($curl,CURLINFO_RESPONSE_CODE));
curl_close($curl);
return $result;
}
//Fin fonction
//Début récupération de Token
$data_array = array(
"username" => $user,
"password" => $mdp,
"otp" => "String"
);
$make_call = callAPI('POST', $url_login, json_encode($data_array),false);
$response = json_decode($make_call, true);
$token = $response["access_token"];
//Fin récupération Token
if(isset ($_GET['action']))//Vérification présence de la variable "action"
{
if($_GET['action']=="GET_ALL"){//Si action = GET_ALL
$get_all = $get_data = callAPI('GET', $url_accessories, false,$token);
$response_get_all = json_decode($get_all, true);
print_r(json_encode($response_get_all, JSON_PRETTY_PRINT));
}
else{
if(isset ($_GET['unique_id']))//Vérification présence de la variable "unique_id"
{
$unique_id_nest = $_GET['unique_id'];
if($_GET['action']=="GET")//Cas d'action = GET
{
$get_data = callAPI('GET', $url_accessories."/".$unique_id_nest, false,$token);
$response_get = json_decode($get_data, true);
print_r(json_encode($response_get, JSON_PRETTY_PRINT)); //Afichage réponse en json
}
elseif($_GET['action']=="PUT")//Cas d'action = PUT
{
if(!is_null($value))//Vérification de la valeur à modifier
{
if ($var =="presence" || $var == "target_temp" || $var == "mode"){//Soit la presence soit la temperature de consigne
$nest_put = array(
"characteristicType" => $characteristicType,
"value" => $value
);
$update_plan = callAPI('PUT', $url_accessories."/".$unique_id_nest,json_encode($nest_put),$token);
$response_nest = json_decode($update_plan, true);
print_r(json_encode($response_nest, JSON_PRETTY_PRINT));//Afichage réponse en json
}
else
{
exit("url inconnue : Valeur de la variable action non reconnue");
}
}
else
{
exit("Argument Variable inconnu");
}
}
else
{
exit("Argument Variable 'action' inconnu");
}
}
else
{
exit("unique_id manquant");
}
}
}
else
{
exit("url inconnue : Aucune variable action");
}
?>
USAGE :
http://URL?Arg1=X&Arg2=Z
ex : http://192.168.0.1:/?Action=PUT&unique_ ... presence=0
Liste des arguments :
- Action : GET_ALL : Affiche l'ensemble des accessoires
- Action : GET : Affiche les informations de l'accessoire concerné
- Action : PUT : Modifie les informations de l'accessoire concerné
- unique_id (valeur de l'unique id) : unique id de l'accessoire à piloter.(Obligatoire pour action GET et PUT)
- presence (Valeur 0 ou 1) : Met le mode Absence ou Présence
- target_temp (Température souhaitée) : Consigne de température à donner à la Google Nest
En créant un Actionneur HTTP (url avec action=PUT dans les valeurs) celui-ci peut modifier les valeur de la Nest tout en récupérant les information pour se mettre à jour (url avec action=GET dans la "requête de mise à jour (Optionnelle)").
- Créer un périphérique (Capteur ou Actionneur si on veut modifier sa valeur) HTTP
- Mettre dans VAR1 la valeur unique_id de l'accessoire (si actionneur, sinon, directement dans l'url)
- Cocher "convertir json en XML et indiquer le XPATH souhaité pour mettre à jour la valeur
- Indiquer le XPATH pour récupérer les valeurs souhaitées
A noter la possibilité de les regrouper pour avoir l'ensemble des périphériques créés liés. Il suffit de mettre les unique_id mode eco/absence et consigne de Température en VAR1/VAR2 & VAR3 (voir capture ci-dessus)
Créer un capteur HTTP
Type de données : "Nombre Décimal"
Unité : "°C"
URL de la requête : http://IP:port/?action=GET&unique_id=XXXXX
Chemin XPATH : /root/values/CurrentTemperature
Fréquence de la requête : Définir en fonction du souhait
Convertir le JSON en XML : coché
Créer un capteur HTTP
Type de données : "Nombre Décimal"
Unité : "%"
URL de la requête : http://IP:port/?action=GET&unique_id=XXXXX
Chemin XPATH : /root/values/CurrentRelativeHumidity
Fréquence de la requête : Définir en fonction du souhait
Convertir le JSON en XML : coché
Créer un capteur HTTP
Type de données : "Liste de valeurs"
URL de la requête : http://IP:port/?action=GET&unique_id=XXXXX
Chemin XPATH : /root/values/CurrentHeatingCoolingState
Fréquence de la requête : Définir en fonction du souhait
Convertir le JSON en XML : coché
VALEUR :
Valeur brute : 0 / Description : Arrêt
Valeur brute : 1 / Description : En fonctionnement
Créer un Actionneur HTTP
VAR1 : XXXXXX (uniqueid)
URL de la requête : http://IP:port/?action=GET&unique_id=[VAR1]
Chemin XPATH : /root/values/On
Fréquence de la requête : Définir en fonction du souhait
Convertir le JSON en XML : coché
VALEUR :
Valeur brute : 0 / Description : Absent /url : uri/?action=PUT&presence=[RAW_VALUE]&unique_id=[VAR1]
Valeur brute : 1 / Description : Présent /url : uri/?action=PUT&presence=[RAW_VALUE]&unique_id=[VAR1]
Créer un Actionneur HTTP
VAR1 : XXXXXX (uniqueid)
URL de la requête : http://IP:port/?action=GET&unique_id=[VAR1]
Chemin XPATH : /root/values/On
Fréquence de la requête : Définir en fonction du souhait
Convertir le JSON en XML : coché
VALEUR :
Valeur brute : 0 / Description : Mode Normal /url : uri/?action=PUT&presence=[RAW_VALUE]&unique_id=[VAR1]
Valeur brute : 1 / Description : Mode Eco /url : uri/?action=PUT&presence=[RAW_VALUE]&unique_id=[VAR1]
Créer un Actionneur HTTP
VAR1 : XXXXXX (uniqueid)
URL de la requête : http://IP:port/?action=GET&unique_id=[VAR1]
Chemin XPATH : /root/values/TargetHeatingCoolingState
Fréquence de la requête : Définir en fonction du souhait
Convertir le JSON en XML : coché
VALEUR :
Valeur brute : 0 / Description : Eteint /url : uri/?action=PUT&mode=[RAW_VALUE]&unique_id=[VAR1]
Valeur brute : 1 / Description : Chauffage /url : uri/?action=PUT&mode=[RAW_VALUE]&unique_id=[VAR1]
Créer un Actionneur HTTP
VAR1 : XXXXXX (uniqueid)
URL de la requête : http://IP:port/?action=GET&unique_id=[VAR1]
Chemin XPATH : /root/values/TargetTemperature
Fréquence de la requête : Définir en fonction du souhait
Convertir le JSON en XML : coché
VALEUR : (Faire autant de valeur que de réglage possible souhaité (de 13°C à 26°C par palier de 1 degré par exemple, soit 14 lignes)
Valeur brute : 13 / Description : 13°C /url : uri/?action=PUT&target_temp=[RAW_VALUE]&unique_id=[VAR1]
Valeur brute : 14 / Description : 14°C /url : uri/?action=PUT&target_temp=[RAW_VALUE]&unique_id=[VAR1]
solidxiii a écrit:Merci beaucoup. C’est vraiment top !
Retour vers Scripts & Périphériques du store
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 17 invité(s)