vielleicht kannst du aus dem Code Geschnipsel etwas basteln - stammt aus dem OSRAM Modul vor Umstellung auf OAuth2
const GATEWAY_SERIAL_LENGTH = 11;
const CLOUD_REQUEST_INTERVALL = 60; //seconds
const CLOUD_SESSION_TIMEOUT = 840; //Lightify session time-out 14 min
const PROTOCOL_VERSION = 1;
const HEADER_CONTENT_TYPE = "Content-Type: application/json";
const HEADER_AUTHORIZATION = "authorization: ";
const RESSOURCE_DEVICE_LIST = "/devices";
const RESSOURCE_GROUP_LIST = "/groups";
const RESOURCE_SESSION = "/session";
const LIGHTIFY_EUROPE = "https://eu.lightify-api.org/lightify/services";
const LIGHTIFY_USA = "https://us.lightify-api.org/lightify/services";
protected function cloudGET($url) {
return $this->cloudRequest("GET", $url);
}
protected function cloudPOST($url, $args) {
return $this->cloudRequest("POST", $url, $args);
}
protected function cloudLogin($userName, $password, $serialNumber) {
if (file_exists($this->lightifyCookie) && !empty($this->cache_expires) && $this->cache_expires > time()) {
return true;
}
$args = json_encode(array(
'username' => $userName,
'password' => $password,
'serialNumber' => $serialNumber)
);
$result = $this->cloudPOST(self::RESOURCE_SESSION, $args);
if (is_object($result)) {
$this->userId = $result->userId;
$this->securityToken = $result->securityToken;
$this->cache_expires = time()+self::CLOUD_SESSION_TIMEOUT; //Lightify session time-out 14 min
$this->saveCache();
return true;
}
return false;
}
private function cloudRequest($method, $url, $args = null) {
$headers = array(self::HEADER_CONTENT_TYPE);
$client = curl_init();
if ($client !== false) {
if ($url[0] == "/")
$url = self::LIGHTIFY_EUROPE.$url;
if (isset($this->userId)) {
$headers[] = self::HEADER_AUTHORIZATION.$this->securityToken;
}
if (is_array($args)) {
$data = array();
foreach ($args as $k => $v)
$data[] = "$k=".urlencode($v);
$data = implode("&", $data);
} elseif (is_string($args)) {
$data = $args;
}
curl_setopt($client, CURLOPT_URL, $url);
curl_setopt($client, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($client, CURLOPT_RETURNTRANSFER, true);
curl_setopt($client, CURLOPT_HEADER, false);
curl_setopt($client, CURLOPT_COOKIEJAR, $this->lightifyCookie);
curl_setopt($client, CURLOPT_COOKIEFILE, $this->lightifyCookie);
if ($method == 'POST') {
if (!isset($data)) {
$error = "You need to specify \$data when sending a POST.";
$this->SendDebug("<GATEWAY|CLOUDREQUEST:ERROR>", $error, 0);
IPS_LogMessage("SymconOSR", "<GATEWAY|CLOUDREQUEST:ERROR> ".$error);
return false;
}
curl_setopt($client, CURLOPT_POST, true);
curl_setopt($client, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($client, CURLOPT_HTTPHEADER, $headers);
curl_setopt($client, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($client, CURLOPT_TIMEOUT, 5);
curl_setopt($client, CURLOPT_SSL_VERIFYPEER, true); //for security this should always be set to true.
curl_setopt($client, CURLOPT_SSL_VERIFYHOST, 2); //for security this should always be set to 2.
curl_setopt($client, CURLOPT_SSLVERSION, 1);
$response = curl_exec($client);
$info = curl_getinfo($client);
if ($info['http_code'] == 401 || (!$response && curl_errno($client) != 0)) {
$error = "HTTP request returned an error: ".curl_error($client);
$this->SendDebug("<GATEWAY|CLOUDREQUEST:ERROR>", $error, 0);
IPS_LogMessage("SymconOSR", "<GATEWAY|CLOUDREQUEST:ERROR> ".$error);
return false;
}
$jsonResult = json_decode($response);
curl_close($client);
if (array_key_exists("errorCode", $jsonResult)) {
$error = "HTTP ".$info['http_code']." ".$jsonResult->errorCode.":".$jsonResult->errorMessage;
$this->SendDebug("<GATEWAY|CLOUDREQUEST:ERROR>", $error, 0);
IPS_LogMessage("SymconOSR", "<GATEWAY|CLOUDREQUEST:ERROR> ".$error);
return false;
}
if (!is_object($jsonResult) && ($method == "GET" || $url == self::RESOURCE_SESSION)) {
if (empty($response)) {
$error = "Received empty response from HTTP request $url.";
$this->SendDebug("<GATEWAY|CLOUDREQUEST:ERROR>", $error, 0);
IPS_LogMessage("SymconOSR", "<GATEWAY|CLOUDREQUEST:ERROR> ".$error);
return false;
}
}
if ($info['http_code'] == 400) {
if (!is_object($jsonResult)) {
$error = "HTTP 400 response: ".str_replace(array("
","\r"), '', $response);
$this->SendDebug("<GATEWAY|CLOUDREQUEST:ERROR>", $error, 0);
IPS_LogMessage("SymconOSR", "<GATEWAY|CLOUDREQUEST:ERROR> ".$error);
return false;
}
}
if ($info['download_content_length'] == 0) {
return $info['http_code'] == 200;
}
if ($this->debug % 2) {
$this->SendDebug("<GATEWAY|CLOUDREQUEST:RESULT>", $response, 0);
}
if ($this->message) {
IPS_LogMessage("SymconOSR", "<GATEWAY|CLOUDREQUEST:RESULT> ".$response);
}
return $jsonResult;
}
return false;
}