FritzBox mit SOAP auslesen und steuern

hm - hat keiner eine Lösung oder Idee ?

Hi Hodor,

ich habe mich in letzter Zeit auch damit befasst, die UPNP Abfragen in C# umzusetzen. Hier mal ein Beispiel wie die externe IP abgefragt werden kann:

WebRequest webRequest = WebRequest.Create("http://fritz.box:49000/igdupnp/control/WANIPConn1");
            HttpWebRequest httpRequest = (HttpWebRequest)webRequest;
            httpRequest.Method = "POST";
            httpRequest.ContentType = "text/xml; charset=utf-8";
            httpRequest.Headers.Add("SOAPACTION", "urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress");
            httpRequest.ProtocolVersion = HttpVersion.Version11;
            httpRequest.Credentials = CredentialCache.DefaultCredentials;
            Stream requestStream = httpRequest.GetRequestStream();
            //Create Stream and Complete Request             
            StreamWriter streamWriter = new StreamWriter(requestStream, Encoding.ASCII);

            StringBuilder soapRequest = new StringBuilder(@"<?xml version=""1.0"" encoding=""utf-8""?> <s:Envelope xmlns:s=""http://schemas.xmlsoap.org/soap/envelope/""
                                                            s:encodingStyle=""http://schemas.xmlsoap.org/soap/encoding/""> 
                                                            <s:Body><u:GetExternalIPAddress xmlns:u=""urn:schemas-upnp-org:service:WANIPConnection:1"" /></s:Body></s:Envelope>");

            streamWriter.Write(soapRequest.ToString());
            streamWriter.Close();
            //Get the Response    
            HttpWebResponse wr = (HttpWebResponse)httpRequest.GetResponse();
            StreamReader srd = new StreamReader(wr.GetResponseStream());
            string resulXmlFromWebService = srd.ReadToEnd();
            return resulXmlFromWebService;

Hallo,

ich bräuchte mal Hilfe mit der Wiedergabe von Nachrichten des Anrufbeantworters.

Über SOAP kann ich aus der Fritzbox die Liste aller Nachrichten abrufen. Für jede Nachricht gibt es dann ein „Path“ Attribut, welches den Datei-Pfad für die Audio-Datei beinhaltet. Leider schaffe ich es nicht, mit diesem Pfad einen funktionierenden Link zu bauen, mit dem ich die Audio-Datei direkt ins WebFront streamen kann.

FritzBox 7490 | FritzOS: 06.83

Mein Ansatz sieht aus wie folgt:

 	
$client = new SoapClient(
	null,
	array(
	'location'   => "http://192.168.2.1:49000/upnp/control/deviceconfig",
	'uri'        => "urn:dslforum-org:service:DeviceConfig:1",
	'login'      => "***",
        'password'   => "***"
         )
);
$sid = $client->{"X_AVM-DE_CreateUrlSID"}();

$path = $message['Path'];

$audioFilePath = "http://fritz.box:49000" . $path . "&" . $sid;
$audio = "<audio controls><source src='" . $audioFilePath . "' type='audio/ogg'></audio>";

Fehler:


This XML file does not appear to have any style information associated with it. The document tree is shown below.
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:dslforum-org:control-1-0">
<errorCode>606</errorCode>
<errorDescription>Action Not Authorized</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>

Alternative:


$audioFilePath = "http://192.168.2.1/cgi-bin/luacgi_notimeout?" . $sid ."&script=%2Flua%2Fphoto.lua&myabfile=" . $pathTrimmed;

Fehler:

{"pid":"logout"}

Leider funktioniert das einfach nicht. Habe auch schon andere URLs getested, die ich hier im Forum gefunden habe. Mit keiner funktioniert es. Hat jemand eine Idee?

Das wird nie direkt aus dem WebFront funktionieren.
Weil nur der Host welcher sich an der Fritzbox anmeldet und die SID erhält, diese auch benutzen darf um dann auf das AudioFile zuzugreifen.

Wenn also der Browser das File abspielen soll, so am besten über einen Umweg dass du nicht direkt auf das File aus dem Browser zeigst, sondern auf ein Script im User-Ordner (oder Webhook) und dieses dann das File von der Box lädt und durchreicht an den Browser.

So macht es auch das hier:
Fritz-Box Project

Michael

Die Anleitung ist ja noch aktuell, Michael, oder?

Gruß oekomat

Habe da schon länger nichts mehr geändert, aber auch keine Beschwerden gelesen.
Sollte also alles noch funktionieren.
Michael

Ja, gestern gerade erfolgreich installiert :slight_smile:

Danke
Heiko

Ich habe alle OT Beiträge verschoben.
Der Support Thread für das Fritz-Box Project ist hier Q & A zum FritzBox-Project

Michael

Steuerung Komfortfunktionen mittels Tastaturcodes über SOAP

Einige Komfortfunktionen lassen sich recht gut über Tastaturkodes vom Endgerät aus einrichten und schalten, beispielsweise Klingelsperre, Rufumleitung o.ä. Diese Kodes funktionieren auch bei Anwahl über die SOAP-Funktion X_AVM-DE_DialNumber.

Das folgende script (Beispiel WLAN schalten) beruht auf der Vorarbeit unter:
FritzBox mit SOAP auslesen und steuern - Seite 21

Das scheint nach ersten Tests gut zu funktionieren und einfacher würde es kaum gehen. Gibt es dazu Hinweise?

Viele Grüße
Peter

$client = new SoapClient(
null,
array(
‚location‘ => „http://192.168.1.1:49000/upnp/control/x_voip“,
‚uri‘ => „urn:dslforum-org:service:X_VoIP:1“,
‚noroot‘ => True,
‚login‘ => "admin ",
‚password‘ => „geheim“,
‚trace‘ => True,
‚exceptions‘ => 0
)
);

$result = $client->{„X_AVM-DE_DialNumber“}(new SoapParam(’#960’,„NewX_AVM-DE_PhoneNumber“));

Viel einfacher geht es kaum.

Muss ehrlich gestehen; auf diese Idee bin ich nie gekommen :banghead:

Damit lassen sich auch Funktionen umsetzen, welche nicht direkt als SOAP-Call zur Verfügung stehen.
Alles was per Telefon geschaltet / gesteuert werden kann, sollte funktionieren.

Auch das automatische Einschalten des Anruf-Monitor für mein FritzBox-Project sollte möglich sein.

Michael

… selbst schuld!

Ohne Deinen Hinweis 2015 auf {„Funktion-mit-Bindestrich“} hätte ich den Versuch schnell entnervt aufgegeben.

Wäre trotzdem schön, wenn das nochmal getestet werden könnte. Zu beachten ist, dass keypad-Kodes anlagenabhängig sind und einige falschen oder veralteten Nummern durch das Netz geistern.

Die bessere Lösung wäre natürlich, wenn die SOAP-Spezifikation der Fritzbox so erweitert würde, dass tatsächlich alle Leistungsmerkmale erfasst werden. Ich halte es für ein Riesenmanko, dass die kleinen, klassischen TK-Anlagen faktisch tot sind und die überlebenden Routerbauer noch nicht gelernt haben, was eine zuverlässige TK-Anlage ausmacht. Das beginnt beim Überspannungsschutz und endet bei den Leistungsmerkmalen. Früher war der Telefonanschluss ein Akt der Sicherstellung - heute ist die Basis Spielerei.

Das Fritzbox-Projekt habe ich erst jetzt entdeckt. Ordentlich gemacht! Vielleicht kann man das keypad-Thema ergänzen.

Viele Grüße
Peter

Ja, schon peinlich.

Habe früher selber viel die kleinen (so ca. bis 20 Tln) TK-Anlagen per Telefon parametriert und es war sogar eine Aufgabe in der Abschlussprüfung.
Das man seinen Ursprung in dieser schnelllebigen Technik-Welt gerne mal vergisst; ist aber schon peinlich :smiley:

Michael

Hallo Nall-chan,

ich biin kein IPS-Nutzer, sondern Google hat mich auf meiner Suche zu Fritz!Box und SOAP auf deinen Thread gebracht. Als in PHP interssierter Laie komme ich mit Deinen Beispielen soweit gut zurecht.

Ich möchte aber den Upload des/eines Telefonbuches auf die Fritz!Box per SOAP realisieren.

Irgendwie stehe ich mit der Action AddPhonebook aus X_AVM-DE_OnTel:1 gedanklich auf dem Schlauch:
lt. AVM-Doku gibt es nur zwei Argumente: NewPhonebookName und NewPhonebookExtraID.
Ich bekomme die Transferleistung in Ableitung zu Deinen Beispielen nicht hin, wie hier das Coding aussehen müsste.
Kannst Du mir einen Hinweis geben, wie das Telefonbuch (xml-File) übergeben wird?

Ich nutze derzeit eine ca. 5 - 6 Jahre alte API - mit der geht es - aber per SOAP sieht das doch viel eleganter und zeitgemäßer aus.

Über einen Code-Schnipsel - zum auf die spur bringen - würde ich mich freuen.

Danke

Black Senator

Das geht nicht, es gibt nur SetPhonebookEntry und dann musst du jeden Eintrag einzeln in das zuvor neu erstellte Telefonbuch schreiben.
Michael

Hallo Michael,

danke für die Antwort - aber ich muss da doch noch einmal - zu meiner Beruhigung - nachfragen:
Woran kann man den ableiten welche der von AVM aufgeführten actions gar nicht gehen?

Für den interssierten Laien ist das ja nicht ersichtlich - oder ich habe das aus der schauderlich dünnen Beschreibung von AVM nicht ablesen können. Hast Du da eine bessere Doku bzw. „Insiderwissen“?

Grüße

Volker

AddPhonebook funktioniert.
Es erzeugt ein neues leeres Telefonbuch mit dem übergeben Namen.
Aber es gibt keine Möglichkeit des Uploads.
Michael

Hallo,

der Ansatz ist gut und die Nachtschaltung für Fon 1 u. 2 sowie die ISDN Rufnummer funktionieren mit den bekannten Telefoncodes gut. Leider lassen sich über #81nn nicht die DECT Geräte mit dreistelliger internen Nummer darüber schalten. Auch der Telefoncode #810 bzw #816 wirken sich nicht auf die Schnurlostelefone aus. Besteht die Möglichkeit die Klingelsperre wie beim Gast Wlan zu schalten ( SetEnable(new SoapParam(0, ‚NewEnable‘)).

Leider finde ich kein Parameter, wie bei WLAN (wlanconfig) für den Aufruf der Klingelsperre mit X_AVM-DE_Dect bin ich nicht weitergekommen.

Hallo Michael,

besteht irgendeine Möglichkeit per SOAP einen Internen Anruf auszulösen und so zu tun als wenn es die konfigurierte Türsprechstelle ist ?
Wir haben auf die Fritz Fon Mobilteile umgestellt (C5), die ja unter anderem ein Kamera Livebild unterstützen und bei der Nebenstelle in der Fritzbox lässt sich auch eine Live URL einrichten, die dann angezeigt wird wenn die TFE „anruft“. Eine reale TFE gibt es allerdings nicht.
Daher der Gedanke den Klingeltaster abzufragen und dann per IPS Script den Anruf auszulösen um zum einen ein Mobilteil klingeln zu lassen und zum anderen das Bild der Hofcam anzuzeigen.
Ich war mir sicher so etwas ähnliches (Anruf simulieren) hätte ich schon mal irgendwo gelesen, finde es aber nicht wieder und da ich die Soap Lösung eh schon einsetze dachte ich, ich frag mal nach :wink:

Gruß
Jens

Anruf simulieren steht hier:
FritzBox mit SOAP auslesen und steuern - Seite 32

Ob das aber auch eine TFE emulieren kann, keine Ahnung :wink:
Michael

Ok, danke für den Hinweis, habe ich tatsächlich übersehen :frowning: … blicke da allerdings noch nicht so richtig durch wie das weiter helfen könnte. :confused:

Meine TFE hat intern die **622 , die Klingeltaste ist als 11 konfiguriert und wird an das Mobilteil 1 (intern **610) weitergeleitet.
Irgendeine Idee wie man das umsetzen könnte ? :rolleyes:

edit
Kann man das umsetzen? Da lässt sich scheinbar die Absendekennung vorgeben
http://www.wehavemorefun.de/fritzbox/Erweitertes_Wählskript
Gruß
Jens