Fritzbox 7270/Wlan Repeater Scripts

Bitte schön. Ausführen als Script.

<?
$fritzbox_ip = 'fritz.box';
$fritzgui    = 'http://fritz.box/cgi-bin/webcm';
$fritzseite  = '../html/de/menus/menu2.html';
$password    = 'xxxxx';
$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];
   }
   else
   {
      echo "Fehler: Login fehlgeschlagen";
      return;
    }
}
$clearjournal = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'var:pagename' => 'foncalls', 'telcfg:settings/ClearJournal' => $aus));

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

Hallo RWN,

Und jetzt noch die Rufumleitung ein und ausschalten können… :rolleyes:
Das wird ja langsam zu einer Fernbedienung der Fritzbox, super!

Gruß
Klaus

ungetestet. Schaltet Umleitung 1 Ein oder Aus.

if ($IPS_VALUE)
    {
        $umleitung = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'telcfg:settings/CallerIDActions0/Active' => $ein));
    }
    else
    {
       $umleitung = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'telcfg:settings/CallerIDActions0/Active' => $aus));
    }

    $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(55119 /*[Umleitung]*/, 1);
    }
    else
    {
       SetValue(55119 /*[Umleitung]*/, 0);
    }

Hallo Rainer,
ich habe den Kopf vom Anrufer Script dazu gepackt, damit ich das Script einzeln aufrufen kann.
Es kommt keine Fehlermeldung aber es wird auch nicht umgeschaltet. :o


<?

$anrufliste="";
   $fritzbox_ip = 'fritz.box';
   $fritzgui    = 'http://fritz.box/cgi-bin/webcm';
   $fritzseite  = '../html/de/menus/menu2.html';
   $filename   = IPS_GetKernelDir()."\\webfront\\user\\Fritzbox\\Anrufliste.csv";// anpassen
   $password    = 'xx';
   $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];
       }
     else
       {
        echo "Fehler: Login fehlgeschlagen";
        return;
       }
      }
if ($IPS_VALUE)
    {
        $umleitung = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'telcfg:settings/CallerIDActions0/Active' => $ein));
    }
    else
    {
       $umleitung = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'telcfg:settings/CallerIDActions0/Active' => $aus));
    }

    $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(22437  /*[Telefon\Telefon\Anrufumleitung1]*/, 1);
    }
    else
    {
       SetValue(22437  /*[Telefon\Telefon\Anrufumleitung1]*/, 0);
    }
?>

Gruß
Klaus

und das noch mit einer kleinen Auswahl von Rufnummern aus der man eine wählt auf die umgeleitet wird. :smiley:

Wie immer. Mein Dank gehört dir. :smiley:
Grüße Mirco

Liste löschen funktioniert prima :smiley:

Vielen Dank Rainer!

… das schau ich mir morgen noch mal am lebenden Objekt an :rolleyes:

Hallo Klaus,

ich habe es gerade bei mir getestet. Funktioniert so wie oben angegeben einwandfrei.

und das noch mit einer kleinen Auswahl von Rufnummern aus der man eine wählt auf die umgeleitet wird
Sollte kein Problem sein. Man kann sich eine Auswahl Variable im Webfront mit verschiedenen Nummern anlegen.
Voraussetzung das die umgeleitete Nummer immer der selben Person zugewiesen wird.

Sollte kein Problem sein. Man kann sich eine Auswahl Variable im Webfront mit verschiedenen Nummern anlegen.
Voraussetzung das die umgeleitete Nummer immer der selben Person zugewiesen wird

Hä? :confused:
Wie jetzt? Wie muss sowas aussehen?

Hallo Mirco,

es könnte z.B. so aussehen.

<?
if ($IPS_SENDER == "WebFront")
{
    $fritzbox_ip = 'fritz.box';
    $fritzgui    = 'http://fritz.box/cgi-bin/webcm';
    $fritzseite  = '../html/de/menus/menu2.html';
    $password    = 'xxxxxx';
    $ein         = '1';
    $aus         = '0';
    $nummerhandy = '12345';
    $nummerbuero = '56789';

    $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:
            $umleitung = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'telcfg:settings/CallerIDActions0/Active' => $aus));
       break;
       case 1:
            $umleitung = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'telcfg:settings/CallerIDActions0/Active' => $ein));
       break;
       case 12345: // Wert der Integervariable
          SetValue(40412 /*[Fritzbox\Rufumleitungen\umleiten zu]*/,12345);
          $handy = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'var:menu' => 'fon', 'var:pagename' => 'rulall1', 'telcfg:settings/CallerIDActions0/Destination' => $nummerhandy));
       break;
       case 56789: // Wert der Integervariable
          SetValue(40412 /*[Fritzbox\Rufumleitungen\umleiten zu]*/,56789);
          $buero = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'var:menu' => 'fon', 'var:pagename' => 'rulall1', 'telcfg:settings/CallerIDActions0/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(40159 /*[Fritzbox\Rufumleitungen\Rufumleitung Telefon Werkstatt]*/ , 1);
    }
    else
    {
           SetValue(40159 /*[Fritzbox\Rufumleitungen\Rufumleitung Telefon Werkstatt]*/ , 0);
    }
    
    $logout = array('getpage' => $fritzseite, 'sid' => $SID, 'security:command/logout' => 'logout');
    $sendlogout = http_post_fields($fritzgui, $logout);
}

?>

Hallo Rainer,

danke dafür. Habe das Script angepasst.

Würdest Du für jemanden wie mich noch eine Kurze Anleitung schreiben was für Variablen benötigt werden und wie das ganze für das WF zu konfigurieren ist. Sieht bei Dir echt gut aus.

Mirco

Hallo Mirco,

das ist im Prinzip immer das gleiche.

Dummymodul, Boolvariable, Intvariable.
Profil Bool => Switch,
Profil Int => erstellen Rufumleitung, Wert und Text zuweisen.
Beide Variablen dem Script zuweisen.

Hallo Rainer,

schnell noch 1 bis 2 Fragen.

Muss das

case 12345: // Wert der Integervariable
          SetValue(40412 /*[Fritzbox\Rufumleitungen\umleiten zu]*/,12345);
          $handy = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'var:menu' => 'fon', 'var:pagename' => 'rulall1', 'telcfg:settings/CallerIDActions0/Destination' => $nummerhandy));
       break;
       case 56789: // Wert der Integervariable
          SetValue(40412 /*[Fritzbox\Rufumleitungen\umleiten zu]*/,56789);
          $buero = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'var:menu' => 'fon', 'var:pagename' => 'rulall1', 'telcfg:settings/CallerIDActions0/Destination' => $nummerbuero));

so aussehen

 case 0: // Wert der Integervariable
          SetValue(43754 /*[Nachrichten\Rufumleitungen\umleiten zu]*/,017157xxxxx);
          $handy = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'var:menu' => 'fon', 'var:pagename' => 'rulall1', 'telcfg:settings/CallerIDActions0/Destination' => $handysassi));
       break;
       case 1: // Wert der Integervariable
          SetValue(43754 /*[Nachrichten\Rufumleitungen\umleiten zu]*/,0172xxxxxxx);
          $buero = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'var:menu' => 'fon', 'var:pagename' => 'rulall1', 'telcfg:settings/CallerIDActions0/Destination' => $handymirco));

„43754“ ist meine Integer Variable und !10949" meine Boolean.

Grüße Mirco

Hallo Rainer,
habe gerade noch mal Dein neues Script für die Rufweiterleitung ausprobiert.
Leider wieder kein Erfolg. Meine Softwareversion auf der Fritzbox ist 29.04.76.
Kann es sein, das sich etwas geändert hat? (oder hast Du die gleiche?)
Ich bekomme keine Fehlermeldung in IPS, im Fritzlog steht nur angemeldet von IP x.x.x.x

Gruß
Klaus

Moin Klaus,

bei mir läuft die Labor Firmware. 54.04.99-14869
Mach doch mal einen Shot von deinen Einstellungen der Rufumleitung(FrameQuelltext ganz unten)

Hallo Rainer,
ich werde heute Abend mal die gleiche Softwareversion aufspielen.
Mal sehen, ob es dann geht.

Gruß
Klaus

Ich habe mich heute mal rangesetz Statusmeldungen aus der Fritzbox aus zu lesen.

Mit dem Status der Anrufbeantworter 1-3 hab ich es ja auch hin bekommen, aber mit den Status von WLAN / DSL und der Rufumleitungen komme ich nicht weiter.

Gibt es den im Netz eine Beschreibung der Parameter ?

'getpage' => $fritzseite, 
'var:menu' => 'home', 
'var:pagemaster' => 'fondevices', 
'var:pagename' => 'fondevices'

Ich möchte beim Aufruf der Fritzseite im Webinterface erstmal den aktuellen Stand aller wichtigen Informationen aus der Box auslesen.

Gruß Sven

Hallo Sven,

Wlan steht im 2ten Post.

Ob es eine Beschreibung für die Parameter gibt, weis ich nicht.

Rausfinden kann man diese selber, indem man auf der entsprechenden Unterseite in den Framequelltext geht.

im 2ten Post steht wie man das Wlan an/abschaltet, nicht wie man den Status aus der Box ausliest oder ???

Gruß und danke Sven

Das geht aus dem ersten Post hervor. Du musst nur die entsprechenden Parameter übergeben, dann hast Du auch den Status.

als Beispiel Wlan mit Status.

    if ($IPS_VALUE)
    {
        $wlan = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'wlan:settings/ap_enabled' => $ein));
    }
    else
    {
       $wlan = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'wlan:settings/ap_enabled' => $aus));
    }

    $checksetting = array('getpage' => $fritzseite, 'var:menu' => 'wlan', 'var:pagename' => 'common');
    $sendcheck = http_post_fields($fritzgui, $checksetting);
    preg_match('@name="wlan:settings/ap_enabled" value="([10])"@i', $sendcheck, $matches);
    if (isset($matches[1]) && $matches[1] == 1)
    {
        SetValue(55119 /*[Fritzbox\Wlan 5 GHz\Wlan]*/, 1);
    }
    else
    {
       SetValue(55119 /*[Fritzbox\Wlan 5 GHz\Wlan]*/, 0);
    }