fhempy: dlna_dmr

Begonnen von MichaelT, 27 Dezember 2020, 12:15:42

Vorheriges Thema - Nächstes Thema

MichaelT

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

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

dominik

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.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

dominik

Bitte nach einem "update" nochmals testen, jetzt sollte es klappen.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

MichaelT

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
Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.

dominik

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
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

MichaelT

Super, danke.
Keine Eile

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

MichaelT

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
Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.

dominik

Frohes Neues auch!

Einfach verbose auf 5 stellen, dann kommt auch mehr im PythonBinding Log. Neustart ist nicht erforderlich.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

MichaelT

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
Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.

dominik

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.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

MichaelT

#10
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, ..)
Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.

MichaelT

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.
Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.

dominik

Hi,
mit welcher Version hast du getestet? Probier bitte mal 0.1.24.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik

MichaelT

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.
Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.

dominik

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.
fhempy -  https://github.com/fhempy/fhempy: GoogleCast, Tuya, UPnP, Ring, EQ3BT, Nespresso, Xiaomi, Spotify, Object Detection, ...
Kaffeespende: https://paypal.me/todominik