FritzBox mit SOAP auslesen und steuern

also ich habe es eben nochmal getestet - bei mir funktioniert beides mit FB 6360 (KBW) und Windows(Seamonkey) oder Android(Chrome).

Ja das meinte ich.
Verstehe jetzt nur nicht warum dort als Index 4 und 5 stehen und im Log von dir die 2…
Das erklärt warum die FB (zu Recht) einen Fehler wirft.
Ich bin aber noch nicht dahinter gekommen wo im Script noch ein Fehler sein könnte :frowning:

Kannst du mir bitte folgende drei XMLs zukommen lassen ? z.B. per PN ?
Dann versuche ich das noch mal nachzustellen:
(Diesmal auch mit Angabe wo du den print_r einfügen solltest :smiley: )


// Daten holen und Kombinieren
$ABMessageListe =FB_GetABMessageList();

if ($ABMessageListe === false) return;  //Fehlermeldung in Funktion schon erzeugt

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

Und etwas weiter unten


print_r($Anrufliste);
$searchFailed = array(); // Alle nicht gefunden Nummern hier rein.
foreach ($Liste as $Key => $Config)  // Alle Listen erzeugen.

Michael

Hallo Michael,

habe Dir eine email gesendet.

hm - jetzt lief das Teil ne ganze Weile ohne Probleme und seit ein paar Tagen kommt diese Fehlermeldung:

Fatal error: Uncaught SoapFault exception: [s:Client] UPnPError in C:\Program Files\IP-Symcon\scripts\Anrufliste_mit_Ab.php:836
Stack trace:
#0 C:\Program Files\IP-Symcon\scripts\Anrufliste_mit_Ab.php(836): SoapClient->__call(‚GetInfo‘, Array)
#1 C:\Program Files\IP-Symcon\scripts\Anrufliste_mit_Ab.php(836): SoapClient->GetInfo(Object(SoapParam))
#2 C:\Program Files\IP-Symcon\scripts\Anrufliste_mit_Ab.php(634): FB_GetABMessageList()
#3 {main}
thrown in C:\Program Files\IP-Symcon\scripts\Anrufliste_mit_Ab.php on line 836
IPS-Err-PHP 2014-11-10 16:58:50.791 Error: Uncaught SoapFault exception: [s:Client] UPnPError in C:\Program Files\IP-Symcon\scripts\Anrufliste_mit_Ab.php:836 Stack trace: #0 C:\Program Files\IP-Symcon\scripts\Anrufliste_mit_Ab.php(836): SoapClient->__call(‚GetInfo‘, Array) #1 C:\Program Files\IP-Symcon\scripts\Anrufliste_mit_Ab.php(836): SoapClient->GetInfo(Object(SoapParam)) #2 C:\Program Files\IP-Symcon\scripts\Anrufliste_mit_Ab.php(634): FB_GetABMessageList() #3 {main} thrown Error in Script C:\Program Files\IP-Symcon\scripts\Anrufliste_mit_Ab.php on Line 836 133 in IPSLibrary\app\core\IPSLogger\IPSLogger.inc.php (call IPSLogger_Out) 33 in IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_Err) 120 in IPSLibrary\app\core\IPSLogger\IPSLogger_PhpErrorHandler.inc.php (call IPSLogger_PhpErrorHandler) in IPSLogger_PhpFatalErrorHandler
Abort Processing during Fatal-Error: Uncaught SoapFault exception: [s:Client] UPnPError in C:\Program Files\IP-Symcon\scripts\Anrufliste_mit_Ab.php:836
Stack trace:
#0 C:\Program Files\IP-Symcon\scripts\Anrufliste_mit_Ab.php(836): SoapClient->__call(‚GetInfo‘, Array)
#1 C:\Program Files\IP-Symcon\scripts\Anrufliste_mit_Ab.php(836): SoapClient->GetInfo(Object(SoapParam))
#2 C:\Program Files\IP-Symcon\scripts\Anrufliste_mit_Ab.php(634): FB_GetABMessageList()
#3 {main}
thrown
Error in Script C:\Program Files\IP-Symcon\scripts\Anrufliste_mit_Ab.php on Line 836

Der Befehl ist

$GetInfo = $client->GetInfo(new SoapParam($i,"NewIndex"));

@Michael: Bist du da noch dran ?

Nachdem es schon tagelang geklappt hat, verstehe ich nicht ganz, warum diese soap-Aufrufe auf einmal fehlerhaft sind… die Firmware der FB ist auf jeden Fall unverändert.

Sorry war jetzt fast 4 Wochen krank :frowning:
Außerdem habe ich z.Z. abends kaum Zeit was an IPS zu machen.
Tagsüber was schreiben geht mal so nebenbei.
Du kannst aber mal die Parameter Trace und Exceptions aus ein paar Post vorher nehmen und mal in den SoapClient mit einbauen.
Dann siehst du auch die Fehlermeldung der Box.
Habe auch schon wieder einiges geändert am Script, bin aber mit der Lösung noch nicht zufrieden.
Außerdem habe ich seit Freitag eine 6490 und die ärgert mich noch etwas. (Das Vieh belegt eine 2.IP, leider war das die gleiche mein Server; das hat mich nerven gekostet WAF = 0 weil kein Inet, kein Sat-Stream vom Server, keine Musik vom Server…arg)
Michael

Hallo,

kann man per SOAP aus einen Ring in feststellen?. Seit der 3.2 läuft scheinbar das ISDN-Modul nicht mehr. Ich hatte ein Script das mir in der Werkstatt einen HM-Funkgong aktiviert. Funzt jetzt nicht mehr :frowning:

Andreas

  • gelöst -

Update Fritzbox Socket 1012 war zu
@Michael - Danke hast mich auf die richtige Spur gebracht.

Anrufmonitor geht noch immer über den alten Weg mit ClientSocket, RegVar und Script welches dann irgendwas macht.
Michael

also die Adresse/User/Passwort für den GetInfo-Aufruf sind korrekt, aber er kommt aus dem Aufruf nicht miehr zurück, weil die 30-Sekunden-Grenze überschritten wird. Macht es Sinn, diese Grenze zu erhöhen ?

Nein, hatte selbst mit 400 Einträgen die 30 nicht über schritten. Am längsten dauert die Invers-Suche.
Aber vorher gab es doch einen Soap-Error ?
Michael

ja, beim GetInfo-Aufruf - die FB-Parameter sahen direkt vor dem Befehl noch gut aus und dann kommt der SOAP-Fehler

Ja welcher ?
Vorher aber die Parameter trace und exceptions nachtragen.
Michael

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"));                                      //  <--  dieser  hier
	//	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;
			}
			$xml = new simpleXMLElement($xml->asXML());
			$AB_Data[40+$i]=$xml;
		}
	}
	return $AB_Data;
}

das mit dem trace und exceptions habe ich nicht verstanden, wo ich was eintragen soll…

Ändere den Code mal bitte wie folgt ab:

  • 2 Parameter im SoapClient
  • Eine Block mit der Ausgabe der Fehlermeldung
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,
        'trace'=>TRUE,  //<- Hier
         'exceptions'=>false      //<- Hier
   	 )
	);
	for ($i=0;$i<5;$i++)
	{
		$GetInfo = $client->GetInfo(new SoapParam($i,"NewIndex"));
// ab hier
                if (is_soap_fault($GetInfo))
                {
                   echo  $i."------------------------------------------------------------------------------------------------------".PHP_EOL;
                   print_r($GetInfo);
                }
// bis hier
		if ($GetInfo["NewName"] <> "")
		{

Das if (is_soap_fault($GetInfo)) fragt ob es einen Fehler gab; wenn ja wird dieser in der Konsole gemeldet.
Achtung, die Logindaten stehen da u.U. in Klartext !
Da es bis zu 5 Anrufbeantworter geben kann; können bis zu 5 Meldungen ausgegeben werden.

Michael

PS: Meine 6490 läuft auch endlich rund (erst auf SW-Update warten… dann auf IPv6 warten… dann fünfmal Ärgern mit den MyFritz-Dienst und Portfreigaben in Zusammenspiel mit IPv6…grrr) Hoffe also das ich am WE mal wieder was testen kann.

Hi Michael,

der Fehler bei dem Aufruf war so hart, dass er nicht einmal zu der neuen Fehlerabfrage gekommen ist. Also konnte man so auch nichts Näheres herausfinden…aber dann habe ich jetzt mal die FB vom Strom genommen und frisch hochgefahren und siehe da…das Script läuft wieder fehlerfrei durch. Es muss also irgendwie an der Fritzbox selbst liegen.

chrissiboy

Is ja doll…
Obwohl AVM diese Schnittstelle dokumentiert hat, und mein ISP die z.B. zum fernkonfigurieren der SIP-Accounts nutzt, ist sie wohl doch noch etwas buggy.
Michael

hm - ist ne KBW-Box…vlt. haben die noch was dran rumgepfuscht… ich werde das auf jeden Fall mal beobachten, ob man irgendwelche Regelmäßigkeiten erkennen kann - zumindest weiß ich jetzt, was ich tun muss, wenn es wieder mal klemmt. Dir auf jeden Fall vielen Dank für dein Super-Script und deine Unterstützung.

Bitte.
War diesmal ja keine grosse Hilfe :wink:
Ich grübel immer noch über eine andere Umsetzung nach.
Da mein letzter (nicht öffentlicher Wurf) nicht mit der APP läuft.
Michael

also folgenden Effekt habe ich noch festgestellt:

Wenn ich das Script aus dem „Aktuelle Anrufe“-Scipt direkt aufrufe, bekomme ich beim GetInfo-Befehl einen 30-Sekunden-Timeout. Nun habe ich einen 30-Sekunden-Timer gesetzt und dann läuft das einwandfrei durch. Irgendwie scheint die FB überlastet zu sein und kann den Request nicht bedienen.

Wie rufst du die Anrufliste aus dem anderen Script auf ?
Und macht dein AnrufScript z.b. auch eine InversSuche, so das hier viel Laufzeit verbraten wird ?