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
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.
Bitte nach einem "update" nochmals testen, jetzt sollte es klappen.
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
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
Super, danke.
Keine Eile
Michael
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
Frohes Neues auch!
Einfach verbose auf 5 stellen, dann kommt auch mehr im PythonBinding Log. Neustart ist nicht erforderlich.
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
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.
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, ..)
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.
Hi,
mit welcher Version hast du getestet? Probier bitte mal 0.1.24.
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.
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.
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
Ah, super, danke für die Info. Wird beim nächsten Update behoben.
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
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