AB der Fritzbox über WF schalten

Die Ausführung so OHNE Anmeldung funktioniert natürlich nicht. Du mußt dich natürlich vorher mit dem Passwort anmelden. Siehe anderer Thread

so in etwa ?

<?
$password = "xxxxxxxx";
$response = http_post_fields("http://192.168.143.10/cgi-bin/webcm", array('login:command/password' => $password));
http_post_fields("http://192.168.143.10/cgi-bin/webcm", array('tam:settings/TAM0/Active' => '1'));
?>

statt der xxxxxxx ist natürlich mein Kennwort drin.

Mirco

Jep … aber nix passiert? AB ist jetzt also aus und läßt sich nicht einschalten? Ich habs selber noch nicht ausprobiert, aber vom Prinzip her sollte das so in etwas klappen … hmm … ich muss mal schauen ob ich die Tage mal ein wenig Zeit zum Testen finde.

Passieren tut nix. Hilfestellung wäre super und wenn Du eine Lösung findest wäre das noch besser.

Mirco

Also bei mir funktioniert es einwandfrei … allerdings erst, wenn ich die IP gegen fritz.box austausche und ein sleep einbaue, also:

   $password = "xxxxxx";
   $response = http_post_fields("http://fritz.box/cgi-bin/webcm", array('login:command/password' => $password));
   //echo $response;

   IPS_sleep(1000);
	http_post_fields("http://fritz.box/cgi-bin/webcm", array('tam:settings/TAM0/Active' => '0'));

Wenn das auch nicht geht, verwendet die 7270 eine andere Syntax bei der Übergabe. Du müßtest gucken, welche Formulare in die Seite der FW eingebettet sind. Das geht unter anderem mit nem Firefox Plugin, welches „Link and Forminfo“ heißt.

Bei mir klappt es leider nicht.
Meinst Du das hier?

Ja genau und da dann auf Forms. Da müssten dann die passenden Einträge zu finden sein.

Du gehst auf die Seite (Merkmale), auf der der AB eingerichtet werden kann bzw. der Haken für aktiv gesetzt wird und da dann die Info aufrufen!

Gruß
Jens

Hoffe das hilft.

Das 2. Bild ist unwichtig … du hast im 1. Bild noch keine Auswahl getroffen!
Klick mal uiPostForm an, dann müßten unten die benötigten Infos kommen.

Im IP Phone Forum gibt es doch eine fertige Class für die 7270.(Anrufbeantworter)

Das wird so nicht gehen da die SID verarbeitet werden muss.

Für die Class wird curl benötigt.

Es kommt folgendes dabei raus.

Tja … dann kann ich dir nicht weiter helfen.
Laut den Bildern muss das so passen wie ich gepostet habe. Das geht auch ohne die Class und ohne Curl. Bei mir auf der 7170 läuft es auch einwandfrei und mir ist nicht bekannt, das sich das Setzen der Zustände bei einer 7270 geändert hat … :confused:

Hi,

ich habs noch nicht versucht (warte noch darauf, dass es jemand mit der 7270 hin bekommt), aber wenn ich mir den Quellcode der Webeite anschaue, dann kann ich nicht glauben, dass es mit dem einen Befehl getan ist.

Das Loginformular übergibt Daten an ein unsichtbares Formular per Javascript.

function uiDoSave() {
jslCopyValue("uiPostPassword","uiViewPassword");
jslSetValue("uiPostLoginDone","1");
document.uiPostForm.submit();
}

Probier doch mal, ob es klappt, wenn Du nicht nur das Passwort sondern auch 1 für uiPostLoginDone übergibst. Der Wert im originalen Formular ist nämlich 0.


$password = "xxxxxx";
   $response = http_post_fields("http://fritz.box/cgi-bin/webcm", array('login:command/password' => $password, 'var:loginDone'=> '1'));
   //echo $response;

   IPS_sleep(1000);
    http_post_fields("http://fritz.box/cgi-bin/webcm", array('tam:settings/TAM0/Active' => '0'));  

Sollte das auch nicht klappen, dann sollten einfach alle Werte des versteckten Formulars mit übergeben werden. Hier das Formular:

<form method="POST" action="../cgi-bin/webcm" target="_self" id="uiPostForm" name="uiPostForm">
<input type="hidden" name="getpage" value="../html/de/menus/menu2.html" id="uiPostGetPage">
<input type="hidden" name="errorpage" value="../html/de/menus/menu2.html" id="uiPostErrPage">
<input type="hidden" name="var:pagename" value="home" id="uiPostPageName">
<input type="hidden" name="var:menu" value="home" id="uiPostMenu">
<input type="hidden" name="var:pagemaster" value="" id="uiPostPageMaster">
<input type="hidden" id="uiPostVarName" name="">

<!-- END Refresh control -->
<!-- Submit data -->
<input type="hidden" name="login:command/password" value="" id="uiPostPassword">
<input type="hidden" id="uiPostLoginDone" name="var:loginDone" value="0">

<input type="hidden" name="var:activtype" value="pppoe" id="uiPostActivType">
<input type="hidden" name="var:tabInetstat" value="0" id="uiPostTab">

<input type="hidden" name="sip:settings/sip0/activated" value="0" id="uiPostActivsip0" disabled>
<input type="hidden" name="sip:settings/sip0/displayname" value="" id="uiPostDisplaysip0" disabled>

<input type="hidden" name="sip:settings/sip1/activated" value="0" id="uiPostActivsip1" disabled>
<input type="hidden" name="sip:settings/sip1/displayname" value="" id="uiPostDisplaysip1" disabled>


<input type="hidden" name="sip:status/sip0/connect" value="0" id="uiPostConnectsip0" disabled>

<input type="hidden" name="sip:status/sip1/connect" value="0" id="uiPostConnectsip1" disabled>

<input type="hidden" name="connection0:pppoe:status/voipconnect " value="5" id="uiPostVoipConnect" disabled>
<input type="hidden" name="ctlusb:settings/unplug" value="1" id="uiPostUnplug" disabled>
<input type="hidden" name="var:weckernr" value="" id="uiPostWeckernr">
<input type="hidden" name="updatecheck:settings/start" value="" id="uiPostUpdateStart" disabled>
</form>

Also alles was unter name="" steht mit value="" verknüpfen und rausschicken

(an uiPostLoginDone denken, hier stimmt der Wert ja nicht, also muss für
var:loginDone nicht 0, sondern 1 gesendet werden.

Ich wünsche einen schönen Tag.

Christoph.

Versuch mal das hier:


   $password = "xxxxxx";
   $response = http_post_fields("http://fritz.box/cgi-bin/webcm", array('login:command/password' => $password));
   //echo $response;

   IPS_sleep(1000);
    http_post_fields("http://fritz.box/cgi-bin/webcm", array('getpage' => '../html/de/menus/menu2.html', 'tam:settings/TAM0/Active' => '0'));  


Ich hatte ja schon mal geschrieben, dass die SID benötigt wird.

So geht es, prof of concept.

Die beiden 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.

Viel Spass :slight_smile:

<?
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);


?>

dateien.rar (507 KB)

Habe das prof of erweitert.

Bitte testen wer es es braucht.

Tja Rainer…was soll ich sagen ?

Einfach super…wie immer. Danke danke danke :smiley:

Grüße Mirco

Hallo Rainer,
das mit dem Anrufbeantworter ist ja super.
Kannst Du mir verraten was ich ändern muss, damit ich bei der 7270 das Wlan ein und ausschalten kann.
Danke
Luggi

ungetestet, sollte aber funktionieren. ein und aus entsprechend anlegen.

$wlan = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'wlan:settings/ap_enabled' => $ein));

man, bist du schnell. Werde es mal testen. Danke
Luggi