FritzBox mit SOAP auslesen und steuern

Ah stimmt, sorry einfach mit & an die URL hängen.

Sieht bei mir für die Wiedergabe im Browser so aus:


	$file = "http://".FB_HOST.":49000".$path."&".$sid;
	header("Content-type: audio/wave");
	header("Content-Transfer-Encoding: binary");
	header("Cache-Control: must-revalidate");
	readfile($file);

Michael

Hallo zusammen,

Ich taste mich grade an das Thema SOAP und Fritzbox ran und habe ein paar Fragen.

Ich kann mittels SOAP den Anrufbeantworter De-/Aktivieren.
Das klappt schonmal ganz einfach.

Nun möchte ich aus einem anderen Servicebereich der Fritzbox einen eingehenden Anruf abweisen, das klappt aber noch nicht weil ich nicht weiß wie die Syntax eines Parameter losen Aufrufs ist.

Servicename: X_VoIP
Actionname: X_AVM-DE_DialHangup

Das Script soweit:


$client = new SoapClient( 
    null, 
    array( 
          'location'         => "http://fritz.box:49000/upnp/control/x_voip", 
          'uri'                 => "urn:dslforum-org:service:X_VoIP:1", 
          'noroot'           => True, 
          'login'              => "****", 
          'password'      => "****" 
    ) 
); 
 
$client->X_AVM-DE_DialHangup();  
?>

als Antwort bekomme ich


PHP Notice:  Undefined property: SoapClient::$X_AVM in /home/pi/hangup.php on line 15
PHP Notice:  Use of undefined constant DE_DialHangup - assumed 'DE_DialHangup' in /home/pi/hangup.php on line 15

Das „X_AVM-DE_DialHangup“ wird irgendwie zerschnippelt.

Ich hoffe mir kann jemand helfen, Das Thema PHP ist schon etwas her bei mir.

Danke

Gleich erste Seite, Post 3 ist ein Beispiel wie man mit den X_AVM-DE_irgendwas Befehlen umgehen muss, da der Bindestrich in Funktionsnamen nicht erlaubt ist.

$client->{"X_AVM-DE_DialHangup"}();

Michael

Es funktioniert. Danke. Nur leider haben weder „Hangup“ noch Tam „SetEnable“ einfluß auf einen eingehenden Anruf. Schade. Muss ich mir noch nen anderen weg überlegen.

Hallo,

da ich keine Türklingel/Sprechanlage habe, habe ich meine einfache Türklingel an einen KNX Binäreingang gehängt und mache mit der RaspiCam ein Foto vom Klingeler. Das Foto schicke ich mir per email aufs Handy. Ist eigentlich dafür gedacht, um zu sehen wer geklingelt hat, wenn keiner da ist.

Jetzt habe ich gesehen, dass man über die Türanlage bei Klingelbetätigung ein Foto auf sein FritzFon schicken kann, quasi realtime.

Jetzt würde ich gern per Symcon ein Türklingeln simulieren. Geht das auch per soap?

Vielen Dank
Klaus

Hallo,
lebt dieser Thread noch? Ich finde das Thema sehr spannend, und versuche auch gerade einzusteigen.
Allerdings verwende ich C#/.NET bzw. Java. Beim Versuch, die Informationen von hier zu übertragen, hapert es allerdings noch ein wenig…

Kann mir Jemand einen Tipp geben, an welche URL ich die SOAP Pakete schicken muss?
Ich habe z.B. „http://fritz.box:49000/igdupnp/control/WANIPConn1“ probiert, bekomme jedoch nur einen 404 Error von der Fritzbox.

Aus euren PHP-Beispielen ist das leider nicht so ganz ersichtlich (zumindest wenn man PHP nicht beherrscht) :wink:
Danke!

Hallo,

ich benutze ein Script zum auslesen der Anrufe und des Anrufbeantworters (müsste das aus Beitrag #58 sein). Bei meiner 6460 von der KBW hat es meistens funktioniert und nur ab und zu kam es zum Timeout wegen der 30-Sekundengrenze.
Inzwischen habe ich eine 6490 der UnityMedia und da läuft das Script zu 95% auf den Timeout. Das klappt dan meistens erst beim 2. oder 3. Versuch. Es macht auch keinen Sinn. diesen 30-Sekunden-Wert hochzusetzen, denn während das Scipt dann läuft, funktioniert im IPS überhaupt nichts mehr.
Da sich die Oberfläche der Fritzbox inzwischen ganz passabel gestaltet, würde ich gerne direkt die Seite mit der Anruferliste im IPS einbinden. Hat jemand so eine Lösung und weiß, wie man diese Seite direkt aufrufen, ohne sich über die Einstiegsseite (mit PW-Eingabe) und die Menüseite durchblättern zu müssen ?

Grüß Frank

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