98_DLNARenderer.pm (UPnP) (zuvor 98_DLNAClient.pm)

Begonnen von dominik, 04 August 2015, 20:23:38

Vorheriges Thema - Nächstes Thema

dominik

Hi Simon,

kannst du mal mit den UPnPTester (findet man mit Google) versuchen die Devices zu steuern oder zumindest Volume zu setzen?

Gruß,
Dominik
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

oxident

#331
Zitat von: dominik am 12 Juni 2016, 12:26:57
@oxident

Kopier dir die ControlPoint.pm aus dem FHEM/lib/UPnP/ Verzeichnis in ein tmp Verzeichnis und erstell dort die test.pl mit folgendem Inhalt:

use UPnP::ControlPoint;

my %bla = ();
my $cp = UPnP::ControlPoint->new(SearchPort => 0, SubscriptionPort => 0, MaxWait => 30, UsedOnlyIP => \%bla, IgnoreIP => \%bla);
$cp->searchByType('urn:schemas-upnp-org:device:MediaRenderer:1', \&Discover_Callback);
$cp->handle();

sub Discover_Callback($$$) {
  my ($search, $device, $action) = @_;

  print "DEVICE: ".$device->friendlyName()."\n";

  if($device->friendlyName() eq "DEVICENAME") {
    my $upnpService = $device->getService('urn:upnp-org:serviceId:RenderingControl');
    my $upnpServiceCtrlProxy = $upnpService->controlProxy();
    $upnpServiceCtrlProxy->SetVolume(0, "Master", 20);
  }
}


Der Code macht nichts anderes als das Device mit dem Namen DEVICENAME (ändern!) auf Volume 20 zu setzen.
Cool, danke. Das endet bei mir wie folgt:

DEVICE: bnetz
Can't call method "controlProxy" on an undefined value at test.pl line 15.

Hilft das irgendwie?

UPDATE: UPnPTester zeigt aber definitiv das Vorhandensein des "RenderingControl"-Nodes...

savage7

Zitat von: dominik am 12 Juni 2016, 13:06:23
kannst du mal mit den UPnPTester (findet man mit Google) versuchen die Devices zu steuern oder zumindest Volume zu setzen?

Hab gerade ein SetVolume (InstanceID=0 Channel=0 DesiredVolume=0) ausprobiert, bekomme aber einen Fehler: Unbekannter Fehler (0x80004005)

dominik

@oxident, versuch mal bei getService(...) folgendes: getService('urn:schemas-upnp-org:service:RenderingControl:1')

@savage7, Channel sollte "Master" statt 0 sein. Normal schlägt das der UPnPTester auch vor. DesiredVolume würde ich auch 20 verwenden statt 0 zum Testen.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

oxident

Zitat von: dominik am 12 Juni 2016, 18:06:12
@oxident, versuch mal bei getService(...) folgendes: getService('urn:schemas-upnp-org:service:RenderingControl:1')
Yes, das klappt!!
Das Skript bleibt dann zwar zum Schluss "hängen", ist aber sicher normal, oder?
Die Volume-Setting wird jedoch korrekt auf 20 gesetzt. Habe ich direkt mit dem UPnPTester geprüft.

savage7

Zitat von: dominik am 12 Juni 2016, 18:06:12
@savage7, Channel sollte "Master" statt 0 sein. Normal schlägt das der UPnPTester auch vor. DesiredVolume würde ich auch 20 verwenden statt 0 zum Testen.

Habe InstanceID=0 Channel=Master DesiredVolume=20 bzw. InstanceID=0 Channel="Master" DesiredVolume=20 bzw. mit Normal probiert leider der gleiche Fehler :( (0x80004005)

Norberto

Hallo Dominik,

zu Deiner Frage:
ZitatKann es sein, dass der MUNET400 kein GetMultiChannelSpeaker unterstützt? Ist es über die App möglich den MUNET400 mit anderen MUNETs zu einen Stereopaar zu schalten?

Die Munet400 kann man nicht über die Appmit einem anderen Munet zu einem Stereopaar zusammenschalten.

Gruß, Norbert

dominik

@oxident, füge bitte mal noch folgende Zeile in den Testcode ein
  print "DEVICE: ".$device->friendlyName()."\n";
  print "LOCATION: ".$device->location()."\n";

Danach öffne mal den Link nach Location im Browser und poste dann den Inhalt (XML).

@savage7, was sind das für Boxen die du da hast? Kannst du die mit Windows, BubbleUPnP, ... steuern?

@Norbert, danke für die Info. Dann werde ich das mit berücksichtigen.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

oxident

Du kämpfst ja echt an allen Fronten ;-)

Hier der Inhalt der Description.XML:

<?xml version="1.0"?>
<root xmlns="urn:schemas-upnp-org:device-1-0">
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<device>
<deviceType>urn:schemas-upnp-org:device:MediaRenderer:1</deviceType>
<presentationURL>/renderpres.html</presentationURL>
<friendlyName>bnetz</friendlyName>
<manufacturer>Ivo Clarysse</manufacturer>
<manufacturerURL>http://gmrender.nongnu.org/</manufacturerURL>
<modelDescription>gmediarender 0.0.6</modelDescription>
<modelName>bnetz</modelName>
<modelURL>http://gmrender.nongnu.org/</modelURL>
<UDN>uuid:4C0FC71DC147-1_0-000-888-382</UDN>
<modelNumber>0.0.6</modelNumber>
<serialNumber>1</serialNumber>
<iconList>
<icon>
<mimetype>image/png</mimetype>
<width>64</width>
<height>64</height>
<depth>24</depth>
<url>/upnp/grender-64x64.png</url>
</icon>
<icon>
<mimetype>image/png</mimetype>
<width>128</width>
<height>128</height>
<depth>24</depth>
<url>/upnp/grender-128x128.png</url>
</icon>
</iconList>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:AVTransport:1</serviceType>
<serviceId>urn:schemas-upnp-org:service:AVTransport</serviceId>
<SCPDURL>/upnp/rendertransportSCPD.xml</SCPDURL>
<controlURL>/upnp/control/rendertransport1</controlURL>
<eventSubURL>/upnp/event/rendertransport1</eventSubURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType>
<serviceId>urn:schemas-upnp-org:service:ConnectionManager</serviceId>
<SCPDURL>/upnp/renderconnmgrSCPD.xml</SCPDURL>
<controlURL>/upnp/control/renderconnmgr1</controlURL>
<eventSubURL>/upnp/event/renderconnmgr1</eventSubURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:RenderingControl:1</serviceType>
<serviceId>urn:schemas-upnp-org:service:RenderingControl</serviceId>
<SCPDURL>/upnp/rendercontrolSCPD.xml</SCPDURL>
<controlURL>/upnp/control/rendercontrol1</controlURL>
<eventSubURL>/upnp/event/rendercontrol1</eventSubURL>
</service>
</serviceList>
</device>
</root>

dominik

Danke oxident, Fehler gefunden :)

Dein Device liefert falsche ServiceIDs, daher werden die Services nicht gefunden. Ich werde daher die Erkennung im Code anpassen. Im nächsten Update laufen dann auch deine Devices ;)
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

dominik

Update im 1. Post...

v2.0.0 RC4 - 20160613
- FEATURE: support devices with wrong serviceId
- BUGFIX: fix crash during stereo mode update for caskeid players
- FEATURE: add stereoPairName reading
- CHANGE: add version string to main device internals
- BUGFIX: fix error when UPnP method is not implemented
- FEATURE: identify stereo support (reading: stereoSupport)
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

oxident

#341
Vielen Dank für das Update. Also bei meiner China-Lampe ist es jetzt ein wenig besser geworden:
FHEM zeigt zwar nach wie vor bei Volume 0 an, aber dafür stürzt das System beim SetVolume nicht mehr ab und die Lautstärke wird scheinbar auch wirklich geändert. Die Anzeige in FHEM bleibt jedoch bei 0 stehen.

Im Log erhalte ich noch immer "handleOnce failed, mismatched tag 'head'"

Mute klappt leider nicht (keine Änderung laut UPnPTester)

dominik

Mute funktioniert bei mir leider auch noch nicht...da bin ich noch dran.

Teste bitte die Version anbei, damit solltest du nun auch alle Events vom Device erhalten.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

oxident

Zitat von: dominik am 14 Juni 2016, 17:55:22
Mute funktioniert bei mir leider auch noch nicht...da bin ich noch dran.
Alles klar, sorry. Ich hatte das auch nur spontan ausprobiert. Ist auch erstmal nicht weiter wichtig.

Leider klappt die neue Version noch nicht so rund. Volume bleibt immer noch auf 0 und ich fürchte, ich hatte beim letzten Mal auch nicht richtig getestet. Hatte ja geschrieben dass der SetVolume-Befehl scheinbar doch korrekt ausgeführt wird. Dies stimmte aber leider gar nicht. Ich hatte vom Handy aus zwischenzeitlich auch mal "getestet" und vergessen, dass ich da schon mit der Lautstärke experimentiert hatte :-(

Aber der Perl-Testcode hatte definitiv funktioniert!

Im Log erscheint nun beim Initialisieren von FHEM folgendes:

DLNARenderer: XML formatting error: File does not exist: <Event xmlns = "urn:schemas-upnp-org:metadata-1-0/AVT/">
<InstanceID val="0">
<RelativeTimePosition val="00:00:00"/>
</InstanceID>
</Event> at ./FHEM/98_DLNARenderer.pm line 1166.
, <Event xmlns = "urn:schemas-upnp-org:metadata-1-0/AVT/">
<InstanceID val="0">
<RelativeTimePosition val="00:00:00"/>
</InstanceID>
</Event>
2016.06.14 19:41:44 3: DLNARenderer: handleOnce failed, mismatched tag 'head'

Vielleicht fällt Dir ja noch was ein ;-)

dominik

Stell bitte mal auf Loglevel 5 und poste dann das Log nachdem du Volume gesetzt hast.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik