Moin,
Feuchtigkeitssensor ist fertig. Hier die Klasse und das Script nach „unser“ Lesart.
Klasse: php_gardena_senor_class.ips.php
<?php
// -----------------------------------------------------------------------------
class gardena_sensor
{
var $user_id, $token, $locations;
var $devices = array();
const LOGINURL = "https://sg-api.dss.husqvarnagroup.net/sg-1/sessions";
const LOCATIONSURL = "https://sg-api.dss.husqvarnagroup.net/sg-1/locations/?user_id=";
const DEVICESURL = "https://sg-api.dss.husqvarnagroup.net/sg-1/devices?locationId=";
const CMDURL = "https://sg-api.dss.husqvarnagroup.net/sg-1/devices/|DEVICEID|/abilities/sensor/command?locationId=";
//-----------------------------------------------------------------------------
// Sensor
const CATEGORY_DEVICE_INFO = "device_info";
const CATEGORY_SENSOR = "sensor";
// Sensor Batterie
const CATEGORY_BATTERY = "battery";
// Sensor Radio - Funksignal
const CATEGORY_RADIO = "radio";
// Sensor Temperatur
const CATEGORY_AMBIENT_TEMPERATURE = "ambient_temperature";
// Sensor Boden_Temperatur
const CATEGORY_SOIL_TEMPERATURE = "soil_temperature";
// Sensor Luftfeuchtigkeit
const CATEGORY_HUMIDITY= "humidity";
// Sensor Helligkeit
const CATEGORY_LIGHT= "light";
//-----------------------------------------------------------------------------
function gardena_sensor($user, $pw)
{
$data = array(
"sessions" => array(
"email" => "$user", "password" => "$pw")
);
$data_string = json_encode($data);
$ch = curl_init(self::LOGINURL);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type:application/json',
'Content-Length: ' . strlen($data_string))
);
$result = curl_exec($ch);
$data = json_decode($result);
$this -> token = $data -> sessions -> token;
$this -> user_id = $data -> sessions -> user_id;
$this -> loadLocations();
$this -> loadDevices();
}
// -----------------------------------------------------------------------------
function loadLocations()
{
$url = self::LOCATIONSURL . $this -> user_id;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type:application/json',
'X-Session:' . $this -> token)
);
$this -> locations = json_decode(curl_exec($ch)) -> locations;
}
// -----------------------------------------------------------------------------
function loadDevices()
{
foreach($this->locations as $location)
{
$url = self::DEVICESURL . $location -> id;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type:application/json',
'X-Session:' . $this -> token)
);
$this -> devices[$location -> id] = json_decode(curl_exec($ch)) -> devices;
}
}
// -----------------------------------------------------------------------------
/*
* Finds the first occurrence of a certain category type.
* Example: You want to find your only mower, having one or more gardens.
* @param constant $category
*/
function getFirstDeviceOfCategory($category)
{
foreach($this -> devices as $locationId => $devices)
{
foreach($devices as $device)
if ($device -> category == $category)
return $device;
}
}
// -----------------------------------------------------------------------------
function getDeviceLocation($device)
{
foreach($this -> locations as $location)
foreach($location -> devices as $d)
if ($d == $device -> id)
return $location;
}
// -----------------------------------------------------------------------------
function getInfo($device, $category_name, $proberty_name)
{
foreach ($device -> abilities as $ability)
if ($ability -> name == $category_name)
foreach($ability -> properties as $property)
if ($property -> name == $proberty_name)
return $property -> value;
}
}
?>
Das Auslese-Script:
<?php
error_reporting(E_ALL);
include("pass.ips.php");
include("php_gardena_sensor_class.ips.php");
$gardena = new gardena_sensor($pw_user_maeher, $pw_pawo_maeher);
$mower = $gardena -> getFirstDeviceOfCategory($gardena::CATEGORY_SENSOR);
$category_name = "device_info";
$id_device_manufaktur = 35400 /*[Home\Außenbereich\Bewässerung\Feuchtigkeitssensor\Hersteller]*/;
$id_device_product = 19718 /*[Home\Außenbereich\Bewässerung\Feuchtigkeitssensor\Gerät]*/;
$id_device_serial_number = 50877 /*[Home\Außenbereich\Bewässerung\Feuchtigkeitssensor\Seriennummer]*/;
$id_device_version = 42529 /*[Home\Außenbereich\Bewässerung\Feuchtigkeitssensor\Version]*/;
$id_device_category = 50634 /*[Home\Außenbereich\Bewässerung\Feuchtigkeitssensor\Kategorie]*/;
$id_device_last_time_online = 27007 /*[Home\Außenbereich\Bewässerung\Feuchtigkeitssensor\Letztes Mal online]*/;
$id_device_sgtin = 36826 /*[Home\Außenbereich\Bewässerung\Feuchtigkeitssensor\sgtin]*/;
$proberty_name = "manufacturer";
$status = $gardena -> getInfo($mower, $category_name, $proberty_name);
SetValue($id_device_manufaktur, $status);
$proberty_name = "product";
$status = $gardena -> getInfo($mower, $category_name, $proberty_name);
SetValue($id_device_product, $status);
$proberty_name = "serial_number";
$status = $gardena -> getInfo($mower, $category_name, $proberty_name);
SetValue($id_device_serial_number, $status);
$proberty_name = "version";
$status = $gardena -> getInfo($mower, $category_name, $proberty_name);
SetValue($id_device_version, $status);
$proberty_name = "category";
$status = $gardena -> getInfo($mower, $category_name, $proberty_name);
SetValue($id_device_category, $status);
$proberty_name = "last_time_online";
$status = $gardena -> getInfo($mower, $category_name, $proberty_name);
SetValue($id_device_last_time_online, $status);
$proberty_name = "sgtin";
$status = $gardena -> getInfo($mower, $category_name, $proberty_name);
SetValue($id_device_sgtin, $status);
$category_name = "battery";
$id_device_level = 31867 /*[Home\Außenbereich\Bewässerung\Feuchtigkeitssensor\Batterie]*/;
$battery_status = 17648 /*[Home\Außenbereich\Bewässerung\Feuchtigkeitssensor\Status Batterie]*/;
$proberty_name = "level";
$status = $gardena -> getInfo($mower, $category_name, $proberty_name);
SetValue($id_device_level, $status);
$proberty_name = "disposable_battery_status";
$status = $gardena -> getInfo($mower, $category_name, $proberty_name);
SetValue($battery_status, $status);
$category_name = "radio";
$id_device_quality = 43306 /*[Home\Außenbereich\Bewässerung\Feuchtigkeitssensor\Signalstärke]*/;
$connection_status = 26635 /*[Home\Außenbereich\Bewässerung\Feuchtigkeitssensor\Connection Status]*/;
$signal_status = 46304 /*[Home\Außenbereich\Bewässerung\Feuchtigkeitssensor\Empfang]*/;
$proberty_name = "quality";
$status = $gardena -> getInfo($mower, $category_name, $proberty_name);
SetValue($id_device_quality, $status);
$proberty_name = "connection_status";
$status = $gardena -> getInfo($mower, $category_name, $proberty_name);
SetValue($connection_status, $status);
$proberty_name = "state";
$status = $gardena -> getInfo($mower, $category_name, $proberty_name);
SetValue($signal_status, $status);
$category_name = "ambient_temperature";
$temperature = 45209 /*[Home\Außenbereich\Bewässerung\Feuchtigkeitssensor\Außentemperatur]*/;
$frost_warning = 13654 /*[Home\Außenbereich\Bewässerung\Feuchtigkeitssensor\Frostwarnung]*/;
$proberty_name = "temperature";
$status = $gardena -> getInfo($mower, $category_name, $proberty_name);
SetValue($temperature, $status);
$proberty_name = "frost_warning";
$status = $gardena -> getInfo($mower, $category_name, $proberty_name);
SetValue($frost_warning, $status);
$category_name = "soil_temperature";
$boden_durchschschnitts_temperature = 52298 /*[Home\Außenbereich\Bewässerung\Feuchtigkeitssensor\Durchschnittsbodentemperatur]*/;
$proberty_name = "temperature";
$status = $gardena -> getInfo($mower, $category_name, $proberty_name);
SetValue($boden_durchschschnitts_temperature, $status);
$category_name = "humidity";
$humidity = 14252 /*[Home\Außenbereich\Bewässerung\Feuchtigkeitssensor\Bodenfeuchtigkeit]*/;
$proberty_name = "humidity";
$status = $gardena -> getInfo($mower, $category_name, $proberty_name);
SetValue($humidity, $status);
$category_name = "light";
$light = 13327 /*[Home\Außenbereich\Bewässerung\Feuchtigkeitssensor\Helligkeit]*/;
$proberty_name = "light";
$status = $gardena -> getInfo($mower, $category_name, $proberty_name);
SetValue($light, $status);
?>
Sieht dann so aus:
Gruß
Jimmy