Fragen zu SVDRP

  • Guten Abend,


    ich hoffe, das ich hier im richtigen Bereich bin, um meine Fragen zu SVDRP loszuwerden.


    Zu Anfang, kurz eine Erklärung meines Problems.
    Im Rahmen einer Studienarbeit darf ich eine externe Aufnahmesteuerung für einen HTPC erstellen. Also aufnahmen via Web Interface erstellen und rechner zu gegebener Zeit aufwecken. Dies habe ich soweit Programmiert und scheint soweit auch zu funktionieren.


    Also möglichkeit um einfach die Timer zu erstellen, bin ich dann nach langer suche auf SDVRP gestoßen.
    Mein Datenbestand ist passend zum Aufruf NEWT gehalten.


    Auf dem HTPC würde ich mir dann die Daten aus der Datenbank holen und via newt den passenden Timer erstellen.
    Nun aber meine frage an euch, da ich dies leider ohne passende Hardware nciht testen kann. Wie bekomme ich nun raus, welche Nummer der Timer nun intern bekommen hat?
    Dies würde ich ja benötigen, um den Timer bei bedarf wieder löschen zu lassen.


    Gibt mir newt nach absetzen des Befehls diese ID zurück oder muss ich versuchen anderweitig an die ranzukommen?
    Sollte es in der rückgabe vorhanden sein, wäre es super, wenn ihr mir diese als beispiel geben könntet, damit ich das weiterverarbeiten könnte.


    Im voraus schonmal vielen vielen Dank für eure Hilfe.


    Gruß
    DukNukem

  • Also ich sehe da keine ID:


    http://www.vdr-wiki.de/wiki/index.php/SVDRP#NEWT


    Eventuell werden die einfach nur durchnummeriert, denn bei LSTT gibt es einen Parameter <Nummer>.


    http://www.vdr-wiki.de/wiki/index.php/SVDRP#LSTT


    Aber mal ne Frage, wie testest Du Deine externe Aufnahmesteuerung, wenn Du keinen VDR hast? Übrigens wäre es am simpelsten, einfach mal in den Quelltext von VDR zu gucken. Sollte man für ne Studienarbeit eigentlich erwarten können.


    Grüsse
    TheChief

    - Client1: Thermaltake DH 102 mit 7" TouchTFT * Debian Stretch/vdr-2.4.0/graphtft/MainMenuHooks-Patch * Zotac H55-ITX WiFi * Core i3 540 * 4GB RAM ** Zotac GT630 * 1 TB System HDD * 4 GB RAM * Harmony 900 * satip-Plugin

    - Client2: Alfawise H96 Pro Plus * KODI
    - Server: Intel Pentium G3220 * DH87RL * 16GB RAM * 4x4TB 3.5" WD RED + 1x500GB 2.5" * satip-Plugin
    - SAT>IP: Inverto iLNB

    Einmal editiert, zuletzt von TheChief ()

  • Das kennst Du?: http://www.vdr-wiki.de/wiki/index.php/SVDRP


    Ansonsten ist SVDRP ein Protokoll. Da musst du dir aus den Antworten (des Protokolls) schon selber rausfischen (bzw. wrappen), was du brauchst. Ansonsten gibt es noch SVDRP-PHP (unvollständig), wo sich jemand mal die Mühe gemacht hat, die Geschichte in einer Klasse zu kapseln. Ein VDR als Objekt im Sinne der OOP ist das Ganze trotzdem nix geworden.


    BJ1

  • Zitat

    Original von TheChief
    Übrigens wäre es am simpelsten, einfach mal in den Quelltext von VDR zu gucken.


    Nein, muss man nicht. Bei ordentlich dokumentierter Software schaut man sich die Schnittstellenspezifikationen an (Interface) und wühlt nicht im Quelltext rum.


    BJ1

  • Zitat

    Original von BJ1


    Nein, muss man nicht. Bei ordentlich dokumentierter Software schaut man sich die Schnittstellenspezifikationen an (Interface) und wühlt nicht im Quelltext rum.


    BJ1


    Mag sein, hatte nicht bis hier hin gelesen: http://www.vdr-wiki.de/wiki/in…SVDRP#SVDRP_Antwort_Codes

    - Client1: Thermaltake DH 102 mit 7" TouchTFT * Debian Stretch/vdr-2.4.0/graphtft/MainMenuHooks-Patch * Zotac H55-ITX WiFi * Core i3 540 * 4GB RAM ** Zotac GT630 * 1 TB System HDD * 4 GB RAM * Harmony 900 * satip-Plugin

    - Client2: Alfawise H96 Pro Plus * KODI
    - Server: Intel Pentium G3220 * DH87RL * 16GB RAM * 4x4TB 3.5" WD RED + 1x500GB 2.5" * satip-Plugin
    - SAT>IP: Inverto iLNB

    Einmal editiert, zuletzt von TheChief ()

  • DukNukem: Wie komplex das Ganze ist, siehst Du hier:


    http://www.vdr-wiki.de/wiki/in…Source_Code_Dokumentation


    BJ1

  • Danke für die Tipps :)


    Mein Problem ist halt, dass meine TV Karte, mit der ich mein testsystem aufbauen wollte defekt ist. Ansonsten würde ich es natürlich selbst testen.
    Eigentlich fand ich das aber nicht so schlimm, da ich ja mit svdrp auf eine schnittstelle zugreife, die sich schon bewährt hat und ich somit doch eher weniger auf ein testsystem angewiesen bin.
    Einzig und allen wäre es schon praktisch, wenn ich das mit svdrp selbst testen könnte, aber da es ja leider nicht geht, habe ich hier nachgefragt.
    Der wiki eintrag ist mir natürllich bekannt. Nach den anforderungen von newt habe ich ja meine Datenstruktur aufgebaut.
    Aber nun weis ich ja, dass da doch einfach nur der natwortcode für erfolgreich oder nciht ohne mehr informationen kommt. ISt ja genau das was ich wissen wollte :)
    Somit lässt es sich leider nicht soweit automatisieren, wie ich es gedacht hatte. Aber halb so wild, hauptsache die Aufnahmen sind machbar.


    Die svdrp.php ist leider an meinen angriffspunkten nicht ausgebaut, so dass ich mir da auch keine Informationen holen gekonnt hätte.


    Aber trotzdem vielen Dank für eure Hilfe.


    Solltet ihr eine andere möglichkeit haben, via command line aufnahmetimer zu setzen, dann bin ich natürlich auch nicht abgeneigt diese kennen zu lernen.


    Gruß

  • Wie wäre es mit einem (ggf. virtualisierten) VDR mit IPTV-Plugin zum Testen? Dann ist man nicht auf eine TV-Karte angewiesen.


    Was spricht denn dagegen die Nummer eines Timers mit einem Zwischenschritt über LSTT zu bestimmen? Die benötigten Daten zum Parsen der Timerübersicht hättest du ja noch in der Datenbank.

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Guten Morgen Seahawk,


    das ist ja eine geniale Idee. So kann ich ja meine TV KArte überbrücken ^^.
    ahrscheinlichw erde ich das auf weihnachten schieben müssen, aber das hört sich doch echt vielversprechend an. Somit kann ich dann doch selbst die svdrp funktionen testen. Danke.
    Das weitere dürfte dann echt einfach ablaufen. Es war doch ne gute Idee für die Aufnahmen ne eigene Klasse zu erstellen :)


    Sollten mir noch weitere blöde fragen einfallen, kann ich euch ja bestimmt weiterhin damit nerven oder? :D


    Gruß

  • Moin!


    Eine eindeutige ID für einen Timer gibt es nicht im VDR. Ich bin mir nicht ganz sicher, ob bei jedem Aufruf von LSTT die Timer neu durchnummeriert werden, aber spätestens wenn der vdr neu gestartet wird.


    Wenn ich mir allerdings so die Ausgabe von LSTT ansehe, hängt epgsearch hinten weitere Informationen an, die bei manuellen Timern nicht da sind.


    Beispiel:

    Code
    250-42 1:1:2010-12-18:0340:0445:4:99:Breaking Bad~Krisen:<epgsearch><channel>62 - arte HD</channel><searchtimer>breaking bad</searchtimer><start>1292640000</start><stop>1292643900</stop><s-id>23</s-id><eventid>48830</eventid></epgsearch>
    250-35 1:2:2010-12-13:2205:0015:5:99:Die Bourne Identität:


    Da könntest du sozusage eine ID mitgeben. Da man da aber nicht nach suchen kann, müsstest du dann über alle Timer laufen, um den passenden wieder zu finden und seine Nummer bestimmen. Und das musst du jedes mal wieder machen, wenn du einen Timer löschen willst, da sich die Nummerierung ja zwischendurch geändert haben könnte. Und es bleibt ein Restrisiko zwischen Finden der Nummer und Absetzen des Löschbefehls.


    Siehe auch: http://comments.gmane.org/gmane.linux.vdr/43447
    (Das Problem hört sich genau nach dir an...)


    Lars.

  • Danke für die Ausgabe von LSTT.
    Das hilft mir in meinen Gedanken doch richtig weiter.
    Dank der Diskussion steht ja fest, dass die ID's bei jedem neustart erneuert werden, was bei meinem anwendungsfall ja häufiger vorkommt.


    Die Ausgabe von lstt lässt sich aber auf den ersten blick sehr gut verarbeiten.
    Somit muss ich die wohl am einfachsten durcharbeiten um die aktuelle ID für die benötigten Timer zu bekommen.
    Das dürfte wohl eine gute Lösung sein.


    Was mich auch schon ne weile beschäftigt, aber mir noch nciht so klar geworden ist, ist die art der Kanalangabe.
    Da gibt man ja eine feste Adresse an und nichts relatives.
    Das wird ja bestimmt die stelle des eintrags in der channels.conf sein oder?
    Was passiert eigentlich mit den Timern im VDR, wenn sich die reihenfolge in der channels.conf ändert?
    Werden die Timer dann angepasst oder laufen dei dann eventuel auf einem falschen Kanal?
    Ich werd da nämlich gerade nicht aus der Beschreibung in der wiki schlau.
    Ich vestehe, dass wenn ein Kanal verschwindet dies in einem Fehler in der timers.conf führt. Aber weiter steht da ja nichts erklärt oder ich finde es gerade nicht ^^


    Ok, so langsam wirds für mich doch etwas verwirrend. Nach x verschiedenen seiten habe ich nun auch gelesen, dass man neben der direkten Kanalnummer, wie sie zum umschalten genutzt wird, auch eine "channel id" verwenden kann.
    habs grad gefunden, ich idiot. -> http://www.vdr-wiki.de/wiki/index.php/Vdr%285%29


    Somit klärt sich die ganze geschichte also doch. Am geschicktesten lese ich also die channels.conf aus und bilde mir die passende ID und schreibe die in die Datenbank. Somit habe ich ja nun meinen Unique Identifier.


    Ich glaub echt, dass ich nun das system verstanden habe :)

  • Moin!


    Eine Channel-ID sieht z.B. so aus: C-1-1011-11120 oder C-1-1011-11110


    Das ist bei mir arte HD und ZDF HD. Diese stehen auch in der timers.conf, da gibt's also keine Probleme mit Kanalumsortierungen usw.. Das wäre schon jemandem aufgefallen. :)


    Statt direkt die channels.conf einzulesen, solltest du LSTC benutzen, da der vdr bei internen Änderung an den Kanälen nicht immer sofort die Datei aktualisiert. Auch werden Änderungen an der Datei überschrieben, wenn der vdr noch läuft, die wird nur beim Start einmal eingelesen.
    Ausgabe von LSTC:

    Code
    250-1 arte HD;ZDFvision:338000:M256:C:6900:6210=27:6221=deu,6222=fra;6220=deu:6230:0:11120:1:1011:0
    250-2 ZDF HD;ZDFvision:338000:M256:C:6900:6110=27:6120=deu,6121=mis,6123=qaa;6122=deu:6130:0:11110:1:1011:0


    (ich hab natürlich ein paar mehr Kanäle, die hier passen aber zu meiner LSTT-Ausgabe)


    In channels.c gibt's die Funktion "cString tChannelID::ToString(void)", da siehst du, wie die Channel-ID zusammengesetzt wird: Source-nid-tid-sid-rid


    Ich denke, um die eigenen "externen" Timer zu verwalten, hängst du hinten deine selbst erzeugte ID an. Startzeit, Länge usw. kann sich ändern, wenn der vdr den Timer an neue EPG-Infos anpasst.


    EDIT: So sieht übrigens ein Timer aus, wenn man "LSTT id" benutzt, dann wird gleich die Channel-ID und nicht die Kanalnummer ausgegeben:

    Code
    250-1 1:C-1-1011-11110:2010-12-13:2205:0015:5:99:Die Bourne Identität:


    Lars.

  • Danke! Jetzt habe ich soweit alles kapiert.


    Auch vielen Dank für den Tipp mit dem EPG, da hätte ich gerade garnicht dran gedacht. Also hänge ich einfach in den File beireich des timers eine ID mit rein und somit kann ich es auch identifizieren.


    Die channels.c hat mir auch sehr geholfen. Zum einen hab ich den Aufbau nun verstanden, zum anderen konnte ich feststellen, dass meine c kentnisse doch nicht so eingerostet sind wie gedacht.


    Sollte jemand interesse haben, kann ich die Studienarbeit nach Abschluss hochladen.


    Vielen Dank!


    Gruß
    DukNukem

  • Die Timer-Nummern gelten streng genommen nur für eine bestehende SVDRP-Verbindung, sind also für längeres Speichern denkbar ungeeignet. Dafür wurde das Aux-Feld in VDR 1.3.44 reserviert, damit automatisch generierte Timer mit benutzerspezifischen Informationen ergänzt werden können und wiedererkannt werden können. Die xml-ähnliche Form wird von epgsearch und vorübergehend vdradmin verwendet, ist aber kein muss.


    Genaueres steht auch im - oft übersehenen - man 5 vdr, das die Konfigurationsdateiformate und damit auch SVDRP-Formate beschreibt.


    Zitat

    Was passiert eigentlich mit den Timern im VDR, wenn sich die reihenfolge in der channels.conf ändert?


    Nichts, da die Channel-ID immer gleich bleibt. Selbst bei einem Transponderwechsel wandert der Timer automatisch mit.


    Gruß,


    Udo

  • Hallo Urig, danke für den Hinweis mit den AUX.


    Aus dem man 5 vdr werde ich aber trotzdem nicht ganz schlau. Deshalb frag ich mal nach ob ich es richtig verstanden habe.
    Beim newt Befehl muss ich also im Teil von File am schluss ein @ anhängen und alles danach kommt in den aux teil?

Jetzt mitmachen!

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