FHEM Forum

FHEM - Anwendungen => Multimedia => Thema gestartet von: MichaelT am 27 Dezember 2020, 12:15:42

Titel: fhempy: dlna_dmr
Beitrag von: MichaelT am 27 Dezember 2020, 12:15:42
Hallo Dominik,

ich bin nun von deinem DLNARenderer auf python-bindings umgestiegen - oder möchte es ;-)
Ich habe das eigentliche python-binding am laufen (state: opened).
Dann habe ich eine "define upnp PythonModule discover_upnp" gemacht. Hier wurden dann auch meine Devices gefunden:
Nach einem create Schlafen_MediaRender hatte ich dann mein MUNET PMN300.
Beispiel:
Internals:
   CFGFN     
   DEF        dlna_dmr uuid:93b2abac-cb6a-4857-b891-00226190fa58
   FUUID      5fe86517-f33f-a152-4861-833d9ea4a6f02d27
   IODev      local_pybinding
   NAME       Schlafen_MediaRenderer
   NR         697
   PYTHONTYPE dlna_dmr
   STATE      online
   TYPE       PythonModule
   UDN        uuid:93b2abac-cb6a-4857-b891-00226190fa58
   READINGS:
     2020-12-27 11:44:49   device_type     urn:schemas-upnp-org:device:MediaRenderer:1
     2020-12-27 11:44:49   device_url      http://192.168.4.31:45514/93b2abac-cb6a-4857-b891-00226190fa58.xml
     2020-12-27 11:44:49   friendly_name   Schlafen
     2020-12-27 11:44:50   is_volume_muted 0
     2020-12-27 11:44:49   manufacturer    PEAQ
     2020-12-27 11:44:50   media_duration  0
     2020-12-27 11:44:49   model_description PEAQ MUNET
     2020-12-27 11:44:49   model_name      MUNET PMN300
     2020-12-27 11:44:49   model_number    PMN300
     2020-12-27 11:44:49   name            Schlafen
     2020-12-27 11:44:49   state           online
     2020-12-27 11:44:49   udn             uuid:93b2abac-cb6a-4857-b891-00226190fa58
     2020-12-27 11:57:55   volume          28
   args:
     Schlafen_MediaRenderer
     PythonModule
     dlna_dmr
     uuid:93b2abac-cb6a-4857-b891-00226190fa58
   argsh:
Attributes:
   IODev      local_pybinding
   icon       scene_scene


Wenn ich nun aber etwas abspielen möchte, kommt es zu Fehlern im python-binding:

2020-12-27 11:51:24,477 - ERROR    - asyncio: Task exception was never retrieved
future: <Task finished coro=<DlnaDmrDevice.async_play_media() done, defined at /opt/fhem/FHEM/bindings/python/fhempy/lib/dlna_dmr/dlna_dmr.py:26> exception=AttributeError("'DmrDevice' object has no attribute 'async_media_stop'")>
Traceback (most recent call last):
  File "/opt/fhem/FHEM/bindings/python/fhempy/lib/dlna_dmr/dlna_dmr.py", line 30, in wrapper
    return await func(self, *args, **kwargs)
  File "/opt/fhem/FHEM/bindings/python/fhempy/lib/dlna_dmr/dlna_dmr.py", line 332, in async_play_media
    await self._device.async_media_stop()
AttributeError: 'DmrDevice' object has no attribute 'async_media_stop'


Hast Du da eine Idee?

Gruß aus dem stürmischen Ruhrgebiet
Michael

Titel: Antw: fhempy: dlna_dmr
Beitrag von: dominik am 28 Dezember 2020, 11:57:52
Hi,

schau ich mir heute Abend an. Bitte beachte, dass die speziellen MUNET Commands für Multizone nicht im neuen Modul unterstützt werden, das kann aktuell nur reines DLNA. MUNET nutzt nämlich CaskeId welches auf DLNA basiert.
Titel: Antw: fhempy: dlna_dmr
Beitrag von: dominik am 28 Dezember 2020, 20:14:53
Bitte nach einem "update" nochmals testen, jetzt sollte es klappen.
Titel: Antw: fhempy: dlna_dmr
Beitrag von: MichaelT am 30 Dezember 2020, 08:43:34
Morgen Dominik,

danke für deine Unterstützung.
Habe mal getestet. Play geht nun aber z.B. bei Pause, Mute oder Stop tut sich nichts. Habe selbst noch nicht im Code geschaut.
Werde später mal ein wenig forschen.

Ausgabe bei den besagten commands:
2020-12-29 08:10:41,357 - INFO     - fhempy.lib.fhem_pythonbinding: Starting pythonbinding...
2020-12-29 08:10:50,974 - INFO     - fhempy.lib.fhem_pythonbinding: FHEM connection started: 127.0.0.1
/opt/fhem/.local/lib/python3.7/site-packages/fhempy/lib/dlna_dmr/dlna_dmr.py:168: RuntimeWarning: coroutine 'DmrDevice.async_mute_volume' was never awaited
  self.device.dlna_dmrdevice.async_mute_volume(onoff)
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
/opt/fhem/.local/lib/python3.7/site-packages/fhempy/lib/dlna_dmr/dlna_dmr.py:176: RuntimeWarning: coroutine 'DmrDevice.async_stop' was never awaited
  self.device.dlna_dmrdevice.async_stop()
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
/opt/fhem/.local/lib/python3.7/site-packages/fhempy/lib/dlna_dmr/dlna_dmr.py:170: RuntimeWarning: coroutine 'DmrDevice.async_pause' was never awaited
  self.device.dlna_dmrdevice.async_pause()
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
2020-12-29 08:20:01,054 - ERROR    - fhempy.lib.fhem_pythonbinding: Failed to execute function Set: Traceback (most recent call last):
  File "/opt/fhem/.local/lib/python3.7/site-packages/fhempy/lib/fhem_pythonbinding.py", line 335, in _onMessage
    fct_timeout,
  File "/usr/lib/python3.7/asyncio/tasks.py", line 416, in wait_for
    return fut.result()
  File "/opt/fhem/.local/lib/python3.7/site-packages/fhempy/lib/dlna_dmr/dlna_dmr.py", line 144, in Set
    url = args[2]
IndexError: list index out of range
(id: 84095476)


Gruß Michael
Titel: Antw: fhempy: dlna_dmr
Beitrag von: dominik am 30 Dezember 2020, 10:43:36
Ich verstehe nicht mehr wie ich das getestet habe  ::)

Heute Abend ist das auch behoben. Da fehlten ein paar "await", da sonst die async Coroutines nicht ausgeführt werden.
https://github.com/dominikkarall/fhempy/commit/a8c214c8a9a61aea9e359d3c911ebaf341d0ee74
Titel: Antw: fhempy: dlna_dmr
Beitrag von: MichaelT am 30 Dezember 2020, 11:11:30
Super, danke.
Keine Eile

Michael
Titel: Antw: fhempy: dlna_dmr
Beitrag von: MichaelT am 02 Januar 2021, 09:16:52
Frohes Neues,

Danke Dominik, deine Änderung funktioniert soweit.

Werde jetzt mal ein wenig laufen lassen.
Kann ich ggf. Debugausgaben der einzelnen python-Module aktivieren?
Wie kann ich nach einer Änderung in einem python-Modul diese aktivieren. Muss ich fhem neu starten oder wie geht es einfacher?

Gruß
Michael
Titel: Antw: fhempy: dlna_dmr
Beitrag von: dominik am 02 Januar 2021, 12:04:50
Frohes Neues auch!

Einfach verbose auf 5 stellen, dann kommt auch mehr im PythonBinding Log. Neustart ist nicht erforderlich.
Titel: Antw: fhempy: dlna_dmr
Beitrag von: MichaelT am 17 Januar 2021, 13:32:06
Hallo Dominik,


ich habe nun mal eine längere Zeit meine 4 PMN300 ein DENON und über upnp/dlna am laufen.
Soweit funktioniert es.
Aber nach einer gewissen Zeit (verschieden), verlieren ein oder mehrere Devices die Verbindung.
Ich bekommen häufig diese Kombinationen

2021-01-15 21:04:20,181 - DEBUG    - OG_BAD_MR: Device unavailable
2021-01-15 21:04:52,424 - DEBUG    - DG_BUE_MR: Device unavailable
2021-01-15 21:04:55,265 - DEBUG    - OG_BAD_MR: Device unavailable
2021-01-15 21:05:02,996 - DEBUG    - OG_BAD_MR: Adding device: <fhempy.lib.dlna_dmr.dlna_dmr.DlnaDmrDevice object at 0xb284efcc>
2021-01-15 21:05:03,142 - ERROR    - OG_BAD_MR: Device exists already, do not create a new one
2021-01-15 21:05:03,481 - ERROR    - asyncio: Unclosed client session client_session: <aiohttp.client.ClientSession object at 0xb375e08c>
2021-01-15 21:05:03,599 - DEBUG    - OG_BAD_MR: event received
2021-01-15 21:05:03,600 - DEBUG    - OG_BAD_MR: Device available
2021-01-15 21:05:04,601 - DEBUG    - OG_BAD_MR: Subscription done, resubscribe in: 0:09:00
2021-01-15 21:05:04,648 - DEBUG    - OG_BAD_MR: event received
2021-01-15 21:05:04,648 - DEBUG    - OG_BAD_MR: event received
2021-01-15 21:05:04,681 - DEBUG    - OG_BAD_MR: event received
2021-01-15 21:05:04,681 - DEBUG    - OG_BAD_MR: event received


Manchmal fängt sich ein Device, ab und zu auch nicht. Dann muss ich fhem neu starten und alle Devices sind
nach kurzer Zeit online.

Frage: Kann ich die python-Anteile einzeln restarten, so dass man ggf. im Fehlerfall ein
restart von dlna oder discover oder ähnlich machen kann. Ich glaube nicht das es an der Hardware liegt, da auch
der DENON dieses Verhalten zeigt und auch ein Neustart eines PMN300 nichts gebracht hat.

Ich blicke leider nicht so ganz durch die async-Geschichte mit upnp in python durch.

Gruß
Michael
Titel: Antw: fhempy: dlna_dmr
Beitrag von: dominik am 20 Januar 2021, 21:49:52
Hi,

was passiert in so einem Fall wenn du ein Command an die Devices schickst? Auch "Device unavailable"?

Was kommt bei einem Device Neustart? Wird es dann wieder erkannt, oder bleibt es im Fehlerfall hängen?

Kommt vor dem "Device unavailable" vielleicht noch irgendeine andere relevante Fehlermeldung? Ich habe mir das im Code angeschaut, aber noch nichts passendes gefunden woran es liegen könnte. Vielleicht kann ich noch ein paar Debug Meldungen einbauen, damit wir das genauer analysieren können.
Titel: Antw: fhempy: dlna_dmr
Beitrag von: MichaelT am 21 Januar 2021, 18:33:14
Hallo Dominik,

anbei mal das PythonBinding.log (Ausschnitt)
Der OB_BAD_MR  (uuid:93b2abac-cb6a-4857-b891-00226190fdfc) ist
um 18:01:23,319 unavailable
um 18:01:51,762 wieder available

Gruß
Michael

Edit: Habe auch ein fhem.log, weiß aber nicht ob das für dich relevant ist
Edit2: Mir ist aufgefallen, dass auch die Readings nicht mehr aktualisiert werden (volume, media_title, ..)
Titel: Antw: fhempy: dlna_dmr
Beitrag von: MichaelT am 22 Januar 2021, 07:02:27
Morgen Dominik,

Nachtrag:
Die Readings werden erst seit dem letzten Update nicht aktualisiert.
In der Version vom 31.12 ging es noch.

Gruß Michael, schönen Tag noch.
Titel: Antw: fhempy: dlna_dmr
Beitrag von: dominik am 22 Januar 2021, 20:34:25
Hi,
mit welcher Version hast du getestet? Probier bitte mal 0.1.24.
Titel: Antw: fhempy: dlna_dmr
Beitrag von: MichaelT am 23 Januar 2021, 18:41:42
Nabend,

bin jetzt auf 0.1.25. Immer noch keine Update. Nur state ändert sich (aber auch gefühlt sehr spät)
Volume wird wohl beeinflusst, aber keine Aktualisierung im Renderer.
Die offlines muss ich noch beobachten.

Schönes WE
Michael

OT:
Bei mir wurden beim Update nur die Module 10_* in FHEM und bindings/python/bin aktualisiert, nicht aber die Anteile unter bindings/python/lib.
Muss man da extra was machen?
Ich habe mir die restlichen Anteile aus git geholt.
Titel: Antw: fhempy: dlna_dmr
Beitrag von: dominik am 23 Januar 2021, 19:30:32
Kannst du mal im Log nachschauen ob da ein Fehler zu finden ist? PythonBinding Log bitte.

Die Aktualisierung der bindings/python/lib musst du nicht mehr machen. Die sind jetzt Teil der fhempy pip Installation und wird auch dort durch FHEM automatisch aktualisiert.
Titel: Antw: fhempy: dlna_dmr
Beitrag von: MichaelT am 24 Januar 2021, 10:10:59
Morgen,

in dlna-dmr.py Zeile 170 ist ein Fehler.

str / int

habe bei mir in async_set_volume_level(int(params["volume"]) / 100) geändert.
Nun werden auch die restlichen Reading aktualisiert ;-)

Danke


Titel: Antw: fhempy: dlna_dmr
Beitrag von: dominik am 24 Januar 2021, 20:17:53
Ah, super, danke für die Info. Wird beim nächsten Update behoben.
Titel: Antw: fhempy: dlna_dmr
Beitrag von: KölnSolar am 13 Februar 2021, 13:25:50
Hi Dominik,

dlna_dmr kann also "nur" die services RenderingControl u. AVTransport ?
ZitatBitte beachte, dass die speziellen MUNET Commands für Multizone nicht im neuen Modul unterstützt werden, das kann aktuell nur reines DLNA. MUNET nutzt nämlich CaskeId welches auf DLNA basiert.
Weil ich gerade den DLNARenderer "entzerre".  (https://forum.fhem.de/index.php/topic,114457.0.html)
<OT>Spitzfindig ist das nicht DLNA, sondern upnp, oder ?
Genauso wie der DLNARenderer eigentlich ein DLNA-Controller ist ?

Was meinst Du ? Lass Dich gerne im verlinkten Thread aus.  ;) <OT>

Grüße Markus
Titel: Antw: fhempy: dlna_dmr
Beitrag von: dominik am 13 Februar 2021, 18:36:28
Zitat von: KölnSolar am 13 Februar 2021, 13:25:50
Hi Dominik,

dlna_dmr kann also "nur" die services RenderingControl u. AVTransport ?Weil ich gerade den DLNARenderer "entzerre".  (https://forum.fhem.de/index.php/topic,114457.0.html)
<OT>Spitzfindig ist das nicht DLNA, sondern upnp, oder ?
Genauso wie der DLNARenderer eigentlich ein DLNA-Controller ist ?

Was meinst Du ? Lass Dich gerne im verlinkten Thread aus.  ;) <OT>

Grüße Markus

dlna_dmr kann nur mit den Service Type MediaRenderer umgehen und dort RenderingControl und AVTransport. Korrekt. Ich nutze dazu die async_upnp_client Library (https://pypi.org/project/async-upnp-client/).

Mein Wissenstand ist, dass DLNA der Standard ist, der auch für MediaRenderer oft benutzt wird. Mit UPnP könnte man viel mehr machen (wie z.B. bei MUNET Multizone). Das neue Modul heißt dlna_dmr, da es via DLNA die Digital Media Renderer unterstützt. FHEM selbst wäre somit DMC (Digital Media Controller). So hätte ich das auch hier verstanden: https://de.wikipedia.org/wiki/Digital_Living_Network_Alliance#DLNA-Zertifizierung

Aber generell ist das DLNA/UPnP aus meiner Sicht ein ziemlicher "Mischmasch" und meistens schlecht implementiert von den Herstellern :o