Anruferliste aus FritzBox auslesen

Die Anzahl ab einem bestimmten Zeitpunkt wie z.B. Start Abwesenheit bis Ende Abwesenheit nach Rückkehr oder zwischen 7 und 14 Uhr als feste Größe oder ähnliches…

Alle wäre dann doch etwas zuviel :slight_smile:

Gruß
b71

Die stehen doch in der Liste. Anruf bei Abwesendheit. Für was also noch mal in eine Variable.

Um diese Anzahl mit „Steffi“ auszugeben wenn man nach Hause kommt.

A La „Sie haben 4 neue Anrufe und 6 neue e-Mails während Ihrer Abwesenheit erhalten.“… Oder so…

Meine Frau nutzt den Touchscreen nicht und daher wäre das eine gute Möglichkeit Ihr die Info " reinzudrücken "

Sonst langweilt sich das Mädchen zu sehr :slight_smile:

Gruß
B71

Hat niemand eine Idee hierzu?
Tauchen bei Euch diese Fehler nicht auf?

Ich würde gern eine spezielle Nr. meiner Telefonanlage ausschließen, so dass sie NICHT in der Liste angezeigt wird.
Hierbei handelt es sich um das Wählgerät meiner Alarmanlage, das ruft ständig die Zentrale an und das nervt in der Übersicht.

Jemand ne Idee ?

…Alternativ würde ich auch die Anzeige auf die Anrufe in Abwesenheit beschränken wollen, das ist evtl. einfacher darzustellen ?

Keiner ne Idee wie ich die Liste auf „Anrufe in Abwesenheit“ beschränken kann ?

indem Du, einfach die anderen rausschmeisst. :wink:

Bevor jetzt die Frage kommt, wie denn, mit 2//

switch($caller) {
       case 1:
          //$eintrag[0] = "<img src=/user/fritz/Callin.png>";
          break;
       case 2:
          $eintrag[0] = "<img src=/user/fritz/Callinfailed.png>";
          break;
       case 3:
          //$eintrag[0] = "<img src=/user/fritz/Callout.png>";
          break;
        default:
           $eintrag[0] = "";
           break;
    }

Wow RWN… ohne das man erst die Frage stellen muss!? Wie Langweilig!!! Haha…

Sent from my iPhone using Tapatalk

Sorry mal ganz blöd, wie geht das?

mws

Instanz Registervariable öffnen und das Script zuweisen.

Hallo Rainer,

ich hab es gefunden, vielen Dank!

mws

Hallo,

ich habe dieses Skript auch in meinem IPS eingebunden. Als ich jetzt den „IPS-Logger“ von Brownson hinzugefügt habe, zeigt dieser Fehler in Zeile 39 und 42 an, welche ich aber nicht finden kann.

Meiner Meinung nach funktioniert soweit alles, jedoch ist es echt nervig immer einen Fehler angezeigt zu bekommen.

Vielleicht kann mir jemand auf die Sprünge helfen.

Gruß Proxima

Hallo zusammen,

Bei mir hängt sich das am Ende folgende Script recht häufig auf. Es steht dann unter PHP-Informationen als Rot gekennzeichnen drinne. Das ist aber nicht bei jedem Start.

Wenn ich nun im die LOG dateien schauen bekomme ich folgendes.

25.10.2011 21:13:33.440 | 27644 | DEBUG | ExecuteThreadID #2 | Skriptausführung: 27644.ips.php ~ Absender: RunScript
25.10.2011 21:14:59.850 | 27644 | WARNING | ExecuteThreadID #2 | Fehler beim Ausführen des Skripts (27644.ips.php): Out of memory
25.10.2011 21:14:59.851 | 27644 | DEBUG | ExecuteThreadID #2 | Ausgeführt, Resultat: -1, Erfolgreich: False, Zeit: 86415 ms

Wie kann ich eingrenzen warum ich „Out of Memory“ bekomme und warum sich das Script sich teilweise aufhängt?

<?

//Konfiguration
$fritzbox = '192.168.0.3';
$fritzgui = 'http://' . $fritzbox . '/cgi-bin/webcm';
$password = '???????';
$anzeigen = array(1, 2, 3); //1 = Kommend, 2 = Kommend (Fehler), 3 = Gehend
$anzahl = 17;                 // Anzahl der Anrufe einstellen
$namenbeschneiden = 50;       // Den Namen abschneiden nach


//Ab hier nichts mehr ändern

$timestamp = time();
$datum = date("d.m.Y",$timestamp);
$uhrzeit = date("H:i",$timestamp);
echo ($uhrzeit);



function TextAbschneiden($Text, $Laenge)
{
    $GekuerzterText = substr($Text, 0, strpos(wordwrap($Text, $Laenge-1, "*!U-M-B-R-U-C-H*"), "*!U-M-B-R-U-C-H*"));

    if($GekuerzterText)
    {
        return $GekuerzterText;
    }
    else
    {
        return $Text;
    }
}
function TelSuche($callerNumber) {
$url_orig="http://www.klicktel.de/inverssuche/index/search?method=searchSimple&_dvform_posted=1&phoneNumber=#TEL#";
$url=str_replace("#TEL#","$callerNumber",$url_orig);
$handle=fopen("$url", "r");
if (!$handle)
{
   // error cannot open file
   echo("ERROR : CANNOT OPEN URL : '$url'
");
}
$lineNb = 0;
$searchTag0 = 'namelink';
$searchTag01 = '<strong>';
$searchTag02 = '</strong>';
$found = 0 ;
while(!$found && !feof($handle))
{
    $lineNb++;
    $buffer = fgets($handle);

    if (strpos($buffer, $searchTag0) != false)
    {
        //echo "Name gefunden in Zeile: ".$lineNb."
";
        $found = 1 ;

        $startLN = strpos($buffer, $searchTag01);
        $endeFN = strpos($buffer, $searchTag02) ;
        $name = substr($buffer, $startLN+8, $endeFN) ;
        $foundName1 = $name;
    }
    else {$foundName1 = "Unbekannt";}
}
fclose($handle);
$foundName1 = html_entity_decode($foundName1);
return $foundName1;
}


$object = IPS_GetObject($IPS_SELF);
$parentID = $object['ParentID'];

//Installer
if ($IPS_SENDER == "Execute")
{

    IPS_SetHidden($IPS_SELF, true);
    IPS_SetName($IPS_SELF, "Auslese-Skript");

    $parentObject = IPS_GetObject($parentID);
    if ($parentObject['ObjectType'] !== 1)
    {
        $instanceID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
        IPS_SetParent($instanceID, $parentID);
        $parentID = $instanceID;
        IPS_SetParent($IPS_SELF, $parentID);
        IPS_SetName($instanceID, "Anruferliste");
    }

//    IPS_SetScriptTimer($IPS_SELF, 300);

}

$login = file_get_contents('http://' . $fritzbox . '/cgi-bin/webcm?getpage=../html/login_sid.xml');

$session_status_simplexml = @simplexml_load_string($login);

if($session_status_simplexml === false)
{
    die("Fehler beim einlesen der XML Daten. Wahrscheinlich ist eine zu alte Firmware installiert");
}
else if ($session_status_simplexml->iswriteaccess == 1)
{
    $SID = $session_status_simplexml->SID;
}
else
{
   $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
            )
    );

    $context  = stream_context_create($opts);
   $sendlogin = file_get_contents($fritzgui, false, $context);

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

//Anrufliste aktualisieren
$postdata = http_build_query(array('getpage' => '../html/de/menus/menu2.html','sid' => $SID, 'var:menu' => 'home', 'var:pagename' => 'foncalls'));

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

$context  = stream_context_create($opts);
$getnewlist = file_get_contents($fritzgui, false, $context);

//Anrufliste abholen
$postdata = http_build_query(array('getpage' => '../html/de/FRITZ!Box_Anrufliste.csv', 'sid' => $SID));

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

$context  = stream_context_create($opts);
$anrufliste = file_get_contents($fritzgui, false, $context);
$anrufliste = explode("
", $anrufliste);

$str = "<table width='90%' align='center'>"; // Farbe anpassen oder style entfernen
$str .= "<tr><td></td><td><b>Datum</b></td><td><b>Name</b></td><td><b>Rufnummer</b></td><td><b>Nebenstelle</b></td><td><b>Zeit</b></td></tr>";

$pos = 0;
for($i=3; $i<=sizeof($anrufliste); $i++)
{
    $eintrag = explode(";", $anrufliste[$i]);
    if($eintrag[2] == "")
      $eintrag[2] = TextAbschneiden(TelSuche($eintrag[3]), $namenbeschneiden);
        if(strlen($eintrag[4]) > 0)
      $eintrag[5] = $eintrag[4];
    if(strlen($eintrag[3]) == 0)
      $eintrag[3] = "Keine Nummer";
    unset($eintrag[4]);
    $caller = $eintrag[0];
        switch($caller) {
       case 1:
          $eintrag[0] = "<img src=/user/fritz/Callin.png>";
          break;
       case 2:
          $eintrag[0] = "<img src=/user/fritz/Callinfailed.png>";
          break;
       case 3:
          $eintrag[0] = "<img src=/user/fritz/Callout.png>";
          break;
        default:
           $eintrag[0] = "";
           break;
    }
    if(in_array($caller, $anzeigen))
    {
        $str .= "<tr>";
        foreach($eintrag as $data)
            $str .= '<td>'.$data.'</td>';
        $str .= "</tr>";

        $pos++;
    }
    if($pos >= $anzahl)
        break;
}
$str .= "</table><FONT SIZE='-7'><p align='right'>erstellt : $uhrzeit</p></FONT>";

$vid = CreateVariableByName($parentID, "Content", 3);
IPS_SetIcon($vid, "speaker");
IPS_SetVariableCustomProfile($vid, "~HTMLBox");
SetValue($vid, $str);

$postdata = http_build_query(array('getpage' => '../html/de/menus/menu2.html', 'sid' => $SID, 'security:command/logout' => 'logout'));

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

$context  = stream_context_create($opts);
$logout = file_get_contents($fritzgui, false, $context);

function CreateVariableByName($id, $name, $type)
{
    global $IPS_SELF;
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false)
    {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
    }
    return $vid;
}

?>

Ich danke schon mal im voraus.

Dirk

Hallo.

Ich habe das Gleiche Problem wie „onkeldirk“.

Bei mir hat das Script jetzt 14 Tage gelaufen. Anrufer wurden schön angezeigt und alles funktionierte.

Jetzt bekomme ich auch keine Aktualisierung mehr und diesen out of memory Fehler.

Neustart des IPS Dienstes, Neustart des Servers etc. bringt nichts.

Bin also genauso ratlos wie „onkeldirk“.

Hat jemand noch das gleiche Problem?

Danke und Gruß
Dirk

Schon mal probiert ob der direkte Aufruf funktioniert.

in der Rückwärtssuche auf klicktel.de

Für die x eine Nummer eingeben.

Ich hatte die Woche auch eine Fehlermeldung, lag aber an Klicktel.

Habe mein Script jetzt wieder aktiviert und es funktioniert wieder.

Wenn da ein Problem bei Klicktel war, wie kommt dann die „out of memory“ Meldung zustande?
Wenn Du es ja auch hattest und es nachvollziehen konntest, hast Du mal nachprüfen können warum dann „out of memory“?

Ich hätte da eine andere Fehlermeldung erwartet. Oder ist das ein Bug in IPS?

Gruß
Dirk

Hatte hier das gleiche Problem. Läuft auch wieder.

@proxima

hast du mittlerweile eine Lösung für den fgets und den feof Fehler gefunden?
bei mir ist das genauso, hab auch den Log handler und krieg ständig die Meldung. Irgendwann lassen sie sich dann auch nicht mehr löschen und es hilft nur noch ips-task beenden…
sonst jemand ne Lösung? mir fehlt leider etwas die Zeit…

Umgestellt auf IPS Kommando Sys_GetURLContent und die nervige Rufnummernverkürzung abgefangen ;).

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);
   $buffer = Sys_GetURLContent($url);
   $searchTag0 = 'namelink';
   $searchTag1 = '<strong>';
   $searchTag2 = '</strong>';

   if ( substr_count( $buffer, "Treffer durch Verkürzung der eingegebenen Rufnummer gefunden." )) {
      $result = "Unbekannt verkürzt";
   } elseif (strpos($buffer, $searchTag0) != false) {
      $startLN = strpos($buffer, $searchTag1) + strlen($searchTag1);
      $endeFN = strpos($buffer, $searchTag2) ;
      $Name = substr($buffer, $startLN, $endeFN - $startLN) ;
      $Name = html_entity_decode($Name);
      $result = $Name;
   } else
      $result = "Unbekannt";  #Keine Nummer gefunden

   return $result;
}