Hallo,
welche Möglichkeiten gibt es den WIedergabestatus des VDR herauszubekommen, also ob eine Aufnahme gerade abgespielt, gestoppt oder pausiert ist?
Geht das evtl. mit svdrpsend?
massi
Hallo,
welche Möglichkeiten gibt es den WIedergabestatus des VDR herauszubekommen, also ob eine Aufnahme gerade abgespielt, gestoppt oder pausiert ist?
Geht das evtl. mit svdrpsend?
massi
dbus2vdr unterstützt grundsätzlich die Abfrage des Wiedergabestatus (erlaubt die Unterscheidung ob eine Aufnahme angezeigt wird oder Live-TV):
# Live-TV
$ vdr-dbus-send /Status status.IsReplaying
method return time=1763049891.618720 sender=:1.70 -> destination=:1.73 serial=37 reply_serial=2
string ""
string ""
boolean false
# Wiedergabe (keine Unterscheidung, ob pausiert oder nicht)
$ vdr-dbus-send /Status status.IsReplaying
method return time=1763049939.685864 sender=:1.70 -> destination=:1.74 serial=43 reply_serial=2
string "Last Night of The Proms 2024"
string "/srv/vdr/video/Last_Night_of_The_Proms_2024/2025-01-01.20.13.21-0.rec"
boolean true
Display More
Der VDR dürfte dasselbe vermutlich in einer zukünftigen Version über svdrp können: RE: Titel der aktuellen Sendung/Wiedergabe abfragen
Ähnlich wie das neue eventpub Plugin ( [Announce] VDR Plugin eventpub ) setzt dbus2vdr auch Signale für das Starten bzw. Beenden der Wiedergabe ab.
Von osd2web kann man Updates zum Wiedergabestatus über den Websocket bekommen - also z.B. grob:
Dann die main.py so anpassen:
import asyncio
import json
import signal
from websockets.asyncio.client import connect
from websockets.exceptions import ConnectionClosed
URI = "ws://localhost:4444"
SUBPROTOCOL = "osd2vdr"
async def main():
async with connect(URI, subprotocols=[SUBPROTOCOL]) as ws:
login_msg = {
"event": "login",
"object": { "type": 1 } # listen only
}
await ws.send(json.dumps(login_msg))
print(f"Sent login message: {login_msg}")
try:
async for message in ws:
try:
data = json.loads(message)
except json.JSONDecodeError:
print("Received non-JSON:", message)
continue
event = data.get("event")
obj = data.get("object")
if event.lower() in ("replaycontrol"):
print(f"active: {obj.get('active')}, play: {obj.get('play')}") # other possible keys: 'speed', 'forward', 'current', 'total'
except ConnectionClosed as e:
print(f"WebSocket closed: {e}")
finally:
logout_msg = {
"event": "logout",
"object": {}
}
try:
await ws.send(json.dumps(logout_msg))
print("Sent logout message")
except Exception:
pass
if __name__ == "__main__":
asyncio.run(main())
Display More
Du kannst das dann aus dem Ordner heraus mittels uv run main.py laufen lassen. "active" sagt dir ob die Wiedergabe einer Aufzeichnung offen ist, play ist im Fall einer Wiedergabe 1, bei Pause 0 und ohne Wiedergabe None.
Danke, werde ich mir mal zu Gemüte führen!
[undefined] massi[/undefined] Schau bitte mal, ob dieser Patch dein Problem lösen würde.
Da ich mit yavdr unterwegs bin und noch Version 2.6.x nutze wird mir der Patch wahrscheinlich nix nutzen, oder?
Der sollte auch mit 2.6.x funktionieren. Evtl. halt mit Warnungen wegen der Zeilennummern.
O.K., danke, werde ich mal probieren, wenn ich die Zeit finde.
So, ausprobiert, funktioniert, danke sehr.
Don’t have an account yet? Register yourself now and be a part of our community!