Hallo,
set dem update auf die Version 5.1 kann ich aus meiner FB die Anruferliste nicht mehr auslesen. Kennt jemand dieses Problem?
Fehlermeldung: Abort Processing during Fatal-Error: define(): Declaration of case-insensitive constants is deprecated
Error in Script C:\IP-Symcon\scripts\44376.ips.php on Line 285
Auslesescript:
<?
/*************************************************************************************************/
/* 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 = '192.168.0.133';
// 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 = '000000';
// 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 = 20;
// 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 = 50;
// 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;
// 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 => '50em',
1 => '410em',
2 => '450em',
3 => '225em',
4 => '225em',
5 => '75em',
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:#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 = 26;
// 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';
// 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;
}
}
?>