FritzBox Anrufliste als RSS Feed

Hallo,

gibt es eine Möglichkeit von der FritzBox 7220 die Anrufliste im Dashboard dazustellen. Nicht als Webfront Datei.

Evt. als RSS Feed, nur die eingehenden Anrufe mit Datum, Uhrzeit, Nr (oder Name aus dem Örtlichen, oder aus einer TEXT Datei die von Outlook Kontakten exportiert wurden ist) sowie eine Info ob auf den AB gesprochen wurden ist.

Gruß Uwe

Du hast doch das Script schon getestet. Warum passt du es dir nicht enstprechend an?

Du kannst das HTML-Ergebnis auch im Dashboard darstellen.

Hi Ralf,

aber nur im Webbrowser, da ist die gestaltungs Möglichkeit eingeschränkt.

Mit HTML und CSS kannst du deutlich mehr gestalten, als das Dashboard hergibt ;).

Dann schau dir mal hier die Demos an Sencha - Ext JS - Client-side JavaScript Framework :cool:

Hi,

das muss man aber erstmal so hinbekommen, und vor alledem wissen wie das geht.
Ich hatte gehofft das es in die Richtung schon irgendwas gibt.

Gruß Uwe

Dann versuch dich mal an meinem Script :). Ein gemischt aus verschiedenen Scripten und Schnipseln aus dem Forum.

Als Ziel Script in die Registervariable, außerdem musst du ein paar Variablen anlegen und natürlich dein FB Passwort eintragen ;).

Bei $anrufliste findest du ein wenig CSS zum Design anpassen ;).

<?
if ($IPS_SENDER == "Execute") {
    echo "Dieses Script kann nicht von Hand gestartet werden.";
    return;
}

$debug = true;
//$debug = false;
if ($debug) IPS_LogMessage(IPS_GetName($IPS_SELF), "Script START");


// Normaler Scriptdurchlauf, nachdem das Script durch die RegVar getriggert wurde
// Daten aus Registervariable lesen
$daten = explode(";", $IPS_VALUE);
// Datum/Uhrzeit mit ausgeben
define ("datetime", $daten[0]);

// Daten aus Registervariable auswerten
switch($daten[1]) {
    #Ab hier Auswertung für Anrufer-------------------------------------------------
	case "RING":
		$Name = SucheNummer2($daten[3]);
		if ($debug) IPS_LogMessage(IPS_GetName($IPS_SELF), "Nummer: " . $daten[3] . " Name : " . $Name);
		$interneNummer = SucheIntern($daten[4]);
		SetValue(53258 /*[.Kommunikation\Anrufe\Eingehender Anruf]*/ , "Eingehender Anruf ".datetime. "
an ".$interneNummer."
von ".$Name);
		SetValue(42423 /*[.Kommunikation\Anrufe\Letzter Anruf]*/ ,     "Letzter Anruf     ".datetime. "
an ".$interneNummer."
von ".$Name);
   break;
	// Auswertung für ausgehende Anrufe
   case "CALL":
		$interneNummer = SucheIntern($daten[4]);
	   $externeNummer = $daten[5];
	   SetValue(55304 /*[.Kommunikation\Anrufe\Ausgehender Anruf]*/,  "Ausgehender Anruf ".datetime."
von ".$interneNummer."
an ".$externeNummer);
   break;

   #Ab hier Auswertung für Anrufliste----------------------------------------------
   case "DISCONNECT":
      // Dashboard Anzeige sofort nach Auflegen leeren
		SetValue(53258 /*[.Kommunikation\Anrufe\Eingehender Anruf]*/, "");
		SetValue(55304 /*[.Kommunikation\Anrufe\Ausgehender Anruf]*/, "");

		// Puffer (Fritz.Log Port) löschen
		RegVar_SetBuffer(55775 /*[.Kommunikation\FB_LogdatenRegister]*/, "");  #ANPASSEN!

	   $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    = '..........';  #ANPASSEN!
	   $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;
			}
      }

		//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);

		//Anrufliste einlesen
		$filename = "../webfront/user/Fritzbox/Anrufliste.csv";
		$id = @fopen($filename, "r");
		while ($data = fgetcsv($id, filesize($filename),";")) $table[] = $data;
		@fclose($id);
		//Anrufliste auswerten
		setlocale (LC_ALL, 'German_Germany.1252');
		$s1 = strftime("Aktualisiert am %A, den %d.%m.%y, um %H:%M Uhr");
		$anruferliste='<html><head><style type="text/css">body  {  background-color:#D4D0C8; font: 10pt Arial; margin:0; padding:10px 5px 0px 5px;} </style></head><body scroll="no"><table width="780px" border="1" cellspacing="0" cellpadding="4">
		<tr><td width="20%"><b>Datum</b></td><td width="40%"><b>Anrufer</b></td><td width="15%"><b>Nummer</b></td><td width="5%"><b>Angen.</b></td><td width="15%"><b>Ziel</b></td></tr>';
		array_shift($table); #die ersten drei Zeilen aus dem Array löschen
		array_shift($table);#die ersten drei Zeilen aus dem Array löschen
		array_shift($table);#die ersten drei Zeilen aus dem Array löschen
		$max_row = 0;
		foreach($table as $row) { #Rest der Tabelle auswerten
			if ($row[0]<> 3) { #Abgehende Anrufe ausblenden
				if (($max_row++) >= 15) {break;}
				$Rufnummer = $row[3];  #Rufnummer aus Array holen
				$word_count = str_word_count($row[2]);
				if ($word_count == 0) {
					$row[2] = SucheNummer2($Rufnummer);
				}
				if ($row[0] == 1) $row[0]="Ja";  #Angenommen JA
				else $row[0]="Nein";             #Angenommen Nein
				$pos = (strpos($row[5], ':')+1);
				$an_nummer = SucheIntern( substr($row[5], $pos));
				if ($row[3] == "") $row[3] = "Keine Nummer";
				if ($row[2] == $Rufnummer ) $row[2] = "Unbekannt";
				$row[2] = substr($row[2], 0, 35);
				$anruferliste= $anruferliste.'<tr><td>'.$row[1].'</td><td>'.$row[2].'</td><td>'.$row[3].'</td><td>'.$row[0].'</td><td>'.$an_nummer.'</td></tr>';
			}
		}
		$anruferliste =$anruferliste.'</table><small>'.$s1.'</small></body></html>';
		setvalue(23324 /*[.Kommunikation\Anrufe\Anrufliste]*/, $anruferliste);  #ANPASSEN!  IPS Variable für speichern der Liste

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

		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 ( substr_count( $buffer, "Die Ergebnisse wurden durch Verkürzung der eingegebenen Rufnummer gefunden." )) {
         $gefunden = 1;
         $row[2]= "unbekannt 1";
      } elseif (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);
         $row[2]=$Name;
      } else
			$row[2]="unbekannt 2";  #Keine Nummer gefunden
   return;
	}
}

function SucheNummer2($Rufnummer) // via Das Örtliche
{
//$debug = true;
$debug = false;

// Nummern ohne Eintrag im öffentlichen Telefonbuch welche aber bekannt sind und übertragen werden ($intern).
// unendlich erweiterbar
  $array["Nummer"][1] = "03012345678";
  $array["Name"]  [1] = "Angela Merkel";
  $array["Nummer"][2] = "03012345679";
  $array["Name"]  [2] = "Verteidigungsminister";

   if(in_array($Rufnummer, $array["Nummer"])) {
		$intern = array_search($Rufnummer, $array["Nummer"]);
		$Name = $array["Name"][$intern];
      if ($debug) IPS_LogMessage("FB_Anrufliste", "SucheNummer2: Rufnummer INTERN gefunden, ".$Name);
   } else {
		$url="http://www.dasoertliche.de/Controller";
		$query=array(
		    "form_name"=>"search_inv",
		    "ph"=>$Rufnummer
		);
		$data=http_post_fields($url,$query);

		if(preg_match('/na: "(.*)"/', $data, $result)) {
			// Haben wir ein Ergebniss?
		   $Name=$result[1];
      	if ($debug) IPS_LogMessage("FB_Anrufliste", "SucheNummer2: Rufnummer im Örtlichen gefunden, ".$Name);
		} else {
		    $Name=$Rufnummer;
          if ($debug) IPS_LogMessage("FB_Anrufliste", "SucheNummer2: Rufnummer NICHT gefunden, ".$Name);
		}
	}
	Return $Name;
}

function SucheIntern($Nummer) {

	   switch( $Nummer ) {
		case "1234567":
		   $Intern = "Privat";
		break;
		case "1234568":
		   $Intern = "Fax";
		break;
		default:
		   $Intern =$Nummer;
		break;
	   }
	return $Intern;
}
?>

Hallo Ralf, wie wird das Script gestartet.

zweiter Satz :wink:

Hi Ralf,

das Sript startet jetzt, das habe ich hinbekommen, aber es geht irgenwo auf Fehler, ich weiß aber noch nicht wo. Es gibt mir keine Fehlerzeile aus.
Gruß Uwe