Fritzbox 7270/Wlan Repeater Scripts

Hallo Rainer,

deine Scripte funktionieren einwandfrei, danke nochmals dafür.

Ich habe die Anrufliste VoIP jetzt im Einsatz. Bekommt man es dort hin, dass wie bei der Nutzung der eigentlichen Anrufliste die Namen aus dem Fritz Telefonbuch mit übernommen werden. Diese würde ich gern anstelle der IP in die Liste einbringen, aber ich weiß leider nicht, wie ich diese aus der Box importiere.

danke

Hallo Thomas,

die IP-Adresse hat zu nichts Bezug. Wenn Du das so haben willst, müsstest Du beide Listen miteinander vergleichen und die entsprechende Nummer dem Namen zuordnen.

Hat jemand beim Wlan Repeater den TimeOut setzen können?
ich habe das Script aus diesem Thread soweit erfolgreich realiseren könnnen.
Allerdings läuft dann die meldung ewig durch, und das nervt irgendwann.

Ichhabe die zeile dahingehend geändert:

$settext = http_post_fields($fritzrepeatergui, array('getpage' => $fritzseite, 'var:pagename' => 'infoled', 'nlr:settings/TDS_Timeout' => '5', 'nlr:settings/TDS_ScrollText' => $text, 'nlr:settings/TDS_Orientation' => '0'));

und um den Eintrag

'nlr:settings/TDS_Timeout' => '5'

ergänzt, ohne Erfolg.
Weiss Jemand Rat?

( Noch lieber wäre mir, wenn man sagen könnte: Message 3 x anzeigen, dann aus )

Gruß,
Loerdy

setz doch nach einer Zeitspanne einfach einen „leeren Text“ ;).

Hallo Ralf,

viel zu einfach :slight_smile:

Danke!

Auf Basis von paresys Script(Down/Upstream) habe ich mal etwas weiter gemacht.
Angezeigt werden der Onlinestatus, die Uptime seit der letzten Verbindung und eventuelle Verbindungsfehler.
Das ganze benötigt keine Extension da über UPnP ausgelesen wird.

Legt euch ein Dummymodul an, 3 Variablen, 2x String, 1x Bool eventuell nicht vorhandene Variablenprofile und tragt die IDs im Script ein. Ein Ereignis zum abholen der Daten nach eurem Ermessen.

<?
if($IPS_SENDER == "WebFront") return;

$address = "Fritz.box";

$contentRecv = 'POST /upnp/control/WANIPConn1 HTTP/1.1
Cache-Control: no-cache
Connection: Close
Pragma: no-cache
Content-Type: text/xml; charset="utf-8"
User-Agent: Microsoft-Windows/6.1 UPnP/1.0
SOAPACTION: "urn:schemas-upnp-org:service:WANIPConnection:1#GetStatusInfo"
Content-Length: '.(287+strlen($address)).'
Host: '.$address.':49000

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><m:GetStatusInfo xmlns:m="urn:schemas-upnp-org:service:WANIPConnection:1"/></SOAP-ENV:Body></SOAP-ENV:Envelope>
';

$data = SendPacket($contentRecv);
$connectionStatus = GetTextBetween($data, "<NewConnectionStatus>", "<\/NewConnectionStatus>");
if($connectionStatus == "Connected")
{
    SetValue(13384 /*[Fritzbox\Verbindung\Status]*/, true);
}
else
{
   SetValue(13384 /*[Fritzbox\Verbindung\Status]*/, false);
}
$lastConnectionError = GetTextBetween($data, "<NewLastConnectionError>", "<\/NewLastConnectionError>");
SetValue(20128 /*[Fritzbox\Verbindung\Verbindungsfehler]*/, $lastConnectionError);
$upTime = GetTextBetween($data, "<NewUptime>", "<\/NewUptime>");
SetValue(39161 /*[Fritzbox\Verbindung\UpTime]*/, gmstrftime('%H:%M:%S', $upTime));


function SendPacket($content)
{
    global $address;
   $port = 49000 /*[Objekt #49000 existiert nicht]*/;

   $fp = fsockopen ($address, $port, $errno, $errstr, 10);
   if (!$fp)
    {
       echo "$errstr ($errno)<br />
";
   }
    else
    {
        fputs ($fp, $content);
      $ret = "";
      while (!feof($fp))
        {
         $ret.= fgets($fp,128);
      }
      fclose($fp);
    }
   if(!(strpos($ret, "200 OK") === false))
    {
        return $ret;
   }
    else
    {
       die("Invalid Response: ".$ret);
   }
}

function GetTextBetween($string, $start, $end)
{
    preg_match_all("/$start(.*)$end/i", $string, $match);
   return $match[1][0];
}

?>

WanIP auslesen!

<?
$address = "Fritz.box";

$contentRecv = 'POST /upnp/control/WANCommonIFC1 HTTP/1.1
Cache-Control: no-cache
Connection: Close
Pragma: no-cache
Content-Type: text/xml; charset="utf-8"
User-Agent: Microsoft-Windows/6.1 UPnP/1.0
SOAPACTION: "urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress"
Content-Length: '.(291+strlen($address)).'
Host: '.$address.':49000

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><m:GetExternalIPAddress xmlns:m="urn:schemas-upnp-org:service:WANIPConnection:1"/></SOAP-ENV:Body></SOAP-ENV:Envelope>
';

$data = SendPacket($contentRecv);
$wanIP = GetTextBetween($data, "<NewExternalIPAddress>", "<\/NewExternalIPAddress>");
SetValue(21456, $wanIP);

function SendPacket($content)
{
    global $address;
   $port = 49000 /*[Objekt #49000 existiert nicht]*/;

   $fp = fsockopen ($address, $port, $errno, $errstr, 10);
   if (!$fp)
    {
       echo "$errstr ($errno)<br />
";
   }
    else
    {
        fputs ($fp, $content);
      $ret = "";
      while (!feof($fp))
        {
         $ret.= fgets($fp,128);
      }
      echo $ret;
      fclose($fp);
    }
   if(!(strpos($ret, "200 OK") === false))
    {
        return $ret;
   }
    else
    {
       die("Invalid Response: ".$ret);
   }
}

function GetTextBetween($string, $start, $end)
{
    preg_match_all("/$start(.*)$end/i", $string, $match);
   return $match[1][0];
}

?>

hallo lieben
geht auch ein reconet

geht auch.

<?
$address = "Fritz.box";

$contentRecv = 'POST /upnp/control/WANIPConn1  HTTP/1.1
Cache-Control: no-cache
Connection: Close
Pragma: no-cache
Content-Type: text/xml; charset="utf-8"
User-Agent: Microsoft-Windows/6.1 UPnP/1.0
SOAPACTION: "urn:schemas-upnp-org:service:WANIPConnection:1#ForceTermination"
Content-Length: '.(287+strlen($address)).'
Host: '.$address.':49000

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><m:ForceTermination xmlns:m="urn:schemas-upnp-org:service:WANIPConnection:1"/></SOAP-ENV:Body></SOAP-ENV:Envelope>
';

SendPacket($contentRecv);

function SendPacket($content)
{
    global $address;
   $port = 49000 /*[Objekt #49000 existiert nicht]*/;

   $fp = fsockopen ($address, $port, $errno, $errstr, 10);
   if (!$fp)
    {
       echo "$errstr ($errno)<br />
";
   }
    else
    {
        fputs ($fp, $content);
      $ret = "";
      while (!feof($fp))
        {
         $ret.= fgets($fp,128);
      }
      echo $ret;
      fclose($fp);
    }
   if(!(strpos($ret, "200 OK") === false))
    {
        return $ret;
   }
    else
    {
       die("Invalid Response: ".$ret);
   }
}

function GetTextBetween($string, $start, $end)
{
    preg_match_all("/$start(.*)$end/i", $string, $match);
   return $match[1][0];
}

?>

Hallo RWN,
erste einmal vielen Dank für die tollen Skripte! Funktionieren einwandfrei auch auf meiner Fritzbox 3270.:slight_smile:
Jetzt habe ich aber doch noch eine Frage: Kann man irgendwie auch den Onlinezähler der Fritzbox auslesen?
Danke schon mal!

Hallo!

Ich kapiere es einfach nicht. Möchte das WLan Netz über iFront an/ausschalten können. OK, wenn ich selber in Netz bin, nur ausschalten. Über VPN mit IPad könnte man es auch wieder einschalten.

Nur ich bekomme so ein Script nicht hin… habe auch wenig Ahnung von PHP.
Bitte um Hilfe :confused:

Hans-Werner

Hallo Hans-Werner,

was bekommst Du denn nicht hin.

Hier steht z.B. ein Beispiel für Wlan mit Rückmeldung.

Ansonsten ist der Anfang zum Einloggen im Script immer der gleiche.

Dem kann ich mich nur anschliessen, funktionieren auch bei mir problemlos.

An einem Onlinezähler wäre ich aber auch noch interessiert. Habe den Thread schon mehrmals durch. Entweder habe ich das übersehen, oder es ist noch nicht veröffentlicht.
Hat das evtl. schon jemand integriert und mag es veröffentlichen?

Grüße,
Doc

bei eingehendem Anruf sehe ich in der Registervariable die ankommenden Daten (Bild1), aber die Variable wird nicht beschrieben. Hat mir da jemand einen Hinweis?

Hier noch das Script:

<?

// Daten aus Registervariable lesen
$daten = explode(";", $IPS_VALUE);

// Datum/Uhrzeit mit ausgeben
define ("datetime", $daten[0]);

// Nummern ohne Eintrag im öffentlichen Telefonbuch welche aber bekannt sind und übertragen werden ($intern).
// unendlich erweiterbar
  $array["Nummer"][1] = "xxxxxx";
  $array["Name"]  [1] = "Rainer";
  $array["Nummer"][2] = "xxxxxxx";
  $array["Name"]  [2] = "Gabi";
  $array["Nummer"][3] = "xxxxxx";
  $array["Name"]  [3] = "Rainer Handy";
  $array["Nummer"][4] = "xxxxx";
  $array["Name"]  [4] = "Rainer Firma";
  $array["Nummer"][5] = "";
  $array["Name"]  [5] = "Unbekannt";
  $array["Nummer"][6] = "xxxxxx";
  $array["Name"]  [6] = "Ernst ";

// Daten aus Registervariable auswerten
switch($daten[1])
{
    case "RING":
   $Rufnummer = $daten[3];
    if(in_array($Rufnummer, $array["Nummer"]))
   {
       $intern = array_search($Rufnummer, $array["Nummer"]);
       SetValue(26574 /*[Fritzbox Anrufe\Anrufe\Eingehender Anruf]*/, "am ".datetime. " von ".$array["Name"][$intern]);
       SetValue(39543 /*[Fritzbox Anrufe\Anrufe\letzter Anruf]*/, "am ".datetime. " von ".$array["Name"][$intern]);
       echo "Anruf am ".datetime. " von ".$array["Name"][$intern];
       return;
   }
   else
   {
      $Rufnummer = SucheNummer($Rufnummer);
   }
   break;

   case "CALL":
   $interneNummer = $daten[4];
   if ($interneNummer == 982966)
   {
      $interneNummer = "Rainer";
    }
    else
    {
       $interneNummer = "Gabi";
    }
    $externeNummer = $daten[5];
    SetValue(22820 /*[Fritzbox Anrufe\Anrufe\ausgehender Anruf]*/, "von ".$interneNummer." zu ".$externeNummer);
   break;

   case "DISCONNECT":
   RegVar_SetBuffer(21741 /*[Fritzbox Anrufe\Register V Fritzbox]*/, "");
   SetValue(26574 /*[Fritzbox Anrufe\Anrufe\Eingehender Anruf]*/, "");
   SetValue(22820 /*[Fritzbox Anrufe\Anrufe\ausgehender Anruf]*/, "");
   return;
   break;
}

function SucheNummer($Rufnummer)
{
   $url_orig="http://www.klicktel.de/inverssuche/index/search?method=searchSimple&_dvform_posted=1&phoneNumber=#TEL#";
   $url = str_replace("#TEL#", $Rufnummer, $url_orig);
   $Ausgabe = fopen($url, "r");
   if (!$Ausgabe)
    {
      echo("ERROR : Kann URL nicht öffnen : $url
");
   }
   $lineNb     = 0;
   $searchTag0 = 'namelink';
   $searchTag1 = '<strong>';
   $searchTag2 = '</strong>';
   $gefunden   = 0;
   while(!$gefunden && !feof($Ausgabe))
   {
       $lineNb++;
        $buffer = fgets($Ausgabe);
      if (strpos($buffer, $searchTag0) != false)
      {
            $gefunden = 1;
            $startLN = strpos($buffer, $searchTag1) + strlen($searchTag1);
          $endeFN = strpos($buffer, $searchTag2) ;
            $Name = substr($buffer, $startLN, $endeFN - $startLN) ;
            $Name = html_entity_decode($Name);
            SetValue(26574 /*[Fritzbox Anrufe\Anrufe\Eingehender Anruf]*/, "am ".datetime. " von ".$Name);
            SetValue(39543 /*[Fritzbox Anrufe\Anrufe\letzter Anruf]*/, "am ".datetime. " von ".$Name);
            echo "Anruf am ".datetime. " von ".$Name;
      }
   }
   fclose($Ausgabe);
   return $Name;
}

?>

Die Daten sind im Objektbaum nicht sichtbar, da es keine anzeigbare Variable ist.
Die Daten werden vom Script intern verarbeitet.

aber die Daten müssten doch bei einem Anruf in die Variable geschrieben werden?

Werden sie doch, in den internen Buffer der Variable. :slight_smile: Wenn es nicht so wäre, würdest Du im Debug nichts sehen.

und warum bleibt das Feld „eingehender Anruf“ leer wenn’s klingelt?

Weil die Nummer nicht bekannt ist. Sie steht bei dir nicht im Array und beim Nummernsucher ist sie wohl auch nicht bekannt.

Solltest Du jetzt fragen, warum er nicht alle Nummern anzeigt. Dafür hab ich das Script nicht geschrieben, dann bau es dir um.

Hallo,

habe meine Sorgen mit diesem Script auf der FB7390: http://www.ip-symcon.de/forum/f53/fritzbox-7270-wlan-repeater-scripts-8267/index2.html#post68953

Notice: Undefined offset: 1 in C:\IP-Symcon\scripts\56486.ips.php on line 39

Notice: Undefined offset: 1 in C:\IP-Symcon\scripts\56486.ips.php on line 44

Diese Meldungen hatte ich bereits auch in einem anderen Script. Da ging es ebenfalls davor um eine preg_match-Anweisung.

Geht das nicht auf der 7390? Oder heisst das da anders?

Hallo,

habe auch eine FB 7390. Leider bin ich nicht wirklich gut in PHP etc. Funktioniert das nun mit der 7390 oder ärgere ich mich nur??? Hat’s schon jemand mit dieser Box hinbekommen???

Gruß Proxima