VDR-Client: Status per Skript abfragen

  • Hallo,


    da meine RaspiPI's als VDR-Clients mittlerweile recht gut laufen, werden es immer mehr hier im Haushalt. Wie in der Signatur geschrieben steht, habe ich einen Server, der das TV-Signal per Streamdev-Server-Plugin den Clients zur Verfügung stellt. Die Aufnahmen werden von einem Dateiserver (nicht VDR) per NFS zur Verfügung gestellt und am Client per Avahi-Linker gemountet.


    Jetzt hätte ich gerne die Möglichkeit per Skript abzufragen, was die Clients gerade tun. Ziel ist es zu wissen, ob am Client gerade ein TV-Sender läuft oder eine Aufzeichnung per NFS geschaut wird und welcher Wiedergabe-Status (Wiedergabe, Pause,...) / Wedergabeposition gerade aktuell ist. Hat jemand dazu Ideen / Tipps wie ich das per Shell-Skript abfragen kann? Danke.


    ByE...

    Server:  (K)VM on Proxmox 4.x-Host, VDR 2.2.0 (selbstgebaut vom yaVDR unstable Repo) auf Debian 8 (Jessie), 1x Digital Devices Cine S2 (V6) + DuoFlex S2
    Clients: Raspberry Pi 2/3 mit Raspbian, VDR 2.2.0 (selbstgebaut vom yaVDR unstable Repo) als Streamdev-Clients

  • Was ist denn das Ziel des ganzen? Eine Art Lifeguard-Addon für den Fileserver, damit er nicht abschaltet, wenn jemand gerade eine Aufnahme ansieht?
    Das restfulapi-Plugin liefert dir unter anderem den aktuell wiedergegebenen Kanal bzw. die laufende Wiedergabe einer Aufnahme - mit einem kleinen Python-Skript kommt man so an den Status Live-TV oder Wiedergabe einer Aufnahme:


    Das sieht dann z.B. so aus:

    Code
    $  python3 check_vdr.py
    VDR: Replaying a recording: {'name': 'Astrid Lindgren', 'filename': '/srv/vdr/video.00/local/Astrid_Lindgren/2015-05-24.22.10.4-0.rec'}
    Host vdr4arch is not reachable
    Host 192.168.1.145 is not reachable


    Den Wiedergabefortschritt und ob die Wiedergabe pausiert ist bekommt man soweit ich weiß noch nicht über restfulapi. Der VDR schließt beim Pausieren die Dateien, so dass man z.B. mit fuser am Fileserver nachsehen könnte, ob da gerade jemand etwas abspielt.


    Alternativ könnte man vielleicht auch das live-Plugin auf den Clients installieren und den Inhalt der Wiedergabe-Box parsen.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Was ist denn das Ziel des ganzen? Eine Art Lifeguard-Addon für den Fileserver, damit er nicht abschaltet, wenn jemand gerade eine Aufnahme ansieht?

    Yepp, genau oder pausiert, das hat der Fileserver in der Vergangenheit öfter mal ignoriert und ist heruntergefahren.


    Das restfulapi-Plugin liefert dir unter anderem den aktuell wiedergegebenen Kanal bzw. die laufende Wiedergabe einer Aufnahme

    Ah, danke. Mit diesem Plugin habe ich mich noch nicht so sehr beschäftigt. Dann baue ich das mal für den Raspberry und schaue es mir mal an. :)


    Alternativ könnte man vielleicht auch das live-Plugin auf den Clients installieren und den Inhalt der Wiedergabe-Box parsen.

    Auch eine Variante, aber ich habe im Moment weder das EPGSeach- noch das Live-Plugin auf den Clients, um die Raspberry-Resourcen zu schonen. :)


    ByE...

    Server:  (K)VM on Proxmox 4.x-Host, VDR 2.2.0 (selbstgebaut vom yaVDR unstable Repo) auf Debian 8 (Jessie), 1x Digital Devices Cine S2 (V6) + DuoFlex S2
    Clients: Raspberry Pi 2/3 mit Raspbian, VDR 2.2.0 (selbstgebaut vom yaVDR unstable Repo) als Streamdev-Clients

  • Yepp, genau oder pausiert, das hat der Fileserver in der Vergangenheit öfter mal ignoriert und ist heruntergefahren.

    Das "Problem" (eigentlich ist es ja ein sinnvolles Verhalten) ist, dass der VDR alle File-Handles für die Aufnahme schließt, wenn man die Wiedergabe pausiert.
    Ich hab da mal was vorbereitet, das einfach auf dem Client ausgeführt wird und die index-Datei im Aufnahmeverzeichnis zum Lesen öffnet, wenn man einen Aufnahme abspielt, die auf einem anderen Dateisystem als das Aufnahmeverzeichnis des VDR liegt (was ja für NFS-Freigaben zutreffen sollte). Dadurch sollte autofs die Freigabe nicht wegen inaktivität aushängen): : https://github.com/seahawk1986…aster/dbus_replaylocks.py
    Das Skript reagiert auf die Status-Signale des dbus2vdr-Plugin (was sich ja auch wegen dem avahi-linker lohnt), weitere Abhängigkeiten sind noch die Pakete python3-dbus und python3-gi sowie https://github.com/seahawk1986/pydbus2vdr bzw. als fertiges Paket python3-dbus2vdr aus unstable-main.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)


  • Nicht genau das was du willst, aber bei mir hier wird ein VDR-FIleserver (mein ganz normaler Desktop) von den Clients per WoL geweckt, haengt dann im Anmeldeschirm, und fuehrt ein Skript aus, das ihn, wenn kein Client mehr anpingbar ist, auch wieder runterfaehrt. Siehe hier:
    Altes Problem wieder da: Rechner (vdr Fileserver) automatisch wieder runterfahren wenn Clients offline sind

  • Nicht genau das was du willst, aber bei mir hier wird ein VDR-FIleserver (mein ganz normaler Desktop) von den Clients per WoL geweckt, haengt dann im Anmeldeschirm, und fuehrt ein Skript aus, das ihn, wenn kein Client mehr anpingbar ist, auch wieder runterfaehrt. Siehe hier:
    Altes Problem wieder da: Rechner (vdr Fileserver) automatisch wieder runterfahren wenn Clients offline sind

    Diesen Thread kenne ich. So in der Art nutze ich das im Moment. Ich möchte aber den Status der VDR-Clients etwas genauer abfragen, als lediglich ob noch pingbar. Ich hatte nämlich auch schon, dass der VDR-Prozeß gestorben ist und dann der Client (und somit auch der Server) die ganze Nacht durch lief.


    Ich habe im Moment aber noch keine Zeit gehabt, mir das restfulapi-Plugin auf dem Raspi anzuschauen bzw. erst einmal dafür zu bauen. :(


    ByE...

    Server:  (K)VM on Proxmox 4.x-Host, VDR 2.2.0 (selbstgebaut vom yaVDR unstable Repo) auf Debian 8 (Jessie), 1x Digital Devices Cine S2 (V6) + DuoFlex S2
    Clients: Raspberry Pi 2/3 mit Raspbian, VDR 2.2.0 (selbstgebaut vom yaVDR unstable Repo) als Streamdev-Clients

  • Hi.

    Das restfulapi-Plugin liefert dir unter anderem den aktuell wiedergegebenen Kanal bzw. die laufende Wiedergabe einer Aufnahme - mit einem kleinen Python-Skript kommt man so an den Status Live-TV oder Wiedergabe einer Aufnahme:

    Ich bin endlich dazu gekommen, damit herum zuspielen. Und diese Lösung ist eine klasse Basis für meine Anforderungen. Danke. :)

    Server:  (K)VM on Proxmox 4.x-Host, VDR 2.2.0 (selbstgebaut vom yaVDR unstable Repo) auf Debian 8 (Jessie), 1x Digital Devices Cine S2 (V6) + DuoFlex S2
    Clients: Raspberry Pi 2/3 mit Raspbian, VDR 2.2.0 (selbstgebaut vom yaVDR unstable Repo) als Streamdev-Clients

  • Sorry, dass ich diesen 1 Jahr alten Thread noch mal ausgrabe. Ich nutze mittlerweile vdr 2.3.1 und habe mir das aktuelle RestfulAPI Plugin in der Version 2.6.5 installiert, in der Hoffnung, dass ich damit ermittlen kann, ob VDR gerade eine Aufnahme abspielt.


    Obwohl das RestfulAPI Plugin an sich läuft, bekomme ich keine Ausgabe von <video name= ... mittels der info.xml Abfrage, obwohl eine Aufnahme aktuell wiedergegeben wird. Ich vermute, dass das Plugin noch nicht 100% kompatibel zu VDR 2.3.1 ist, konnte aber keine aktuellen Infos dazu im Web finden.


    Die Alternative lsof zur Abfrage der geöffneten Dateien zu benutzen, funktioniert leider ebenfalls nicht, da vdr bei mir nicht unter root läuft.
    Die Idee ist, die Konvertierung einer beendeten Aufnahme so lange zu verschieben wie noch ein Nutzer die Aufnahme ansieht.


    Vielleicht gibt es noch andere Alternativen als RestfulAPI oder lsof. Wäre da für jeden Tipp dankbar...

  • dbu2vdr funktioniert mit dem VDR >= 2.3.1, über dessen Status-Interface kannst du entweder pullen, ob er gerade eine Aufnahme wiedergibt (https://github.com/flensrocker…r/blob/master/README#L405 ) oder dich über DBus-Signale benachrichtigen lassen, wenn die Wiedergabe gestartet bzw. gestoppt wird: https://github.com/flensrocker…r/blob/master/README#L366

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Prima, danke für den Hinweis. Hab mir gerade die aktuellen Files von github geholt und kompiliert. Werde ausprobieren und berichten..


    Update: Funktioniert leider auch nicht wie gedacht. Vielleicht sollte ich noch erwähnen, dass ich kodi als Frontend nutze. "lsof" zeigt mir an, dass vdr eine Aufnahme wiedergibt:

    Code
    $ sudo lsof -u vdr
    ...
    vdr 1214 vdr 18r REG 8,34 1212162336 18648972 /home/kodi/Aufnahmen/Der_König_der_Löwen/2016-12-28.18.47.126-0.rec/00001.ts
    ...


    Bei Abfrage mit "vdr-bus-send" erhalte ich jedoch nur:

    Code
    $ vdr-dbus-send /Status status.IsReplaying
    method return time=1482975499.642189 sender=:1.29 -> destination=:1.79 serial=905 reply_serial=2
       string ""
       string ""
       boolean false


    Andere Abfragen, z.B. zu den eingestellten Timern oder installierten Plugins funktionieren einwandfrei.


    Was mache ich falsch bzw. wo ist mein Denkfehler?

  • Vielleicht sollte ich noch erwähnen, dass ich kodi als Frontend nutze.

    Ja, das wäre extrem hilfreich - restfulapi und dbus2vdr wissen ja nur, was der VDR über sein Status-Interface an Informationen liefert, aber nichts über die Aktionen des vnsiserver-Plugins.
    Du könntest über die RPC-JSON-API gehen und dir ansehen, ob und was KODI gerade wiedergibt: http://kodi.wiki/view/JSON-RPC_API/v6#Player

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • seahawk1986: Das hatte ich schon fast befürchtet. Aufgrund der lsof ausgabe hatte ich gehofft, dass der vdr auch über vnsi den Replay als solchen erkennt und entsprechende Ausgaben (über dbus2vdr bzw. restfulapi) macht. Mittles des JSON-RPC hab ich die Abfrage jetzt über kodi gelöst, allerdings muss ich das ggfs. für jeden Client separat durchführen. Eine zentrale Abfrage des vdr hätte es einfacher gemacht...


    hopsi: Die Lösung gefällt mir sehr gut, aber ich befürchte, dass dies in meinem Fall ebenfalls im Sande verläuft, da die Ausgabe nicht über den vdr selbst sondern via vnsi über kodi erfolgt.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!