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

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

Vorheriges Thema - Nächstes Thema

dominik

Danke Michael für das Feature. Hab es bei mir schon eingebaut und damit kommt es ins nächste Update mit rein :)

Gebt mir bitte noch Rückmeldung ob die Version oben die Fehlermeldungen behebt. Sobald ich da positives Feedback habe, wird die Version im SVN aktualisiert.

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

mumpitzstuff

Vor dem Update:

2017.11.21 00:18:37 1: PERL WARNING: Renewal of subscription failed with error: 412 Precondition Failed at ./FHEM/98_DLNARenderer.pm line 1265.
2017.11.21 00:18:37 1: PERL WARNING: Renewal of subscription failed with error: 412 Precondition Failed at ./FHEM/98_DLNARenderer.pm line 1272.
2017.11.21 00:18:40 1: PERL WARNING: Renewal of subscription failed with error: 500 Can't connect to 192.168.1.107:8050 at ./FHEM/98_DLNARenderer.pm line 1265.
2017.11.21 00:18:43 1: PERL WARNING: Renewal of subscription failed with error: 500 Can't connect to 192.168.1.107:8050 at ./FHEM/98_DLNARenderer.pm line 1272.
2017.11.21 00:21:57 1: PERL WARNING: Renewal of subscription failed with error: 412 Precondition Failed at ./FHEM/98_DLNARenderer.pm line 1265.
2017.11.21 00:21:57 1: PERL WARNING: Renewal of subscription failed with error: 412 Precondition Failed at ./FHEM/98_DLNARenderer.pm line 1272.
2017.11.21 00:22:00 1: PERL WARNING: Renewal of subscription failed with error: 500 Can't connect to 192.168.1.107:8050 at ./FHEM/98_DLNARenderer.pm line 1265.
2017.11.21 00:22:03 1: PERL WARNING: Renewal of subscription failed with error: 500 Can't connect to 192.168.1.107:8050 at ./FHEM/98_DLNARenderer.pm line 1272.
2017.11.21 00:24:51 3: DLNARenderer: handleOnce failed, mismatched tag 'head'


Nach dem Update:

2017.11.21 00:30:32 1: PERL WARNING: Subscription request failed with error: 400 Bad Request at ./FHEM/98_DLNARenderer.pm line 1336.
2017.11.21 00:30:32 1: PERL WARNING: Subscription request failed with error: 400 Bad Request at ./FHEM/98_DLNARenderer.pm line 1340.
2017.11.21 00:32:21 3: DLNARenderer: handleOnce failed, mismatched tag 'head'

2017.11.21 00:33:31 1: PERL WARNING: Renewal of subscription failed with error: 412 Precondition Failed at ./FHEM/98_DLNARenderer.pm line 1261.
2017.11.21 00:33:31 1: PERL WARNING: Renewal of subscription failed with error: 412 Precondition Failed at ./FHEM/98_DLNARenderer.pm line 1268.
2017.11.21 00:36:51 1: PERL WARNING: Renewal of subscription failed with error: 412 Precondition Failed at ./FHEM/98_DLNARenderer.pm line 1261.
2017.11.21 00:36:51 1: PERL WARNING: Renewal of subscription failed with error: 412 Precondition Failed at ./FHEM/98_DLNARenderer.pm line 1268.
2017.11.21 00:39:51 3: DLNARenderer: handleOnce failed, mismatched tag 'head'

2017.11.21 00:40:11 1: PERL WARNING: Renewal of subscription failed with error: 412 Precondition Failed at ./FHEM/98_DLNARenderer.pm line 1261.
2017.11.21 00:40:11 1: PERL WARNING: Renewal of subscription failed with error: 412 Precondition Failed at ./FHEM/98_DLNARenderer.pm line 1268.
2017.11.21 00:43:31 1: PERL WARNING: Renewal of subscription failed with error: 412 Precondition Failed at ./FHEM/98_DLNARenderer.pm line 1261.
2017.11.21 00:43:31 1: PERL WARNING: Renewal of subscription failed with error: 412 Precondition Failed at ./FHEM/98_DLNARenderer.pm line 1268.
2017.11.21 00:44:07 1: PERL WARNING: Use of uninitialized value in numeric eq (==) at ./FHEM/98_DLNARenderer.pm line 309.
2017.11.21 00:46:51 1: PERL WARNING: Renewal of subscription failed with error: 412 Precondition Failed at ./FHEM/98_DLNARenderer.pm line 1261.
2017.11.21 00:46:51 1: PERL WARNING: Renewal of subscription failed with error: 412 Precondition Failed at ./FHEM/98_DLNARenderer.pm line 1268.

dominik

Sieht zumindest schon "anders" aus ;) Der 500er dürfte behoben sein, die anderen Fehler muss ich mir dann nochmals genauer ansehen.

Wie sieht es bei den anderen aus die die Probleme hatten?
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

MichaelT

Hallo Dominik,

leider kann ich nicht mit Sicherheit sagen, dass bei mir das Problem weg ist, da ich den Fernseher (der hatte das Problem) gewechselt habe.
Bei mir sehe ich aktuell nur von einigen Devices die Meldung

DLNARenderer: handleOnce failed, Can't use string ("") as an ARRAY ref while "strict refs" in use at FHEM/lib/UPnP/ControlPoint.pm line 522.
...
PERL WARNING: Renewal of subscription failed with error: 500 Can't connect to 192.168.4.30:44598 at ./FHEM/98_DLNARenderer.pm line 1262.
...


192.68.4.30 sollte eigentlich immer Online sein. Ansonsten nichts besonderes zu sehen.


Ich habe noch zu meine Diff den * ergänzt. So kann man dann wieder alles zulassen
return undef if( $acceptedUDN ne "*" && $acceptedUDN !~ /$udn/);


Gruß
Michael


Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.

mumpitzstuff

Ich habe jetzt ein wenig rum experimentiert und folgendes entfernt bei mir zuverlässig die Warnungen:

$SIG{__WARN__} = sub { $_ = shift; };

Wenn man diese Zeile am Anfang der Funktion DLNARenderer_renewSubscriptionBlocking() einfügt, dann werden alle Warnungen die danach geworfen werden abgefangen und ins Nirwana geschickt. Das sollte auch nur Warnungen innerhalb dieser Funktion betreffen und nicht die Warnungen in anderen Funktionen.

Das Einzige was dann ab und zu noch kommt ist:

2017.11.26 21:47:31 3: DLNARenderer: handleOnce failed, mismatched tag 'head'

Aber diese Warnung kommt aus deinem Modul und nicht von der ControlPoint.pm.

KlaGho

Hi, ich habe auch mal getestet:

1. Radiosender funktionieren
2. Speak klappt nicht
3. Sources mit Leerzeichen funktionieren nicht
4. under_score geht
5. normal lange MP3-Songs werden zwar abgespielt, blockieren dann aber FHEM komplett. Ich musste fhem per ssh console stoppen.

Anbei ein List mit den Testszenarios via Channel-Zuweisungen (ich hoffe, das kann man so machen??!!).

Vielen Dank für dieses Modul und Gruß gho

Internals:
   DEF        uuid:5F9EC1B3-ED59-79C2-4530-745E1C223664
   NAME       DLNA_745E1C223664
   NR         358
   STATE      online
   TYPE       DLNARenderer
   UDN        uuid:5F9EC1B3-ED59-79C2-4530-745E1C223664
   READINGS:
     2017-11-27 15:16:33   channel         3
     2017-11-27 15:03:45   friendlyName    XW-SMA3 223664
     2017-11-27 15:03:45   manufacturer    PIONEER CORPORATION
     2017-11-27 15:03:45   manufacturerURL http://www.pioneerelectronics.com
     2017-11-27 15:03:45   modelDescription Digital Media Client
     2017-11-27 15:03:45   modelName       XW-SMA3
     2017-11-27 15:03:45   modelNumber     Digital Media Client
     2017-11-27 15:03:45   multiRoomSupport 0
     2017-11-27 15:03:45   presence        online
     2017-11-27 15:03:45   presentationURL http://192.168.178.39
     2017-11-27 15:03:45   state           online
     2017-11-27 15:16:33   stream          http://gho1:8083/fhem/mp3/doorbell_01.mp3
   helper:
     avTransportSubscription
     caskeid    0
     caskeidClients
     renderingControlSubscription
Attributes:
   DbLogExclude .*
   alias      XW-SMA3 223664
   channel_01 http://mp3-live.swr3.de/swr3_m.m3u
   channel_02 http://188.94.97.90/rockland.mp3
   channel_03 http://gho1:8083/fhem/mp3/doorbell_01.mp3
   channel_04 http://translate.google.com/translate_tts?tl=DE&client=tw-ob&q=hallo mit o
   channel_05 http://translate.google.com/translate_tts?tl=DE&client=tw-ob&q=hallo
   channel_07 http://gho1:8083/fhem/mp3/"test space".mp3
   channel_08 http://gho1:8083/fhem/mp3/'test space.mp3'
   channel_09 http://gho1:8083/fhem/mp3/"test space.mp3"
   channel_10 http://gho1:8083/fhem/mp3/test_underscore.mp3
   room       1
   ttsLanguage DE
   userattr   channel_01 channel_02 channel_03 channel_04 channel_05 channel_06 channel_07 channel_08 channel_09 channel_10 multiRoomGroups ttsLanguage
   webCmd     volume

mumpitzstuff

In URLs gibts keine Leerzeichen oder Anführungszeichen.

https://www.urlencoder.org/

Gib mal hier ein was du haben willst und nimm diese URL.

Für Speak gibts ein eigenes Kommando. Bei mir hat es funktioniert, nachdem ich das entsprechende Gerät in den richtigen Modus geschaltet hatte.

KlaGho

ok, das mit dem Encoding habe ich verstanden ;). Es klappt.
Aber das mit dem speak command bekomme ich nicht hin. Anbei mal ein Log (Radio und Doorbell funktionieren, Speak nicht)

Auch habe ich nochmal einen MP3 Song getestet. Er wird auch abgespielt, blockiert aber FHEM bis kurz vor Schluss :'(

Und dann habe ich nach einem FHEM-restart noch folgende Warnungen im LOG:

2017.11.28 13:01:33.489 3: DLNARenderer: Created device DLNA_745E1C223664 for XW-SMA3 223664
2017.11.28 13:01:33.529 1: PERL WARNING: Subscription request failed with error: 412 Precondition Failed at ./FHEM/98_DLNARenderer.pm line 1339.
2017.11.28 13:01:33.545 1: PERL WARNING: Subscription request failed with error: 412 Precondition Failed at ./FHEM/98_DLNARenderer.pm line 1343.


Hier das Log für die Testläufe:

Events (Filter: DLNA.*)   FHEM log   ResetCreate/Modify Device

2017.11.28 14:15:01.100 5 : DLNARenderer: AVTransport: urn:schemas-upnp-org:service:AVTransport:1 found. OK.
2017.11.28 14:15:01.145 5 : DLNARenderer: AVTransport, SetAVTransportURI(0,http://translate.google.com/translate_tts?tl=en&client=tw-ob&q=test,) succeed.
2017.11.28 14:15:01.147 5 : DLNARenderer: AVTransport: urn:schemas-upnp-org:service:AVTransport:1 found. OK.
2017.11.28 14:15:01.179 5 : DLNARenderer: AVTransport, Play(0,1) succeed.
2017-11-28 14:15:01.186 DLNARenderer DLNA_745E1C223664 stream: http://translate.google.com/translate_tts?tl=en&client=tw-ob&q=test
2017.11.28 14:16:06.706 5 : DLNARenderer: AVTransport: urn:schemas-upnp-org:service:AVTransport:1 found. OK.
2017.11.28 14:16:06.771 5 : DLNARenderer: AVTransport, SetAVTransportURI(0,http://gho1:8083/fhem/mp3/doorbell_01.mp3,) succeed.
2017.11.28 14:16:06.773 5 : DLNARenderer: AVTransport: urn:schemas-upnp-org:service:AVTransport:1 found. OK.
2017.11.28 14:16:06.905 5 : DLNARenderer: AVTransport, Play(0,1) succeed.
2017-11-28 14:16:06.917 DLNARenderer DLNA_745E1C223664 stream: http://gho1:8083/fhem/mp3/doorbell_01.mp3
2017-11-28 14:16:06.926 DLNARenderer DLNA_745E1C223664 channel: 3
2017.11.28 14:16:37.838 5 : DLNARenderer: AVTransport: urn:schemas-upnp-org:service:AVTransport:1 found. OK.
2017.11.28 14:16:37.891 5 : DLNARenderer: AVTransport, SetAVTransportURI(0,http://mp3-live.swr3.de/swr3_m.m3u,) succeed.
2017.11.28 14:16:37.893 5 : DLNARenderer: AVTransport: urn:schemas-upnp-org:service:AVTransport:1 found. OK.
2017.11.28 14:16:37.945 5 : DLNARenderer: AVTransport, Play(0,1) succeed.
2017-11-28 14:16:37.961 DLNARenderer DLNA_745E1C223664 stream: http://mp3-live.swr3.de/swr3_m.m3u
2017-11-28 14:16:37.970 DLNARenderer DLNA_745E1C223664 channel: 1
2017.11.28 14:17:12.444 5 : DLNARenderer: AVTransport: urn:schemas-upnp-org:service:AVTransport:1 found. OK.
2017.11.28 14:17:12.496 5 : DLNARenderer: AVTransport, SetAVTransportURI(0,http://translate.google.com/translate_tts?tl=en&client=tw-ob&q=hallo,) succeed.
2017.11.28 14:17:12.498 5 : DLNARenderer: AVTransport: urn:schemas-upnp-org:service:AVTransport:1 found. OK.
2017.11.28 14:17:12.530 5 : DLNARenderer: AVTransport, Play(0,1) succeed.
2017-11-28 14:17:12.537 DLNARenderer DLNA_745E1C223664 stream: http://translate.google.com/translate_tts?tl=en&client=tw-ob&q=hallo

mumpitzstuff

Das mit dem Speak sieht eigentlich gut aus, deshalb vermute ich, dass dein Gerät mit dem mp3 von Google Probleme hat. Das ist irgendwie ein recht blödes Format was Google da raus gibt. Testweise kannst du dir ja mal ein mp3 von Google speichern und dann wie doorbell aufrufen. Wenn das auch nicht funktioniert, dann kann dein Gerät das mp3 von Google nicht abspielen. Dafür könnte dann das Modul nichts.

Die Warnungen haben viele. In einem Post weiter oben habe ich geschrieben wie man das verhindern kann. Ich hoffe der Author baut sowas in der Art bald ein.

Ich vermute, dass das Abspielen des mp3 files blockierend implementiert ist. Man müsste hier vielleicht auf non blocking gehen, damit das Modul dann wirklich verwendbar ist. Das müsste sich der Author mal ansehen.

dominik

Anbei eine Version in der die renew Warnings nur mehr bei Log Level 5 kommen sollten.
Danke @mumpitzstuff für den Fix!

Bitte testen und Feedback geben.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

the ratman

#520
wollte grade hier reinposten, weil in der offiziellen version immer2017.12.19 12:02:00 1: logfile wurde gelöscht
2017.12.19 12:25:31 1: PERL WARNING: Use of uninitialized value $location in concatenation (.) or string at FHEM/lib/UPnP/ControlPoint.pm line 326.
2017.12.19 12:25:31 1: stacktrace:
2017.12.19 12:25:31 1:     main::__ANON__                      called by FHEM/lib/UPnP/ControlPoint.pm (326)
2017.12.19 12:25:31 1:     UPnP::ControlPoint::_createDevice   called by FHEM/lib/UPnP/ControlPoint.pm (358)
2017.12.19 12:25:31 1:     UPnP::ControlPoint::_getDeviceFromHeaders called by FHEM/lib/UPnP/ControlPoint.pm (481)
2017.12.19 12:25:31 1:     UPnP::ControlPoint::_receiveSSDPEvent called by FHEM/lib/UPnP/ControlPoint.pm (183)
2017.12.19 12:25:31 1:     UPnP::ControlPoint::handleOnce      called by ./FHEM/98_DLNARenderer.pm (246)
2017.12.19 12:25:31 1:     (eval)                              called by ./FHEM/98_DLNARenderer.pm (245)
2017.12.19 12:25:31 1:     main::DLNARenderer_Read             called by fhem.pl (3500)
2017.12.19 12:25:31 1:     main::CallFn                        called by fhem.pl (702)
2017.12.19 12:25:31 1: PERL WARNING: 400-URL-Absolute-Error! Location: "", Content: "400 URL missing
" at ./FHEM/98_DLNARenderer.pm line 246.
2017.12.19 12:25:31 1: stacktrace:
2017.12.19 12:25:31 1:     main::__ANON__                      called by /usr/share/perl/5.24/Carp.pm (169)
2017.12.19 12:25:31 1:     Carp::carp                          called by FHEM/lib/UPnP/ControlPoint.pm (326)
2017.12.19 12:25:31 1:     UPnP::ControlPoint::_createDevice   called by FHEM/lib/UPnP/ControlPoint.pm (358)
2017.12.19 12:25:31 1:     UPnP::ControlPoint::_getDeviceFromHeaders called by FHEM/lib/UPnP/ControlPoint.pm (481)
2017.12.19 12:25:31 1:     UPnP::ControlPoint::_receiveSSDPEvent called by FHEM/lib/UPnP/ControlPoint.pm (183)
2017.12.19 12:25:31 1:     UPnP::ControlPoint::handleOnce      called by ./FHEM/98_DLNARenderer.pm (246)
2017.12.19 12:25:31 1:     (eval)                              called by ./FHEM/98_DLNARenderer.pm (245)
2017.12.19 12:25:31 1:     main::DLNARenderer_Read             called by fhem.pl (3500)
2017.12.19 12:25:31 1:     main::CallFn                        called by fhem.pl (702)
2017.12.19 12:25:31 1: PERL WARNING: Use of uninitialized value $location in concatenation (.) or string at FHEM/lib/UPnP/ControlPoint.pm line 327.
2017.12.19 12:25:31 1: stacktrace:
2017.12.19 12:25:31 1:     main::__ANON__                      called by FHEM/lib/UPnP/ControlPoint.pm (327)
2017.12.19 12:25:31 1:     UPnP::ControlPoint::_createDevice   called by FHEM/lib/UPnP/ControlPoint.pm (358)
2017.12.19 12:25:31 1:     UPnP::ControlPoint::_getDeviceFromHeaders called by FHEM/lib/UPnP/ControlPoint.pm (481)
2017.12.19 12:25:31 1:     UPnP::ControlPoint::_receiveSSDPEvent called by FHEM/lib/UPnP/ControlPoint.pm (183)
2017.12.19 12:25:31 1:     UPnP::ControlPoint::handleOnce      called by ./FHEM/98_DLNARenderer.pm (246)
2017.12.19 12:25:31 1:     (eval)                              called by ./FHEM/98_DLNARenderer.pm (245)
2017.12.19 12:25:31 1:     main::DLNARenderer_Read             called by fhem.pl (3500)
2017.12.19 12:25:31 1:     main::CallFn                        called by fhem.pl (702)
2017.12.19 12:25:31 1: PERL WARNING: Loading device description failed with error: 400 URL missing (Location: ) at ./FHEM/98_DLNARenderer.pm line 246.
2017.12.19 12:25:31 1: stacktrace:
2017.12.19 12:25:31 1:     main::__ANON__                      called by /usr/share/perl/5.24/Carp.pm (169)
2017.12.19 12:25:31 1:     Carp::carp                          called by FHEM/lib/UPnP/ControlPoint.pm (327)
2017.12.19 12:25:31 1:     UPnP::ControlPoint::_createDevice   called by FHEM/lib/UPnP/ControlPoint.pm (358)
2017.12.19 12:25:31 1:     UPnP::ControlPoint::_getDeviceFromHeaders called by FHEM/lib/UPnP/ControlPoint.pm (481)
2017.12.19 12:25:31 1:     UPnP::ControlPoint::_receiveSSDPEvent called by FHEM/lib/UPnP/ControlPoint.pm (183)
2017.12.19 12:25:31 1:     UPnP::ControlPoint::handleOnce      called by ./FHEM/98_DLNARenderer.pm (246)
2017.12.19 12:25:31 1:     (eval)                              called by ./FHEM/98_DLNARenderer.pm (245)
2017.12.19 12:25:31 1:     main::DLNARenderer_Read             called by fhem.pl (3500)
2017.12.19 12:25:31 1:     main::CallFn                        called by fhem.pl (702)
kommt.

mit deiner testversion scheint jetzt mal ruhe zu sei  - zumindestens mal die 10 min lang, die ich mein test-fhem offen hatte.
zu früh gefreut ... kommt immer noch, wenn das gerät ausgeschaltet wird ...
→do↑p!dnʇs↓shit←

the ratman

hiho,

kann man wegen meiner warnings nix machen?
das zeug müllt das log ohne ende voll ...
→do↑p!dnʇs↓shit←

LarsMie

Moin, gibt es eine funktion im Modul, mehrere Geräte gleichzeitig anzustreamen?

Habe hier nen AVR und einen WiFi Lautsprecher in verschiedenen Räumen, die beide DLNA Streams abspielen können.

Brockmann

Zitat von: LarsMie am 28 Dezember 2017, 14:52:39
Moin, gibt es eine funktion im Modul, mehrere Geräte gleichzeitig anzustreamen?
Habe hier nen AVR und einen WiFi Lautsprecher in verschiedenen Räumen, die beide DLNA Streams abspielen können.
Diese Funktion gibt es für CaskeID-Geräte (siehe Doku: playEveryWhere bzw. addUNit). Es geht nicht mit beliebigen Geräten und wird auch niemals gehen.
Eine synchrone Multiroom-Wiedergabe funktioniert nur, wenn die Geräte das unterstützen und sich untereinander synchronisieren können.
Sonst hast Du immer irgendwo einen Zeitversatz drin, weil ein Gerät die Wiedergabe etwas schneller beginnt als das andere. Das kann man auch nicht per Software kompensieren, wenn die Geräte das nicht von selbst können.

dominik

@the ratman, um was für ein Gerät geht es da? Hat das Gerät schon mal mit den DLNRenderer funktioniert? Der Fehler dürfte sein, dass das Gerät keine Location Information liefert und das ControlPoint.pm Modul diesen Fehler nicht richtig handhabt.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik