FritzBox mit SOAP auslesen und steuern

Das ist nicht gut ;).

Da sollte etwas in dieser Richtung rauskommen:

Array
(
    [0] => SimpleXMLElement Object
        (
            [Index] => 0
            [Tam] => 1
            [Called] => 4711123
            [Date] => 23.10.14 18:53
            [Duration] => 0:01
            [Inbook] => 0
            [Name] => SimpleXMLElement Object
                (
                )

            [New] => 1
            [Number] => 02110815
            [Path] => /download.lua?path=/var/media/ftp/JetFlash-TS8GJFV10-01/FRITZ/voicebox/rec/rec.1.000
        )

)

Funktioniert denn eine SOAP Anfrage überhaupt? Soll heißen, werden die Anrufer-Listen generiert?

Nein es kommt gar nichts.

Versuch mal bitte folgendes:
füge hier mal jeweils ein print_r(); ein:


// Daten holen und Kombinieren
$ABMessageListe =FB_GetABMessageList();
print_r($ABMessageListe);
if ($ABMessageListe === false) return;  //Fehlermeldung in Funktion schon erzeugt

$Anrufliste = FB_GetCallList();
print_r($Anrufliste);
if ($Anrufliste === false) return;  //Fehlermeldung in Funktion schon erzeugt

$ABxml ist eine mit xpath gefilterte Liste, was bei dir wohl nicht funktioniert.
Das funktioniert so:

  1. In der $Anrufliste->Call->Port steht das Gerät des AB’s (1. AB = Port 40)
  2. Es wird aus der $ABMessageListe[PORT von 1.] der Eintrag mit dem gleichen Path zur AB-Datei gesucht wie er auch in der $Anrufliste->Call->Path steht

Wenn nun natürlich die Pfade in beiden Dateien nicht übereinstimmen, kann so ein Fehler auftreten.

Kannst die Ausgabe gerne um die Path Einträge gekürzt hier posten (muss ja nicht jeder deine Anrufe und Nummern sehen ) :wink:
EDIT:

Wenn der Download der Dateien von der Box-Fehlschlägt ist das auch korrekt, das Script wird einfach verlassen, ohne Fehler.
Die Fehlermeldung landet nur im Log bzw. IPSLogger.

Michael

PS: Hast du im Meldungsfenster oder IPS-Log eine Fehlermeldung bei ausführen des Scriptes ? In etwa so : Datei <Dateiurl> Zeile <int> Fehler beim laden der AB_Nachrichten.

Habe das eben noch mal ausprobiert.
Ich bekomme keine Fehler (also Script als fehlerhaft markiert) und auch keinen Fehler im Log / Meldungsfenster.
Hast du noch mehr Hinweise für mich ?
Michael (mit Medikament gedopt)

Hallo,
sieht dann in etwa so aus: (Habe nicht alle Einträge kopiert).

Array
(
[40] => SimpleXMLElement Object
(
[comment] => Array
(
[0] => SimpleXMLElement Object
(
)

                [1] =&gt; SimpleXMLElement Object
                    (
                    )

                [2] =&gt; SimpleXMLElement Object
                    (
                    )

            )

    )

)
SimpleXMLElement Object
(
[comment] => Array
(
[0] => SimpleXMLElement Object
(
)

        [1] =&gt; SimpleXMLElement Object
            (
            )

        [2] =&gt; SimpleXMLElement Object
            (
            )

        [3] =&gt; SimpleXMLElement Object
            (
            )

        [4] =&gt; SimpleXMLElement Object
            (
            )

        [5] =&gt; SimpleXMLElement Object
            (
            )

    )

[timestamp] =&gt; 1371898955
[Call] =&gt; Array
    (
        [0] =&gt; SimpleXMLElement Object
            (
                [Id] =&gt; 1698
                [Type] =&gt; 3
                [Called] =&gt; 0151*******
                [Caller] =&gt; SIP: 68*****
                [CallerNumber] =&gt; 68****
                [Name] =&gt; ********
                [Numbertype] =&gt; sip
                [Device] =&gt; FRITZ!App Fon SM-T805
                [Port] =&gt; 23
                [Date] =&gt; 23.10.14 19:02
                [Duration] =&gt; 0:01
                [Count] =&gt; SimpleXMLElement Object
                    (
                    )

                [Path] =&gt; SimpleXMLElement Object
                    (
                    )

            )

        [1] =&gt; SimpleXMLElement Object
            (
                [Id] =&gt; 1697
                [Type] =&gt; 1
                [Caller] =&gt; 0176******
                [Called] =&gt; SIP: 68****
                [CalledNumber] =&gt; 68****
                [Name] =&gt; Ma*****
                [Numbertype] =&gt; sip
                [Device] =&gt; Wohnzimmer
                [Port] =&gt; 10
                [Date] =&gt; 23.10.14 17:56
                [Duration] =&gt; 0:09
                [Count] =&gt; SimpleXMLElement Object
                    (
                    )

                [Path] =&gt; SimpleXMLElement Object
                    (
                    )

            )

[67] => SimpleXMLElement Object
(
[Id] => 1631
[Type] => 1
[Caller] => 04********
[Called] => Home
[CalledNumber] => 68*****
[Name] => SimpleXMLElement Object
(
)

                [Numbertype] =&gt; isdn        [b][u]Das irretiert mich ein wenig, habe seit 2 Wochen IP-Telefonie[/u][/b]
                [Device] =&gt; Anrufbeantworter
                [Port] =&gt; 40
                [Date] =&gt; 26.09.14 13:50
                [Duration] =&gt; 0:01
                [Count] =&gt; SimpleXMLElement Object
                    (
                    )

                [Path] =&gt; /download.lua?path=/var/media/ftp/CHIPSBNK-v1-9-13-01/FRITZ/voicebox/rec/rec.0.002
            )

und am Ende wieder

Notice: Trying to get property of non-object in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 642

Notice: Undefined offset: 0 in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 643

Notice: Trying to get property of non-object in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 643

Notice: Undefined offset: 0 in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 641

Notice: Trying to get property of non-object in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 641

Notice: Undefined offset: 0 in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 642

Notice: Trying to get property of non-object in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 642
Abort Processing during exceed of maximal ErrorCount: Undefined offset: 0
Error in Script C:\IP-Symcon_2_0\scripts\36439.ips.php on Line 64

Also er hat was geladen, sonst wäre da kein Objekt vom Typ ‚comment‘.
Warum dort jetzt der Bereich ‚Message‘ fehlt… gute frage.
Kannst du bitte (das andere wieder rausnehmen) mal die Funktion FB_GetABMessageList austauschen ?


function FB_GetABMessageList()
{
	$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
   	 )
	);
	for ($i=0;$i<5;$i++)
	{
		$GetInfo = $client->GetInfo(new SoapParam($i,"NewIndex"));
		print_r($GetInfo);
		if ($GetInfo["NewName"] <> "")
		{
			$URL = FB_NOSLL($client->GetMessageList(new SoapParam($i,"NewIndex")));
			echo "URL:".$URL.PHP_EOL;
			$xml = @simplexml_load_file($URL);
			print_r($xml);
			if ($xml === false)
			{
				WriteLogMessage(FATAL, 'Datei: '.__file__.' Zeile: '.__line__, 'Fehler beim laden der AB_Nachrichten.');
				return false;
			}
			$AB_Data[40+$i]=$xml;
		}
	}
	return $AB_Data;
}

und nachsehen ob da sowas rauskommt ?


Array
(
    [NewEnable] => 1
    [NewName] => AB Name
    [NewTAMRunning] => 1
    [NewStick] => 1
    [NewStatus] => 32768
)
URL:http://xxx.xxx.xxx.xxx:49000/tamcalllist.lua?sid=1234567876543&tamindex=0
SimpleXMLElement Object
(
    [comment] => Array
        (
            [0] => SimpleXMLElement Object
                (
                )

            [1] => SimpleXMLElement Object
                (
                )

            [2] => SimpleXMLElement Object
                (
                )

        )

    [Message] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [Index] => 62
                    [Tam] => 0
                    [Called] => 04xxxxxxxxx
                    [Date] => 11.09.14 10:12
                    [Duration] => 0:01
                    [Inbook] => 0
                    [Name] => SimpleXMLElement Object
                        (
                        )

                    [New] => 0
                    [Number] => 04xxxxxxxx
                    [Path] => /download.lua?path=/var/media/ftp/SanDisk-CruzerMicro-01/FRITZ/voicebox/rec/rec.0.062
                )

Die URL kannst du auch in einen Browser kopieren und dir die Datei direkt ansehen. Wenn dort wirklich keine Message-Bereiche enthalten sind, weiß ich momentan nicht wirklich weiter.

Schau mal auf das Datum. Das war vor den zwei Wochen :smiley:

Michael

Das ist echt lustig - habe es jetzt 5-6 mal laufen lassen und das Örtliche eingestellt und es gibt kein Fehler. Das einzige, was ich geändert habe ist, dass ich folgende Zeilen vor dem Beschreiben des Caches gestellt habe:

$record =  str_replace("ö","ö",$record); /*ö*/
      $record =  str_replace("Ö","Ö",$record); /*Ö*/
      $record =  str_replace("ä","ä",$record); /*ä*/
		$record =  str_replace("ü","ü",$record); /*ü*/

Seltsamerweise kam bei einigen Einträgen die Umlaute sauber rüber, bei anderen waren die Hieroglyphen drin. Aber dass es damit zu tun hat, ist wohl eher unwahrscheinlich.

OK, das erklärt das dort ISDN steht :slight_smile:

Komme aber erst morgen früh zum testen und Du musst Deine Krankheit ja auch noch ein wenig pflegen :wink:
Erst mal vielen Dank für die Hilfe, melde mich morgen nochmal.

Gesendet von meinem SM-T805 mit Tapatalk

Könnte sein. Muss ich morgen mal prüfen wie die Daten im Cache liegen.
Nimm mal statt str_replace utf8_decode.
Michael

Hallo,

sieht wenigstens so ähnlich aus wie bei Dir, nur das Message Array scheint irgendwie nicht richtig zu sein.

Array
(
    [NewEnable] => 1
    [NewName] => Anrufbeantworter
    [NewTAMRunning] => 1
    [NewStick] => 1
    [NewStatus] => 32768
)
URL:http://192.168.2.2:49000/tamcalllist.lua?sid=b491e6d7943ba248&tamindex=0
SimpleXMLElement Object
(
    [comment] => Array
        (
            [0] => SimpleXMLElement Object
                (
                )

            [1] => SimpleXMLElement Object
                (
                )

            [2] => SimpleXMLElement Object
                (
                )

        )

)
Array
(
    [NewEnable] => 0
    [NewName] => 
    [NewTAMRunning] => 1
    [NewStick] => 1
    [NewStatus] => 0
)
Array
(
    [NewEnable] => 0
    [NewName] => 
    [NewTAMRunning] => 1
    [NewStick] => 1
    [NewStatus] => 0
)
Array
(
    [NewEnable] => 0
    [NewName] => 
    [NewTAMRunning] => 1
    [NewStick] => 1
    [NewStatus] => 0
)
Array
(
    [NewEnable] => 0
    [NewName] => 
    [NewTAMRunning] => 1
    [NewStick] => 1
    [NewStatus] => 0
)

Notice:  Undefined offset: 0 in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 638

Notice:  Trying to get property of non-object in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 638

Notice:  Undefined offset: 0 in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 639

Notice:  Trying to get property of non-object in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 639

Notice:  Undefined offset: 0 in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 640

Notice:  Trying to get property of non-object in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 640

Notice:  Undefined offset: 0 in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 638

Notice:  Trying to get property of non-object in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 638

Notice:  Undefined offset: 0 in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 639

Notice:  Trying to get property of non-object in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 639
Abort Processing during exceed of maximal ErrorCount: Undefined offset: 0
   Error in Script C:\IP-Symcon_2_0\scripts\36439.ips.php on Line 640

Mal was ganz einfaches.
Hast du über haupt noch alte/neue Nachrichten auf dem AB ?
Michael

Ähmm, nö.

Jetzt sag nicht daran liegt der Fehler.

Habe gerade mal eine Nachricht drauf gesprochen, dann sieht es so aus:

Array
(
[NewEnable] => 1
[NewName] => Anrufbeantworter
[NewTAMRunning] => 1
[NewStick] => 1
[NewStatus] => 32768
)
URL:http://192.168.2.2:49000/tamcalllist.lua?sid=b491e6d7943ba248&tamindex=0
SimpleXMLElement Object
(
[comment] => Array
(
[0] => SimpleXMLElement Object
(
)

        [1] =&gt; SimpleXMLElement Object
            (
            )

        [2] =&gt; SimpleXMLElement Object
            (
            )

    )

[Message] =&gt; SimpleXMLElement Object
    (
        [Index] =&gt; 0
        [Tam] =&gt; 0
        [Called] =&gt; 68*****
        [Date] =&gt; 24.10.14 09:40
        [Duration] =&gt; 0:01
        [Inbook] =&gt; 1
        [Name] =&gt; Horst Braun
        [New] =&gt; 1
        [Number] =&gt; 0151******
        [Path] =&gt; /download.lua?path=/var/media/ftp/CHIPSBNK-v1-9-13-01/FRITZ/voicebox/rec/rec.0.000
    )

)
Array
(
[NewEnable] => 0
[NewName] =>
[NewTAMRunning] => 1
[NewStick] => 1
[NewStatus] => 0
)
Array
(
[NewEnable] => 0
[NewName] =>
[NewTAMRunning] => 1
[NewStick] => 1
[NewStatus] => 0
)
Array
(
[NewEnable] => 0
[NewName] =>
[NewTAMRunning] => 1
[NewStick] => 1
[NewStatus] => 0
)
Array
(
[NewEnable] => 0
[NewName] =>
[NewTAMRunning] => 1
[NewStick] => 1
[NewStatus] => 0
)

Notice: Undefined offset: 0 in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 638

Notice: Trying to get property of non-object in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 638

Notice: Undefined offset: 0 in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 639

Notice: Trying to get property of non-object in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 639

Notice: Undefined offset: 0 in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 640

Notice: Trying to get property of non-object in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 640

Notice: Undefined offset: 0 in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 638

Notice: Trying to get property of non-object in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 638

Notice: Undefined offset: 0 in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 639

Notice: Trying to get property of non-object in C:\IP-Symcon_2_0\scripts\36439.ips.php on line 639
Abort Processing during exceed of maximal ErrorCount: Undefined offset: 0
Error in Script C:\IP-Symcon_2_0\scripts\36439.ips.php on Line 640

OK danke. Habe dann den Fehler. Muss ich noch etwas umstellen und testen. Fix wohl zum WE.
Michael

OK, super kann dann auch testen.

hm - hab’s versucht, aber bekomme einen haufen fehler, weil er meint, die record-Variable wäre ein array…ist das so ?

Jup. War schon immer so habe das nicht geändert, weil ich sonst den ganzen Code für caching anpassen müsste.
Das decodieren sollte eigentlich bei der Suche geschehen. Habe aber noch ein paar mehr Baustellen im Script, versuche das am WE mal alles zu richten.
Michael

So hier mal ein Update der Anrufliste mit int. AB-Funktionen:

ChangeLog:
26.10.2014
Fix: Bei mehreren Listen wurden teilweise Daten der vorherigen Liste verwendet.
Fix: Gelöschte AB-Nachrichten führen nicht mehr zu Fehlern.
Neu: Gelöschte AB-Nachrichten werden als gelöscht angezeigt (Neues Icon & Style in der Config ‚CALLDEL‘).
Fix: Nebenstelle wurde nicht angezeigt sondern immer die Rufnummer.
Fix: Probleme mit den Zeichensatz in der Inversuche.
Neu: Durch klicken auf Play im WF wird eine Neue Nachricht automatisch als abgehört markiert.
Neu: Durch klicken auf Play im WF wird das Icon einer neuen Nachricht automatisch auf abgehört geändert; ohne das Script neu zu tiggern (was die Wiedergabe abbricht)
Neu: Löschen hinzugefügt. Icon und Steuerelemente werden dynamisch angepaßt, damit retriggern des Script nicht nötig ist.
Neu: Filter für Anrufbeantworter

Das ganze mal wieder als ZIP: fritz.zip (26.5 KB)

Michael

PS: In meiner Anrufliste sind keine alten AB-Einträge vorhanden, darum konnte ich den Fehler von hbraun auch nie nachstellen :confused:

Hallo Michael,

nachdem ich meine Anruferliste gelöscht habe läuft das Script bei mir auch ohne Fehler.

Das Icon CALLDEL fehlt in der Zip Datei.
Abhören geht nicht, erhalte folgende Fehlermeldung im IPSLogger:

<event logger="PHP" timestamp="2014-10-26T18:34:39.000000+01:00" level="ERROR" domain="IPS.exe" username="IPS"><message>Error: Uncaught SoapFault exception: [s:Client] UPnPError in C:\IP-Symcon_2_0\webfront\user\Fritz\ab.php:20
Stack trace:
#0 C:\IP-Symcon_2_0\webfront\user\Fritz\ab.php(20): SoapClient->__call('MarkMessage', Array)
#1 C:\IP-Symcon_2_0\webfront\user\Fritz\ab.php(20): SoapClient->MarkMessage(Object(SoapParam), Object(SoapParam))
#2 {main}
  thrown
   Error in Script C:\IP-Symcon_2_0\webfront\user\Fritz\ab.php on Line 20

Oh… habe erst das als abgehört markieren umgesetzt und dann das löschen. Mit Pech habe ich dadurch wieder was beim markieren kaputt gemacht. Schau ich mir nachher noch mal an.
Meine FB ist vorhin ein paar mal abgestützt als ich die über 100 alten AB Einträge (seit 2 Jahren glaub ich) auf einen Schlag im der WebUi löschen wollte.
Dabei sind sogar Einträge von AB zu AB dupliziert worden :confused:
Musste dann die AB komplett löschen und neu einrichten.
Michael

Das geht, hab durch das ewige rumprobieren aus meiner Fritzbox einen Briefbeschwerer gemacht :frowning:
Aber die neue ist schon am Weg :smiley: