[Problem] Soap-Nachrichten und Yamaha RX-V771

Desastro

Neuer User
Mitglied seit
23 Jul 2011
Beiträge
10
Punkte für Reaktionen
0
Punkte
0
Guten Tag

Ich hoffe das ich hier richtig bin und versuch mal mein Problem zu erklären.

Erstmal zu meiner Technikausstattung :mrgreen:

Fritzbox 7270 V2 (Firmware-Version 54.04.88freetz-1.2-stable) inkl. Callmonitor, Dropbear, WOL, CURL
Samsung TV UE40D6500
Yamaha AV-Receiver RX-V771

Ich fand das Feature, das man Meldungen am TV anzeigen lassen kann sehr interresant. Darum hab ich mit das Freetz mit Callmonitor gebastelt und dazu dieses HowTo abgearbeitet. Und das funktioniert soweit perfekt. :cool:
Wenn ich ein eingehenden Anruf (wird am TV angezeigt) annehme, wird die Lautstärke auf 2 gestellt und nach dem Auflegen wieder auf den vorherigen Wert.

Nun möchte ich das gleiche mit dem AV-Receiver machen, dieser hängt auch im Netzwerk und versteht sich ebenfalls auf SOAP-Nachrichten.
Um herauszufinden wie die XML-Nachrichten aussehen, nutze ich das Tool "Intel Device Spy"
Damit kann ich die Nachrichten sehen und auch Nachrichten absetzen.. z.B. Mute oder Volume. Das klappt über das Tool auch! Sowohl beim TV als auch beim Receiver.

Zum Testen der Nachrichten nutze ich die Rudi-Shell.

Folgender Code für den TV funktioniert!
Code:
curl "http://meineIP:52235/upnp/control/RenderingControl1" -H "Content-Type: text/xml; charset='utf-8'" -H "SoapAction:urn:schemas-upnp-org:service:RenderingControl:1#SetMute" -d "<?xml version='1.0' encoding='utf-8'?><s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'><s:Body><u:SetMute xmlns:u='urn:schemas-upnp-org:service:RenderingControl:1'><InstanceID>0</InstanceID><DesiredMute>1</DesiredMute><Channel>Master</Channel></u:SetMute></s:Body></s:Envelope>"

Diesen habe ich nun einfach umgeschrieben, entsprechend dem was der Receiver erwartet.

Code für den Receiver...
Code:
curl "http://192.168.1.120:49154/RenderingControl/ctrl" -H "Content-Type: text/xml; charset='utf-8'" -H "SoapAction:urn:schemas-upnp-org:service:RenderingControl:1#SetMute" -d "<?xml version='1.0' encoding='utf-8'?><s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'><s:Body><u:SetMute xmlns:u='urn:schemas-upnp-org:service:RenderingControl:1'><InstanceID>0</InstanceID><Channel>Master</Channel><DesiredMute>0</DesiredMute></u:SetMute></s:Body></s:Envelope>"

..funktioniert nicht!

Folgende Fehlermeldung erhalte ich zurück:
Code:
<?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><s:Fault><faultcode>s:Client</faultcode><faultstring>UPnPError</faultstring><detail><u:UPnPError xmlns:u="urn:schemas-upnp-org:control-1-0"><u:errorCode>501</u:errorCode><u:errorDescription>Action Failed</u:errorDescription></u:UPnPError></detail></s:Fault></s:Body></s:Envelope>
:mad:

Hat jemand eine Idee, was daran nun falsch ist? Komme da irgendwie nicht weiter. :(

Danke

Gruß Desastro
 
Hallo,

herzlich willkommen im Forum!

Hat jemand eine Idee, was daran nun falsch ist? Komme da irgendwie nicht weiter. :(
ja, du verwendest Kommandos, die für viele Samsung TVs bestimmt sind. Die sind nicht allgemein gültig. Es wäre schon purer Zufall, wenn die auch bei deinem Yamaha Receiver funktionieren würden.

happy computing
R@iner
 
Hallo Rainer

Welche Kommandos meinst du genau?

Ich hab es mit der Debug-Ausgabe des Intel Device Spy verglichen. Was eben anders ist, der Port und der nachfolgende, ich sage mal, Link.

Ich kann ja morgen mal 2 Screenshots des DeviceSpy einstellen.


Gruß Desastro
 
Welche Kommandos meinst du genau?
Wieviel Kommandos hast Du denn an den Yamaha geschickt? :mad:

Ich sehe nur eines, nämlich SetMute und da benützt Du fast exakt den gleichen "Aufruf" wie bei den Samsung TVs.

happy computing
R@iner
 
Warum so böse? :confused:

Was ich sagen kann ist, das es wirklich die gleichen Kommandos/Methoden sind, zumindest die Grundlegenden für die Lautstärke usw.

Siehe folgendes Bild:

DeviceSpy1.jpg

Wenn ich die Aktion über das Tool absende, dann funktioniert es ja auch. Aber eben nur da.
Ich probier weiter, evtl. komme ich durch Zufall dahinter.

Gruß Desastro
 
Nett, lt. Bild ist das wirklich fast identisch. Umso komischer die Fehlermeldung aus deinem original Post: Action Failed

Irgend eine Kleinigkeit machst Du anders. Nimm wireshark und trace mit, was Du mit DeviceSpy sendest und was Du mit curl sendest, und mach nen Diff drauf. Viel kann es dann ja nicht sein.

happy computing
R@iner
 
Hi

Umso komischer die Fehlermeldung aus deinem original Post: Action Failed

Genau das kann ich ja auch nicht verstehen.

Irgend eine Kleinigkeit machst Du anders. Nimm wireshark und trace mit, was Du mit DeviceSpy sendest und was Du mit curl sendest, und mach nen Diff drauf. Viel kann es dann ja nicht sein.

Das hab ich jetzt mal gemacht, etwas genauer. Hatte vorher auch schon immer mal geschaut, aber mir ist da nie was aufgefallen.
Aber nun schon...die "Content-Length" ist dort wo der Fehler kommt 8 Byte? kürzer wenn es über Curl versendet wird.
Keine Ahnung, warum und wieso. :(

Gruß Desastro
 
Ahh, dann weiß ich vermutlich, was Dein Fehler ist. Sind es genau 8 "Daten-Zeilen"? Curl macht anscheinend nur LF und der Device Spy macht CR+LF. Oder curl macht gar kein LF und schickt alles in einer Zeile, Device Spy aber macht einen LF. Dementsprechend muss auch die Länge angepaßt werden.

/edit:
Aber das solltest Du bei einem Diff der Wireshark-Traces sehen!

happy computing
R@iner
 
Zuletzt bearbeitet:
Hi nochmal

Es sind 8 fehlende "Zeilen"...

Curl macht anscheinend nur LF und der Device Spy macht CR+LF. Oder curl macht gar kein LF und schickt alles in einer Zeile, Device Spy aber macht einen LF. Dementsprechend muss auch die Länge angepaßt werden.

Der Device Spy macht den LF, ja. Mir kommt es, nach den Erkenntnissen, so vor als ob der Samsung in dem Fall mit dem Thema etwas toleranter umgeht.

Werde das morgen mal durchtesten.

Gruß Desastro
 
Mir kommt es, nach den Erkenntnissen, so vor als ob der Samsung in dem Fall mit dem Thema etwas toleranter umgeht.
Nach meinen Erfahrungen nicht. Die Content-Länge muss exakt die Länge des Contents sein. Wenn Du da +1 oder -1 hast, funktioniert es auch am Samsung TV nicht und man bekommt auch ne Fehlermeldung. Allerdings kommt als responds: Invalid Request

happy computing
R@iner
 
Hi

Ich komme irgendwie nicht weiter...
Habe jetzt noch gesehen, das der DeviceSpy CR+LF sendet, aber wie verpacke ich das nun richtig in die Curl-Sequenz?
Habe es mit "\r\n" und "%0D%0A" probiert, funktioniert aber nicht.

Komisch ist ja eben nur, das es beim TV mit der normalen Sequenz funktioniert und am Receiver nicht. Obwohl ich nur die IP+Port und die Service-URL angepasst habe.
Da kocht wieder jeder Hersteller sein eigenes uPNP-Süppchen.
Vielleicht schreib ich mal Yamaha dirket an, ob die mir dazu Auskunft geben können.

Gruß Desastro
 
Hello again,

normalerweise müßte es auch ganz ohne CR und LF gehen, also der Content darf normalerweise auch eine einzige Zeile sein. Wichtig ist halt nur, dass die Content-Length zum Content paßt.

Da ich mit curl vor Urzeiten gearbeitet habe, kann ich Dir da leider wenig helfen. Da müßte ich auch die Doku erst wälzen. Hast Du denn mal andere Möglichkeiten probiert? Java oder so? Ich hab nur momentan wenig Zeit, sonst würde ich Dir schnell ein Testprogramm in AutoIt schreiben.

Mir hat damals Samsung keinerlei Infos gegeben. Aber was brauchst Du für Info von Yamaha? Du weißt ja dank DeviceSpy, dass es prinzipiell geht. Und in Deinem Screenshot sieht man doch auch, welche Funktionen.

happy computing
R@iner
 
Hai

normalerweise müßte es auch ganz ohne CR und LF gehen, also der Content darf normalerweise auch eine einzige Zeile sein. Wichtig ist halt nur, dass die Content-Length zum Content paßt.

Genau das macht mich ja stutzig, das es so unterschiedlich ist.

Da ich mit curl vor Urzeiten gearbeitet habe, kann ich Dir da leider wenig helfen. Da müßte ich auch die Doku erst wälzen. Hast Du denn mal andere Möglichkeiten probiert? Java oder so? Ich hab nur momentan wenig Zeit, sonst würde ich Dir schnell ein Testprogramm in AutoIt schreiben.

Nee, mit Java hab ich garnichts am Hut. Ich habe mir mal die samsung.sh aus dem Callmonitor-Verzeichnis angesehen und versucht es mal so, mit netcat umzusetzen.
Ging aber auch nicht. Bin da aber auch nicht so drin in der ganzen Linux-Materie.

Aber was brauchst Du für Info von Yamaha? Du weißt ja dank DeviceSpy, dass es prinzipiell geht. Und in Deinem Screenshot sieht man doch auch, welche Funktionen.

Ja richtig. Könnte aber gut sein, das Yamaha da noch irgendwas verschweigt. :rolleyes: Glaube ich zwar nicht, aber nichts ist unmöglich.

Vielleicht hat noch jemand anderes ein Tipp, sonst lass ich das erstmal ruhen.
Wäre halt schön gewesen, wenn das mit den paar Änderungen so geklappt hätte.


Gruß Desastro
 
Du kannst mir ja ne Email schicken mit deinen curl-Zeilen, IP-Adresse des Yamahas und dann versuche ich mal am Wochenende ein kleines AutoIt-Script zu schnitzen, damit Du wenigstens ausprobieren kannst, ob es damit geht.

happy computing
R@iner
 
Danke für dein Angebot.
Ich mach das morgen mal fertig...aber es eilt nicht.


Gruß Desastro
 
Hallo,

habe das selbe Problem, würde den Yamaha gerne per SOAP ansteuern. Bist du hier schon weiter gekommen?

Viele Grüße
 
Hallo,

herzlich willkommen im Forum.

Wie weit bist Du denn? Wie und von wo aus willst Du es realisieren?

Ich kann mich nicht mehr 100% erinnern, aber ich glaube Desastro hat sich bei mir nicht gemeldet...

happy computing
R@iner
 
Hallo,

bekomme per Wireshark die Infos, wenn ich z. B. "Mute" betätige.
Im Internet habe ich eine Excel-Datei gefunden, wo die Befehle erklärt sind.

Bin jetzt dabei meinen SOAP-Aufruf zu basteln. (In IP-Symcon - PHP).

Dachte du hättest etwas fertiges?!
 
Hello again,

bekomme per Wireshark die Infos, wenn ich z. B. "Mute" betätige.
wo betätigst Du Mute?

Im Internet habe ich eine Excel-Datei gefunden, wo die Befehle erklärt sind.
Ui, wo. Haste nen Link?

Bin jetzt dabei meinen SOAP-Aufruf zu basteln. (In IP-Symcon - PHP).
Mitt PHP hab ich wenig Erfahrung

Dachte du hättest etwas fertiges?!
Ja, hab ich auch, aber für Samsung TVs: klick mich

Ich hab keinen Yamaha, daher weiß ich nicht, wie groß der Aufwand wäre, den ruSamsungTVCommunicator anzupassen.

happy computing
R@iner
 
Ich bestätige via Webseite auf Port 80.

Link zur Excel-Datei mit den Befehlen: http://www.google.de/url?sa=t&rct=j&q=yamaha%20rx-vx67_ethernet_if_spec&source=web&cd=1&ved=0CDAQFjAA&url=http%3A%2F%2Fwww.avhifiresources.co.uk%2Fcontent%2FDealer%2520News-Info%2FCustom%2520Installer%2520Info%2FRX%2520AX10%2520VX71%2520Series%2520Function%2520Tree.xls&ei=yN_4TuyJHpGA8gO00eWsAQ&usg=AFQjCNHbx60435avSmn_xl8V69exhoTUSw

Kann per PHP SOAP-Befehle senden, aber nur einfach Befehle... schaue ich mir die Tage mal in Ruhe an.

Danke für deine Hilfeversuche ist jetzt aber wohl ein PHP-Problem/Aufgabe.
 

Statistik des Forums

Themen
246,300
Beiträge
2,249,713
Mitglieder
373,904
Neuestes Mitglied
Elemir
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.