Anrufmonitor verursacht viele Logfileinträge

Hallo,

ich nutze ein Anrufmonitor-Skript für die Fritzbox (Client Socket Port 1012) aus dem Forum welches viele hundert Logfileeinträge erstellt.

Auszug aus dem Log:


02.09.2010 11:16:20.93 | 16139 | DEBUG   | VariableManager      | [Abfrage_FritzBox\Anrufmonitor\Letzter Anruf] = am 02.09.10 11:16:19 von 03520429667
02.09.2010 11:16:20.93 | 51557 | DEBUG   | VariableManager      | [Abfrage_FritzBox\Anrufmonitor\Eingehender Anruf] = am 02.09.10 11:16:19 von 03520429667
02.09.2010 11:16:20.93 | 16139 | DEBUG   | VariableManager      | [Abfrage_FritzBox\Anrufmonitor\Letzter Anruf] = am 02.09.10 11:16:19 von 03520429667
02.09.2010 11:16:20.93 | 51557 | DEBUG   | VariableManager      | [Abfrage_FritzBox\Anrufmonitor\Eingehender Anruf] = am 02.09.10 11:16:19 von 03520429667


Diese Enträge sind über 250 mal vorhanden!

Ist das normal oder liegt hier ein Fehler im Script (evtl. Registervariable) vor? Ich kann keinen offensichtlichen Fehler finden. Vielleich kann sich das mal ein Profi anschauen.

Danke und Gruß Tommy

<?

// 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] = "****";
  $array["Name"]  [1] = "Papa Mobil HTC";
  $array["Nummer"][2] = "****";
  $array["Name"]  [2] = "Papa Mobil 1&1";
  $array["Nummer"][3] = "****";
  $array["Name"]  [3] = "Mama Mobil";
  $array["Nummer"][4] = "****";
  $array["Name"]  [4] = "Tom Mobil";
  $array["Nummer"][5] = "xxxxxx";
  $array["Name"]  [5] = "E";
  $array["Nummer"][6] = "xxxxxx";
  $array["Name"]  [6] = "F";

// 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(51557 /*[Abfrage_FritzBox\Anrufmonitor\Eingehender Anruf]*/, "am ".datetime. " von ".$array["Name"][$intern]);
       SetValue(16139 /*[Abfrage_FritzBox\Anrufmonitor\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 == 738636)
   {
      $interneNummer = "Büro";
    }
    else
    {
       $interneNummer = "Privat";
    }
    $externeNummer = $daten[5];
    SetValue(53935 /*[Abfrage_FritzBox\Anrufmonitor\Ausgehender Anruf]*/, "von ".$interneNummer." zu ".$externeNummer);
   break;

   case "DISCONNECT":
   RegVar_SetBuffer(25759 /*[Abfrage_FritzBox\Anrufmonitor\Register Variable]*/, "");
   SetValue(51557 /*[Abfrage_FritzBox\Anrufmonitor\Eingehender Anruf]*/, "keiner");
   SetValue(53935 /*[Abfrage_FritzBox\Anrufmonitor\Ausgehender Anruf]*/, "keiner");
   IPS_RunScript(53821 /*[Abfrage_FritzBox\Anruferliste\Anruferliste\Auslese-Skript]*/);
   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);
$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;
        SetValue(51557 /*[Abfrage_FritzBox\Anrufmonitor\Eingehender Anruf]*/, "am ".datetime. " von ".$foundName1);
        SetValue(16139 /*[Abfrage_FritzBox\Anrufmonitor\Letzter Anruf]*/, "am ".datetime. " von ".$foundName1);

    }
    else
	  {
	    $foundName1 = "Unbekannt";
   	 SetValue(51557 /*[Abfrage_FritzBox\Anrufmonitor\Eingehender Anruf]*/, "am ".datetime. " von ".$Rufnummer);
       SetValue(16139 /*[Abfrage_FritzBox\Anrufmonitor\Letzter Anruf]*/, "am ".datetime. " von ".$Rufnummer);
	  }
}
fclose($handle);
$foundName1 = html_entity_decode($foundName1);
return $foundName1;
}




?>

Dann gehen bei euch wohl viele Anrufe ein :).

Die Meldungen werden immer dann geschrieben, wenn eine Variable aktualisiert wird.

250 Einträge sind doch nicht viel. Mein Logfile ist pro Tag ca. 11 MB groß. Da sind viele Einträge mehrfach vorhanden :).

Hallo Ralf,

da habe ich mich vielleicht etwas ungenau ausgedrückt. Die 250 Logfileeinträge (oben ist nur ein Auszug der Einträge) beziehen sich auf „pro Anruf“, also jeder Anruf erzeugt weit über 250 Einträge. Ich denke das das Skript so oft aufgerufen wird, aber warum? Das Thema Registerveriable habe ich noch nicht ganz geblickt!
Mein Logfile ist ca. 5 MB groß und dabei laufen noch nicht mal 10 % der Sachen die ich gerne machen möchte.

Gruß Tommy

Hast Du dem Script noch irgendeinen Trigger zugefügt. Wenn ja, löschen. Das Script wird nur von der Registervariable getriggert.

Nein habe ich nicht.

Wie oft bzw. wann wird das Skript von der Registervariable getriggert? Jedes Zeichen, Buffer voll etc…

Gruß Tommy

RING, CALL, DISCONNECT.

Hiermit kannst Du mal testen. Einfach eine passende Nummer eintragen. ID von der Regvar anpassen.!

RegVar_SetBuffer(27536 /*[Fritzbox\Fritzport1012]*/, '20.11.09 12:16:23;RING;0;06402504903');
$daten = explode(";", RegVar_GetBuffer(27536 /*[Fritzbox\Fritzport1012]*/));


// Daten aus Registervariable lesen
//$daten = explode(";", $IPS_VALUE);
// Datum/Uhrzeit anzeigen
define ("datetime", $daten[0]);

Hallo Rainer,

mit deinem Testskript funktioniert es. Komischerweise geht es jetzt auch mit meinem Skript ohne das ich daran etwas geändert habe. Hast du eine Erklärung dafür?

Gruß Tommy

Hallo nochmal,

hab den Fehler gefunden und wollte die Lösung des Problems nicht schuldig bleiben.

Es lag doch am Skript, man sollte doch nicht alles Blind aus dem Forum übernehmen ohne sich die Funktionsweise klar zu machen. Die Ursache für die vielen Log-Einträge lag in der Funktion zu Reverssuche der Telefonnummer. Dort wurde die Variable in einer Schleife viele Male geschrieben.

Anbei das Skript wie es jetzt bei mir läuft, vielleicht kann es ja einer brauchen.

Gruß Tommy

<?
// 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] = "*";
  $array["Name"]  [1] = "Papa Mobil HTC";
  $array["Nummer"][2] = "*";
  $array["Name"]  [2] = "Papa Mobil 1&1";
  $array["Nummer"][3] = "*";
  $array["Name"]  [3] = "Mama Mobil";
  $array["Nummer"][4] = "*";
  $array["Name"]  [4] = "Tom Mobil";
  $array["Nummer"][5] = "xxxxxx";
  $array["Name"]  [5] = "E";
  $array["Nummer"][6] = "xxxxxx";
  $array["Name"]  [6] = "F";

// Daten aus Registervariable auswerten
switch($daten[1])
{
    case "RING":
    $Rufnummer = $daten[3];

if ($Rufnummer <> "")
{
    if(in_array($Rufnummer, $array["Nummer"]))
   {
       $intern = array_search($Rufnummer, $array["Nummer"]);
       SetValue(51557 /*[Abfrage_FritzBox\Anrufmonitor\Eingehender Anruf]*/, "am ".datetime. " von ".$array["Name"][$intern]);
       SetValue(16139 /*[Abfrage_FritzBox\Anrufmonitor\Letzter Anruf]*/, "am ".datetime. " von ".$array["Name"][$intern]);
       echo "Anruf am ".datetime. " von ".$array["Name"][$intern];
		 RegVar_SetBuffer(25759 /*[Abfrage_FritzBox\Anrufmonitor\Register Variable]*/, "");
       return;
   }
   else
   {
      $Rufnummer = SucheNummer($Rufnummer); //Rufnummer suchen
      SetValue(51557 /*[Abfrage_FritzBox\Anrufmonitor\Eingehender Anruf]*/, "am ".datetime. " von ".$Rufnummer);
      SetValue(16139 /*[Abfrage_FritzBox\Anrufmonitor\Letzter Anruf]*/, "am ".datetime. " von ".$Rufnummer);
   }
   
}
else
{
	  	 SetValue(51557 /*[Abfrage_FritzBox\Anrufmonitor\Eingehender Anruf]*/, "am ".datetime. " Nummer unterdrückt");
       SetValue(16139 /*[Abfrage_FritzBox\Anrufmonitor\Letzter Anruf]*/, "am ".datetime. " Nummer unterdrückt");
}
RegVar_SetBuffer(25759 /*[Abfrage_FritzBox\Anrufmonitor\Register Variable]*/, "");
  break;

   case "CALL":
   $interneNummer = $daten[4];
   if ($interneNummer == 738636)
   {
      $interneNummer = "Büro";
    }
    else
    {
       $interneNummer = "Privat";
    }
    $externeNummer = $daten[5];
    SetValue(53935 /*[Abfrage_FritzBox\Anrufmonitor\Ausgehender Anruf]*/, "von ".$interneNummer." zu ".$externeNummer);
	 RegVar_SetBuffer(25759 /*[Abfrage_FritzBox\Anrufmonitor\Register Variable]*/, "");
   break;

   case "DISCONNECT":
   RegVar_SetBuffer(25759 /*[Abfrage_FritzBox\Anrufmonitor\Register Variable]*/, "");
   SetValue(51557 /*[Abfrage_FritzBox\Anrufmonitor\Eingehender Anruf]*/, "keiner");
   SetValue(53935 /*[Abfrage_FritzBox\Anrufmonitor\Ausgehender Anruf]*/, "keiner");
   IPS_RunScript(53821 /*[Abfrage_FritzBox\Anruferliste\Anruferliste\Auslese-Skript]*/);
//   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);
$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;
	  }
}
fclose($handle);
$foundName1 = html_entity_decode($foundName1);
return $foundName1;
}
?>