Code : Tout sélectionner
/*
https://github.com/alextoft/sureflap/blob/master/
https://github.com/rcastberg/sure_petcare
*/
//Configuration
$endpoint = "https://app.api.surehub.io";
$email_address = "MAIL";
$password = "PASS";
$device_id = "DEVICE_ID";
$english_days = array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday');
$french_days = array('Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam', 'Dim');
$english_months = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'Décember');
$french_months = array('Janv', 'Fév', 'Mars', 'Av', 'Mai', 'Juin', 'Juil', 'Août', 'Sept', 'Oct', 'Nov', 'Déc');
//Login
$json = json_encode(array("email_address" => $email_address, "password" => $password, "device_id" => $device_id));
$ch = curl_init($endpoint."/api/auth/login");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json","Content-Length: ".strlen($json)));
$result = json_decode(curl_exec($ch),true) or die("Curl Failed\n");
if($result['data']['token']) {
$scenario->setLog("New Login Successful for ".$result['data']['user']['first_name']." ".$result['data']['user']['last_name']."!\nToken: ".$result['data']['token']);
$token = $result['data']['token'];
file_put_contents("token",$token);
} else {
die("Login Failed!\n");
}
//Récupération du nom du foyer
$ch = curl_init($endpoint."/api/household");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer $token"));
$result = json_decode(curl_exec($ch),true) or die("Curl Failed\n");
if($result['data']) {
$scenario->setLog("ID du foyer: ".$result['data'][0]['id']."\nNom du foyer: ".$result['data'][0]['name']."\n");
$household = $result['data'][0]['id'];
cmd::byString("#[Maison][V_Sureflap][nomFoyer]#")->event(($result['data'][0]['name']));
} else {
die("No Household!\n");
}
//Récupératiion des ids des appareils
$ch = curl_init($endpoint."/api/household/$household/device");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer $token"));
$result = json_decode(curl_exec($ch),true) or die("Curl Failed\n");
$scenario->setLog("Hub ID: ".$result['data'][0]['id']."\n");
$hub = $result['data'][0]['id'];
$scenario->setLog("Chatière ID: ".$result['data'][1]['id']."\n");
$chatiere = $result['data'][1]['id'];
//Récupération des infos de Biscotte part 1
$ch = curl_init($endpoint."/api/household/$household/pet");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer $token"));
$result = json_decode(curl_exec($ch),true) or die("Curl Failed\n");
if($result['data']) {
$scenario->setLog("ID du chat: ".$result['data'][0]['id']."\n");
$pet = $result['data'][0]['id'];
//Nom
$scenario->setLog($result['data'][0]['name']);
$petname = $result['data'][0]['name'];
cmd::byString("#[Maison][V_Sureflap][nomAnimal]#")->event(($result['data'][0]['name']));
if($result['data'][0]['gender']=="0") {
$scenario->setLog("Femelle");
cmd::byString("#[Maison][V_Sureflap][genreAnimal]#")->event(("Femelle"));
} else {
$scenario->setLog("Male");
cmd::byString("#[Maison][V_Sureflap][genreAnimal]#")->event(("Male"));
}
if($result['data'][0]['species_id']=="2") {
$scenario->setLog("Chien");
cmd::byString("#[Maison][V_Sureflap][especeAnimal]#")->event(("Chien"));
} else {
$scenario->setLog("Chat");
cmd::byString("#[Maison][V_Sureflap][especeAnimal]#")->event(("Chat"));
}
$pet = $result['data'][0]['id'];
} else {
die("Pas d'animal!\n");
}
//Récupération des infos de Biscotte part 2
$ch = curl_init($endpoint."/api/pet/$pet/position");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer $token"));
$result = json_decode(curl_exec($ch),true) or die("Curl Failed\n");
if($result['data']) {
switch($result['data']['where']){
case 1:
$pet_location = "Intérieur";
break;
case 2:
$pet_location = "Extérieur";
break;
default:
$pet_location = "Inconnue";
break;
}
cmd::byString("#[Maison][V_Sureflap][localisationAnimalX]#")->event(($pet_location));
$scenario->setLog("Localisation du chat : ".$pet_location."\n");
// $pet_location_datetime = str_replace($english_months, $french_months, str_replace($english_days, $french_days, date_format(new DateTime($result['data']['since']),'l d F H:i')));
// cmd::byString("#[Maison][V_Sureflap][localisationAnimalDate]#")->event(($pet_location_datetime));
// $scenario->setLog("Dernier changement : ".$pet_location_datetime."\n");
$pet_location_datetime_temp = new DateTime($result['data']['since']);
date_add($pet_location_datetime_temp, date_interval_create_from_date_string('2 hours'));
$pet_location_datetime = str_replace($english_months, $french_months, str_replace($english_days, $french_days, date_format($pet_location_datetime_temp,'l d F H:i')));
cmd::byString("#[Maison][V_Sureflap][localisationAnimalDate]#")->event(($pet_location_datetime));
$scenario->setLog("Dernier changement : ".$pet_location_datetime."\n");
$pet_location_date = $result['data']['since'];
} else {
die("Pas d'animal!\n");
}
//Récupération des infos du Hub
$ch = curl_init($endpoint."/api/device/$hub/status");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer $token"));
$result = json_decode(curl_exec($ch),true) or die("Curl Failed\n");
if($result['data']) {
$scenario->setLog("Status du Hub : ".$result['data']['online']);
$hub_status = $result['data']['online'];
if($hub_status == 1){
cmd::byString("#[Maison][V_Sureflap][Hub]#")->event((0));
} else {
cmd::byString("#[Maison][V_Sureflap][Hub]#")->event((1));
}
$scenario->setLog("Lumière du Hub : ".$result['data']['led_mode']);
$hub_led = $result['data']['led_mode'];
cmd::byString("#[Maison][V_Sureflap][lumiereHub]#")->event(($hub_led));
} else {
die("Erreur de récupération des infos du Hub!\n");
}
//Récupération des infos de la chatière partie 1 (technique)
$ch = curl_init($endpoint."/api/device/$chatiere/status");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer $token"));
$result = json_decode(curl_exec($ch),true) or die("Curl Failed\n");
if($result['data']) {
$scenario->setLog("Status de la chatière : ".$result['data']['online']);
$chatiere_status = $result['data']['online'];
if($chatiere_status == 1){
cmd::byString("#[Maison][V_Sureflap][Chatière]#")->event((0));
} else {
cmd::byString("#[Maison][V_Sureflap][Chatière]#")->event((1));
}
$scenario->setLog("Force du signal : ".$result['data']['signal']['device_rssi']);
$chatiere_signal = $result['data']['signal']['device_rssi'];
cmd::byString("#[Maison][V_Sureflap][signalChatiere]#")->event(($chatiere_signal));
$chatiere_battery_v = $result['data']['battery'];
$chatiere_battery_perc = round($result['data']['battery'] * 100 / 6.4, 1);
$scenario->setLog("Batterie V: ".$chatiere_battery_v." Batterie perc :".$chatiere_battery_perc);
cmd::byString("#[Maison][V_Sureflap][Batterie]#")->event(($chatiere_battery_perc));
//$scenario->setLog("Mode de verouillage : ".$result['data']['locking']['mode']);
//$chatiere_verouillage = $result['data']['locking']['mode'];
} else {
die("Erreur de récupération des infos du Hub!\n");
}
//Récupération des infos de la chatière partie 2 (fonctionnelles)
$ch = curl_init($endpoint."/api/device/$chatiere/control");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization: Bearer $token"));
$result = json_decode(curl_exec($ch),true) or die("Curl Failed\n");
if($result['data']) {
if($result['data']['curfew']['enabled'] == true){
$scenario->setLog("Couvre feu : 1");
$chatiere_couvrefeu_status = 1;
} else {
$scenario->setLog("Couvre feu : 0");
$chatiere_couvrefeu_status = 0;
}
cmd::byString("#[Maison][V_Sureflap][Couvre-feu]#")->event(($chatiere_couvrefeu_status));
$scenario->setLog("Permission : ".$result['data']['curfew']['permission']);
$chatiere_couvrefeu_permission = $result['data']['curfew']['permission'];
$chatiere_couvrefeu_horaires = $result['data']['curfew']['lock_time']." à ".$result['data']['curfew']['unlock_time'];
$scenario->setLog("Horaires couvre feu : ".$chatiere_couvrefeu_horaires);
cmd::byString("#[Maison][V_Sureflap][couvrefeuHorairesChatiere]#")->event(($chatiere_couvrefeu_horaires));
switch($result['data']['locking']){
case 0:
$chatiere_verouillage2 = "Déverrouillée";
break;
case 1:
$chatiere_verouillage2 = "Entrée interdite";
break;
case 2:
$chatiere_verouillage2 = "Sortie interdite";
break;
case 3:
$chatiere_verouillage2 = "Entrée et sortie interdites";
break;
default:
$chatiere_verouillage2 = "Verrouillage inconnu";
break;
}
$scenario->setLog("Mode de verouillage 2 : ".$chatiere_verouillage2);
cmd::byString("#[Maison][V_Sureflap][verrouillageChatiere]#")->event(($chatiere_verouillage2));
} else {
die("Erreur de récupération des infos du Hub!\n");
}
//Déconnexion
$ch = curl_init($endpoint."/api/auth/logout");
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json","Authorization: Bearer $token"));
$result = curl_exec($ch);
if(curl_getinfo($ch, CURLINFO_HTTP_CODE)=="200") {
$scenario->setLog("Déconnexion");
} else {
$scenario->setLog("Token invalide");
}