Hallo,
ich benutze ein Code mit dem ich mir über PHP den Zugang zu meiner Fritzbox verschaffe, alle Aktoren die Angeschlossen sind Anzeige lasse ( inkl. Temperatur ) und dan auf den Bildschirm ausgebe:
[code=php]<?php
//Anmeldedaten und SessionID Funktion einbinden
//Anmelde- und Hostdaten
$username=""; //eintragen wenn gesetzt
$password="troetmich21832832h"; //anpassen!
$loginurl="http://fritz.box/login_sid.lua"; //Host bei Bedarf anpassen
$ahaurl="http://fritz.box/webservices/homeautoswitch.lua"; //Host bei Bedarf anpassen
//Login-Funktion
function get_sid ($loginurl,$username,$password) {
//Sende initialen Request an Fritzbox
$http_response = @file_get_contents($loginurl);
//Parse Antwort XML
$xml = @simplexml_load_string($http_response);
//Antwort prüfen, ob ein xml-Object mit einem Challenge-Tag existiert
if (!$xml !$xml->Challenge ) {
die ("Error: Unerwartete Antwort oder Kommunikationsfehler!\n");
}
//extrahiere Challange und SID Tags aus XML
$challenge=(string)$xml->Challenge;
$sid=(string)$xml->SID;
if (preg_match("/^[0]+$/",$sid) && $challenge ) {
$sid="";
//erstelle Klartext Password String
$pass=$challenge."-".$password;
//UTF-16LE encoding des Passwords ist erforderlich
$pass=mb_convert_encoding($pass, "UTF-16LE");
//abschliessend ein md5hash über alles
$md5 = md5($pass);
//Erstelle Response String
$challenge_response = $challenge."-".$md5;
//Sende Response zur Fritzbox
$url=$loginurl."?username=".$username."&response=".$challenge_response;
$http_response = file_get_contents($url);
//parse Antwort XML
$xml = simplexml_load_string($http_response);
$sid=(string)$xml->SID;
if ((strlen($sid)>0) && !preg_match("/^[0]+$/",$sid)) {
//is not null, bingo!
return $sid;
}
}else {
//nutze existierende SID wenn $sid ein hex string ist
if ((strlen($sid)>0) && (preg_match("/^[0-9a-f]+$/",$sid))) return $sid;
}
return null;
}
//Login in Fritzbox und SID ermitteln
$sid=get_sid($loginurl,$username,$password);
if (!$sid ) {
die ("Anmeldefehler, keine Session-ID erhalten!\n");
}
//SmarthomeURL mit SID Parameter ergänzen
$query_url=$ahaurl.'?sid='.$sid;
//Abfrage aller eingetragenen Geräte mit getdevicelistinfo Kommando
$xmlstring=chop(@file_get_contents($query_url."&switchcmd=getdevicelistinfos"));
$xml = @simplexml_load_string($xmlstring);
//Antwort prüfen, ob ein xml-Object mit einem Device-Tag existiert
if (!$xml !$xml->device ) {
die ("Error: Unerwartete Antwort oder Komunikationsfehler bei cmd=getdevicelistinfos");
}
//Schleife über alle gelisteten Geräte
foreach ($xml->device as $device) {
$attributes=$device->attributes();
$ain=(string)$attributes['identifier']; //Lese Geräte AIN
$name=(string)$device->name; //lese Gerätename
$txt="AIN $ain ($name) ";
//Check Funktionsbitmask
$mask=(integer)$attributes['functionbitmask'];
$has_temperatur=($mask & (1<<8))>0;
$has_switch=($mask & (1<<9))>0;
//Behandle Funktionen
if ($has_temperatur) {
//bit8=Temperatur Sensor
$temperatur=((integer)$device->temperature->celsius)/10;
$offset=((integer)$device->temperature->offset)/10;
$temperatur=$temperatur+$offset;
$txt.=sprintf (" Temperatur:(Temp:%02.1fC, Offset:%02.1f) ;",$temperatur,$offset);
}
if ($has_switch) {
//bit9=schaltbare Steckdose
$status=(string)$device->switch->state;
$status=($status=="1");
$txt.= " Steckdose(Status:".($status?"On":"Off")."); ";
}
echo "$Name $temperatur <br>";
}
?>
[/php]
hat jemand sowas zufällig als Python Code rum zu liegen?
würde die Daten gerne mit Python weiter verarbeiten und mein aktueller weg die Daten mit PHP zu speichern und dann wieder in Python zu öffnen ist nicht gerade sehr SDKarten schonend.