Hi paresy,
ich kann es ja mal versuchen, vielleicht geschehen ja noch Wunder und die API ist kein Staatsgeheimnis
Verstehe auch, da so ein „unbedeutendes Gerät“ nicht auf eurer Roadmap steht - scheint im IPS Umfeld wohl auch nicht groß im Einsatz zu sein. Daher auch meine Eingangsfrage, wer das sonst noch verwendet. Aber vielleicht kommt da ja noch was.
Ich bin jetzt auch nicht darauf angewiesen. Habe es ja nur zum Testen mit SMA gekauft, was schon etwas „hakelig“ in der Einbindung war.
ohne Hilfe von Edimax - aber mit Google - bin ja schon mal so weit gekommen, dass ich eine Antwort vom Gerät bekomme:
<?php
$url = "http://192.168.10.132:10000/smartplug.cgi";
$xml = '<?xml version="1.0" encoding="UTF8"?><SMARTPLUG id="edimax"><CMD id="get"><Device.System.Power.State></Device.System.Power.State></CMD></SMARTPLUG>';
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch,CURLOPT_TIMEOUT, 30);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch,CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HEADER, 1);
$first_response = curl_exec($ch);
$info = curl_getinfo($ch);
var_dump($first_response);
die 1. Antwort darauf ist dann:
"HTTP/1.0 401 Unauthorized
WWW-Authenticate: Digest realm="myPLUG_XX",nonce="xxxxxxxxxxxxxxxxxxxxxxxxxxxx",qop="auth"
Content-Length: 0
"
wenn ich darauf antworte
<?php
preg_match('/WWW-Authenticate: Digest (.*)/', $first_response, $matches);
$username = 'admin';
$password = 'xxxxxxxxxxxx';
$xml = '<?xml version="1.0" encoding="UTF8"?><SMARTPLUG id="edimax"><CMD id="get"><Device.System.Power.State></Device.System.Power.State></CMD></SMARTPLUG>';
if(!empty($matches))
{
$auth_header = $matches[1];
$auth_header_array = explode(',', $auth_header);
$parsed = array();
foreach ($auth_header_array as $pair)
{
$vals = explode('=', $pair);
$parsed[trim($vals[0])] = trim($vals[1], '" ');
}
$response_realm = (isset($parsed['realm'])) ? $parsed['realm'] : "";
$response_nonce = (isset($parsed['nonce'])) ? $parsed['nonce'] : "";
$response_qop = (isset($parsed['qop'])) ? $parsed['qop'] : "";
$authenticate1 = md5($username.":".$response_realm.":".$password);
$authenticate2 = md5("POST:".$url);
$authenticate_response = md5($authenticate1.":".$response_nonce.":".$authenticate2);
$request = sprintf('Authorization: Digest username="%s", realm="%s", nonce="%s", uri="%s", response="%s"',
$username, $response_realm, $response_nonce, $url, $authenticate_response);
$request_header = array($request);
$request_header[] = 'Content-Type:application/xml';
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch,CURLOPT_TIMEOUT, 30);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch,CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, "xmlRequest=".$xml);
curl_setopt($ch, CURLOPT_HTTPHEADER, $request_header);
$result['response'] = curl_exec($ch);
$result['info'] = curl_getinfo ($ch);
$result['info']['errno'] = curl_errno($ch);
$result['info']['errmsg'] = curl_error($ch);
var_dump($result);
}
bekomme ich das:
array(2) {
["response"]=>
string(0) ""
["info"]=>
array(39) {
["url"]=>
string(41) "http://192.168.10.132:10000/smartplug.cgi"
["content_type"]=>
NULL
["http_code"]=>
int(401)
["header_size"]=>
int(144)
["request_size"]=>
int(496)
["filetime"]=>
int(-1)
["ssl_verify_result"]=>
int(0)
["redirect_count"]=>
int(0)
["total_time"]=>
float(0,128037)
["namelookup_time"]=>
float(9,5E-5)
["connect_time"]=>
float(0,002819)
["pretransfer_time"]=>
float(0,00303)
["size_upload"]=>
float(158)
["size_download"]=>
float(0)
["speed_download"]=>
float(0)
["speed_upload"]=>
float(1234)
["download_content_length"]=>
float(0)
["upload_content_length"]=>
float(158)
["starttransfer_time"]=>
float(0,127969)
["redirect_time"]=>
float(0)
["redirect_url"]=>
string(0) ""
["primary_ip"]=>
string(14) "192.168.10.132"
["certinfo"]=>
array(0) {
}
["primary_port"]=>
int(10000)
["local_ip"]=>
string(13) "192.168.10.27"
["local_port"]=>
int(63161)
["http_version"]=>
int(1)
["protocol"]=>
int(1)
["ssl_verifyresult"]=>
int(0)
["scheme"]=>
string(4) "HTTP"
["appconnect_time_us"]=>
int(0)
["connect_time_us"]=>
int(2819)
["namelookup_time_us"]=>
int(95)
["pretransfer_time_us"]=>
int(3030)
["redirect_time_us"]=>
int(0)
["starttransfer_time_us"]=>
int(127969)
["total_time_us"]=>
int(128037)
["errno"]=>
int(0)
["errmsg"]=>
string(0) ""
}
}
hier scheint wohl in der cURL Konfiguration noch was nicht zu passen. Da fehlen mir aber die Kenntnisse (oder auch die API)
Vielleicht kann mir da jemand weiterhelfen.
Danke
und wie schon geschrieben, die Zeile sind auch nur Ergebnis meiner Suche im Internet.
Gruß
Rainer