Fritzbox 7270/Wlan Repeater Scripts

Wie wäre es mit ein bischen lesen. :confused::smiley:

So manchmal, frag ich mich, für was paresy den ganzen Kram überhaupt dazu schreibt. Liest ja eh keiner.

Rainer, dafür gibt es in anderen Foren einen Trash, vieleicht sollten wir paresy mal fragen ob er uns einen einrichtet.:smiley:

Nutzt jemand von euch Fritz!Load von euch für die Fritzbox?

Ich denke da würde es auch tolle Möglichkeiten geben um Status auslesen und verarbeiten.

Falls jemand Interesse würde ich mich da mal mit beschäftigen.

IP-Symcon Version 2.5 #2237, 27.12.11

Hallo Zusammen,

ich bringe meine Kindersicherung nicht mehr zum laufen nach dem Update der Fritz!box 7270 auf die Firmware 74.05.05
Habe auch die Skripts für V2.5 umgebaut nach RWN. Übriges vielen Dank für Deine ausführliche Arbeit.

if($_IPS['SENDER'] == "WebFront")
{
    $fritzbox_ip = 'fritz.box';
    $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);
    $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;
        }
    }
	
	......


Habe auch das Forum durchforstet
wie z.B.:
Scripts für Fritzbox/Repeater/Fritzfon ab V2.5 und PHP 5.4.x
Script Library Sammlung und nützliche Anleitungen

Aber leider keine Lösung gefunden.

Es hat auch nichts mit der Umstellung von IP-Symcon von V2.4 nach V2.5 zu tun. Die anderen Skripts von der Fritz!box laufen einwandfrei.

Es hat mit dem Update der Fritzbox auf die Firmware 74.05.05 zu tun.

Hier funktioniert der curl_setopt - Befehl für die Kindersicherung nicht mehr.
Hier ein Beispiel für Wlan (klappt super):

curl_setopt($ch, CURLOPT_POSTFIELDS, "sid={$SID}&wlan:settings/ap_enabled={$ein}"); 

Aber wie muss hier der curl_setopt- Befehl für die Kindersicherung aussehen?

Hat hier jemand eine Lösung? Vielen Dank für Ihre Hilfe.

Luggi

PS: Ein glückliches neues Jahr an alle IP-Symcon Fan´s und allen anderen die hier lesen

Hallo Rainer,

erst einmal besten Dank für die schnelle Umsetzung der Scripte auf 2.5.
Ich komme leider bei dem Script zum Auslesen der Anrufliste nicht weiter.

Login hab ich zwar geschafft umzusetzen, aber dann komme ich nicht weiter.

Planst du hier auch noch die Veröffentlichung der Umstellung auf 2.5 ?

Dieser Teil vom Script müsste wohl geändert werden :

//Anrufliste aktualisieren
$gotopage = array('getpage' => $fritzseite,'sid' => $SID, 'var:menu' => 'home', 'var:pagename' => 'foncalls');
$getnewlist = http_post_fields($fritzgui, $gotopage);

//Anrufliste abholen
$anrufliste = http_post_fields($fritzgui, array('getpage' => '../html/de/FRITZ!Box_Anrufliste.csv', 'sid' => $SID));
$anrufliste = explode(';', $anrufliste, 4);
$anrufliste = $anrufliste[3];
$fileHandle = @fopen($filename, 'wb+');
@fwrite($fileHandle, $anrufliste);
@fclose($fileHandle);


$filename = "../webfront/user/Fritzbox/Anrufliste.csv";
$id = @fopen($filename, "r");
while ($data = fgetcsv($id, filesize($filename),";"))
$table[] = $data;
@fclose($id);

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

Danke Thomas

Steht ja tatsächlich nicht in den neuen Scripts. :confused:

//Anrufliste aktualisieren
curl_setopt($ch, CURLOPT_POSTFIELDS, "getpage={$fritzseite}&sid={$SID}&var:menu=home&var:pagename=foncalls");
curl_exec($ch);

curl_setopt($ch, CURLOPT_POSTFIELDS, "getpage=../html/de/FRITZ!Box_Anrufliste.csv&sid={$SID}");
$anrufliste = curl_exec($ch);
$anrufliste = explode(';', $anrufliste, 4);
$anrufliste = $anrufliste[3];
//print_r($anrufliste);
$fileHandle = @fopen($filename, 'wb+');
@fwrite($fileHandle, $anrufliste);
@fclose($fileHandle);

curl_close($ch);

unglaublich wie schnell du bist !

Danke funktioniert

Thomas

Tut mir leid, aber ich bekomme die Anrufliste nicht auf die Reihe. Die Lösung ist über zu viele Stellen verstreut. Ich gestehe, ich habe die mehr als 30 Seiten dieses Threads nicht komplett gelesen - nach 7 Seiten (und den parallelen Threads) war ich ausreichend verwirrt. :rolleyes:

Es gibt in diesem Thread im Beitrag 6 ein Script für die Anruferliste, das offenbar für Version 2.5 angepasst werden muss, obwohl es nicht im Thread für die angepassten Scripte steht. Richtig?

Die erforderliche Anpassung steht aber hier in Beitrag 306 und ersetzt komplett den in Beitrag 305 zitierten Script-Auszug. Richtig?

Im ersten Beitrag dieses Threads sind zwei Datei-Pakete angehängt, „die benötigten Dateien“ soll man nehmen. Benötigt werden die Dateien vermutlich nicht nur für das Script im Beitrag 1, sondern auch für das in Beitrag 6. Richtig? Da ich Version 2.5 habe, dürften die „dateienV2.2“ ja nicht die richtigen sein. Oder gerade, weil ab V2.2 gemeint ist?

Ebenfalls in Beitrag 1 steht, dass eine Variable anzulegen und dem Script zuzuweisen ist. Allerdings scheint mir das wiederum nur für das Ein-/Ausschalten sinnvoll und diesmal nicht für die Anrufliste. Richtig? Falls doch: Aufgrund des Profils „Switch“ vermute ich mal den Typ „Boolean“. Richtig?

Im Beitrag 32 und 54 tauchen noch Intvariable und RegisterVariable auf. Die dürften aber für die Anrufeliste nicht erforderlich sein. Richtig?

Ich hoffe, es hat jemand Mitleid und weist mir den Weg zum Licht. :wink:

Grüße
galleto

Letzter Post. :wink:

Die extension für V2.5, findest Du im Link im ersten Post.

Funktioniert. Herzlichen Dank! :smiley:

Grüße
galleto

Nutzt jemand von euch Fritz!Load von euch für die Fritzbox?

Das ist doch eigentlich nix anderes, das Einzige was das kann ist Rechenleistung zu verschwenden. Das Zeug hatte ich vor 12j aus Versehen mal installiert :eek:

Hallo Rainer,
ich versuche gerade das Script für die Rufumleitung auf die CURL Abfrage um zu stricken. Soweit klappt das auch schon. Nur wenn ich bei aktivierter Rufumleitung zwischen den Integer Variablen schalte. Geht der Status im Webfront auf aus, obwohl die Umleitung in der FritzBox noch aktiv ist.
Komme da leider nicht mehr weiter, hast du ein Tipp für mich? :o

<?
if ($IPS_SENDER == "WebFront")
{
    $fritzbox_ip = '192.168.178.1';
    $fritzgui    = 'http://192.168.178.1/cgi-bin/webcm';
    $fritzseite  = '../html/de/menus/menu2.html';
    $password    = 'xxxx';
    $ein         = '1';
    $aus         = '0';
    $Eddi = 'xxx';
    $Lxxx = 'xxx';

    $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;
    }
}

    switch($IPS_VALUE)
    {
       case 0:
            curl_setopt($ch, CURLOPT_POSTFIELDS, "getpage={$fritzseite}&sid={$SID}&var:pagename=rulall&telcfg:settings/Diversity0/Active={$aus}");
            curl_exec($ch);
		 break;
		 
       case 1:
            curl_setopt($ch, CURLOPT_POSTFIELDS, "getpage={$fritzseite}&sid={$SID}&var:pagename=rulall&telcfg:settings/Diversity0/Active={$ein}");
            curl_exec($ch);
		 break;
		 
       case 12345: // Wert der Integervariable
			SetValue(41045 /*[FritzBox!\Rufumleitung\Rufumleitung\Umleiten zu]*/,12345);
			 $Eddi = curl_setopt($ch, CURLOPT_POSTFIELDS, "getpage={$fritzseite}&sid={$SID}&var:pagename=rulall&telcfg:settings/Diversity0/Destination={$Eddi}");
			 curl_exec($ch);			 
		 break;
		 
       case 56789: // Wert der Integervariable
			SetValue(41045 /*[FritzBox!\Rufumleitung\Rufumleitung\Umleiten zu]*/,56789);
			$Lxxx = curl_setopt($ch, CURLOPT_POSTFIELDS, "getpage={$fritzseite}&sid={$SID}&var:pagename=rulall&telcfg:settings/Diversity0/Destination={$Lxxx}");
			curl_exec($ch);		  
		 break;
    } 
	 
    
    if (isset($matches[1]) && $matches[1]  == 1)
    {
        SetValue(44763 /*[FritzBox!\Rufumleitung\Rufumleitung\Status]*/ , 1);
    }
    else
    {
           SetValue(44763 /*[FritzBox!\Rufumleitung\Rufumleitung\Status]*/ , 0);
    }


    curl_close($ch);
    SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);

}

?>

WLAN im WebFront ein / aus funktioniert. Wenn ich aber über ein Script (schlafen oder so) ausschalten will, passiert nichts.

Was mach ich da falsch?

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

$fritzbox_ip = 'xxx.xxx.x.x';

kann mir denn niemand sagen, was ich ändern muss, damit ein/aus über ein „Hilfsscript“ funktioniert?

Was soll denn dein Scriptschnippsel machen. Außer deinen Button im Webfront zu ändern, nichts.

Ohne das Du das Script zum umschalten nicht aufrufst, wird das nix.

die 5 Zeilen Code, wirst ja noch hinbekommen, ansonsten geht es für dich halt nicht.

Hallo zusammen,
erst mal ein dickes Lob und vielen Dank an Rainer und alle Anderen die mit Ideen, konstruktiver Kritik und Verbesserungsvorschlägen am Thema FritzBox mitarbeiten. Die Mögichkeiten scheinen im Rahmen des Machbaren ja scheinbar unbegrenzt …

Ich versuche seit Tagen die Ergebnisse des Scripts von Rainer http://www.ip-symcon.de/forum/f53/scripts-fuer-fritzbox-repeater-fritzfon-ab-v2-5-php-5-4-x-16190/index2.html Beitrag #15 darzustellen wie in http://www.ip-symcon.de/forum/f53/fritzbox-7270-wlan-repeater-scripts-8267/index12.html Beitrag #116. Leider ohne erfolg.

Fehler ist immer Call to undefined function http_post_fields() …

Wie es für mich aussieht fehlt mir irgend eine passende *.dll? Oder ein Verweis in irgend einer Datei darauf?

Habe die Dateien:
php_curl.dll Version 5.4.0RC2 und
php_mbstring.dll Version 5.4.0RC2
ins Verzeichnis IPS\ext kopiert.

Was muss ich tun damit das Script nicht an diesem Fehler hängen bleibt?

http_post_fields() gibt es nicht mehr. Du musst das mit cURL anpassen.

Hallo Rainer,
danke für Deine Antwort. Hab das jetzt mal zusammengestückelt. Das Script läuft ohne Fehler durch. Die Voiplist wird gefüllt. Nur beim Aufsplitten nach verschiedenen Nrn steht in den/der zugehörigen *.csv immer nur der definierte Kopf: Typ Datum Name Rufnummer Nebenstelle Eigene Rufnummer Dauer
Irgend wie werden die Daten im weiteren verlauf des Scripts nicht angehängt.

<?
$AnrLstS     = IPS_GetKernelDir()."\\webfront\\user\\Fritzbox\\AnruflisteS.csv";
$voipList = file_get_contents("../webfront/user/Fritzbox/AnruflisteA.csv");


$FileAnrLstS = @fopen($AnrLstS, 'wb+');
$Spaltenkoepfe = 'Typ;Datum;Name;Rufnummer;Nebenstelle;Eigene Rufnummer;Dauer';
fwrite($FileAnrLstS, $Spaltenkoepfe); //hab die Spaltenköpfe meinen angebpasst.

// Ergebnis: Die AnruflisteA ist gefüllt (aus anderem Script), in der AnruflisteS werden die Spaltenköpfe geschrieben.

$list = explode('document.write(', $voipList);
for ($i = 2; $i < count($list); $i++)
{
    $ausgabe = $list[$i];
    $nr = explode('TrQoS("', $ausgabe);

    if(isset($nr[1]))
    {
       if(substr($nr[1], 0, 5) == "xxxxx") // Nummmer 1 anpassen 5 stellig
       {
           $aktiv = explode('"', $nr[1]);
           $ip = $aktiv[8];
            $aktiv = str_replace("_", ";", $aktiv[0]);
            $oldString = explode(";", $aktiv);
            $newString = $oldString[1].";".$oldString[2].";"."Internet: ".$oldString[0].";".$ip.";".$oldString[3];
            $zeit = substr($newString, 11, 5)."
";
            if(strpos($zeit, ";") !== false)
            {
               $newString = substr_replace($newString, "0", 11, 0);
            }
            if(substr($newString, -7) == "0:00:00")
            {
                $typ = "2";
            }
            if(substr($newString, 17, 1) == "+")
            {
               $newString = substr_replace($newString, "0", 17, 3);
                $typ = "1";
            }
            else
            {
               $newString = substr_replace($newString, "0", 17, 2);
               $typ = "3";
            }
            $newString = $typ.";".$newString;
            if(substr($newString, 19, 5) == "xxxxx") // Ortskennnummer anpassen 5 stellig
            {
               $newString = substr_replace($newString, "", 19, 5);
            }
            fwrite($FileAnrLstS, $spaltenkoepfe.$newString."
");
			}
  		}
}
//echo $voipList; //funktioniert

?>

Die Nummern sind natürlich angepasst.
Irgend wie hab ich den Verdacht, dass gar keine Daten aus dem Script raus kommen und somit auch nicht angehängt werden können.
Wie kann ich das prüfen?
Was mache ich falsch?

Hallo Wolfgang,

ich kann dir nicht so ganz folgen. Deine Spaltenköpfe sind doch für dein Webfront oder nicht, ist zumindest bei mir so.

Hier kannst ja mal schauen ob dein String richtig zusammen ist.

if(substr($newString, 19, 5) == "xxxxx") // Ortskennnummer anpassen 5 stellig 
            { 
               $newString = substr_replace($newString, "", 19, 5); 
            } 
            echo $newString."
";
            fwrite($FileAnrLstS, $spaltenkoepfe.$newString."
"); 
            } 

Ansonsten ist das die Ausgabe fürs Webfront mit den „Spaltenkoepfen“. :slight_smile:

$file = "../webfront/user/Fritzbox/VoipRainer.csv";
$id = fopen($file, "r");
$i = 0;
while(($data = fgetcsv($id, filesize($file), ";")) && $i < 9)
{
    $i++;
      if ($data[0] == 1) $data[0] = "<img src=\"../user/icons/fixed/Callin.png\" title=\"eingehender Anruf\">";
    if ($data[0] == 2) $data[0] = "<img src=\"../user/icons/fixed/Callinfailed.png\" title=\"Anruf in Abwesenheit\">";
    if ($data[0] == 3) $data[0] = "<img src=\"../user/icons/fixed/Callout.png\" title=\"ausgehender Anruf\">";
    $table[] = $data;
}
fclose($id);

$str = "<table width='100%'align='center'>";
foreach($table as $row)
{
    $str.= "<tr>";
    foreach($row as $data)
    $str.= '<td>'.$data.'</td>';
    $str.= "</tr>";
}
$str .= "</table>";
SetValue(29663 /*[Fritzbox\Anruflisten\Anrufliste Rainer]*/, $str);

Hallo Rainer,
Danek für Deine Hilfe. Die Anzeige aller Anrufe im Webfont hat auch schon vorher funktioniert. Was mir fehlt ist die gesplittete Anzeige nach unseren Telefonnummern. Der Unterschied zu Deinem Script ist, dass Du die Daten in eine *.txt schreibst, ich jedoch in eine *.csv. Kanns daran liegen?
Ich blick gerade nicht wirklich was Du mit dem Code

$list = explode('document.write(', $voipList);
for ($i = 2; $i < count($list); $i++)
{
    $ausgabe = $list[$i];
    $nr = explode('TrQoS("', $ausgabe);

    if(isset($nr[1]))
    {
       if(substr($nr[1], 0, 5) == "xxxxx") // Nummmer 1 anpassen 5 stellig
       {
           $aktiv = explode('"', $nr[1]);
           $ip = $aktiv[8];
            $aktiv = str_replace("_", ";", $aktiv[0]);
            $oldString = explode(";", $aktiv);
            $newString = $oldString[1].";".$oldString[2].";"."Internet: ".$oldString[0].";".$ip.";".$oldString[3];
            $zeit = substr($newString, 11, 5)."
";
            if(strpos($zeit, ";") !== false)
            {
               $newString = substr_replace($newString, "0", 11, 0);
            }
            if(substr($newString, -7) == "0:00:00")
            {
                $typ = "2";
            }
            if(substr($newString, 17, 1) == "+")
            {
               $newString = substr_replace($newString, "0", 17, 3);
                $typ = "1";
            }
            else
            {
               $newString = substr_replace($newString, "0", 17, 2);
               $typ = "3";
            }
            $newString = $typ.";".$newString;
            if(substr($newString, 19, 5) == "xxxxx") // Ortskennnummer anpassen 5 stellig
            {
               $newString = substr_replace($newString, "", 19, 5);
            }
            fwrite($FileAnrLstS, $spaltenkoepfe.$newString."
");
            }
          }
} 

machst. Der soll doch wohl die von mir gewünschte Selektion nach Rufnummern machen. Das funktioniert bei mir leider noch nicht.
Kann das an den unterschiedlichen Spaltenköpfen liegen?
Was ist denn $Nr für eine Variable?’
Was für Daten benötigst du sonst noch danmit meine Fragestellung klarer / beantwortbar wird?