Fritzbox 7270/Wlan Repeater Scripts

Hallo Uwe,

das Script ist zwar nicht von mir aber hast Du die Box mal neu gestartet.

Ja habe ich.

das Script ist zwar nicht von mir

Ups, wer kann denn sonst noch sowas? :wink:

Der Code stammt von paresy, zum Teil zumindest.

Wenn es nicht geht Debug halt mal, wo es klemmt.

Hallo,

Ich mache zwar nichts mit IPS, du hast wohl ein SessionID Problem,
sowie hier: Outlook Macro - hilfe für neue FB Firmware
17.08.2011 Änderung: Session ID + Integration in die eigenen Programme
auch bei der 7390 mit der Firmware .05.05 taucht der Fehler auf,
somit müsstet ihr euer Script zum Lesen der SessionID Ändern,
denn so wie es jetzt ist scheint es ja nicht mehr zu gehen.

Gruß Erwin

Ich hab zwar die Kindersicherung nicht am laufen, dafür ca 20 andere Scripts mit SeassonID und diese laufen alle einwandfrei auf der 7270.

Hallo,

Welche Box V1, V2 oder V3, denn mir ist es bei der FB 7270 74.05.05
mitgeteilt worden, aber mit der FB 7270 54.05.05 scheint es noch kein Problem zu geben oder?!

Gruß Erwin

Hallo Erwin,

bei mir läuft eine V2 54.05.05

Ich kann mir nur schwer vorstellen, das es an der SessionID liegen soll, da die Abfrage für alle Boxen gleich ist.
Was ich schon hatte, sind geänderte Namen und nicht mehr passende Zeilen, weil Code eingefügt wurde.

Hallo,

Das Script hier:

{
   $challenge = $session_status_simplexml->Challenge;
    $response = $challenge . '-' . md5(iconv("UTF-8", "UCS-2LE", $challenge . '-' . $password));
   $postdata = http_build_query(array('getpage' => '../html/de/menus/menu2.html', 'login:command/response' => $response));

    $opts = array('http' =>
                                array(
                                    'method' => 'POST',
                                 'header' => 'Content-Length: '.strlen($postdata)."
".
                                                'Content-Type: application/x-www-form-urlencoded',
                                    'content'=> $postdata
            )
    );

wird dir eine Leere Seite zurück geben, somit kannst du dann auch keine SID mehr daraus auslesen,
wenn du aber das hier:

{
   $challenge = $session_status_simplexml->Challenge;
    $response = $challenge . '-' . md5(iconv("UTF-8", "UCS-2LE", $challenge . '-' . $password));
   $postdata = http_build_query(array('getpage' => '../html/login_sid.xml', 'login:command/response' => $response));

    $opts = array('http' =>
                                array(
                                    'method' => 'POST',
                                 'header' => 'Content-Length: '.strlen($postdata)."
".
                                                'Content-Type: application/x-www-form-urlencoded',
                                    'content'=> $postdata
            )
    );

Änderst dann bekommst du die login_sid.xml

<SessionInfo>
<iswriteaccess>1</iswriteaccess>
<SID>13e41555bcc92250</SID>
<Challenge>129b3320</Challenge>
</SessionInfo>

zurück, und daraus kannst du dann die SID Auslesen, das wurde von mir
getestet und Funktioniert auch mir der FB 7390 84.04.88

Gruß Erwin

So lese ich auch keine Seiten aus. Die Scripts, welche von mir sind werden so ausgelesen.

   ................................ 
$ch = curl_init('http://' . $fritzbox_ip . '/cgi-bin/webcm?getpage=../html/login_sid.xml');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $login = curl_exec($ch);
    //print_r($login);
    curl_close($ch);
    $session_status_simplexml = simplexml_load_string($login);
    //print_r($session_status_simplexml);

    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"));
       //print_r($response);
       $login = array('getpage' => $fritzseite, 'login:command/response' => $response);
        //print_r($login);
       $sendlogin = http_post_fields($fritzgui, $login);
       //print_r($sendlogin);
       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];
          //print_r($SID);
       }
       else
       {
          echo "Fehler: Login fehlgeschlagen";
          return;
        }
    }

Hallo RWN

Ich habe nun seit Stunden versucht Dein Script bei mir einzubinden. Nach ein paar erfolglosen Versuchen, läuft es nun. Ist jedoch ein wenig instabil und relativ langsam, oft endet es sogar in einem TimeOut.
Was könnte das sein?

Mein Script sieht wie folgt aus:

<?
if ($IPS_SENDER == "WebFront")
{
    $fritzbox_ip = '192.168.1.1';
    $fritzgui    = 'http://192.168.1.1/cgi-bin/webcm';
    $fritzseite  = '../html/de/menus/menu2.html';
    $password    = '*****';
    $ein         = '1';
    $aus         = '0';
    $nummerhandy = '079*******';
    $nummerbuero = '062*******';

    $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];
       }
       else
       {
          echo "Fehler: Login fehlgeschlagen";
          return;
        }
    }

    switch($IPS_VALUE)
    {

       case 0:
            http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'var:menu' => 'fon', 'var:pagename' => 'rulall1', 'telcfg:settings/Diversity0/Active' => $aus));
       break;
       case 1:
            http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'var:menu' => 'fon', 'var:pagename' => 'rulall1', 'telcfg:settings/Diversity0/Active' => $ein));
       break;
       case 2: // Wert der Integervariable
          SetValue(38219 /*[Kommunikation\Rufumleitung\Rufumleitung\Wert Umleitung]*/, 2);
          $handy = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'var:menu' => 'fon', 'var:pagename' => 'rulall1', 'telcfg:settings/Diversity0/Destination' => $nummerhandy));
       break;
       case 3: // Wert der Integervariable
          SetValue(38219 /*[Kommunikation\Rufumleitung\Rufumleitung\Wert Umleitung]*/, 3);
          $buero = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'var:menu' => 'fon', 'var:pagename' => 'rulall1', 'telcfg:settings/Diversity0/Destination' => $nummerbuero));
       break;
    }

    $checksetting = array('getpage' => $fritzseite, 'var:menu' => 'fon', 'var:pagename' => 'rulall');
    $sendcheck = http_post_fields($fritzgui, $checksetting);
    preg_match('@name="telcfg:settings/CallerIDActions0/Active" value="([10])"@i', $sendcheck, $matches);
    if (isset($matches[1]) && $matches[1] == 1)
    {
        SetValue(31214 /*[Kommunikation\Rufumleitung\Rufumleitung\Anrufumleitung]*/ , 1);
    }
    else
    {
           SetValue(31214 /*[Kommunikation\Rufumleitung\Rufumleitung\Anrufumleitung]*/ , 0);
    }

    $logout = array('getpage' => $fritzseite, 'sid' => $SID, 'security:command/logout' => 'logout');
    $sendlogout = http_post_fields($fritzgui, $logout);
}

?>

Siehst Du was, oder ist es normal, dass es lange dauert?

Ich verwende die FB 7570 vDSL mit der Version 75.04.91

Besten Dank
nakal

Hallo,

bist Du dir sicher dass das bei dir stimmt.

preg_match('@name="telcfg:settings/CallerIDActions0/Active" value="([10])"@i', $sendcheck, $matches);

Das hast Du als Aufruf. telcfg:settings/Diversity0/Active

So, müsste dann die Zeile aussehen.

preg_match('@name="telcfg:settings/Diversity0/Active" value="([10])"@i', $sendcheck, $matches);

Das ging ja schnell! Besten Dank, werde es gleich ausprobieren.

Besten Dank, nun ist es okay mit der Zugriffszeit.

Gruss
nakal

@RWN
Sorry, hatte das Beispiel nur von hier: http://www.ip-symcon.de/forum/127723-post180.html
übernommen, und jeder macht es bei euch wohl anders oder?!

Dann versuche dein Script hier:

................................ 
$ch = curl_init('http://' . $fritzbox_ip . '/cgi-bin/webcm?getpage=../html/login_sid.xml');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $login = curl_exec($ch);
    //print_r($login);
    curl_close($ch);
    $session_status_simplexml = simplexml_load_string($login);
    //print_r($session_status_simplexml);

    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"));
       //print_r($response);
       $login = array('getpage' => $fritzseite, 'login:command/response' => $response);
        //print_r($login);
       $sendlogin = http_post_fields($fritzgui, $login);
       //print_r($sendlogin);
       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];
          //print_r($SID);
       }
       else
       {
          echo "Fehler: Login fehlgeschlagen";
          return;
        }
    }  

nach zu übersetzen,


................................ 
$ch = curl_init('http://' . $fritzbox_ip . '/cgi-bin/webcm?getpage=../html/login_sid.xml');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $login = curl_exec($ch);
    //print_r($login);
    curl_close($ch);
    $session_status_simplexml = simplexml_load_string($login);
    //print_r($session_status_simplexml);

    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"));
       //print_r($response);
       $login = array('getpage' => '../html/login_sid.xml', 'login:command/response' => $response);
        //print_r($login);
       $sendlogin = http_post_fields($fritzgui, $login);
       //print_r($sendlogin);

Hier müsste jetzt die SID aus der login_sid.xml gelesen werden


       if (isset($matches[1]) && $matches[1] != '0000000000000000')
       {
          $SID = $matches[1];
          //print_r($SID);
       }
       else
       {
          echo "Fehler: Login fehlgeschlagen";
          return;
        }
    }  

ersetze das

       $login = array('getpage' => $fritzseite, 'login:command/response' => $response);

zu


       $login = array('getpage' => '../html/login_sid.xml', 'login:command/response' => $response);

und das

       preg_match('@<input type="hidden" name="sid" value="([A-Fa-f0-9]{16})" id="uiPostSid">@i', $sendlogin, $matches);

zu, mit dem Code zum Lesen der SID aus der login_sid.xml
die du zurück bekommst

Ich kenne die Funkionen nicht da ich ja PHP usw. nicht benutze
somit weißt du besser welchen Code du fürs Lesen der SID aus der XML benötigst.

Gruß Erwin

Hallo Rainer

Ist es möglich, dass ich das Script nicht nur aus dem Webfront starte, sondern auch von einer anderen Variable? So möchte ich zum Beispiel den Watchdog so einsetzen, dass beim runterfahren des PC’s auch gleich die Anrufumleitung eingeschalten wird. Oder aber den „Zentral“-Aus Taster dahingehen erweitern, dass beim verlassen das Hauses auch gleich die Umleitung aktiviert wird.

Habe mal die erste Linie „Sender Webfront“ auskommentiert, ging nicht.
Habe auch mal versucht, die Variable (Switch) mit einem Script zu schalten, auch das hat nicht hingehauen.

Wie könnte ich dies realisieren?

Besten Dank
Reto

Das Script einfach ein bischen erweitern.

Das einfügen.

if (($IPS_SENDER == "WebFront") || ($IPS_SENDER == "Variable"))

Trigger auf das Script von der Webfront Variable welche die Rufumleitung Ein/Aus schaltet.

Über ein Script schaltest Du dann diese Variable Ein oder Aus. Das Script kannst Du dann von deinem Watchdog oder was auch immer aufrufen.

 SetValue(25714 /*[Fritzbox\Rufumleitungen\Rufumleitung]*/, false); // oder true

Funktioniert 1A.

Besten Dank

Wo findet Ihr die ganzen Fritzbox Befehle? Gibt es auch einen Befehl zum ein/ausschalten des WLAN Gastzugangs?

<?
if ($IPS_SENDER == "WebFront")
{
    SetValue(50600 /*[Fritzbox Liste\WLan\WLan ein/aus\Status WLan]*/, $IPS_VALUE);
}

$fritzbox_ip = '192.168.x.x';
$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)
{
$wlan = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'wlan:settings/guest_ap_enabled' => $ein));
}
else
{
$wlan = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'wlan:settings/guest_ap_enabled' => $aus));
}


$logout = array('getpage' => $fritzseite, 'sid' => $SID, 'security:command/logout' => 'logout');
$sendlogout = http_post_fields($fritzgui, $logout);

?>

dann noch ein Bool-Variable, welcher du das Script zuweist.

Ich hab noch die Steffi, die dann den Gästen die Zugangsdaten liefert.

Hallo Rainer,

kannst Du mir das mal erklären?

Ein Rechtsklick auf das Kästchen geht nicht.
Ein Rechtsklick neben das Kästchen bekomme ich das hier:

http://fritz.box/cgi-bin/webcm?getpage=../html/de/menus/menu2.html&var:menu=wlan&var:pagename=common&sid=52dc676d79111c85