FritzBox mit SOAP auslesen und steuern

Das liegt an der 5.X Firmware ab 6.X ist es igd .
Darum ist es vielleicht bei solchen abfragen wichtig das nicht statisch im Script zu hinterlegen sondern über die Hilfsfunktionen den Dienst aus der XML auszulesen (müsste die http://fritz.box:49000/igddesc.xml sein). Außer natürlich die heißt bei der 5er Firmware auch anders :rolleyes:
Michael

Wo finde ich die Rufumleitung zum aktivieren/deaktivieren?

Danke euch beiden.
Ich habe das Auslese-Script mal um die Prüfung ergänzt bei den Diensten, Actionen und den Variablen.
Außerdem werden jetzt Punkt, Binde- und Unterstrich sowie der Doppelpunkt entfernt.
MCS51 hatte noch den Fehler das es seine Datentypen nicht gibt. Bei der FW 5.X gibt es wohl auch Vorzeichenbehaftete Integer (i4,i2, i1). Habe die auch ergänzt und auch die Hilfsfunktion erweitern.
Michael

Danke Jürgen.

Moin,

Mit folgendem link kann ich im VLC die Nachricht abhören:
http://fritz.box/lua/photo.lua?sid=1faefe10fd553230&myabfile=/var/media/ftp/ST-4GB-01/FRITZ/voicebox/rec/rec.0.001

Und nu bin ich mit meinen PHP Kenntnissen ab Ende :smiley:
Wie bekomme ich diese Url nun vernünftig ins Webfront?

Gruß
Manfred

Velleicht hilft dir das ja weiter

$conn_id = ftp_connect("192.168.1.1");
$ziel = "C:/IP-Symcon/AB-Files/";
// Login mit Benutzername und Passwort
ftp_login($conn_id, "ftpuser", "passw");
ftp_pasv($conn_id, true);

// Nach Verzeichnis .... wechseln
ftp_chdir($conn_id, "/Storage-01/FRITZ/voicebox/rec/");

$files = ftp_nlist($conn_id, ".");

$File = $files[0];
echo "File $File";
$filename = "ftp://'.$conn_id.'/Storage-01/FRITZ/voicebox/rec/$File";  // Muss auf eigene Verhältnisse angepasst werden
$local_file = "C:/IP-Symcon/dec/$File";

dec.zip (120 KB)

Danke, die Variante kenne ich.
Will die Datei aber nicht runterladen sondern direkt den stream anhören.

Ist bestimmt wieder nur ne Kleinigkeit die mir wieder mal nicht einfällt :slight_smile:

Grüße
Manfred

Also die Box gibt ja hier


$client = new SoapClient(
    null,
    array(
        'location'   => "http://".FB_HOST.":49000/upnp/control/x_tam",
        'uri'        => "urn:dslforum-org:service:X_AVM-DE_TAM:1",
        'noroot'     => True,
        'login'      => FB_USER,
        'password'   => FB_PASS
    )
);
$anrufliste = $client->GetMessageList(new SoapParam($fritzbox_AB, 'NewIndex'));
$anruflistexml = @simplexml_load_file($anrufliste);

in $anruflistexml eine URI für jede Nachricht zurück.
Was halt fehlt ist der Host+Port (ok das kann man ja anfügen lassen) und wie es scheint eine gültige SID.
Die Allerdings ist ja schon in der URL ($anrufliste) enthalten ?!
Also nur etwas Puzzeln mit den Strings und schon ‚sollte‘ es gehen.
Habe allerdings jetzt keine Zeit mehr und auch starke Schmopfkerzen…äh Kopfschmerzen.
Könnte daran liegen das ich zu viel mit dem Wiki gearbeitet habe… Benutzerfreundlich ist was anderes :smiley:
Michael

Hallo,

So, habe das Abspielen der Nachricht direkt aus der Tabelle hin bekommen.
Muss das ganze jetzt nur noch ein bißchen in Form bringen :smiley:

Gruß
Manfred

Ich versuche gerade die Liste der Netzwerkgeräte aus meiner Box zu bekommen.
Allerdings erhalte ich immer nur 16 Einträge zurück, und nicht an die 30 wie es auch Geräte im Netzwerk sind :frowning:
Vielleicht kann das ja jemand mal bitte gegenprüfen. Sonst ist das bei meiner 6360 wohl ein Bug.
Im Webfront der FB werden alle Geräte sauber aufgeführt. Und das obwohl die Box bei mir nicht der DHCP, auch nicht der DNS der Client ist. Sie ist nur Router für alle Geräte und DNS-Relay/Server für meinen lokalen DNS-Server.


<?
require_once("55512.ips.php"); //Hilfs-Script
require_once("45909.ips.php"); //Script welches folgendes Inhalt hat:
/*
define ('FB_HOST',"fritz.box");
define ('FB_USER',"user@user.com");
define ('FB_PASS',"password");
*/
$fbroot ='http://'.FB_HOST.':49000'; //Adresse + Port (immer 49000)
$desc = "tr64desc.xml"; //Hier sind die Infos über die Dienste enthalten
$SCPD = "hostsSCPD.xml";  // Hier sind die Infos über die Funktionen und Parameter/Variablen enthalten, sowie die Definition der Variablen Typen.

$action="GetHostNumberOfEntries";  //Diese Funktion soll ausgeführt werden

$service = FB_getServiceData($fbroot,$desc,$SCPD,$action);
$NumberOfHosts =  (int)FB_SoapAction($service,$action);
echo "Anzahl der Hosts: ".$NumberOfHosts.PHP_EOL;
$action="GetGenericHostEntry";  //Diese Funktion soll ausgeführt werden
for ($i=0;$i<$NumberOfHosts;$i++)
{
	echo "Index: $i".PHP_EOL;
	$result =  FB_SoapAction($service,$action,new SoapParam($i,'NewIndex'));
	var_dump($result);
	echo "-------------".PHP_EOL;
}
?>

Michael

Bei mir werden auch nur 16 ausgegeben…

Hoi Michael,

Habs mal versucht, bekomme auch nur 16 Einträge zurück (Fritzbox 7390).

Gruß
Manfred

Danke für eure Tests.
Aber das ist ja blöd, solange ich nicht noch was anderes finde, total unbrauchbar.
Michael

Hallo,

ich finde es noch recht praktisch, das man hier die Liste kuerzen oder nach Typ filtern kann:

[HR][/HR]


$result = $client->GetCallList(); //holt alles
$result = $client->GetCallList() ."&max=10"; //die letzten 10 Anrufe
$result = $client->GetCallList() ."&days=7"; //Anrufe der letzten 7 tage

siehe auch hier unter APPS:
http://avm.de/service/schnittstellen/
(Telefonbuch, Online-Telefonbuch, Anrufliste X_contactSCPD.pdf)

Gruss, Michael

Hat die Anrufweiterschaltung schon jemand hinbekommen?

Habe einen kleinen Fehler in FB_getServiceData() entdeckt.
$descXML muss $desc heißen:

    if ($xml === false)
    {
       echo "Not found:".$desc.PHP_EOL;
        return false;
    }

Soviel zu aussagekräftigen Fehlermeldungen :eek:
Ändere ich bei Gelegenheit.
Danke.
Michael

Abend,

Hab mal ein bißchen rumprobiert.
Folgendes ist möglich:
1.) Nachrichten löschen
2.) Nachrichten als abgehört markieren
3.) Nachricht abspielen
4.) Nachricht pausieren
4.) Nachricht von Anfang abspielen

Die Icons liegen bei mir im Ordner „user/Fritzbox/“. Wenn’s ein anderes Verzeichnis sein soll, dann bitte im Skript anpassen.
Wenn jemand Lust hat das mal zu testen bitte.

Skript zum Auslesen der Anrufbeantworter:

<?
/*************************************************************************************************/
/* 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, bei globaler Konfiguration mit // auskommentieren.
define ('FB_HOST',"fritz.box");

// FritzBox / Password:
// Zum auslesen der Anruferliste ein Fritzbox-Benutzer benötigt.
// Dies sind u.A. die FTP/VPN etc... User in der Box.
// Bei globaler Konfiguration mit // auskommentieren.
define ('FB_USER',"user@user.com");
define ('FB_PASS',"password");

// Globale Konfiguration der Zugangsdaten und Fritz-Box Adresse.
// Alternativ kann auch z.B. mit include eine PHP-Datei geladen werden wo diese Daten enthalten sind,
// dann braucht bei Änderungen nur eine Datei geändert werden.
//require_once("45909.ips.php"); //Script welches folgendes Inhalt hat:
/*
define ('FB_HOST',"fritz.box");
define ('FB_USER',"user@user.com");
define ('FB_PASS',"password");
*/

//Refresh des Anrufliste in Sekunden (0=deaktiviert)
$refresh = 0; //Das Script kann z.B. auch durch den 'Gesprächsstatus' gestartet werden! Details im Wiki

// FritzBox / Index vom Anrufbeantworter:
// 0 = 1. Anrufbeantworter **600
// 1 = 2. Anrufbeantworter **601
// 2 = 3. Anrufbeantworter **602
// usw...
// Tragen Sie in das Nummer des Anrufbeantworters ein welcher abgefragt werden soll
$fritzbox_AB = 0;

// FritzBox / Filter:
// 0 = abgehörte Nachrichten
// 1 = neue Nachrichten
// Tragen Sie in das Array die Kennnummern der Nachrichten ein welche dargestellt
// werden sollen:
$liste_Filter = array(0, 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 = 10;

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

// 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 = 0;

// 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: Eigene Rufnummer  Hier erscheint die Multiple Subscriber Number (MSN), welche der Anrufer
//                        erreichen wollte.
// 5: Dauer             Hier wird die Dauer des Gesprächs ausgegeben. Die Dauer wird minutengenau
//                        erfasst und als Stunden:Minuten darstestellt.
// 6: löschen/markieren   Buttons zum löschen und als abgehört markieren der Nachricht
// 7: abhören				  Buttons zum abhören der Nachricht Start, Pause, von Anfang
// 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, 6, 7);

// 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 => '150em',
    2 => '250em',
    3 => '225em',
    4 => '225em',
    5 => '75em',
    6 => '74em',
    7 => '114em'
);

// 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 Eigene Rufnummer:
    'HF4'  => 'width:35px; align:left;',
    // <th>-Tag Feld Dauer:
    'HF5'  => 'width:35px; align:left;',
    // <th>-Tag Feld Control1:
    'HF6'  => 'width:35px; align:center;',
    // <th>-Tag Feld Control2:
    'HF7'  => 'width:35px; align:center;',
    // <tbody>-Tag:
    'B'    => '',
    // <tr>-Tag:
    'BRG'  => 'background-color:#000000; color:ffff00;',
    'BRU'  => 'background-color:#080808; 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 Eigene Rufnummer:
    'DFG4' => 'text-align:center;',
    'DFU4' => 'text-align:center;',
    // <td>-Tag Feld Dauer:
    'DFG5' => 'text-align:center;',
    'DFU5' => 'text-align:center;',
    // <td>-Tag Feld control1:
    'DFG6' => 'text-align:center;',
    'DFU6' => 'text-align:center;',
    // <td>-Tag Feld Control2:
    'DFG7' => 'text-align:center;',
    'DFU7' => '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:
// CALLOLD               Dieses Symbol wird in der Spalte Typ angezeigt, wenn ein eingehender Anruf
 //                        angenommen wurde (d.h. ein Gespräch ist zustande gekommen)
 // CALLNEW             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)
// 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(
    'CALLOLD'   => 'user/Fritzbox/Msgold.png',
    'CALLNEW'   => 'user/Fritzbox/Msgnew.png',
    'RELOAD'    => 'user/Fritzbox/Reload.png',
    'LOESCHEN'  => 'user/Fritzbox/Loeschen.png',
    'START'     => 'user/Fritzbox/Start.png',
    'STOP'      => 'user/Fritzbox/Pause.png',
    'BEGIN'     => 'user/Fritzbox/Begin.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 = 30;

// 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(
    'CALLOLD'   => 'margin:2px 0 0;',
    'CALLNEW'   => 'margin:2px 0 0;',
    'RELOAD'	 => 'margin:2px 0 0;',
    'LOESCHEN'  => 'margin:3px 0 0;',
    'START'  	 => 'margin:2px 0 0;',
    'STOP'  	 => 'margin:5px 0 0;',
    'BEGIN'  	 => 'margin:2px 0 0;',
    'SEARCHHIT' => 'margin:2px 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_SetName($_IPS['SELF'], 'Abfrage');

    $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, 'Anrufbeantworter');
    	}
	if($refresh > 0){
	  	IPS_SetScriptTimer($_IPS['SELF'], $refresh);
	  	}
}

//Anrufbeantworter lesen
$client = new SoapClient(
    null,
    array(
        'location'   => "http://".FB_HOST.":49000/upnp/control/x_tam",
        'uri'        => "urn:dslforum-org:service:X_AVM-DE_TAM:1",
        'noroot'     => True,
        'login'      => FB_USER,
        'password'   => FB_PASS
    )
);

// Nachrichten löschen oder als abgehört markieren
if ($_IPS['SENDER'] == 'RunScript'){

	$command = $_IPS['command'];
	$msgid = $_IPS['msgid'];

	switch($command){
		case "marked":
		$client->MarkMessage(new SoapParam($fritzbox_AB, 'NewIndex'),
	                     	new SoapParam($msgid, 'NewMessageIndex')
									);
		break;
		case "delete":
		$client->DeleteMessage(new SoapParam($fritzbox_AB, 'NewIndex'),
	                     	  new SoapParam($msgid, 'NewMessageIndex')
									  );
		break;
		}
	}

// Nachrichtenliste erstellen
$anrufliste = $client->GetMessageList(new SoapParam($fritzbox_AB, 'NewIndex'));
$anruflistexml = @simplexml_load_file($anrufliste);

	if ($anruflistexml === false){
		WriteLogMessage(FATAL, 'Datei: '.__file__.' Zeile: '.__line__, 'Fehler beim laden der Anrufliste.');
		return;
		}

	$vid = CreateVariableByName($parentID, 'Messages', 1);
		SetValueInteger($vid, count($anruflistexml->Message)); // Alle Nachrichten);
	$vid = CreateVariableByName($parentID, 'NewMessages', 1);
		SetValueInteger($vid, count($anruflistexml->xpath("//Message[New ='1']"))); // Neue Nachrichten
	if ($liste_Anzahl == 0) return;



$reload = "<div>
			  <form action='user/aktion_FB_AB.php' target='submitFrame' method='post' />
				<input type='hidden' name='skriptid' value='".$_IPS['SELF']."' />
				<input type='hidden' name='msgid' value='0' />
				<input type='hidden' name='command' value='reload' />
				<input type='image' src='".$anzeige_Symbole['RELOAD']."' name='reload'
					width='".$anzeige_Symbolgroesse."px' height='".$anzeige_Symbolgroesse."px'
					style='".$anzeige_SymbolStyle['RELOAD']." cursor: pointer; float: right;' />
				</form>
				</div>";

$felder = array('Typ', 'Datum', 'Name', 'Rufnummer', 'Eigene Rufnummer', 'Dauer', '', $reload);

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

$anruflistexml = $anruflistexml->Message;
foreach ($anruflistexml as $Call){ 	    // Daten des aktuellen Eintrags überarbeiten und anschließend Datenzeile erstellen.
	// Arry leeren
	$eintrag = [0, '', '', '','','', ''];
   set_time_limit(30);
    // Daten aus XML übertragen
    $eintrag[0] = (int)$Call->New;
    $eintrag[1] = (string)$Call->Date;
    $eintrag[2] = utf8_decode((string)$Call->Name);
    $eintrag[3] = utf8_decode((string)$Call->Number);
	 $eintrag[4] = utf8_decode((string)$Call->Called);
    $eintrag[5] = (string)$Call->Duration;

    $msgid = $Call->Index;

	 //Nachrichten löschen oder als abgehört markieren
	 $eintrag[6] = "<div>
	 					 <form action='user/aktion_FB_AB.php' target='submitFrame' method='post' />
							<input type='hidden' name='skriptid' value='".$_IPS['SELF']."' />
							<input type='hidden' name='msgid' value='".$msgid."' />
							<input type='hidden' name='command' value='delete' />
							<input type='image' src='".$anzeige_Symbole['LOESCHEN']."' name='dmsg'
								width='".$anzeige_Symbolgroesse."px' height='".$anzeige_Symbolgroesse."px'
								style='".$anzeige_SymbolStyle['LOESCHEN']." cursor: pointer; float: left; margin-right: 5px;' />
						</form>
 						<form action='user/aktion_FB_AB.php' target='submitFrame' method='post' />
							<input type='hidden' name='skriptid' value='".$_IPS['SELF']."' />
							<input type='hidden' name='msgid' value='".$msgid."' />
							<input type='hidden' name='command' value='marked' />
							<input type='image' src='".$anzeige_Symbole['CALLOLD']."' name='mmsg'
								width='".$anzeige_Symbolgroesse."px' height='".$anzeige_Symbolgroesse."px'
								style='".$anzeige_SymbolStyle['CALLOLD']." cursor: pointer; float: left;' />
						</form>
						</div>";
						
	 // Nachrichten abhören
    	$sid = substr($anrufliste, 47, -11);
	 	$file = substr((string)$Call->Path, 19);
	 	$url = "http://fritz.box/lua/photo.lua?sid=".$sid."&myabfile=".$file;

	 	$eintrag[7] ="<audio id='".$msgid."'>
  						   <source src='".$url."' type='audio/wav'>
  						   keine Unterstützung für Audioelemente
						  </audio>
					     <div>
							<img src='".$anzeige_Symbole['START']."' width=\"".$anzeige_Symbolgroesse."\"px\" height=\"".$anzeige_Symbolgroesse."px\" style=\"".$anzeige_SymbolStyle['START']." cursor: pointer\" onclick=\"document.getElementById('".$msgid."').play()\" />
							<img src='".$anzeige_Symbole['STOP']."' width=\"".$anzeige_Symbolgroesse."\"px\" height=\"".$anzeige_Symbolgroesse."px\" style=\"".$anzeige_SymbolStyle['STOP']." cursor: pointer\" onclick=\"document.getElementById('".$msgid."').pause()\" />
							<img src='".$anzeige_Symbole['BEGIN']."' width=\"".$anzeige_Symbolgroesse."\"px\" height=\"".$anzeige_Symbolgroesse."px\" style=\"".$anzeige_SymbolStyle['BEGIN']." cursor: pointer\" onclick=\"document.getElementById('".$msgid."').currentTime = 0;\" />
					     </div>";

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

    // 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 1:  $eintrag[0] = '<img src="'.$anzeige_Symbole['CALLNEW'].'" width="'.$anzeige_Symbolgroesse.'px" height="'.$anzeige_Symbolgroesse.'px" style="'.$anzeige_SymbolStyle['CALLNEW'].'">'; break;
         case 0:  $eintrag[0] = '<img src="'.$anzeige_Symbole['CALLOLD'].'" width="'.$anzeige_Symbolgroesse.'px" height="'.$anzeige_Symbolgroesse.'px" style="'.$anzeige_SymbolStyle['CALLOLD'].'">'; 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;
$str .= "<iframe name='submitFrame' style='display: none'></iframe>".CRLF;

$vid = CreateVariableByName($parentID, 'Content', 3);
IPS_SetIcon($vid, 'speaker');
IPS_SetVariableCustomProfile($vid, '~HTMLBox');
SetValueString($vid, $str);

function CreateVariableByName($id, $ident, $type) {
    global $_IPS;
    $vid = @IPS_GetObjectIDByIdent($ident, $id);
    if($vid === false) {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $ident);
        IPS_SetIdent($vid, $ident);
        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;
    }
}
?>

Skript welches sich im Webfront/user Ordner befinden muss:

<?php

/*************************************************************************************************************************

Anrufbeantworter im WebFront
============================

Dieses Skript ist Erforderlich, damit Nachrihten per Klick im WebFront gelöschtoder als angehört markiert werden können.
Es ist unter IP-Symcon/webfront/user/aktion_FB_AB.php zu kopieren.

**************************************************************************************************************************/

$skriptid = $_POST['skriptid'];
$msgid = $_POST['msgid'];
$command = $_POST['command'];


// Skriptaufruf zum Nachricht löschen und angehört markieren

if ($skriptid > 0 && $msgid >= 0){
   IPS_RunScriptWaitEx((int)$skriptid, array('command' => $command, 'msgid' => $msgid));
   }

?> 

Fritzbox_AB.png

Gruß
Manfred

Fritzbox_AB_neu.zip (18.8 KB)

Hallo Manni,

sieht nach viel Arbeit aus.
Werde ich morgen gleich mal testen.

Wenn man Nachrichten wiedergeben will, wo werden diese abgespielt?
Auf den Clients (Android/IOS) doch vermutlich nicht, oder?

Grüße,
Doc

Servus,

Alles was HTML5 Audio tags verabreiten kann, sollte die Nachrichten abspielen können. (denke ich ma :confused:)
Kann es leider nicht vernünftig testen, da ich nicht zu Hause bin.
Das geht erst nächste Woche wieder.

Ergänzung:
Die Seite http://html5test.com/ im Browser aufrufen.
Lt. Ergebnis sollte es auf Android keine Probleme geben, aber wie gesagt -> Theorie und Parxis :slight_smile:

Gruß
Manfred