Op werkdagen voor 11u besteld, 's avonds al in huis!
Op werkdagen voor 11:00 besteld, dezelfde avond al in huis!
Smart home installatieservice
Bereikbaar op +31 73 762 0 762

Homecenter en Honeywell EvoHome integratie

ROBBshop is bezig om de HomeCenter en het Honeywell Evohome systeem te integreren

honeywell_definitions.php
------------------------------------

<?php
$honeywell_base_url = "https://tccna.honeywell.com/WebAPI/api";
$honeywell_username = "email@adres.nl";
$honeywell_password = "*************";
$honeywell_user_id = "******";
$honeywell_app_id = "91db1612-73fd-4500-91b2-e63b069b185c";
?>

user_id krijg je de eerste keer terug van de authenticatie, maar die kan
je gewoon vast laten staan.
app_id is een bestaande die ik van het internet heb geplukt.

honeywell_functions.php -> Alle gebruikte functies
----------------------------------

<?php

//Deze functie haalt alle info op van je locatie(s). Je kan meerdere
locaties hebben:

function honeywell_get_locations () {
$command = "/locations";
$value = honeywell_get_execute($command);
return $value;
}

//Dit is een simpele subset van locations die van de eerste locatie
alleen de temp zones terug geeft:

function honeywell_get_devices () {
$command = "/locations";
$locations = honeywell_get_execute($command);
$devices = $locations[0]->devices;
return $devices;
}

// Deze functie gebruik ik om een enkele zone op te vragen. Wederom een
subset

function honeywell_get_temperature ($room) {
$deviceID = honeywell_get_device($room);
if ($deviceID) {
$command = "/locations";
$locations = honeywell_get_execute($command);
$devices = $locations[0]->devices;
foreach ($devices as $device) {
if ($device->deviceID == $deviceID) {
$value = $device->thermostat->indoorTemperature;
}
}
} else {
$value = false;
}
return $value;
}

// Deze functie gebruik ik om een temperatuur te zetten op een zone. Ik
zet hem altijd oneindig (NextTime is leeg). Je kan hem ook tijdelijk maken.
// Ik werk echter niet met het programma van de thermostaat zelf. Ik
schakel altijd via mijn eigen software.

function honeywell_set_temperature ($room, $value) {
$deviceID = honeywell_get_device($room);
if ($deviceID) {
$status = "Hold";
$postdata = json_encode( array(
"Value"=>$value,"Status"=>$status,"NextTime"=>"" ));
$command = "/devices/" . $deviceID .
"/thermostat/changeableValues/heatSetpoint";
$value = honeywell_put_execute($command, $postdata);
} else {
$value = false;
}
return $value;
}

// Hier is de functie om te authenticeren. Let op dat je de eerste keer
die $userID dus wel nodig hebt.


function honeywell_get_token () {
include 'honeywell_definitions.php';
$url = $honeywell_base_url . "/Session";
$postdata = json_encode( array( "Username"=>$honeywell_username,
"Password"=>$honeywell_password, "ApplicationId"=>$honeywell_app_id ));
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:
application/json'));
$response = curl_exec($curl);
if ($response === false) {
$info = curl_getinfo($curl);
curl_close($curl);
die('error occured during curl exec. Additional info: ' .
var_export($info));
}
curl_close($curl);
$decoded = json_decode($response);
if (isset($decoded->response->status) && $decoded->response->status
== 'ERROR') {
die('error occured: ' . $decoded->response->errormessage);
}
// $userID = $decoded->userInfo->userID;
// echo $userID . "'n";
$sessionID = $decoded->sessionId;
return $sessionID;
}

//Deze functie voert de HTTP get uit voor het opvragen van informatie

function honeywell_get_execute($command) {
include 'honeywell_definitions.php';
$sessionID = honeywell_get_token();
$url = $honeywell_base_url . $command . "?userId=" .
$honeywell_user_id . "&allData=True";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('sessionId: ' .
$sessionID, 'Content-Type: application/json' ));
$response = curl_exec($curl);
if ($response === false) {
$info = curl_getinfo($curl);
curl_close($curl);
die('error occured during curl exec. Additioanl info: ' .
var_export($info));
}
curl_close($curl);
$decoded = json_decode($response);
if (isset($decoded->response->status) && $decoded->response->status
== 'ERROR') {
die('error occured: ' . $decoded->response->errormessage);
}
return $decoded;
}

//Deze functie wordt gebruikt voor de HTTP Put om de temperaturen aan te
passen.

function honeywell_set_temperature ($room, $value) {
  include 'definitions.php';
  $deviceID = honeywell_get_device($room);

  if ($deviceID) {
    $sessionID = honeywell_get_token();
    $status = "Hold";
    $postdata = json_encode( array("Value"=>$value,"Status"=>$status,"NextTime"=>"" ));
    $command = "/devices/" . $deviceID ."/thermostat/changeableValues/heatSetpoint";

    $curl = curl_init($honeywell_base_url . $command);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('sessionId: ' . $sessionID, 'Content-Type: application/json'));

    $response = curl_exec($curl);
    var_dump($response);
   }
   else {
     $value = false;
  }
  return $value;
}

 

/