Ich hatte ja schon mal geschrieben, dass die SID benötigt wird.
Funktioniert nur mit Firmware ab xx.04.74 oder neuer. Ältere unterstützen keine Session !!
Diese gilt für alle Scripts !!!
So geht es, prof of concept.
Die benötigten Dateien im Anhang nach ext kopieren und Dienst neu starten.
Passwort eintragen.
Variable für Webfront anlegen mit Profil ~Switch. Variable dem Script zuweisen. Fertig.
Hier der Link. für SID.
Bitte kurzes Feedback.
Bei Problemen mit den Scripts, bitte hier posten. http://www.ip-symcon.de/forum/f52/probleme-scripts-fritzbox-7270-a-8269/
Script für Anruferliste ohne extension!
Viel Spass
<?
if ($IPS_SENDER == "WebFront")
{
SetValue(32754 /*[Anrufbeantworter]*/, $IPS_VALUE);
}
$fritzbox_ip = 'fritz.box';
$fritzgui = 'http://fritz.box/cgi-bin/webcm';
$fritzseite = '../html/de/menus/menu2.html';
$password = 'xxxxxx';
$ein = '1';
$aus = '0';
$ch = curl_init('http://' . $fritzbox_ip . '/cgi-bin/webcm?getpage=../html/login_sid.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);
curl_close($ch);
$session_status_simplexml = simplexml_load_string($login);
if ($session_status_simplexml->iswriteaccess == 1)
{
$SID = $session_status_simplexml->SID;
}
else
{
$challenge = $session_status_simplexml->Challenge;
$response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $password, "UCS-2LE", "UTF-8"));
$login = array('getpage' => $fritzseite, 'login:command/response' => $response);
$sendlogin = http_post_fields($fritzgui, $login);
preg_match('@<input type="hidden" name="sid" value="([A-Fa-f0-9]{16})" id="uiPostSid">@i', $sendlogin, $matches);
if (isset($matches[1]) && $matches[1] != '0000000000000000')
{
$SID = $matches[1];
}
}
if ($IPS_VALUE)
{
$settam = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'tam:settings/TAM0/Active' => $ein));
}
else
{
$settam = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'tam:settings/TAM0/Active' => $aus));
}
$logout = array('getpage' => $fritzseite, 'sid' => $SID, 'security:command/logout' => 'logout');
$sendlogout = http_post_fields($fritzgui, $logout);
?>
Script nur mit cURL Abfrage als Beispiel!
<?
if ($IPS_SENDER == "WebFront")
{
$fritzbox_ip = 'fritz.box';
$fritzgui = 'http://fritz.box/cgi-bin/webcm';
$fritzseite = '../html/de/menus/menu2.html';
$password = 'xxxxx';
$ein = '1';
$aus = '0';
$ch = curl_init('http://' . $fritzbox_ip . '/cgi-bin/webcm?getpage=../html/login_sid.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);
$session_status_simplexml = simplexml_load_string($login);
if ($session_status_simplexml->iswriteaccess == 1)
{
$SID = $session_status_simplexml->SID;
}
else
{
$challenge = $session_status_simplexml->Challenge;
$response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $password, "UCS-2LE", "UTF-8"));
curl_setopt($ch, CURLOPT_POSTFIELDS, "login:command/response={$response}&getpage=../html/de/menus/menu2.html");
preg_match('/name="sid" value="([0-9a-f]*)"/', curl_exec($ch), $matches);
if (isset($matches[1]) && $matches[1] != '0000000000000000')
{
$SID = $matches[1];
}
else
{
echo "Fehler: Login fehlgeschlagen";
return;
}
}
if($IPS_VALUE)
{
curl_setopt($ch, CURLOPT_POSTFIELDS, "sid={$SID}&tam:settings/TAM1/Active={$ein}");
curl_exec($ch);
}
else
{
curl_setopt($ch, CURLOPT_POSTFIELDS, "sid={$SID}&tam:settings/TAM1/Active={$aus}");
curl_exec($ch);
}
curl_close($ch);
SetValue($IPS_VARIABLE, $IPS_VALUE);
}
?>
dateien.rar (684 KB)
dateienV2.2.rar (726 KB)