Status des VDR abfragen

  • Hallo,


    ich suche nach einer Möglichkeit, den Status des VDR z.B. über SVDRP oder eine andere automatisierbare Möglichkeit abzufragen. Zwar gelingt es mir, mit dem Kommando "CHAN" den aktuellen Channel anzuzeigen, jedoch kann es ja auch sein, dass z.B. eine Aufnahme abgespielt wird, auch hier würde ich gerne wissen, ob und wenn ja welche, und dann am besten auch noch, an welcher Position gerade, oder ob sie pausiert ist.


    Gibts da eine Möglichkeit ? Gerne auch unsaubere Tricks :)


    VG!

  • Gibts da eine Möglichkeit ?


    Man kann dbus2vdr dafür nutzen und die dbus-Statusmeldungen auswerten: https://github.com/flensrocker…r/blob/master/README#L335
    Wenn du Python nutzen willst, kannst du https://github.com/seahawk1986…r/blob/master/dbus2vdr.py als Modul verwenden, das die dbus-Signale des VDR einsammelt - Minimalbeispiel:


    Das liefert dann sowas:

    Code
    $ python3 vdrstatus.py
    ChannelSwitch <bound method DBusSignal.onChannelSwitch of <__main__.DBusSignal object at 0x22a21d0>>
    Replaying <bound method DBusSignal.onReplay of <__main__.DBusSignal object at 0x22a21d0>>
    Live-TV Channel: 2 on device 9
    Live-TV Channel: 1 on device 9
    Replaying Walulis sieht fern~Sport, Nerds und Frühstückswahnsinn started
    Replaying  stopped
    Live-TV Channel: 1 on device 9


    Oder du nimmst das restfulapi-Plugin, das gibt über die info.xml bzw. info.json auch den Status aus:

    Code
    [...]
     <channel>C-1-1051-11100</channel>
     <eventid>51256</eventid>
     <start_time>1379862000</start_time>
     <duration>10800</duration>
     <title>Bundestagswahl und Wahl in Hessen</title>
    [...]


    bzw. bei einer Wiedergabe:

    Code
    [...]
     <video name="The Da Vinci Code: Sakrileg">/srv/vdr/video.00/The_Da_Vinci_Code#3A_Sakrileg/2013-09-18.01.13.2-0.rec</video>
    [...]


    Die Status-Box des Live-Plugins liefert am meisten Infos, ich habe mir aber noch nicht angesehen, wie man da am besten von außen dran kommt.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

    Einmal editiert, zuletzt von seahawk1986 ()

  • Nun doch noch eine Zusatzfrage.


    Ich hätte gerne auch die Info, wenn ein recording abgespielt wird, an welcher Position man gerade ist (kann ja für play oder pause gelten). In der DBUS-Plugin doku habe ich dazu nichts gefunden ...die Info scheints nicht zu geben. Jemand dazu eine Idee?


    ich würde gerne den Zustand von einem VDR auf einen anderen übertragen - z.B. wenn man abends aus dem Wohnzimmer ins Schlarzimmer umzieht, um dort weiterzuschauen. Für XBMC ist das kein Problem, auch für LiveTV, da starte ich einfach auf Knopfdruck eine Aufnahme, fahre den VDR im Schlafzimmer automatisch hoch, fahre den im Wohnzimmer runter (die Aufnahme läuft auf einem zentralen VDR-Server) und starte im SZ die Aufnahme und gehe direkt in Pause....wenn man also zwischendurch erstmal ins Bad geht kann man dann an der entsprechenden Stelle weiterschauen.


    Nur wie gesagt für Recordings bekomm ich es nicht hin weil einfach die wesentliche Info fehlt. Man könnte ja irgendwie mit Timern ausrechnen, wie lange es her ist, seitdem Play gedrückt wurde. Aber das hilft nix, weil man könnte ja auch seeken, usw.


    Danke und VG

  • Nur wie gesagt für Recordings bekomm ich es nicht hin weil einfach die wesentliche Info fehlt. Man könnte ja irgendwie mit Timern ausrechnen, wie lange es her ist, seitdem Play gedrückt wurde. Aber das hilft nix, weil man könnte ja auch seeken, usw.


    Eigentlich sollte das direkt über die resume-Datei möglich sein, die der VDR für eine Aufnahme anlegt, wenn man sie abspielt und dann die Wiedergabe wieder stoppt. Timer auf einem zentralen VDR kannst du von einem Client-VDR z.B. über das remotetimers-Plugin anlegen.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Moin!


    Du kannst zumindest herausfinden, welche Aufnahme gerade abgespielt wird (siehe README:(

    Code
    And there are the following methods on the status interface.
    - is vdr replaying a recording
      vdr-dbus-send.sh /Status status.IsReplaying
      It returns the name, filename and a boolean value like the signal "Replaying".


    Beispielausgabe, wenn keine Aufnahme abgespielt wird:

    Code
    $ vdr-dbus-send /Status status.IsReplaying
    method return sender=:1.25 -> dest=:1.29 reply_serial=2
       string ""
       string ""
       boolean false


    und wenn eine Aufnahme abgespielt wird:

    Code
    $ vdr-dbus-send /Status status.IsReplaying
    method return sender=:1.25 -> dest=:1.30 reply_serial=2
       string "Ab durch die Hecke~%Animationsfilm USA 2006 (Over the Hedge)"
       string "/srv/vdr/video.00/Ab_durch_die_Hecke/%Animationsfilm_USA_2006_(Over_the_Hedge)/2013-03-29.11.05.1-0.rec"
       boolean true


    Und so geht's in Python: https://github.com/flensrocker…er/bin/vdr-isreplaying.py


    Aber wie seahawk schon geschrieben hat, sollte ein vdr nach Stoppen einer Wiedergabe die Aufnahme an der resume-Position wieder abspielen.
    Starten per dbus2vdr:

    Code
    vdr-dbus-send.sh /Recordings recording.Play variant:string:'path' variant:int32:-1


    Der Pfad müsste "Filename" von "IsReplaying" sein, wenn die auf allen vdrs gleich gemountet sind.


    Hm, mit "-1" scheint's da noch irgendwie ein Problem zu geben, scheint mir. Muss ich gleich mal debuggen... Aber so soll es zumindest theoretisch funktionieren. :)


    Lars.

  • Hab den Fehler (Ursache war copy&paste) in recording.Play gefunden, neues Paket ist unterwegs...


    Danke, sonst wäre er mir nie aufgefallen! :)


    Lars.

  • Hi,


    freut mich dass ich somit die richtige Frage gestellt habe ;)


    Danke für die Beispiele - das klappte auch alles schon - aber der Tip mit der Resume datei ist sehr gut, darauf wäre ich nie gekommen!


    Danke und VG

  • Hallo,


    ich wollte mal das Modul dbus2vdr.py ausprobieren.
    Leider bekomme ich einen Fehler beim Erzeugen der Instanz


    In meinem Programm erzeuge ich eine Instanz von DBus2VDR

    Code
    self.dbus2vdr = DBus2VDR(dbus.SystemBus(), instance=0, watchdog=True)


    Im Debugger sieht das so aus


    Beim super-Aufruf werden doch drei Argumente übergeben. Ich stehe etwas auf dem Schlauch


    Edit: Natürlich wurden an super() keine Argumente übergeben sondern an __init__

    HW: Gigabyte EP41-UD3L | Core2Duo 7400 | 2GB Kingston | MSI N220GT-MD1GZ (passiv) | L4M-Twin S2 ver 6.5 mit Flex S2 | Silverstone LC16M mit iMON VFD | Samsung LE46B750
    SW: Xubuntu 14.04 3.13.0-24 | NVIDIA 304.117 | vdr 2.1.6 | softhddevice | inputlirc | lcdproc

    Einmal editiert, zuletzt von goldbär ()

  • Nutzt du Python3? Das Modul ist IIRC wegen dem super() Aufruf nicht zu Python2 kompatibel.
    Btw: Das mit dem Watchdog klappt nur, wenn es eine gobject mainloop gibt.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Code
    python -V
    Python 2.7.4

    HW: Gigabyte EP41-UD3L | Core2Duo 7400 | 2GB Kingston | MSI N220GT-MD1GZ (passiv) | L4M-Twin S2 ver 6.5 mit Flex S2 | Silverstone LC16M mit iMON VFD | Samsung LE46B750
    SW: Xubuntu 14.04 3.13.0-24 | NVIDIA 304.117 | vdr 2.1.6 | softhddevice | inputlirc | lcdproc

  • So scheint es zu gehen

    Python
    class Recordings(DBusClass):
        def __init__(self, bus, instance=0):
            super(Recordings,self).__init__(bus, "/Recordings", 'recording')

    HW: Gigabyte EP41-UD3L | Core2Duo 7400 | 2GB Kingston | MSI N220GT-MD1GZ (passiv) | L4M-Twin S2 ver 6.5 mit Flex S2 | Silverstone LC16M mit iMON VFD | Samsung LE46B750
    SW: Xubuntu 14.04 3.13.0-24 | NVIDIA 304.117 | vdr 2.1.6 | softhddevice | inputlirc | lcdproc

Jetzt mitmachen!

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