Anruferliste aus FritzBox auslesen

Danke, das war es, mit dem Liveupdate… :rolleyes:

Was mir nur noch nicht klar ist, wo ich den Fehler in der Ausgabe des IPS Logger (siehe in meinem vorherigen Beitrag) hätte erkennen hätte müssen?

Aber: Heute ist ein guter Tag! Die Anrufliste erscheint wieder im IPS, die Welt ist nicht untergegangen, dreimal werden wir noch wach, und ab heute nachmittag ist die Arbeit bis nächstes Jahr vorbei :wink:

Danke für die Hilfe, Gruß
Olaf

Naja, das mit der Welt ist ja noch nicht ausgestanden, es sind ja noch ein paar Stunden und wenn das nicht klappt wird es end mit Weihnachtsgeschenken, ich hab extra deswegen keine gekauft :smiley:

Das ist der kleine Unterschied zwischen der von mir erwähnten Log-Datei und dem IPS-Logger. Die IPS Logdatei schreibt wenn ein Modul nicht gestartet werden kann und teilweise auch warum es das nicht tut. :wink:

Gruß
Bruno

Hallo dpoessl

Nur leider stimmt bei mir die Anrufdauer der einzelnen Gespräche nicht.

Es steht immer 0:00 bzw manchmal 0:01

Die Zeit stellt Std:Min dar (und nicht wie man meinen könnte) Min:Sek !

Und - bei mir steht 0:00 bei Anrufen, die wir nicht annehmen (keiner Zuhause) !

Vielleicht hilft dieses Wissen wieder etwas weiter.

Gruß
Lutz

ok besten Dank…

ich musste wegen versch. Probleme wieder auf die 5.22 zurück.

Leider geht jetzt das Skript nicht mehr.


 <?
/*************************************************************************************************/
 /* Konfiguration                                                                                 */
 /*************************************************************************************************/
 // FritzBox / Adresse:
// Tragen Sie hier den Hostnamen (z.B. Fritz.Box) oder die IP-Adresse (z.B. 192.168.1.1) der
 // Fritzbox ein:
$fritzbox_Adresse = 'xxx';

// FritzBox / Password:
// Zum auslesen der Anruferliste ein evtl. gesetztes Fritzbox-Kennwort benötigt. Wenn Sie die
 // Fritzbox-GUI mit einem Kennwort gesichert haben (empfohlende Einstellung) dann tragen Sie hier
 // das entsprechende Kennwort ein. Haben Sie kein Kennwort für die GUI tragen Sie bitte einen
 // Leerstring ("") ein:
$fritzbox_Password = 'xxx';

// FritzBox / Filter:
// Die Fritzbox erfasst alle ein- und ausgehenden Verbindungen. Das können sein:
 // 1 = ankommende Verbindung, die entgegengenommen wurde
// 2 = ankommende Verbindung, die niemand entgegengenommen hat (sog. verpasster Anruf)
 // 3 = abgehende Verbindung
// Tragen Sie in das Array die Kennnummern der Verbindungstypen ein, die im WebFront angezeigt
 // werden sollen:
$liste_Filter = array(4,2,1);

// Liste / Anzahl:
// Je nach Platzverhältniss im WebFront passen mehr oder weniger Zeilen in die Anzeige. Sind mehr
 // Zeilen in der Tabelle als Platz im Anzeigebereich vorhanden ist, wird automatisch ein Scroll-
 // balken eingeblendet. Um das zu vermeiden kann die Anzahl der anzuzeigenden Verbindungen limi-
 // tiert werden. Tragen Sie hier einen Wert zwischen 1 und 300 ein (die Fritzbox liefert maximal
 // 300 Einträge zurück):
$liste_Anzahl = 14;

// Liste / Limit Namen:
// Sind die Einträge im Feld Namen zu lang für ihre Anzeige, so können Sie diese kürzen lassen.
 // Die Funktion schneidet an der letzten möglichen Wortgrenze. Sie können hier Werte zwischen
 // 0 und n eintragen, wobei 0 für NICHT kürzen steht, jeder andere Wert für kürzen auf n Zeichen:
$liste_LimitNamen = 30;

// Liste / Filter Nebenstellen:
// Mit diesem Parameter legen Sie fest, welche Nebenstellen nicht in der Anzeige dargestellt werden
 // sollen (sie werden durch die eigene Rufnummer ersetzt). Dies ist z.B. dann sinnvoll, wenn hinter
 // der Fritzbox eine ISDN-Anlage sitzt und diese in der Fritzbox als solche ohne spezielle MSN
 // eingetragen ist. Dadurch erscheint in der Fritzbox-Anruferliste unter Nebenstelle immer nur der
 // Name, mit dem die Telefonanlage eingetragen ist. Und durch Eintragen dieses Namens in den Konfi-
 // gurationsparameter wird dieser nichtssagende Eintrag die die angerufene MSN ersetzt:
$liste_FilterNebenstelle = array('ISN Gerät');

// Suche / Modus:
// Mit dieser Einstellung legen Sie fest, ob das Skript bei fehlendem Namen evtl. ein öffent-
 // liches Telefonverzeichnis per Invers-Suche befragen soll. Derzeit stehen 3 Telefonverzeichnisse
 // zur Verfügung. Sie können hier folgende Werte eintragen:
// 0                    Invers-Suche abgeschaltet
// 1                    Invers-Suche bei DasOertliche.de
// 2                    Invers-Suche bei KlickTel.de
// 3                    Invers-Suche bei TelSearch.ch
$suche_Modus = 2;

// Suche / TelNummerWennNichtGefunden
// Mit dieser Einstellung legen Sie fest, ob bei nicht erfolgreicher Suche die Telefonnummer
 // im Namensfeld eingetragen oder ob ein vorgegebener, statischer Text dort erscheinen soll.
 // 1                    Es wird die Telefonnummer des Anrufers im Feld Name eingetragen,
 //                      wenn die Inverssuche nicht erfolgreich war.
// 0                    Es wird der stat. Text Suche/TextTelNummerNichtGefunden eingetragen.
$suche_TelNummerWennNichtGefunden = 0;

// Suche / TextTelNummerNichtGefunden
// Mit dieser Einstellung legen Sie den Text fest, der angezeigt werden soll, wenn eine
 // durchgeführte Inverssuche kein Ergebnis geliefert hat. Siehe auch Einstellung des
 // Parametes Suche/TelNummerWennNichtGefunden
$suche_TextTelNummerNichtGefunden = "-Unbekannt-";

// Suche / Ergebnis Felder:
// Zu verwendene Ergebnisfelder bei Invers-Suche:
// Die Inverssuche liefert einen Datensatz mit den folgenden Feldern:
// Name                 Name des Anrufers
// Strasse              Strasse des Anrufers, ohne Hausnummer
// Hausnummer           Hausnummer des Anrufers
// PLZ                  Postleitzahl des Anrufers
// Ort                  Ort des Anrufers
// StrasseHausnummer    Kombifeld, besteht aus Strasse, einem Leerzeichen und Hausnummer
 // PLZOrt               Kombifeld, besteht aus PLZ, einem Leerzeichen und Ort
// Mit diesem Parameter legen Sie fest, welche/s Feld/er Sie in der Anzeige haben möchten
 // (Achtung: auch hierfür ist die Längenbegrenzung $liste_LimitNamen wirksam):
$suche_ErgebnisFelder = array('Name');

// Suche / Feldseparator:
// Mit dieser Einstellung legen Sie fest, welche/s Zeichen zwischen den Feldern eingefügt werden
 // soll. Voreingestellt ist ein Leerzeichen. Um z.B. eine mehrzeilige Anzeige zu erreichen können
 // Sie den Feldseparator auf CRLF ändern:
$suche_FeldSeparator = ', ';

// Suche / Treffer Markieren:
// Mit diesem Parameter legen Sie fest, ob per Invers-Suche gefundene Einträge markiert werden
 // sollen oder nicht. Die folgenden Optionen stehen zur verfügung:
// 0                    Keine Markierung
// 1                    Markierung per Klammerstern "(*)" am ANFANG des Eintrags.
 // 2                    Markierung per Klammerstern "(*)" am ENDE des Eintrags.
 // 3                    Markierung per Symbol am ANFANG des Eintrags (Symbol = SEARCHHIT)
 // 4                    Markierung per Symbol am ENDE des Eintrags (Symbol = SEARCHHIT)
 $suche_TrefferMarkieren = 3;

// Suche / CacheExpireTime
// Zur Beschleunigung der Listenerstellung und zur Entlastung der Suchseiten ist in die Such-
 // funktionen ein Caching der Ergebnisse eingebaut. Für jeden erfolgreich ermittelten Eintrag
 // wird eine Datensatz in diesem Suchcache angelegt, der zukünftig sofort das Ergebnis liefert.
 // Damit dieser Cache nicht unendlich groß wird, hat jeder Datensatz eine Ablaufzeit. Danach
 // wird er aus dem Cache wieder entfernt.
// Dieser Parameter steuert, wie lange gefundene Einträge zu Rufnummern im Cache verbleiben.
 // Die Angabe erfolg in Sekunden, für 24 Stunden ist also 86400 (=24*60*60) einzutragen:
$suche_cacheExpireTime = 86400 /*[Objekt #20864 existiert nicht]*/;

// Suche / CacheVarID
// Mit diesem Parameter kann der Cache für mehrere Skripte gemeinsam genutzt werden.
 // Ist dieser Parameter ungleich 0 ist, so wird er als VariablenID aufgefasst und der Cache in
 // der entsprechenden Variable gespeichert. Damit einhergehend wird eine Verriegellung gegen
 // gleichzeitige Zugriffe auf den Cache aktiviert, die mehrere Instanzen des Skripts
 // untereinander im Zugriff synchronisiert. Defaultmäßig ist diese Funktion deaktiviert (d.h.
 // der Parameter ist auf 0 gesetzt:
$suche_cacheVarID = 0;

// Anzeige / Felder:
// Zur Anzeige im Webfront wird eine HTML-Tabelle erzeugt. Mit dieser Einstellung legen Sie fest,
 // welche Felder in welcher Reihenfolge in der Tabelle angezeigt werden sollen. Die folgenden
 // Felder stehen ihnen dafür zur Verfügung:
// 0: Typ               Anzeige des Verbindungstyps. Je nach Typ wird ein entsprechendes Symbol
 //                        angezeigt (1 = CALLIN, 2 = CALLFAIL, 3 = CALLOUT, siehe Anzeige/Symbole)
 // 1: Datum             Datum und Uhrzeit des Anruft
// 2: Name              Name des Anrufers
// 3: Rufnummer         Rufnummer des Anrufers
// 4: Nebenstelle       Die eigene Nebenstelle. Ist dieses Feld leer oder trifft eine der Werte
 //                        aus $keineNebenstelle zu, so wird das Feld "Eigene Rufnummer" verwendet
 // 5: Eigene Rufnummer  Hier erscheint die Multiple Subscriber Number (MSN), welche der Anrufer
 //                        erreichen wollte.
// 6: Dauer             Hier wird die Dauer des Gesprächs ausgegeben. Die Dauer wird minutengenau
 //                        erfasst und als Stunden:Minuten darstestellt.
// Tragen Sie in den Parameter die Indexnummern der Felder in der gewünschten Reihenfolge ein, die
 // in der Ergebnistabelle erscheinen sollen:
$anzeige_Felder = array(0, 1, 2, 3, 4, 6);

// Anzeige / Datum Maskieren:
// Diese Option aktivert eine Ersetzung das Datums, wenn der Eintrag von Heute oder Gestern ist.
 // Somit sind die aktuellen Einträge leicher von älteren Einträgen zu unterscheiden.
 // Folgende Optionen stehen zur verfügung:
// True                 Einträge mit aktuellem Datum durch "Heute", mit Datum von gestern durch
 //                      "Gestern" ersetzen. Die Uhrzeitanzeige bleibt davon unberühert.
$anzeige_DatumMaskieren = true;

// Anzeige / Spaltenbreite
// Mit dieser Option legen Sie die Spaltenbreite der anzuzeigenden Spalten fest. Die Option definiert
 // für jede Spalte die Breite individuell, adressiert über den Feldindex gemäß Option Anzeige/Felder.
$anzeige_SpaltenBreite = array(
    0 => '30em',
    1 => '210em',
    2 => '300em',
    3 => '125em',
    4 => '125em',
    5 => '75em',
    6 => '50em'
);

// Anzeige / Tabellenstyle
// Mit dieser Option können CSS-Styleangaben für die verschiedenen Tabellenelemente machen.
 // Die Tabelle hat folgenden Aufbau, die Feldkennzeichner stehen in {}-Klammern:
 //    <table style="{T}">
//     <thead style="{H}">
//            <tr style="{HR}"><th style="{HFn}">text</th><th style="{HFn}">text</th>...<th style="{HFn}">text</th></tr>
 //     </thead>
//     <tbody style="{B}">
//         <tr style="{BRG}"><td style="{DFGn}">daten</td><td style="{DFGn}">daten</td>...<td style="{DFGn}">daten</td></tr>
 //         <tr style="{BRU}"><td style="{DFUn}">daten</td><td style="{DFUn}">daten</td>...<td style="{DFUn}">daten</td></tr>
 //       ...
//    </tbody>
// </table>
// Die gewünschten Styleangaben werden als String im Array hinterlegt, jeweils mit dem
 // entsprechenden Feldkennzeichner. Das (n) im Feldkennzeichner steht für den Feldindex, wie er im
 // Parameter Anzeige/Felder festgelegt ist, d.h. sie legen im Style-Array für jedes Feld ein Style fest,
 // unabhängig davon, wo Sie das entsprechende Feld letztlich anzeigen lassen.
$anzeige_Styles = array(
    // <table>-Tag:
    'T'    => 'margin:0 auto; font-size:0.8em;',
    // <thead>-Tag:
    'H'    => '',
    // <tr>-Tag im thead-Bereich:
    'HR'   => '',
    // <th>-Tag Feld Typ:
    'HF0'  => 'width:35px; align:left;',
    // <th>-Tag Feld Datum:
    'HF1'  => 'width:35px; align:left;',
    // <th>-Tag Feld Name:
    'HF2'  => 'width:35px; align:left;',
    // <th>-Tag Feld Rufnummer:
    'HF3'  => 'width:35px; align:left;',
    // <th>-Tag Feld Nebenstelle:
    'HF4'  => 'width:35px; align:left;',
    // <th>-Tag Feld Eigene Rufnummer:
    'HF5'  => 'width:35px; align:left;',
    // <th>-Tag Feld Dauer:
    'HF6'  => 'width:35px; align:left;',
    // <tbody>-Tag:
    'B'    => '',
    // <tr>-Tag:
    'BRG'  => 'background-color:#000000; color:ffff00;',
    'BRU'  => 'background-color:#000000; color:ffff00;',
    // <td>-Tag Feld Typ:
    'DFG0' => 'text-align:center;',
    'DFU0' => 'text-align:center;',
    // <td>-Tag Feld Datum:
    'DFG1' => 'text-align:center;',
    'DFU1' => 'text-align:center;',
    // <td>-Tag Feld Name:
    'DFG2' => '',
    'DFU2' => '',
    // <td>-Tag Feld Rufnummer:
    'DFG3' => 'text-align:center;',
    'DFU3' => 'text-align:center;',
    // <td>-Tag Feld Nebenstelle:
    'DFG4' => 'text-align:center;',
    'DFU4' => 'text-align:center;',
    // <td>-Tag Feld Eigene Rufnummer:
    'DFG5' => 'text-align:center;',
    'DFU5' => 'text-align:center;',
    // <td>-Tag Feld Dauer:
    'DFG6' => 'text-align:center;',
    'DFU6' => 'text-align:center;'
    // ^- Der Buchstabe "G" steht für gerade, "U" für ungerade. Die Zählung mit 0, d.h. mit gerade.
 );

// Anzeige / Symbole:
// Bei der Anzeige im WebFront kommen 4 verschiedene Symbole zum Einsatz. Mit diesem Parameter
 // legen Sie fest, welches Symbol für welchen Zweck verwendung finden soll. Sie können alle
 // Bilddateien angeben die der Browser anzeigen kann. Achten Sie darauf, das die Symbole eine
 // angemessene Größe haben, da der Browser die Symbole mit Originalabmessung anzeigt.
 // Die Symbole und ihre Bedeutung sind:
// CALLIN               Dieses Symbol wird in der Spalte Typ angezeigt, wenn ein eingehender Anruf
 //                        angenommen wurde (d.h. ein Gespräch ist zustande gekommen)
 // CALLFAIL             Dieses Symbol wird in der Spalte Typ angezeigt, wenn ein eingehender oder
 //                        ausgehender Anruf NICHT angenommen wurde (d.h. es hat geklingelt und
 //                        NIEMAND hat abgehoben)
// CALLOUT              Dieses Symbol wird in der SPalte Typ angezeigt für alle Verbindungen, die
 //                        ausgehend sind (d.h. es wurde jemand angerufen und der jenige hat
 //                        abgehoben)
// SEARCHHIT            Dieses Symbol wird am Anfang oder am Ende der Spalte Name angezeigt, wenn
 //                       der Eintrag per Invers-Suche ermittelt wurde und Markierung aktiviert ist
 $anzeige_Symbole = array(
    'CALLIN'    => '/user/fritz/Callin.png',
    'CALLFAIL'  => '/user/fritz/Callinfailed.png',
    'CALLOUT'   => '/user/fritz/Callout.png',
    'SEARCHHIT' => 'suche.png'
);

// Anzeige / Symbolgrösse
// Dieser Parameter legt die Anzeigegröße für alle Symbole einheitlich fest. Geben Sie einen
 // beliebigen Pixel-Wert an, welcher für die Attribute Width und Height eingetragen wird:
$anzeige_Symbolgroesse = 16;

// Anzeige / Symbolstyle
// Mit diesem Parameter können Sie für jedes der Symbole weitere CSS-Styles festlegen, die in
 // die Tabelle übernommen werden sollen. Sie können je Symboltyp (siehe Anzeige/Symbole)
 // individuelle Angaben machen.
$anzeige_SymbolStyle = array(
    'CALLIN'    => 'margin:1px 0 0;',
    'CALLFAIL'  => 'margin:1px 0 0;',
    'CALLOUT'   => 'margin:1px 0 0;',
    'SEARCHHIT' => 'margin:1px 0 0;'
);

// Sonstiges / LogMode:
// Mit dieser Option stellt am ein, aus welche Art und Weise Logging-Meldungen vom Skript
 // erzeugt werden. Es werden derzeit 2 Varianten unterstützt:
// 0                    Keine Logmeldungen erzeugen
// 1                    Logmeldungen via IPS_LogMessage (default)
// 2                    Logmeldungen via IPSLogger (ACHTUNG: IPS-Library mit IPSLogger muss
 //                      installiert sein um diese Funktion nutzen zu können).
$sonstige_LogMode = 0;

/*************************************************************************************************/
 /* Ab hier nichts mehr ändern                                                                    */
 /*************************************************************************************************/

if ($sonstige_LogMode == 2) {
    IPSUtils_Include ("IPSLogger.inc.php", "IPSLibrary::app::core::IPSLogger");
}

define('CRLF', "
", true);
define('CR',   "\r", true);
define('LF',   "
", true);
define('TAB',  "	", true);

// Loglevel für Meldungen
define('FATAL', 0, true);
define('ERROR', 1, true);
define('WARNING', 2, true);
define('NOTIFICATION', 3, true);
define('INFORMATION', 4, true);
define('DEBUG', 5, true);
define('COMMUNICATION', 6, true);
define('TRACE', 7, true);
define('TEST', 8, true);

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

// Adresse der Fritzbox-GUI in Variable ablegen (wird später öfters verwendet)
$fritzgui = 'http://' . $fritzbox_Adresse . '/cgi-bin/webcm';

// Step 1 - Login in die Fritzbox

$ch = curl_init('http://'.$fritzbox_Adresse.'/login_sid.lua');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);

$session_status_simplexml = simplexml_load_string($login);


if ($session_status_simplexml->SID != '0000000000000000')
{
   $SID = $session_status_simplexml->SID;
}
else
{
   $challenge = $session_status_simplexml->Challenge;
   $response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $fritzbox_Password, "UCS-2LE", "UTF-8"));

   curl_setopt($ch, CURLOPT_POSTFIELDS, "response={$response}&page=/login_sid.lua");
   $sendlogin = curl_exec($ch);
   curl_close($ch);
   $session_status_simplexml = simplexml_load_string($sendlogin);

   if ($session_status_simplexml->SID != '0000000000000000')
   {
   $SID = $session_status_simplexml->SID;
   }
   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).CRLF.'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' => '../FRITZ!Box_Anrufliste.csv',
    'sid' => $SID
));
$opts = array('http' => array(
    'method'  => 'POST',
    'header'  => 'Content-Length: '.strlen($postdata).CRLF.'Content-Type: application/x-www-form-urlencoded',
     'content' => $postdata
));

$context    = stream_context_create($opts);
$URL = "http://".$fritzbox_Adresse."/fon_num/foncalls_list.lua?sid=".$SID."&csv=";
$anrufliste = utf8_decode(file_get_contents($URL, false, $context));
$anrufliste = explode(LF, $anrufliste);
$felder = array('Typ', 'Datum', 'Name', 'Rufnummer', 'Nebenstelle', 'Eigene Rufnummer', 'Dauer');
print_r($felder);
// Kopf der Tabelle erzeugen
$str  = "<table bgcolor='#000000'><body scroll=no><body bgcolor='#000000'><table style=".$anzeige_Styles['T'].'">'.CRLF;
$str .= '<colgroup>'.CRLF;
foreach($anzeige_Felder as $feldIndex) {
    $str .= '<col width="'.$anzeige_SpaltenBreite[$feldIndex].'" />'.CRLF;
}
$str .= '</colgroup>'.CRLF;
$str .= '<thead style="'.$anzeige_Styles['H'].'">'.CRLF;
$str .= '<tr style="'.$anzeige_Styles['HR'].'">';
foreach($anzeige_Felder as $feldIndex) {
    $str .= '<th style="color:ffff00; '.$anzeige_Styles['HF'.$feldIndex].'">'.$felder[$feldIndex].'</th>';
 }
$str .= '</tr>'.CRLF;
$str .= '</thead>'.CRLF;
$str .= '<tbody style="'.$anzeige_Styles['B'].'">'.CRLF;
$pos = 0;
$search_marker = false;
$searchFailed = array();
                        // Liste aller in diesem Lauf bereits erfolglos gesuchter Nummern

Echo count($anrufliste);
 for($i = 2; $i <= count($anrufliste) - 2; $i++) {
    set_time_limit(30);
    $eintrag = explode(';', $anrufliste[$i]);

    // Daten des aktuellen Eintrags überarbeiten und anschließend Datenzeile erstellen.

    // 1.) Unbekannte Anrufer im Internet suchen und Anzeigenamen kürzen
    if($eintrag[2] == '') {
       if ($suche_Modus == 0) {
          $eintrag[2] = '-Unbekannt-';
        } else {
           if (in_array($eintrag[3], $searchFailed)) {
            } else {
                $result = TelSuche($eintrag[3], $suche_Modus);
            }
            if ($result == false) {
               $searchFailed[] = $eintrag[3];
               $eintrag[2] = ($suche_TelNummerWennNichtGefunden == 1 ?
                                    $eintrag[3] : $suche_TextTelNummerNichtGefunden);
             } else {
               $search_marker = true;
               $ersterEintrag = true;        // Kennung für ggf. erforderliches Symbolkennzeichen
                foreach($suche_ErgebnisFelder as $feldName) {
                    $eintrag[2] .= ($ersterEintrag ? '' : $suche_FeldSeparator) . $result[$feldName];
                     $ersterEintrag = false;
                }
            }
        }
    }
    // Abschließend wird JEDER Eintrag noch auf Länge geschnitten
    $eintrag[2] = TextAbschneiden($eintrag[2], $liste_LimitNamen);

    // 2.) Nebenstelle mit Eigene Rufnummer ersetzen wenn leer oder Treffer in liste_FilterNebenstelle
     if(strlen($eintrag[4]) == 0 or in_array($eintrag[4], $liste_FilterNebenstelle) ==  true) {
         $eintrag[4] = $eintrag[5];
    }

    // 3.) "Keine Nummer" für leere Einträge bei Anrufernummer
    if(strlen($eintrag[3]) == 0) {
        $eintrag[3] = 'Keine Nummer';
    }

    // 4.) Heute und Gestern ersetzen falls Funktion aktiviert
    if ($anzeige_DatumMaskieren) {
       $parts   = preg_split('/[ .:]/', $eintrag[1]);
        $datum   = mktime(0, 0, 1, (int)$parts[1], (int)$parts[0], (int)$parts[2]);
        $heute   = mktime(0, 0, 0);
       $gestern = $heute - 86400;
        if ($datum > $heute) {
            $eintrag[1] = 'Heute, ';
        } elseif ($datum > $gestern) {
           $eintrag[1] = 'Gestern, ';
        } else {
            $eintrag[1] = date('d.m.y ', $datum);
        }
        $eintrag[1] .= $parts[3].':'.$parts[4];
    }

    $caller = $eintrag[0];
    switch($caller) {
         case 4:  $eintrag[0] = '<img src="'.$anzeige_Symbole['CALLOUT'].'" width="'.$anzeige_Symbolgroesse.'px" height="'.$anzeige_Symbolgroesse.'px" style="'.$anzeige_SymbolStyle['CALLIN'].'">'; break;
         case 2:  $eintrag[0] = '<img src="'.$anzeige_Symbole['CALLFAIL'].'" width="'.$anzeige_Symbolgroesse.'px" height="'.$anzeige_Symbolgroesse.'px" style="'.$anzeige_SymbolStyle['CALLFAIL'].'">'; break;
         case 1:  $eintrag[0] = '<img src="'.$anzeige_Symbole['CALLIN'].'" width="'.$anzeige_Symbolgroesse.'px" height="'.$anzeige_Symbolgroesse.'px" style="'.$anzeige_SymbolStyle['CALLOUT'].'">'; break;
         default: $eintrag[0] = '';
    }
    // Falls ein Suchsymbol benötigt wird
    if ($search_marker) {
       $logo = '<img src="'.$anzeige_Symbole['SEARCHHIT'].'" width="'.$anzeige_Symbolgroesse.'px" height="'.$anzeige_Symbolgroesse.'px" style="'.$anzeige_SymbolStyle['SEARCHHIT'].'">';
         switch($suche_TrefferMarkieren) {
            case 0: break;
            case 1: $eintrag[2] = '(*)'.$eintrag[2]; break;
            case 2: $eintrag[2] = $eintrag[2].'(*)'; break;
            case 3: $eintrag[2] = $logo.' '.$eintrag[2]; break;
            case 4: $eintrag[2] = $eintrag[2].' '.$logo; break;
        }
        $search_marker = false;    // Die Markierung zurücksetzen
    }

    // Die Datenzeile zum aktuellen Eintrag erstellen, WENN der Eintragtyp auch angezeigt werden soll
     if(in_array($caller, $liste_Filter)) {
        $str .= '<tr style="'.$anzeige_Styles['BR'.($pos % 2 ? 'U':'G')].'">';
        foreach($anzeige_Felder as $feldIndex) {
            $str .= '<td style="'.$anzeige_Styles['DF'.($pos % 2 ? 'U':'G').$feldIndex].'">'.$eintrag[$feldIndex].'</td>';
         }
        $str .= '</tr>'.CRLF;
        $pos++;
    }

    if($pos >= $liste_Anzahl) {
        break;
    }
}
$str .= '</tbody>'.CRLF;
$str .= '</table>'.CRLF;

// ErgebnisListe in Content-Variable speichern
$vid = CreateVariableByName($parentID, 'Content', 3);
IPS_SetIcon($vid, 'speaker');
IPS_SetVariableCustomProfile($vid, '~HTMLBox');
SetValue($vid, $str);



// Von der FritzBox-GUI abmelden
$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).CRLF.'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;
}

function TextAbschneiden($Text, $Laenge) {
    if ($Laenge == 0) {
        return $Text;
    } else {

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

// Führt eine Cache-unterstützte Suche nach der Rufnummer durch
function TelSuche($Rufnummer, $modus) {
    global $parentID, $suche_cacheExpireTime, $suche_cacheVarID;

    // Daten aus dem Suchcache laden
    $cacheData = GetCacheData();

    // Ergebnisrecord mit false vorbelegen
    $record = false;

    // Suchcache checken, ob ein Eintrag passend zur Rufnummer vorhanden ist
    if (isset($cacheData[$Rufnummer])) {
        // Treffer im Cache, Daten holen und rück zum Aufrufer springen
        $record = $cacheData[$Rufnummer]['Data'];
    }

    // Wenn im Cache kein Treffer gefunden wurde, eine Websuchmaschine befragen
    if ($record === false) {
        switch ($modus) {
            case 1: $record = QueryKlickTelDe($Rufnummer); break;
            case 2: $record = QueryDasOertlicheDe($Rufnummer); break;
            case 3: $record = QueryTelSearchCh($Rufnummer); break;
        }

        // Wenn wir jetzt einen Treffer haben, muss der noch in den Cache...
        if ($record !== false) {
           AddRecordToCache($Rufnummer, $record);
        }
    }

    // So, jetzt sind wird fertig, zurück zum Aufrufer...
    return $record;
}

// Liefert die aktuellen Daten aus dem Cache als Array an den Aufrufer
function GetCacheData() {
    global $suche_cacheVarID, $parentID;

    $globalCache = false;
    // ID der Cachevariable ermitteln
    if ($suche_cacheVarID == 0) {
       // Wir arbeiten mit einem eigenen Cache
       $varID = CreateVariableByName($parentID, 'search_cache', 3);
    } else {
        $globalCache = true;
       $varID = $suche_cacheVarID;
    }

    // Wenn wir mit globalem Cache arbeiten müssen wir jetzt ein Lock holen
    if ($globalCache) {
        if (!IPS_SemaphoreEnter('FB_cache_lock', 2000)) {
           return false;  // Und ende... beim nächsten mal mehr Glück...
        }
    }

    // Die Cache-Daten aus der Variable holen und deserialisieren
    $data = GetValue($varID);

    if ($globalCache) {
        // Jetzt noch die Semaphore zurückgeben
        IPS_SemaphoreLeave('FB_cache_lock');
    }

    // und deserialisieren
    if (($result = @unserialize($data)) === FALSE) {
       $result = array();
    }

    // fertig, das Array mit den cache-daten an den Aufrufer zurückliefern
    return $result;
}

function AddRecordToCache($Rufnummer, $record) {
    global $suche_cacheVarID, $suche_cacheExpireTime, $parentID;

    $globalCache = false;

    // ID der Cachevariable ermitteln
    if ($suche_cacheVarID == 0) {
        // Wir arbeiten mit einem eigenen Cache
        $varID = CreateVariableByName($parentID, 'search_cache', 3);
    } else {
        $globalCache = true;
        $varID = $suche_cacheVarID;
    }

    // Wenn wir mit globalem Cache arbeiten müssen wir jetzt ein Lock holen
    if ($globalCache) {
        if (!IPS_SemaphoreEnter('FB_cache_lock', 2000)) {
           return false;  // Und ende... beim nächsten mal mehr Glück...
        }
    }

    // Die Cache-Daten aus der Variable holen und deserialisieren
    $data = GetValue($varID);
    if (($cache = @unserialize($data)) === FALSE) {
       $cache = array();
    }

    // Jetzt den neuen Eintrag in $data vornehmen
    $cache[$Rufnummer] = array('Expire' => (time() + $suche_cacheExpireTime), 'Data' => $record);

    // Das ganze wieder serialisieren und in die Variable zurückschreiben
    $data = serialize($cache);
    SetValue($varID, $data);

    if ($globalCache) {
        // Jetzt noch die Semaphore zurückgeben
        IPS_SemaphoreLeave('FB_cache_lock');
    }
    return true;
}

function QueryDasOertlicheDe($Rufnummer) {
    $record = false;
    $pageurl = "http://www.dasoertliche.de/Controller?form_name=search_inv&ph=$Rufnummer";
     $wsdata = @Sys_GetURLContent($pageurl);
    if ($wsdata === false) {
        WriteLogMessage(WARNING, 'Datei: '.__file__.' Zeile: '.__line__, 'Timeout bei Abruf der Webseite '.$pageurl);
     } else {
        $data = str_replace(array(CRLF, LF), ' ', $wsdata);
        if(preg_match('/getItemData(.*)/', $data, $result)) {
            $result = explode("', '",$result[1]);
            $record = array(
                'Name'              => html_entity_decode(trim($result[5])),
                'Strasse'           => html_entity_decode(trim($result[6])),
                'Hausnummer'        => html_entity_decode(trim($result[7])),
                'PLZ'               => html_entity_decode(trim($result[3])),
                'Ort'               => html_entity_decode(trim($result[4])),
                'StrasseHausnummer' => html_entity_decode(trim($result[6]).' '.trim($result[7])),
                 'PLZOrt'            => html_entity_decode(trim($result[3]).' '.trim($result[4]))
             );
        }
    }
    return $record;
}

function QueryKlickTelDe($Rufnummer) {
    $record = false;
    $pageurl = "http://www.klicktel.de/inverssuche/index/search?".
                  "method=searchSimple&_dvform_posted=1&phoneNumber=$Rufnummer";
     $wsdata = @Sys_GetURLContent($pageurl);
    if ($wsdata === false) {
       WriteLogMessage(WARNING, 'Datei: '.__file__.' Zeile: '.__line__, 'Timeout bei Abruf der Webseite '.$pageurl);
     } else {
        $data = str_replace(array(CRLF, LF), ' ', $wsdata);
        if (preg_match('/<strong>(.*)<\/strong>.*<p class="data track">(.*?)([0-9][0-9A-Za-z].*?)'.
             '<br \/>\s*?([0-9]{5})\s*?(.*?)<\/p>/', $data, $result)) {
            $record = array(
                'Name'              => html_entity_decode(trim($result[1])),
                'Strasse'           => html_entity_decode(trim($result[2])),
                'Hausnummer'        => html_entity_decode(trim($result[3])),
                'PLZ'               => html_entity_decode(trim($result[4])),
                'Ort'               => html_entity_decode(trim($result[5])),
                'StrasseHausnummer' => html_entity_decode(trim($result[2]).' '.trim($result[3])),
                 'PLZOrt'            => html_entity_decode(trim($result[4]).' '.trim($result[5]))
             );
        }
    }
    return $record;
}

function QueryTelSearchCh($Rufnummer) {
    $record = false;
    $pageurl = "http://tel.search.ch/?tel=$Rufnummer";
    $wsdata = @Sys_GetURLContent($pageurl);
    if ($wsdata === false) {
       WriteLogMessage(WARNING, 'Datei: '.__file__.' Zeile: '.__line__, 'Timeout bei Abruf der Webseite '.$pageurl);
     } else {
        $data = str_replace(array(CRLF, LF), ' ', $wsdata);
        if (preg_match('/class="fn">(.*?)<\/a>.*class="adrgroup street-address">(.*) ([0-9]+[0-9a-zA-Z]*)'.
                        '<\/span>.*class="postal-code">(.*?)<\/span>.*class="locality">(.*?)<\/span>/', $data, $result)) {
             $record = array(
                'Name'              => html_entity_decode(trim($result[1])),
                'Strasse'           => html_entity_decode(trim($result[2])),
                'Hausnummer'        => html_entity_decode(trim($result[3])),
                'PLZ'               => html_entity_decode(trim($result[4])),
                'Ort'               => html_entity_decode(trim($result[5])),
                'StrasseHausnummer' => html_entity_decode(trim($result[2]).' '.trim($result[3])),
                 'PLZOrt'            => html_entity_decode(trim($result[4]).' '.trim($result[5]))
             );
        }
    }
    return $record;
}





// Erzeugt je nach Einstellung eine Meldung im IPS Logbuch oder via IPSLogger (sonstige/LogMode)
 function WriteLogMessage($level, $location, $information) {
    global $sonstige_LogMode;

    $logLevel = array(
        'Fatal:',            // LogLevel=0: Schwerwiegende Fehler, führt normalerweise zu einem kompletten
                                 //   Programmabbruch
        'Error:',            // LogLevel=1: 'Normale' Fehler
        'Warning:',            // LogLevel=2: Warnungen
        'Notification:',    // LogLevel=3: Notifizierung, wird benutzt um sich über bestimmte Ereignisse im
                                 //   System informieren zu lassen (Beschattung wurde aktiviert, oder Rasenbewässerung
                                 //   gestartet)
        'Information:',    // LogLevel=4: Informationsmeldungen, zur Protokollierung von Schaltvorgängen usw.
         'Debug:',            // LogLevel=5: Debug Meldungen
        'Communication:',    // LogLevel=6: Protokollierung von Kommunikations Instanzen (Senden/Empfangen über
                                 //   RS232, Sockets, ...)
        'Trace:',            // LogLevel=7: Sehr detailierte Meldungen, um diverse Ablauffehler zu finden
         'Test:'                // LogLevel=8: Test Meldungen, verwende ich nur temporär um Fehler zu finden, man kann
                                 //   nach diesen Meldungen suchen und sie nach finden des Fehlerers wieder entfernen
     );

    switch ($sonstige_LogMode) {
       case 1: // Logging via IPS_LogMessage
          IPS_LogMessage($location, $logLevel[$level].' '.$information);
      break;
        case 2: // Logging via IPSLogger
           switch ($level) {
              case 0: IPSLogger_Fat($location, $information); break;
              case 1: IPSLogger_Err($location, $information); break;
              case 2: IPSLogger_Wrn($location, $information); break;
              case 3: IPSLogger_Not($location, $information); break;
              case 4: IPSLogger_Inf($location, $information); break;
              case 5: IPSLogger_Dbg($location, $information); break;
              case 6: IPSLogger_Com($location, $information); break;
              case 7: IPSLogger_Trc($location, $information); break;
              case 8: IPSLogger_Tst($location, $information); break;
            }
        break;
    }
}
?>

es kommt die Meldung „login fehlgeschlagen“

Was muss ich für die 5.22 im Gegensatz zur 5.5 anpassen?

Hallo,

probier mal das Script ab Posting 96.
http://www.ip-symcon.de/forum/threads/9948-Anruferliste-aus-FritzBox-auslesen?p=154456#post154456

Schöne Grüße
Thomas

Hi,
bin doch wieder bei der 5.5er Version.
Habe im System Zugang mit Username und Passwort gewählt.
Kann ich den Username in das Skript einbinden?

Also zB so…


 <?
/*************************************************************************************************/
 /* Konfiguration                                                                                 */
 /*************************************************************************************************/
 // FritzBox / Adresse:
// Tragen Sie hier den Hostnamen (z.B. Fritz.Box) oder die IP-Adresse (z.B. 192.168.1.1) der
 // Fritzbox ein:
$fritzbox_Adresse = '';

$fritzbox_Username = '';

$fritzbox_Password = '';

Leider funktioniert nämlich so der Login nicht und somit funzt das Skript auch nicht.

EDIT: Es geht jetzt doch so, wie ich es oben geschrieben habe. Also mit Username und PW.

Klar solange ihr alle wieder zur Firmware 05.5 08.2011 vom letzten Jahr zurück geht sollten keine Probleme auftreten oder?!
Benutzer kennt diese noch nicht.

Nur ab Firmware xx.05.50 12.2012 gibt es den Benutzer.

Hier ein Beispiel mit und ohne Benutzer:

//---

// Step 1 - Login in die Fritzbox xx.05.50

$fritzbox_Adresse = '';

$fritzbox_Password = '';

$ch = curl_init('http://' . $fritzbox_Adresse . '/login_sid.lua');  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
$login = curl_exec($ch);  

$session_status_simplexml = simplexml_load_string($login);  


if ($session_status_simplexml->SID != '0000000000000000')  
{  
   $SID = $session_status_simplexml->SID;  
}  
else  
{  
   $challenge = $session_status_simplexml->Challenge;  
   $response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $fritzbox_Password, "UCS-2LE", "UTF-8"));  

   curl_setopt($ch, CURLOPT_POSTFIELDS, "response={$response}&page=/login_sid.lua");  
   $sendlogin = curl_exec($ch);  
  
   $session_status_simplexml = simplexml_load_string($sendlogin);  

   if ($session_status_simplexml->SID != '0000000000000000')  
   {  
   $SID = $session_status_simplexml->SID;  
   }  
   else  
   {  
      echo "Fehler: Login fehlgeschlagen";  
      return;  
    }  
}  
curl_close($ch);

//---

// Step 2 - Login in die Fritzbox xx.05.50 mit Benutzername

$fritzbox_Adresse = '';

$fritzbox_Username = 'ESEL';

$fritzbox_Password = 'DUESEL';

$ch = curl_init('http://' . $fritzbox_Adresse . '/login_sid.lua');  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
$login = curl_exec($ch);  

$session_status_simplexml = simplexml_load_string($login);  


if ($session_status_simplexml->SID != '0000000000000000')  
{  
   $SID = $session_status_simplexml->SID;  
}  
else  
{  
   $challenge = $session_status_simplexml->Challenge;  
   $response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $fritzbox_Password, "UCS-2LE", "UTF-8"));  

   curl_setopt($ch, CURLOPT_POSTFIELDS, "response={$response}&page=/login_sid.lua&username={$fritzbox_Username}");  
   $sendlogin = curl_exec($ch);  
  
   $session_status_simplexml = simplexml_load_string($sendlogin);  

   if ($session_status_simplexml->SID != '0000000000000000')  
   {  
   $SID = $session_status_simplexml->SID;  
   }  
   else  
   {  
      echo "Fehler: Login fehlgeschlagen";  
      return;  
    }  
}  
curl_close($ch);

//---

Gruß Erwin :wink:

Hallo,

auch ich benutze zur Darstellung der Anruferliste das Script (Beitrag #206) und finde die Optik sehr gelungen. Zusätzlich habe ich noch folgendes Script „Aktuelle Gespräche“ eingebaut, welches dann auch das Anruferliste-Script auslöst.

<?php
$host = "10.0.0.230";

define("STATUS_VACANT", 0);
define("STATUS_OUT_RING", 1);
define("STATUS_OUT_MISSED", 2);
define("STATUS_OUT_CONNECTED", 3);
define("STATUS_OUT_DISCONNECTED", 4);
define("STATUS_IN_RING", 5);
define("STATUS_IN_MISSED", 6);
define("STATUS_IN_CONNECTED", 7);
define("STATUS_IN_DISCONNECTED", 8);

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

switch ($IPS_SENDER)
{
    case "Execute":
       IPS_SetHidden($IPS_SELF, true);

        $profileID = @IPS_GetVariableProfile("PhoneConnectionStatus");
        if ($profileID === false)
        {
            IPS_CreateVariableProfile("PhoneConnectionStatus", 1);
            IPS_SetVariableProfileValues("PhoneConnectionStatus", 0, 8, 0);
            IPS_SetVariableProfileIcon("PhoneConnectionStatus", "ArrowRight");
            IPS_SetVariableProfileAssociation("PhoneConnectionStatus", 0, "frei", "");
            IPS_SetVariableProfileAssociation("PhoneConnectionStatus", 1, "eingehend - klingelt", "");
            IPS_SetVariableProfileAssociation("PhoneConnectionStatus", 2, "eingehend - abgebrochen", "");
            IPS_SetVariableProfileAssociation("PhoneConnectionStatus", 3, "eingehend - verbunden", "");
            IPS_SetVariableProfileAssociation("PhoneConnectionStatus", 4, "eingehend - getrennt", "");
            IPS_SetVariableProfileAssociation("PhoneConnectionStatus", 5, "ausgehend - klingelt", "");
            IPS_SetVariableProfileAssociation("PhoneConnectionStatus", 6, "ausgehend - abwesend", "");
            IPS_SetVariableProfileAssociation("PhoneConnectionStatus", 7, "ausgehend - verbunden", "");
            IPS_SetVariableProfileAssociation("PhoneConnectionStatus", 8, "ausgehend - getrennt", "");
        }

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

        $socketID = @IPS_GetInstanceIDByName("FRITZ!Box Socket", 0);
        if ($socketID === false)
        {
           $socketID = IPS_CreateInstance("{3CFF0FD9-E306-41DB-9B5A-9D06D38576C3}");
           IPS_SetName($socketID, "FRITZ!Box Socket");
        }
       CSCK_SetHost($socketID, $host);
       CSCK_SetPort($socketID, 1012);
       CSCK_SetOpen($socketID, true);
       IPS_ApplyChanges($socketID);

        $rvID = @IPS_GetInstanceIDByName("FRITZ!Box Register Variable", $parentID);
        if ($rvID === false)
        {
         $rvID = IPS_CreateInstance("{F3855B3C-7CD6-47CA-97AB-E66D346C037F}");
            IPS_SetParent($rvID, $parentID);
            IPS_SetName($rvID, "FRITZ!Box Register Variable");
        }
        RegVar_SetRXObjectID($rvID, $IPS_SELF);
        IPS_ConnectInstance($rvID, $socketID);
        IPS_ApplyChanges($rvID);

        break;

    case "RegisterVariable":
        $data = explode(";", $IPS_VALUE);
        $ts = strtotime($data[0]);
        $connectionID = $data[2];
        
        switch ($data[1])
        {
            case "CALL":
                // Datum;CALL;ConnectionID;Nebenstelle;GenutzteNummer;AngerufeneNummer;
                $extension = $data[3];
                $internalNumber = $data[4];
                $externalNumber = $data[5];
                $line = $data[6];
                addConnection($connectionID, STATUS_OUT_RING, $ts, $internalNumber, $externalNumber, $extension, $line);
                break;

            case "RING":
                // Datum;RING;ConnectionID;Anrufer-Nr;Angerufene-Nummer;
                $externalNumber = $data[3];
                $internalNumber = $data[4];
                $line = $data[5];
                addConnection($connectionID, STATUS_IN_RING, $ts, $internalNumber, $externalNumber, "", $line);
                break;

            case "CONNECT":
                // Datum;CONNECT;ConnectionID;Nebenstelle;Nummer;
                $extension = $data[3];
                $internalNumber = $data[4];
                $externalNumber = $data[5];
                // removeConnection($connectionID);
                break;

            case "DISCONNECT":
                // Datum;DISCONNECT;ConnectionID;DauerInSekunden;
                $duration = $data[3];
                IPS_Sleep(500);
                removeConnection($connectionID);
                break;
        }
        IPS_RunScript(58322 /*[Allgemeine Scripte\Test\Anruferliste\Auslese-Skript]*/);
        break;
}

function addConnection ($connectionID, $status, $time, $internalNumber, $externalNumber, $extension, $line) {
    global $parentID;
    SetValue(CreateVariableByName($parentID, "Verbindung ".$connectionID." - Status", 1, "PhoneConnectionStatus"), $status);
    SetValue(CreateVariableByName($parentID, "Verbindung ".$connectionID." - Zeit", 1, "~String"), $time);
    SetValue(CreateVariableByName($parentID, "Verbindung ".$connectionID." - Nummer - Intern", 3, "~String"), $internalNumber);
    SetValue(CreateVariableByName($parentID, "Verbindung ".$connectionID." - Nummer - Extern", 3, "~String"), $externalNumber);
    SetValue(CreateVariableByName($parentID, "Verbindung ".$connectionID." - Nebenstelle", 3, "~String"), $extension);
    SetValue(CreateVariableByName($parentID, "Verbindung ".$connectionID." - Leitung", 3, "~String"), $line); }

function removeConnection ($connectionID)
  {
    global $parentID;
    IPS_DeleteVariable(IPS_GetVariableIDByName("Verbindung ".$connectionID." - Status", $parentID));
    IPS_DeleteVariable(IPS_GetVariableIDByName("Verbindung ".$connectionID." - Zeit", $parentID));
    IPS_DeleteVariable(IPS_GetVariableIDByName("Verbindung ".$connectionID." - Nummer - Intern", $parentID));
    IPS_DeleteVariable(IPS_GetVariableIDByName("Verbindung ".$connectionID." - Nummer - Extern", $parentID));
    IPS_DeleteVariable(IPS_GetVariableIDByName("Verbindung ".$connectionID." - Nebenstelle", $parentID));
    IPS_DeleteVariable(IPS_GetVariableIDByName("Verbindung ".$connectionID." - Leitung", $parentID));
   }
function CreateVariableByName($id, $name, $type, $profile = "") {
    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");
        if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
    }
    return $vid;
}
?>



Da ich leider HTML-technisch noch in den Anfängen bin (oder noch ein Stück davor), wollte ich mal fragen, ob jemand dieses Script bereits in ähnlicher Optik wie das Ergebnis Anruferliste-Script hat.

Grüße chrissiboy

Ich nutze nachwievor das Ursprungsskript von Paresy aus dem ersten Post und es macht auch was es soll…

Nur nach dem Update auf die 5.5 erhalte ich folgende Fehlermeldung :
„Fehler beim einlesen der XML Daten. Wahrscheinlich ist eine zu alte Firmware installiert“

Gibt es irgendeine Möglichkeit dieses Ursprungsskript mal 5.5. fähig zu machen ? :o

jopp… das Problem habe ich nun auch.
wie war das? „never touch a running system?“ :frowning:

Hat jemand eine Lösung? Wenn nicht müsste ich wieder zurück auf die alte FW, falls das überhaupt noch geht…

Ich als Kabel-Kunde kann leider gar nichts zurückdrehen, mir werden die Updates meist „über Nacht“ aufgespielt. Seit heute Nacht habe ich die 5.29 laufen und nun ist die Anrufliste leer… ich habe schon ein bisschen die einschlägigen Threads durchstöbert, aber eine möglichst allgemeingültige „Migrationsanleitung“ für Fritzbox-Skripte wäre sicherlich nicht nur für mich sehr hilfreich.

Ich schicke dir morgen mal den Link zu den Script was bei mir mit der v5.29 auf der Kabelbox läuft

Gesendet von meinem ASUS Transformer Pad TF700T mit Tapatalk 2

Danke, da wäre ich sehr dankbar!

Die Fritzbox-Skripte gehören zu den wenigen, die ich mehr oder minder gedankenlos geguttenbergt habe (oder sagt man jetzt shavaniert?) und obwohl ich meistens schon Lust habe, tiefer in die Materie einzusteigen, ist es schon sehr angenehm, ab und zu einfach mal von der Leistung anderer zu profitieren. Solang man keinen Doktor dafür will. :wink:

Hallo,

Muss mich korrigieren, aktuell hab ich die FirztBox 6360Cable von Unitymedia mit
Firmware: FRITZ!OS 05.28
Firmware-Version: 85.05.28

Bin mir nicht sicher, das die .29 gleich oder anders ist. Zumindest musste ich nach dem letzten Upgrade vor einigen Wochen das Script anpassen.

Ich finde auf die Schnelle den Fred dazu nicht mehr, vielleicht schaust du dann selber mal, hier hast du der Einfachheithalber direkt das komplette Script mit einem Screenshot der Variablen, die man meines Wissen selber anlegen muss.
Probiers mal selber aus - einzige Änderung, IP und Password hab ich nicht im Script hinterlegt, sondern in extra Variablen, das macht mich flexibler, da ich öfters das Password der FB ändere und somit nur an einer Stelle Korrekturen machen muss und nicht in allen Scripten:

Das RAR-File in C:\IP-Symcon\webfront\user\ entpacken, da sind die Icons für das Webfront drin.


 <?
/*************************************************************************************************/
 /* Konfiguration                                                                                 */
 /*************************************************************************************************/
// FritzBox / Adresse:
// Tragen Sie hier den Hostnamen (z.B. Fritz.Box) oder die IP-Adresse (z.B. 192.168.1.1) der
// Fritzbox ein:
$fritzbox_Adresse = GetValue(38029 /*[Configuration\Hardware\FritzBox\FB_IP-Adresse]*/);

// FritzBox / Password:
// Zum auslesen der Anruferliste ein evtl. gesetztes Fritzbox-Kennwort benötigt. Wenn Sie die
// Fritzbox-GUI mit einem Kennwort gesichert haben (empfohlende Einstellung) dann tragen Sie hier
// das entsprechende Kennwort ein. Haben Sie kein Kennwort für die GUI tragen Sie bitte einen
// Leerstring ("") ein:
$fritzbox_Password = GetValue(33504 /*[Configuration\Hardware\FritzBox\FB_Password]*/);

// FritzBox / Filter:
// Die Fritzbox erfasst alle ein- und ausgehenden Verbindungen. Das können sein:
// 1 = ankommende Verbindung, die entgegengenommen wurde
// 2 = ankommende Verbindung, die niemand entgegengenommen hat (sog. verpasster Anruf)
// 3 = abgehende Verbindung
// Tragen Sie in das Array die Kennnummern der Verbindungstypen ein, die im WebFront angezeigt
// werden sollen:
$liste_Filter = array(4,2,1);

// Liste / Anzahl:
// Je nach Platzverhältniss im WebFront passen mehr oder weniger Zeilen in die Anzeige. Sind mehr
// Zeilen in der Tabelle als Platz im Anzeigebereich vorhanden ist, wird automatisch ein Scroll-
// balken eingeblendet. Um das zu vermeiden kann die Anzahl der anzuzeigenden Verbindungen limi-
// tiert werden. Tragen Sie hier einen Wert zwischen 1 und 300 ein (die Fritzbox liefert maximal
// 300 Einträge zurück):
$liste_Anzahl = 7;

// Liste / Limit Namen:
// Sind die Einträge im Feld Namen zu lang für ihre Anzeige, so können Sie diese kürzen lassen.
// Die Funktion schneidet an der letzten möglichen Wortgrenze. Sie können hier Werte zwischen
// 0 und n eintragen, wobei 0 für NICHT kürzen steht, jeder andere Wert für kürzen auf n Zeichen:
$liste_LimitNamen = 30;

// Liste / Filter Nebenstellen:
// Mit diesem Parameter legen Sie fest, welche Nebenstellen nicht in der Anzeige dargestellt werden
// sollen (sie werden durch die eigene Rufnummer ersetzt). Dies ist z.B. dann sinnvoll, wenn hinter
// der Fritzbox eine ISDN-Anlage sitzt und diese in der Fritzbox als solche ohne spezielle MSN
// eingetragen ist. Dadurch erscheint in der Fritzbox-Anruferliste unter Nebenstelle immer nur der
// Name, mit dem die Telefonanlage eingetragen ist. Und durch Eintragen dieses Namens in den Konfi-
// gurationsparameter wird dieser nichtssagende Eintrag die die angerufene MSN ersetzt:
$liste_FilterNebenstelle = array('ISDN Gerät');

// Suche / Modus:
// Mit dieser Einstellung legen Sie fest, ob das Skript bei fehlendem Namen evtl. ein öffent-
// liches Telefonverzeichnis per Invers-Suche befragen soll. Derzeit stehen 3 Telefonverzeichnisse
// zur Verfügung. Sie können hier folgende Werte eintragen:
// 0                    Invers-Suche abgeschaltet
// 1                    Invers-Suche bei DasOertliche.de
// 2                    Invers-Suche bei KlickTel.de
// 3                    Invers-Suche bei TelSearch.ch
$suche_Modus = 2;

// Suche / TelNummerWennNichtGefunden
// Mit dieser Einstellung legen Sie fest, ob bei nicht erfolgreicher Suche die Telefonnummer
// im Namensfeld eingetragen oder ob ein vorgegebener, statischer Text dort erscheinen soll.
// 1                    Es wird die Telefonnummer des Anrufers im Feld Name eingetragen,
//                      wenn die Inverssuche nicht erfolgreich war.
// 0                    Es wird der stat. Text Suche/TextTelNummerNichtGefunden eingetragen.
$suche_TelNummerWennNichtGefunden = 0;

// Suche / TextTelNummerNichtGefunden
// Mit dieser Einstellung legen Sie den Text fest, der angezeigt werden soll, wenn eine
// durchgeführte Inverssuche kein Ergebnis geliefert hat. Siehe auch Einstellung des
// Parametes Suche/TelNummerWennNichtGefunden
$suche_TextTelNummerNichtGefunden = "-Unbekannt-";

// Suche / Ergebnis Felder:
// Zu verwendene Ergebnisfelder bei Invers-Suche:
// Die Inverssuche liefert einen Datensatz mit den folgenden Feldern:
// Name                 Name des Anrufers
// Strasse              Strasse des Anrufers, ohne Hausnummer
// Hausnummer           Hausnummer des Anrufers
// PLZ                  Postleitzahl des Anrufers
// Ort                  Ort des Anrufers
// StrasseHausnummer    Kombifeld, besteht aus Strasse, einem Leerzeichen und Hausnummer
// PLZOrt               Kombifeld, besteht aus PLZ, einem Leerzeichen und Ort
// Mit diesem Parameter legen Sie fest, welche/s Feld/er Sie in der Anzeige haben möchten
// (Achtung: auch hierfür ist die Längenbegrenzung $liste_LimitNamen wirksam):
$suche_ErgebnisFelder = array('Name');

// Suche / Feldseparator:
// Mit dieser Einstellung legen Sie fest, welche/s Zeichen zwischen den Feldern eingefügt werden
// soll. Voreingestellt ist ein Leerzeichen. Um z.B. eine mehrzeilige Anzeige zu erreichen können
// Sie den Feldseparator auf CRLF ändern:
$suche_FeldSeparator = ', ';

// Suche / Treffer Markieren:
// Mit diesem Parameter legen Sie fest, ob per Invers-Suche gefundene Einträge markiert werden
// sollen oder nicht. Die folgenden Optionen stehen zur verfügung:
// 0                    Keine Markierung
// 1                    Markierung per Klammerstern "(*)" am ANFANG des Eintrags.
// 2                    Markierung per Klammerstern "(*)" am ENDE des Eintrags.
// 3                    Markierung per Symbol am ANFANG des Eintrags (Symbol = SEARCHHIT)
// 4                    Markierung per Symbol am ENDE des Eintrags (Symbol = SEARCHHIT)
 $suche_TrefferMarkieren = 3;

// Suche / CacheExpireTime
// Zur Beschleunigung der Listenerstellung und zur Entlastung der Suchseiten ist in die Such-
// funktionen ein Caching der Ergebnisse eingebaut. Für jeden erfolgreich ermittelten Eintrag
// wird eine Datensatz in diesem Suchcache angelegt, der zukünftig sofort das Ergebnis liefert.
// Damit dieser Cache nicht unendlich groß wird, hat jeder Datensatz eine Ablaufzeit. Danach
// wird er aus dem Cache wieder entfernt.
// Dieser Parameter steuert, wie lange gefundene Einträge zu Rufnummern im Cache verbleiben.
// Die Angabe erfolg in Sekunden, für 24 Stunden ist also 86400 (=24*60*60) einzutragen:
$suche_cacheExpireTime = 86400 /*[Objekt #20864 existiert nicht]*/;

// Suche / CacheVarID
// Mit diesem Parameter kann der Cache für mehrere Skripte gemeinsam genutzt werden.
// Ist dieser Parameter ungleich 0 ist, so wird er als VariablenID aufgefasst und der Cache in
// der entsprechenden Variable gespeichert. Damit einhergehend wird eine Verriegellung gegen
// gleichzeitige Zugriffe auf den Cache aktiviert, die mehrere Instanzen des Skripts
// untereinander im Zugriff synchronisiert. Defaultmäßig ist diese Funktion deaktiviert (d.h.
// der Parameter ist auf 0 gesetzt:
$suche_cacheVarID = 24320 /*[Configuration\Hardware\FritzBox\Anrufliste\Anruferliste\Cache]*/;

// Anzeige / Felder:
// Zur Anzeige im Webfront wird eine HTML-Tabelle erzeugt. Mit dieser Einstellung legen Sie fest,
// welche Felder in welcher Reihenfolge in der Tabelle angezeigt werden sollen. Die folgenden
// Felder stehen ihnen dafür zur Verfügung:
// 0: Typ               Anzeige des Verbindungstyps. Je nach Typ wird ein entsprechendes Symbol
//                        angezeigt (1 = CALLIN, 2 = CALLFAIL, 3 = CALLOUT, siehe Anzeige/Symbole)
// 1: Datum             Datum und Uhrzeit des Anruft
// 2: Name              Name des Anrufers
// 3: Rufnummer         Rufnummer des Anrufers
// 4: Nebenstelle       Die eigene Nebenstelle. Ist dieses Feld leer oder trifft eine der Werte
//                        aus $keineNebenstelle zu, so wird das Feld "Eigene Rufnummer" verwendet
// 5: Eigene Rufnummer  Hier erscheint die Multiple Subscriber Number (MSN), welche der Anrufer
//                        erreichen wollte.
// 6: Dauer             Hier wird die Dauer des Gesprächs ausgegeben. Die Dauer wird minutengenau
//                        erfasst und als Stunden:Minuten darstestellt.
// Tragen Sie in den Parameter die Indexnummern der Felder in der gewünschten Reihenfolge ein, die
// in der Ergebnistabelle erscheinen sollen:
$anzeige_Felder = array(0, 1, 2, 3, 4, 6);

// Anzeige / Datum Maskieren:
// Diese Option aktivert eine Ersetzung das Datums, wenn der Eintrag von Heute oder Gestern ist.
// Somit sind die aktuellen Einträge leicher von älteren Einträgen zu unterscheiden.
// Folgende Optionen stehen zur verfügung:
// True                 Einträge mit aktuellem Datum durch "Heute", mit Datum von gestern durch
//                      "Gestern" ersetzen. Die Uhrzeitanzeige bleibt davon unberühert.
$anzeige_DatumMaskieren = true;

// Anzeige / Spaltenbreite
// Mit dieser Option legen Sie die Spaltenbreite der anzuzeigenden Spalten fest. Die Option definiert
// für jede Spalte die Breite individuell, adressiert über den Feldindex gemäß Option Anzeige/Felder.
$anzeige_SpaltenBreite = array(
    0 => '40em',
    1 => '400em',
    2 => '3000em',
    3 => '200em',
    4 => '200em',
    5 => '200em',
    6 => '100em'
);

// Anzeige / Tabellenstyle
// Mit dieser Option können CSS-Styleangaben für die verschiedenen Tabellenelemente machen.
// Die Tabelle hat folgenden Aufbau, die Feldkennzeichner stehen in {}-Klammern:
//    <table style="{T}">
//     <thead style="{H}">
//            <tr style="{HR}"><th style="{HFn}">text</th><th style="{HFn}">text</th>...<th style="{HFn}">text</th></tr>
//     </thead>
//     <tbody style="{B}">
//         <tr style="{BRG}"><td style="{DFGn}">daten</td><td style="{DFGn}">daten</td>...<td style="{DFGn}">daten</td></tr>
//         <tr style="{BRU}"><td style="{DFUn}">daten</td><td style="{DFUn}">daten</td>...<td style="{DFUn}">daten</td></tr>
//       ...
//    </tbody>
// </table>
// Die gewünschten Styleangaben werden als String im Array hinterlegt, jeweils mit dem
// entsprechenden Feldkennzeichner. Das (n) im Feldkennzeichner steht für den Feldindex, wie er im
// Parameter Anzeige/Felder festgelegt ist, d.h. sie legen im Style-Array für jedes Feld ein Style fest,
// unabhängig davon, wo Sie das entsprechende Feld letztlich anzeigen lassen.
$anzeige_Styles = array(
   // <table>-Tag:
    'T'    => 'margin:0 auto; font-size:0.8em;',
   // <thead>-Tag:
    'H'    => '',
   // <tr>-Tag im thead-Bereich:
    'HR'   => '',
   // <th>-Tag Feld Typ:
    'HF0'  => 'width:35px; align:left;',
   // <th>-Tag Feld Datum:
    'HF1'  => 'width:35px; align:left;',
   // <th>-Tag Feld Name:
    'HF2'  => 'width:35px; align:left;',
   // <th>-Tag Feld Rufnummer:
    'HF3'  => 'width:35px; align:left;',
   // <th>-Tag Feld Nebenstelle:
    'HF4'  => 'width:35px; align:left;',
   // <th>-Tag Feld Eigene Rufnummer:
    'HF5'  => 'width:35px; align:left;',
   // <th>-Tag Feld Dauer:
    'HF6'  => 'width:35px; align:left;',
   // <tbody>-Tag:
    'B'    => '',
   // <tr>-Tag:
    'BRG'  => 'background-color:#555555;',
    'BRU'  => 'background-color:#333333;',
   // <td>-Tag Feld Typ:
    'DFG0' => 'text-align:center;',
    'DFU0' => 'text-align:center;',
   // <td>-Tag Feld Datum:
    'DFG1' => 'text-align:center;',
    'DFU1' => 'text-align:center;',
   // <td>-Tag Feld Name:
    'DFG2' => '',
    'DFU2' => '',
   // <td>-Tag Feld Rufnummer:
    'DFG3' => 'text-align:center;',
    'DFU3' => 'text-align:center;',
   // <td>-Tag Feld Nebenstelle:
    'DFG4' => 'text-align:center;',
    'DFU4' => 'text-align:center;',
   // <td>-Tag Feld Eigene Rufnummer:
    'DFG5' => 'text-align:center;',
    'DFU5' => 'text-align:center;',
   // <td>-Tag Feld Dauer:
    'DFG6' => 'text-align:center;',
    'DFU6' => 'text-align:center;'
   // ^- Der Buchstabe "G" steht für gerade, "U" für ungerade. Die Zählung mit 0, d.h. mit gerade.
);

// Anzeige / Symbole:
// Bei der Anzeige im WebFront kommen 4 verschiedene Symbole zum Einsatz. Mit diesem Parameter
// legen Sie fest, welches Symbol für welchen Zweck verwendung finden soll. Sie können alle
// Bilddateien angeben die der Browser anzeigen kann. Achten Sie darauf, das die Symbole eine
// angemessene Größe haben, da der Browser die Symbole mit Originalabmessung anzeigt.
// Die Symbole und ihre Bedeutung sind:
// CALLIN               Dieses Symbol wird in der Spalte Typ angezeigt, wenn ein eingehender Anruf
//                        angenommen wurde (d.h. ein Gespräch ist zustande gekommen)
// CALLFAIL             Dieses Symbol wird in der Spalte Typ angezeigt, wenn ein eingehender oder
//                        ausgehender Anruf NICHT angenommen wurde (d.h. es hat geklingelt und
//                        NIEMAND hat abgehoben)
// CALLOUT              Dieses Symbol wird in der SPalte Typ angezeigt für alle Verbindungen, die
//                        ausgehend sind (d.h. es wurde jemand angerufen und der jenige hat
//                        abgehoben)
// SEARCHHIT            Dieses Symbol wird am Anfang oder am Ende der Spalte Name angezeigt, wenn
//                       der Eintrag per Invers-Suche ermittelt wurde und Markierung aktiviert ist
$anzeige_Symbole = array(
    'CALLIN'    => '/user/fritz/Callin.png',
    'CALLFAIL'  => '/user/fritz/Callinfailed.png',
    'CALLOUT'   => '/user/fritz/Callout.png',
    'SEARCHHIT' => '/user/fritz/Search_DasOertliche.png'
);

// Anzeige / Symbolgrösse
// Dieser Parameter legt die Anzeigegröße für alle Symbole einheitlich fest. Geben Sie einen
// beliebigen Pixel-Wert an, welcher für die Attribute Width und Height eingetragen wird:
$anzeige_Symbolgroesse = 16;

// Anzeige / Symbolstyle
// Mit diesem Parameter können Sie für jedes der Symbole weitere CSS-Styles festlegen, die in
// die Tabelle übernommen werden sollen. Sie können je Symboltyp (siehe Anzeige/Symbole)
// individuelle Angaben machen.
$anzeige_SymbolStyle = array(
    'CALLIN'    => 'margin:1px 0 0;',
    'CALLFAIL'  => 'margin:1px 0 0;',
    'CALLOUT'   => 'margin:1px 0 0;',
    'SEARCHHIT' => 'margin:1px 0 0;'
);

// Sonstiges / LogMode:
// Mit dieser Option stellt am ein, aus welche Art und Weise Logging-Meldungen vom Skript
// erzeugt werden. Es werden derzeit 2 Varianten unterstützt:
// 0                    Keine Logmeldungen erzeugen
// 1                    Logmeldungen via IPS_LogMessage (default)
// 2                    Logmeldungen via IPSLogger (ACHTUNG: IPS-Library mit IPSLogger muss
//                      installiert sein um diese Funktion nutzen zu können).
$sonstige_LogMode = 1;

/*************************************************************************************************/
 /* Ab hier nichts mehr ändern                                                                    */
 /*************************************************************************************************/

if ($sonstige_LogMode == 2) {
    IPSUtils_Include ("IPSLogger.inc.php", "IPSLibrary::app::core::IPSLogger");
}

define('CRLF', "
", true);
define('CR',   "\r", true);
define('LF',   "
", true);
define('TAB',  "	", true);

// Loglevel für Meldungen
define('FATAL', 0, true);
define('ERROR', 1, true);
define('WARNING', 2, true);
define('NOTIFICATION', 3, true);
define('INFORMATION', 4, true);
define('DEBUG', 5, true);
define('COMMUNICATION', 6, true);
define('TRACE', 7, true);
define('TEST', 8, true);

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

// Adresse der Fritzbox-GUI in Variable ablegen (wird später öfters verwendet)
$fritzgui = 'http://' . $fritzbox_Adresse . '/cgi-bin/webcm';

$fritzbox_Adresse = 'fritz.box';



// Step 1 - Login in die Fritzbox UM 6360 05.28

$ch = curl_init('http://'.$fritzbox_Adresse.'/cgi-bin/webcm');
curl_setopt($ch, CURLOPT_POSTFIELDS, "getpage=../html/login_sid.xml");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);
$session_status_simplexml = simplexml_load_string($login);
if ($session_status_simplexml->SID != '0000000000000000')
{
   $SID = $session_status_simplexml->SID;
}
else
{
   $challenge = $session_status_simplexml->Challenge;
   $response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $fritzbox_Password, "UCS-2LE", "UTF-8"));

   curl_setopt($ch, CURLOPT_POSTFIELDS, "login:command/response={$response}&getpage=../html/login_sid.xml");
   $sendlogin = curl_exec($ch);
   $session_status_simplexml = simplexml_load_string($sendlogin);

   if ($session_status_simplexml->SID != '0000000000000000')
   {
   $SID = $session_status_simplexml->SID;
   }
   else
   {
      echo "Fehler: Login fehlgeschlagen";
      return;
    }
}
curl_close($ch);


//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).CRLF.'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' => '../FRITZ!Box_Anrufliste.csv',
    'sid' => $SID
));
$opts = array('http' => array(
    'method'  => 'POST',
    'header'  => 'Content-Length: '.strlen($postdata).CRLF.'Content-Type: application/x-www-form-urlencoded',
     'content' => $postdata
));

$context    = stream_context_create($opts);
$URL = "http://".$fritzbox_Adresse."/fon_num/foncalls_list.lua?sid=".$SID."&csv=";
$anrufliste = utf8_decode(file_get_contents($URL, false, $context));
$anrufliste = explode(LF, $anrufliste);
$felder = array('Typ', 'Datum', 'Name', 'Rufnummer', 'Nebenstelle', 'Eigene Rufnummer', 'Dauer');

// Kopf der Tabelle erzeugen
$str  = "<table bgcolor='#000000'><body scroll=no><body bgcolor='#000000'><table style=".$anzeige_Styles['T'].'">'.CRLF;
$str .= '<colgroup>'.CRLF;
foreach($anzeige_Felder as $feldIndex) {
    $str .= '<col width="'.$anzeige_SpaltenBreite[$feldIndex].'" />'.CRLF;
}
$str .= '</colgroup>'.CRLF;
$str .= '<thead style="'.$anzeige_Styles['H'].'">'.CRLF;
$str .= '<tr style="'.$anzeige_Styles['HR'].'">';
foreach($anzeige_Felder as $feldIndex) {
    $str .= '<th style="color:ffff00; '.$anzeige_Styles['HF'.$feldIndex].'">'.$felder[$feldIndex].'</th>';
 }
$str .= '</tr>'.CRLF;
$str .= '</thead>'.CRLF;
$str .= '<tbody style="'.$anzeige_Styles['B'].'">'.CRLF;
$pos = 0;
$search_marker = false;
$searchFailed = array();
                       // Liste aller in diesem Lauf bereits erfolglos gesuchter Nummern

Echo count($anrufliste);
 for($i = 2; $i <= count($anrufliste) - 2; $i++) {
    set_time_limit(30);
    $eintrag = explode(';', $anrufliste[$i]);

   // Daten des aktuellen Eintrags überarbeiten und anschließend Datenzeile erstellen.

   // 1.) Unbekannte Anrufer im Internet suchen und Anzeigenamen kürzen
    if($eintrag[2] == '') {
       if ($suche_Modus == 0) {
          $eintrag[2] = '-Unbekannt-';
        } else {
           if (in_array($eintrag[3], $searchFailed)) {
            } else {
                $result = TelSuche($eintrag[3], $suche_Modus);
            }
            if ($result == false) {
               $searchFailed[] = $eintrag[3];
               $eintrag[2] = ($suche_TelNummerWennNichtGefunden == 1 ?
                                    $eintrag[3] : $suche_TextTelNummerNichtGefunden);
             } else {
               $search_marker = true;
               $ersterEintrag = true;       // Kennung für ggf. erforderliches Symbolkennzeichen
                foreach($suche_ErgebnisFelder as $feldName) {
                    $eintrag[2] .= ($ersterEintrag ? '' : $suche_FeldSeparator) . $result[$feldName];
                     $ersterEintrag = false;
                }
            }
        }
    }
   // Abschließend wird JEDER Eintrag noch auf Länge geschnitten
    $eintrag[2] = TextAbschneiden($eintrag[2], $liste_LimitNamen);

   // 2.) Nebenstelle mit Eigene Rufnummer ersetzen wenn leer oder Treffer in liste_FilterNebenstelle
     if(strlen($eintrag[4]) == 0 or in_array($eintrag[4], $liste_FilterNebenstelle) ==  true) {
         $eintrag[4] = $eintrag[5];
    }

   // 3.) "Keine Nummer" für leere Einträge bei Anrufernummer
    if(strlen($eintrag[3]) == 0) {
        $eintrag[3] = 'Keine Nummer';
    }

   // 4.) Heute und Gestern ersetzen falls Funktion aktiviert
    if ($anzeige_DatumMaskieren) {
       $parts   = preg_split('/[ .:]/', $eintrag[1]);
        $datum   = mktime(0, 0, 1, (int)$parts[1], (int)$parts[0], (int)$parts[2]);
        $heute   = mktime(0, 0, 0);
       $gestern = $heute - 86400;
        if ($datum > $heute) {
            $eintrag[1] = 'Heute, ';
        } elseif ($datum > $gestern) {
           $eintrag[1] = 'Gestern, ';
        } else {
            $eintrag[1] = date('d.m.y ', $datum);
        }
        $eintrag[1] .= $parts[3].':'.$parts[4];
    }

    $caller = $eintrag[0];
    switch($caller) {
         case 4:  $eintrag[0] = '<img src="'.$anzeige_Symbole['CALLOUT'].'" width="'.$anzeige_Symbolgroesse.'px" height="'.$anzeige_Symbolgroesse.'px" style="'.$anzeige_SymbolStyle['CALLIN'].'">'; break;
         case 2:  $eintrag[0] = '<img src="'.$anzeige_Symbole['CALLFAIL'].'" width="'.$anzeige_Symbolgroesse.'px" height="'.$anzeige_Symbolgroesse.'px" style="'.$anzeige_SymbolStyle['CALLFAIL'].'">'; break;
         case 1:  $eintrag[0] = '<img src="'.$anzeige_Symbole['CALLIN'].'" width="'.$anzeige_Symbolgroesse.'px" height="'.$anzeige_Symbolgroesse.'px" style="'.$anzeige_SymbolStyle['CALLOUT'].'">'; break;
         default: $eintrag[0] = '';
    }
   // Falls ein Suchsymbol benötigt wird
    if ($search_marker) {
       $logo = '<img src="'.$anzeige_Symbole['SEARCHHIT'].'" width="'.$anzeige_Symbolgroesse.'px" height="'.$anzeige_Symbolgroesse.'px" style="'.$anzeige_SymbolStyle['SEARCHHIT'].'">';
         switch($suche_TrefferMarkieren) {
            case 0: break;
            case 1: $eintrag[2] = '(*)'.$eintrag[2]; break;
            case 2: $eintrag[2] = $eintrag[2].'(*)'; break;
            case 3: $eintrag[2] = $logo.' '.$eintrag[2]; break;
            case 4: $eintrag[2] = $eintrag[2].' '.$logo; break;
        }
        $search_marker = false;   // Die Markierung zurücksetzen
    }

   // Die Datenzeile zum aktuellen Eintrag erstellen, WENN der Eintragtyp auch angezeigt werden soll
     if(in_array($caller, $liste_Filter)) {
        $str .= '<tr style="'.$anzeige_Styles['BR'.($pos % 2 ? 'U':'G')].'">';
        foreach($anzeige_Felder as $feldIndex) {
            $str .= '<td style="'.$anzeige_Styles['DF'.($pos % 2 ? 'U':'G').$feldIndex].'">'.$eintrag[$feldIndex].'</td>';
         }
        $str .= '</tr>'.CRLF;
        $pos++;
    }

    if($pos >= $liste_Anzahl) {
        break;
    }
}
$str .= '</tbody>'.CRLF;
$str .= '</table>'.CRLF;

// ErgebnisListe in Content-Variable speichern
$vid = CreateVariableByName($parentID, 'Content', 3);
IPS_SetIcon($vid, 'speaker');
IPS_SetVariableCustomProfile($vid, '~HTMLBox');
SetValue($vid, $str);



// Von der FritzBox-GUI abmelden
$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).CRLF.'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;
}

function TextAbschneiden($Text, $Laenge) {
    if ($Laenge == 0) {
        return $Text;
    } else {

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

// Führt eine Cache-unterstützte Suche nach der Rufnummer durch
function TelSuche($Rufnummer, $modus) {
    global $parentID, $suche_cacheExpireTime, $suche_cacheVarID;

   // Daten aus dem Suchcache laden
    $cacheData = GetCacheData();

   // Ergebnisrecord mit false vorbelegen
    $record = false;

   // Suchcache checken, ob ein Eintrag passend zur Rufnummer vorhanden ist
    if (isset($cacheData[$Rufnummer])) {
       // Treffer im Cache, Daten holen und rück zum Aufrufer springen
        $record = $cacheData[$Rufnummer]['Data'];
    }

   // Wenn im Cache kein Treffer gefunden wurde, eine Websuchmaschine befragen
    if ($record === false) {
        switch ($modus) {
            case 1: $record = QueryKlickTelDe($Rufnummer); break;
            case 2: $record = QueryDasOertlicheDe($Rufnummer); break;
            case 3: $record = QueryTelSearchCh($Rufnummer); break;
        }

       // Wenn wir jetzt einen Treffer haben, muss der noch in den Cache...
        if ($record !== false) {
           AddRecordToCache($Rufnummer, $record);
        }
    }

   // So, jetzt sind wird fertig, zurück zum Aufrufer...
    return $record;
}

// Liefert die aktuellen Daten aus dem Cache als Array an den Aufrufer
function GetCacheData() {
    global $suche_cacheVarID, $parentID;

    $globalCache = false;
   // ID der Cachevariable ermitteln
    if ($suche_cacheVarID == 0) {
      // Wir arbeiten mit einem eigenen Cache
       $varID = CreateVariableByName($parentID, 'search_cache', 3);
    } else {
        $globalCache = true;
       $varID = $suche_cacheVarID;
    }

   // Wenn wir mit globalem Cache arbeiten müssen wir jetzt ein Lock holen
    if ($globalCache) {
        if (!IPS_SemaphoreEnter('FB_cache_lock', 2000)) {
           return false; // Und ende... beim nächsten mal mehr Glück...
        }
    }

   // Die Cache-Daten aus der Variable holen und deserialisieren
    $data = GetValue($varID);

    if ($globalCache) {
       // Jetzt noch die Semaphore zurückgeben
        IPS_SemaphoreLeave('FB_cache_lock');
    }

   // und deserialisieren
    if (($result = @unserialize($data)) === FALSE) {
       $result = array();
    }

   // fertig, das Array mit den cache-daten an den Aufrufer zurückliefern
    return $result;
}

function AddRecordToCache($Rufnummer, $record) {
    global $suche_cacheVarID, $suche_cacheExpireTime, $parentID;

    $globalCache = false;

   // ID der Cachevariable ermitteln
    if ($suche_cacheVarID == 0) {
       // Wir arbeiten mit einem eigenen Cache
        $varID = CreateVariableByName($parentID, 'search_cache', 3);
    } else {
        $globalCache = true;
        $varID = $suche_cacheVarID;
    }

   // Wenn wir mit globalem Cache arbeiten müssen wir jetzt ein Lock holen
    if ($globalCache) {
        if (!IPS_SemaphoreEnter('FB_cache_lock', 2000)) {
           return false; // Und ende... beim nächsten mal mehr Glück...
        }
    }

   // Die Cache-Daten aus der Variable holen und deserialisieren
    $data = GetValue($varID);
    if (($cache = @unserialize($data)) === FALSE) {
       $cache = array();
    }

   // Jetzt den neuen Eintrag in $data vornehmen
    $cache[$Rufnummer] = array('Expire' => (time() + $suche_cacheExpireTime), 'Data' => $record);

   // Das ganze wieder serialisieren und in die Variable zurückschreiben
    $data = serialize($cache);
    SetValue($varID, $data);

    if ($globalCache) {
       // Jetzt noch die Semaphore zurückgeben
        IPS_SemaphoreLeave('FB_cache_lock');
    }
    return true;
}

function QueryDasOertlicheDe($Rufnummer) {
    $record = false;
    $pageurl = "http://www.dasoertliche.de/Controller?form_name=search_inv&ph=$Rufnummer";
     $wsdata = @Sys_GetURLContent($pageurl);
    if ($wsdata === false) {
        WriteLogMessage(WARNING, 'Datei: '.__file__.' Zeile: '.__line__, 'Timeout bei Abruf der Webseite '.$pageurl);
     } else {
        $data = str_replace(array(CRLF, LF), ' ', $wsdata);
        if(preg_match('/getItemData(.*)/', $data, $result)) {
            $result = explode("', '",$result[1]);
            $record = array(
                'Name'              => html_entity_decode(trim($result[5])),
                'Strasse'           => html_entity_decode(trim($result[6])),
                'Hausnummer'        => html_entity_decode(trim($result[7])),
                'PLZ'               => html_entity_decode(trim($result[3])),
                'Ort'               => html_entity_decode(trim($result[4])),
                'StrasseHausnummer' => html_entity_decode(trim($result[6]).' '.trim($result[7])),
                 'PLZOrt'            => html_entity_decode(trim($result[3]).' '.trim($result[4]))
             );
        }
    }
    return $record;
}

function QueryKlickTelDe($Rufnummer) {
    $record = false;
    $pageurl = "http://www.klicktel.de/inverssuche/index/search?".
                  "method=searchSimple&_dvform_posted=1&phoneNumber=$Rufnummer";
     $wsdata = @Sys_GetURLContent($pageurl);
    if ($wsdata === false) {
       WriteLogMessage(WARNING, 'Datei: '.__file__.' Zeile: '.__line__, 'Timeout bei Abruf der Webseite '.$pageurl);
     } else {
        $data = str_replace(array(CRLF, LF), ' ', $wsdata);
        if (preg_match('/<strong>(.*)<\/strong>.*<p class="data track">(.*?)([0-9][0-9A-Za-z].*?)'.
             '<br \/>\s*?([0-9]{5})\s*?(.*?)<\/p>/', $data, $result)) {
            $record = array(
                'Name'              => html_entity_decode(trim($result[1])),
                'Strasse'           => html_entity_decode(trim($result[2])),
                'Hausnummer'        => html_entity_decode(trim($result[3])),
                'PLZ'               => html_entity_decode(trim($result[4])),
                'Ort'               => html_entity_decode(trim($result[5])),
                'StrasseHausnummer' => html_entity_decode(trim($result[2]).' '.trim($result[3])),
                 'PLZOrt'            => html_entity_decode(trim($result[4]).' '.trim($result[5]))
             );
        }
    }
    return $record;
}

function QueryTelSearchCh($Rufnummer) {
    $record = false;
    $pageurl = "http://tel.search.ch/?tel=$Rufnummer";
    $wsdata = @Sys_GetURLContent($pageurl);
    if ($wsdata === false) {
       WriteLogMessage(WARNING, 'Datei: '.__file__.' Zeile: '.__line__, 'Timeout bei Abruf der Webseite '.$pageurl);
     } else {
        $data = str_replace(array(CRLF, LF), ' ', $wsdata);
        if (preg_match('/class="fn">(.*?)<\/a>.*class="adrgroup street-address">(.*) ([0-9]+[0-9a-zA-Z]*)'.
                        '<\/span>.*class="postal-code">(.*?)<\/span>.*class="locality">(.*?)<\/span>/', $data, $result)) {
             $record = array(
                'Name'              => html_entity_decode(trim($result[1])),
                'Strasse'           => html_entity_decode(trim($result[2])),
                'Hausnummer'        => html_entity_decode(trim($result[3])),
                'PLZ'               => html_entity_decode(trim($result[4])),
                'Ort'               => html_entity_decode(trim($result[5])),
                'StrasseHausnummer' => html_entity_decode(trim($result[2]).' '.trim($result[3])),
                 'PLZOrt'            => html_entity_decode(trim($result[4]).' '.trim($result[5]))
             );
        }
    }
    return $record;
}





// Erzeugt je nach Einstellung eine Meldung im IPS Logbuch oder via IPSLogger (sonstige/LogMode)
 function WriteLogMessage($level, $location, $information) {
    global $sonstige_LogMode;

    $logLevel = array(
        'Fatal:',           // LogLevel=0: Schwerwiegende Fehler, führt normalerweise zu einem kompletten
                                //   Programmabbruch
        'Error:',           // LogLevel=1: 'Normale' Fehler
        'Warning:',           // LogLevel=2: Warnungen
        'Notification:',   // LogLevel=3: Notifizierung, wird benutzt um sich über bestimmte Ereignisse im
                                //   System informieren zu lassen (Beschattung wurde aktiviert, oder Rasenbewässerung
                                //   gestartet)
        'Information:',   // LogLevel=4: Informationsmeldungen, zur Protokollierung von Schaltvorgängen usw.
         'Debug:',           // LogLevel=5: Debug Meldungen
        'Communication:',   // LogLevel=6: Protokollierung von Kommunikations Instanzen (Senden/Empfangen über
                                //   RS232, Sockets, ...)
        'Trace:',           // LogLevel=7: Sehr detailierte Meldungen, um diverse Ablauffehler zu finden
         'Test:'               // LogLevel=8: Test Meldungen, verwende ich nur temporär um Fehler zu finden, man kann
                                //   nach diesen Meldungen suchen und sie nach finden des Fehlerers wieder entfernen
     );

    switch ($sonstige_LogMode) {
       case 1:// Logging via IPS_LogMessage
          IPS_LogMessage($location, $logLevel[$level].' '.$information);
      break;
        case 2:// Logging via IPSLogger
           switch ($level) {
              case 0: IPSLogger_Fat($location, $information); break;
              case 1: IPSLogger_Err($location, $information); break;
              case 2: IPSLogger_Wrn($location, $information); break;
              case 3: IPSLogger_Not($location, $information); break;
              case 4: IPSLogger_Inf($location, $information); break;
              case 5: IPSLogger_Dbg($location, $information); break;
              case 6: IPSLogger_Com($location, $information); break;
              case 7: IPSLogger_Trc($location, $information); break;
              case 8: IPSLogger_Tst($location, $information); break;
            }
        break;
    }
}
?>

fritz.rar (6.75 KB)

Tausend Dank für das Skript, es war eine gute Gelegenheit, dieses bei mir mal etwas „aufzuräumen“.

Die Inverssuche aus deinem Skript funktionierte bei mir übrigens nicht richtig, es erschienen mehrere Einträge „1 Treffer durch Verkürzung“ oder so ähnlich anstelle eines Namen, mit zudem falsch codiertem Umlaut. Habe das Inverssuchskript aus meinem alten Skript übernommen, mit dem funktioniert es.

Vielen Dank an Tuxtom007 für das Script.
Leider befinde ich mich PhP -technisch noch eher auf ausprobieren und abändern.
Bei mir funktioniert das mit der Rückwärstssuche auch nicht.

Notice: Undefined offset: 2 in C:\IP-Symcon\scripts\27671.ips.php on line 420

Notice: Undefined offset: 3 in C:\IP-Symcon\scripts\27671.ips.php on line 424

Notice: Undefined offset: 3 in C:\IP-Symcon\scripts\27671.ips.php on line 426

Notice: Undefined offset: 3 in C:\IP-Symcon\scripts\27671.ips.php on line 429

Notice: Undefined offset: 4 in C:\IP-Symcon\scripts\27671.ips.php on line 446

Notice: Undefined offset: 5 in C:\IP-Symcon\scripts\27671.ips.php on line 447

Notice: Undefined offset: 3 in C:\IP-Symcon\scripts\27671.ips.php on line 451

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

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

Notice: Undefined offset: 2 in C:\IP-Symcon\scripts\27671.ips.php on line 458

das wäre dann ab hier

   // 1.) Unbekannte Anrufer im Internet suchen und Anzeigenamen kürzen
    if($eintrag[2] == '') {
       if ($suche_Modus == 0) {
          $eintrag[2] = '-Unbekannt-';
        } else  {
           if (in_array($eintrag[3], $searchFailed)) {
            } else {
                $result = TelSuche($eintrag[3], $suche_Modus);
            }
            if ($result == false) {
               $searchFailed[] = $eintrag[3];
               $eintrag[2] = ($suche_TelNummerWennNichtGefunden == 1 ?
                                    $eintrag[3] : $suche_TextTelNummerNichtGefunden);
             } else {
               $search_marker = true;
               $ersterEintrag = true;       // Kennung für ggf. erforderliches Symbolkennzeichen
                foreach($suche_ErgebnisFelder as $feldName) {
                    $eintrag[2] .= ($ersterEintrag ? '' : $suche_FeldSeparator) . $result[$feldName];
                     $ersterEintrag = false;
                }
            }
       }
    }
   // Abschließend wird JEDER Eintrag noch auf Länge geschnitten
    $eintrag[2] = TextAbschneiden($eintrag[2], $liste_LimitNamen);

   // 2.) Nebenstelle mit Eigene Rufnummer ersetzen wenn leer oder Treffer in liste_FilterNebenstelle
     if(strlen($eintrag[4]) == 0 or in_array($eintrag[4], $liste_FilterNebenstelle) ==  true) {
         $eintrag[4] = $eintrag[5];
    }

   // 3.) "Keine Nummer" für leere Einträge bei Anrufernummer
    if(strlen($eintrag[3]) == 0) {
        $eintrag[3] = 'Keine Nummer';
    }

   // 4.) Heute und Gestern ersetzen falls Funktion aktiviert
    if ($anzeige_DatumMaskieren) {
       $parts   = preg_split('/[ .:]/', $eintrag[1]);
        $datum   = mktime(0, 0, 1, (int)$parts[1], (int)$parts[0], (int)$parts[2]);
        $heute   = mktime(0, 0, 0);
       $gestern = $heute - 86400;
        if ($datum > $heute) {
            $eintrag[1] = 'Heute, ';
        } elseif ($datum > $gestern) {
           $eintrag[1] = 'Gestern, ';
        } else {
            $eintrag[1] = date('d.m.y ', $datum);
        }
        $eintrag[1] .= $parts[3].':'.$parts[4];
    }

    $caller = $eintrag[0];
    switch($caller) {
         case 4:  $eintrag[0] = '<img src="'.$anzeige_Symbole['CALLOUT'].'" width="'.$anzeige_Symbolgroesse.'px" height="'.$anzeige_Symbolgroesse.'px" style="'.$anzeige_SymbolStyle['CALLIN'].'">'; break;
         case 2:  $eintrag[0] = '<img src="'.$anzeige_Symbole['CALLFAIL'].'" width="'.$anzeige_Symbolgroesse.'px" height="'.$anzeige_Symbolgroesse.'px" style="'.$anzeige_SymbolStyle['CALLFAIL'].'">'; break;
         case 1:  $eintrag[0] = '<img src="'.$anzeige_Symbole['CALLIN'].'" width="'.$anzeige_Symbolgroesse.'px" height="'.$anzeige_Symbolgroesse.'px" style="'.$anzeige_SymbolStyle['CALLOUT'].'">'; break;
         default: $eintrag[0] = '';
    }

Nachdem ich jetzt etwas auf der Leitung stehe würde ich euch um Nachhilfe bitten.

sokkederheld …du schreibst, dass das bei dir auch nicht funktioniert hat. Könntest Du mir vielleicht sagen woran es bei dir gelegen hat.

Danke für eure Hilfe!

lg

Roman

Hi,

ich habe auch mal eine Frage zu dem überarbeiteten Script zum auslesen der Anruferliste von HIER

Habe meine alte Instanz und Script gelöscht und das Script eingefügt. Passwort eingetragen und Script ausgeführt.
Aber nichts passiert. Es werden keine Variablen, Timer usw angelegt. Hab ich was übersehen ?

Fritzbox: 7390 / FRITZ!OS 05.50

EDIT: Hat sich erledigt… ich dummi habe den „<“ vor dem ersten Fragezeichen ausversehen vergessen…

@tuxtom007:

Hi, habe dein Script verwendet - da ich auch eine Kabelbox habe (FB 6360, Fritz!OS 05.50, Firmware 85.05.50) und mit den anderen Scripts nicht passen.

Dennoch habe ich einige Probleme damit.

  1. Muss ich im Script nichts anpassen? Z.B. in welche Variablen die Werte gespeichert werden?
  2. Welchen Variablentypen muss ich wo verwenden (z.B. HMTLBox)?
  3. Wenn ich das Auslesescript starte, bekomme ich die Meldung „Parse error: in [Kommunikation\Anrufliste\Auslesescript] on line 91“, kannst du mir sagen woran das liegen könnte?

Danke für deine / eure Hilfe :).