Also wie gesagt, Basis ist das hier.
Nachdem ich die Anrufliste im Dashboard und nicht im Webfront anzeige, habe ich einige Html-Sachen aus dem Script entfernt. Auch Teile der Installationsroutine fehlen. Dafür sind dann wieder Teile aus anderen Scripten hinzu gefügt.
Im großen und ganzen ist das sehr auf meine Bedürfnisse und Umgebung angepasst. Das wird sich nicht auf andere Umgebungen übernehmen lassen. Jedenfalls nicht ohne weiteres.
Vorraussetzung das mein Prinzip funktioniert, ist das nach dem Ende jedes Anrufes das Script ausgeführt wird. Ausgelöst wird das mit der Meldung „Disconnect“. Siehe hier
Das Anrufbeantworter-Script ist das hier. Den orginalen Beitrag finde ich nicht mehr, ich weis leider auch nicht mehr aus wessen Feder das entsprungen ist.
Wichtig ist auch das keine weiteren Nachrichten auf der Box liegen. Sonst funktioniert die Zuordnung File<->Anrufer nicht mehr. Im /Rec Ordner liegt nur eine „Dummy“ Datei (ein leeres txt oder so), damit war es für mich leichter zu Programmieren.
Der Ablauf ist, simpel gesagt, folgender:
-Anruf ist beendet (also auch wenn eine Nachricht hinterlassen wurde)
-Script wird gestartet
-Wenn eine neue Nachricht vorhanden ist, wird sie auf die Festplatte kopiert
-Sie wird in eine *.wav umgewandelt und mit dem Namen „Datum“.„Uhrzeit“.„Anrufername“ versehen
-Nachricht auf der Box wird gelöscht
Also hier nochmal meine Version das ganzen. Bitte nicht hauen, der Syntax bzw. die Programmierung ist bestimmt grausam, ich versuche halt mit meinen bescheidenen Kentnissen was zu erreichen.
<?
$dir = 'ftp://192.168.0.11/Intenso-MicroLine-01/FRITZ/voicebox/rec/';
$files1 = scandir($dir,0);
$zaehler = count ($files1) -1;
//Konfiguration
$fritzbox = 'fritz.box';
$fritzgui = 'http://' . $fritzbox . '/cgi-bin/webcm';
$password = 'xxx';
$anzahl = 10;
//Ab hier nichts mehr ändern
$object = IPS_GetObject($IPS_SELF);
$parentID = $object['ParentID'];
$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);
//Verarbeitung
$str1 = "";
$str2 = "";
$str3 = "";
$pos = 0;
$pos1= 0;
$pos2= 0;
$pos3= 0;
for($i=3; $i<=sizeof($anrufliste); $i++)
{
$eintrag = explode(";", $anrufliste[$i]);
if(strlen($eintrag[2]) > 0) //Test ob Anrufername in [2]
$eintrag[3] = $eintrag[2]; //wenn ja dann nur Name anzeigen auf [3]
unset($eintrag[2]); //löscht eintrag [2]
if(strlen($eintrag[4]) > 0) //wenn Nebenstelle vorhanden eigene Nummer nicht Anzeigen
$eintrag[5] = $eintrag[4];
if(strlen($eintrag[3]) == 0) //wenn Rufnummer 0 dann Unbekannt anzeigen
$eintrag[3] = "Unbekannt";
unset($eintrag[4]);
if($eintrag[5] == "Anrufbeantworter") //Anrufe auf AB als "abwesend" kennzeichnen
{ $eintrag[0] = "2";
if ($zaehler >0)
{
//* Nachrichten zählen *
$counter = ($eintrag[1]." ".$eintrag[3]);
$counter = preg_replace("/:/", ".", $counter);
$dir = 'ftp://192.168.0.11/Intenso-MicroLine-01/FRITZ/voicebox/rec/';
$files1 = scandir($dir,0);
//* Nachrichten auf Festplatte kopieren *
$File = $files1[1];
$filename = "ftp://192.168.0.11/Intenso-MicroLine-01/FRITZ/voicebox/rec/$File";
$source = "/Intenso-MicroLine-01/FRITZ/voicebox/rec/$File";
$target = fopen("C:\IP-Symcon\anrufb.fritz", "w");
$conn = ftp_connect("192.168.0.11");
ftp_login($conn,"ftpuser","1132");
ftp_fget($conn,$target,$source,FTP_ASCII);
//* Nachrichten in Wav umwandeln *
IPS_Sleep(3500);
unlink("$filename");
IPS_Execute("C:\IP-Symcon\dec.exe", "C:\IP-Symcon\anrufb.fritz C:\IP-Symcon\Aktuell.wav", false, false);
IPS_Sleep(2000);
if (file_exists("C:\IP-Symcon\Aktuell.wav"))
{
copy ("C:\IP-Symcon\Aktuell.wav", "C:\IP-Symcon\Anrufbeantw/$counter.new.wav"); //hier dateinamen festlegen (statt $counter)
}
//* FTP Tunnel wieder schließen *
ftp_close($conn);
$zaehler = 0;
}}
unset($eintrag[5]); //Mobilteilname entfernen
$eintrag[6] = $eintrag[6].";"; //; nach Verbindungszeit hinzufügen
$caller = $eintrag[0]; //1,2,3 duch Eing... ersetzten
switch($caller){
case 1:
{
if($pos1 != $anzahl)
{foreach($eintrag as $data)
$str1 .= " ".$data;
$pos1++;
}}
break;
case 2:
{
if($pos2 != $anzahl)
{foreach($eintrag as $data)
$str2 .= " ".$data;
$pos2++;
}}
break;
case 3:
{
if($pos3 != $anzahl)
{foreach($eintrag as $data)
$str3 .= " ".$data;
$pos3++;
}}
break;
}
if(($pos1+$pos2+$pos3) >= ($anzahl*3))
break;
}
SetValueString(12702 /*[Dashboard\Fritzbox\Ankommend]*/, $str1);
SetValueString(43809 /*[Dashboard\Fritzbox\Abwesend]*/, $str2);
SetValueString(11937 /*[Dashboard\Fritzbox\Abgehend]*/, $str3);
$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);
// Ab hier eigener Code - Anrufe Abwesend vergleichen, zählen
$abw=GetValueString(43809 /*[Dashboard\Fritzbox\Abwesend]*/);
$abwalt=GetValueString(26645 /*[Dashboard\Fritzbox\Abwesend_alt]*/);
if ($abw != $abwalt)
{$aenderung = array_diff(explode(";", $abw), explode(";", $abwalt));
$anz = (count($aenderung));
SetValueInteger(35582 /*[Dashboard\Hauptbild\Anzahl Anrufe]*/, $anz);
}
// Anrufbeantworternachrichten zählen
$dir = "C://IP-Symcon//Anrufbeantw/";
$files = scandir($dir,0);
$anz = 0;
foreach ($files as $var)
{if (substr_count($var, '.new') > 0)
{$anz ++;}
}
SetValueInteger(18597 /*[Dashboard\Hauptbild\Anzahl Nachrichten_AB]*/, $anz);
?>
falls du etwas ähnliches vor hast oder Teile verwenden möchtest versuche ich natürlich so gut ich kann weiter zu helfen.
gruß
goran