[fast gelöst]SOAP::Lite Problematik bei Samsung TV u. 98_DLNARenderer

Begonnen von KölnSolar, 23 April 2018, 14:37:55

Vorheriges Thema - Nächstes Thema

KölnSolar

Hallo Ihr Lieben,
es ist schon verrückt, was manchmal Ursachen von Problemen sind.  :'(

Wir haben ja das Problem, dass das 98_DLNARenderer-Modul mit dem Samsung TV nur teilweise funktioniert. Search, Subsciption von events und das event-handling funktionieren. Nicht aber set-Befehle, also requests an den TV.

Mit einem Wahnsinnsaufwand habe ich nun festgestellt, dass dies am Namespace für den Envelope liegt. Dieser wird standardmäßig in der Constants.pm vom SOAP::Lite-package mit "soap" definiert, weshalb ein request z.B. so aussieht:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:namesp1="u" xmlns:namesp2="urn:schemas-upnp-org:service:RenderingControl:1" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<namesp2:SetVolume>
<InstanceID xsi:type="xsd:int">0</InstanceID>
<Channel xsi:type="xsd:string">Master</Channel>
<DesiredVolume xsi:type="xsd:int">11</DesiredVolume>
</namesp2:SetVolume>
</soap:Body>
</soap:Envelope>


Das mag der Samsung aber nicht. Er möchte zwingend, dass der namespace = "s"(nicht soap oder x oder so ....)ist: <?xml version="1.0" encoding="UTF-8"?>
<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:namesp1="u" xmlns:namesp2="urn:schemas-upnp-org:service:RenderingControl:1" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<s:Body>
<namesp2:SetVolume>
<InstanceID xsi:type="xsd:int">0</InstanceID>
<Channel xsi:type="xsd:string">Master</Channel>
<DesiredVolume xsi:type="xsd:int">11</DesiredVolume>
</namesp2:SetVolume>
</s:Body>
</s:Envelope>
und schon funktionierts.
Es lässt sich also durch eine kleine Modifikation an der Constants.pm vom SOAP::Lite-package lösen. Aber ein offizielles Perl-package zu modifizieren ist ja Käse. Sieht jemand die Möglichkeit das irgendwo/irgendwie in der FHEM-Kette
98_DLNARenderer.pm - fhem/FHEM/lib/UPnP/ControlPoint.pm - fhem/FHEM/lib/UPnP/Common.pm zu lösen ?

Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Reinerlein

Hi Markus,

schön, dass du doch was gefunden hast... :)

Ich habe im Anhang mal eine Version zum Testen, wo dieses Prefix eigentlich auf "s" stehen sollte.
Kannst du die Version mal probieren?

Grüße
Reiner

KölnSolar

Hallo Reiner,

PERFEKT.
<?xml version="1.0" encoding="UTF-8"?>
<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:namesp1="u" xmlns:namesp2="urn:schemas-upnp-org:service:RenderingControl:1" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<s:Body>
<namesp2:SetMute>
<InstanceID xsi:type="xsd:int">0</InstanceID>
<Channel xsi:type="xsd:string">Master</Channel>
<DesiredMute xsi:type="xsd:boolean">true</DesiredMute>
</namesp2:SetMute>
</s:Body>
</s:Envelope>

und das mit einer simplen Änderung  ;) Wie bist Du so schnell drauf gekommen, dass das mit einem Parameter geht ?
(Ich hab extra noch gegengechecked, dass nicht vielleicht doch noch meine Lite.pm aktiv ist.)

Hoffentlich kommen die anderen Module damit klar. Machst Du es dann produktiv ?

DANKE&Grüße
Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Reinerlein

Hi Markus,

das stand in der Doku zu SOAP::Lite. Wenn man weiß, wonach man suchen muss ;D

Ich überlege noch, wie ich das mache:
So einchecken hat u.U. ja viele Seiteneneffekte.

Ich würde eher etwas Parametrisierbares einbauen. Dann kann man es als Attribut angeben, das müsste dann aber auch im Modul DLNARenderer getan werden...

Ich schaue mal, was da am Besten geht. Zumindest ist jetzt eine nachhaltige Lösung in Sicht :)

Grüße
Reiner