Wakeup, um EPG-Daten zu holen / Autotimer beim Ausschalten aktualisieren

  • Hi,


    ich schreibe mal ein paar kurze Erfahrungen bezüglich automatischen EPG-Holens. Das war ein langsamer Lernprozess, den ich schrittweise mit euch teilen möchte. :D


    Erstmal: Die Kiste läuft aus Energiekostengründen nicht 24/7. Eher ziemlich selten, es klaffen also öfter mal große Lücken im EPG. Ziel war es nun, das EPG automatisch holen zu lassen, sodass VDRAdmin seine Autotimer setzen kann und ich dennoch keine Aufname verpasse. LinVDR wollte ich aus verschiedenen Gründen nicht einsetzen und somit ging die Bastelei los...



    Idee 1:


    Als noch VDR-Anfänger dachte ich mir damals, warum nicht für die wichtigsten Transponder tägliche Timer programmieren, die jeweils 1 Minute aufnähmen und deren Aufnahmen beim Runterfahren automatisch gelöscht würden?
    Es bieten sich z.B. Uhrzeiten wie 2:00 Uhr bis 2:01 Uhr, 2:01 Uhr bis 2:02 Uhr usw. an. Der Name der Aufnahme muss immer gleich sein, so kann man sie am besten automatisch löschen lassen. Also z.B. "EPG-Scan". Wichtig ist auch, die Priorität so klein wie möglich zu wählen.
    Nun schreibt man noch in die vdrshutdown oben eine Zeile nach dem Motto


    Code
    rm -r /video0/EPG-Scan >/dev/null 2>&1


    hinein. Fertig. VDR und NVRAM-Wakeup erledigen den Rest. Leider gibt es auch ein kleines Problem: Da VDRAdmin nur beim Start und dann alle 10 Minuten die Autotimer aktualisiert (es sei denn man macht es manuell), kann es schon einmal passieren, dass einige Einträge nicht beachtet werden. Das passiert in unserem Fall, da der VDR nur kurz läuft.


    Zusammenfassung:


    Vorteile:
    - Absolut idiotensicher, da kein großes Gefrickel mit Script (mal von der einen Zeile abgesehen)


    Nachteile:
    - VDRAdmin bekommt u.U. nicht alles mit (vor allem bei Sendern, die weniger als 48h EPG-Daten haben),
    - sieht im Timer-Menü unschön aus.



    Idee 2:


    Die stammt hier irgendwo aus dem Board (zusammengepflückt aus verschiedenen Postings). Ist aber nicht zu empfehlen! Ich werde erklären, warum.


    Ausgehend von obigem Problem, dass der VDRAdmin also hinterherhinkt, wurde die vdrshutdown so verändert:



    Das bewirkt, dass die Autotimer beim Runterfahren aktualisiert werden (VDRAdmin muss ohne Benutzername/Passwort funktionieren). Eigentlich logisch und eine einfache Lösung? Aaaber: Beim Aufruf des Shutdownscriptes hat VDR ja schon die nächste Aufwachzeit übergeben! Eventuell danach dazukommende Timer ändern daran auch nichts mehr. Daher wird man auch hier, wenn es hart auf hart kommt, Aufnahmen verpassen.



    Idee 3:


    Jetzt bleibt eigentlich nur noch, ein Script zu schreiben, dass den EPG-Scan-Vorgang automatisiert. Und wenn man das macht, dann gleich richtig (auch nicht auf meinem Mist gewachsen, aber aus dem Board zusammengekratzt und stark modifiziert). Zu meiner Verteidigung muss ich sagen, dass das im VDR 1.3 enthaltene EPG-Scan-Feature nicht funktioniert (nur eine DVB-Karte, das mag der Grund sein).


    Also das Script epgscan:



    Das Script scannt alle Transponder durch (keinen doppelt), wartet dazwischen 10 Sekunden und schaltet am Ende den alten Kanal wieder ein, bevor es VDRAdmin dazu anweist, die Autotimer zu aktualisieren und den VDR anschließend herunterfährt.


    Dazu muss der VDR natürlich schon laufen. Das erreicht man über diese Zeilen in der vdrshutdown (der obere Teil macht was ganz anderes, nämlich verhindern, dass man den VDR bei z.B. laufendem NOAD runterfährt, das ist vielleicht aber auch ganz nützlich, deshalb poste ich es gleich mit):



    Die letzten 6 Zeilen sind ein Ersatz für den schon vorhandenen NVRAM-Aufruf. Sie bewirken, dass der VDR nachts um 2 Uhr angeht, auch falls der nächste Timer erst später käme. Genauer gesagt geht der VDR um 1:55 Uhr an, aber damit er den EPG-Scan dann auch wirklich um 2 Uhr ausführt, braucht man noch diese Zeile in der crontab:


    Code
    00 2  * * *     root  /usr/local/bin/epgscan



    So, dass ist der aktuelle Stand in meinem System. Ideen werden aber gerne angenommen. :D

  • Zitat

    Original von clocker
    wget "http://127.0.0.1/vdradmin.pl?aktion=force_update" -T 30 -O /dev/null
    Das bewirkt, dass die Autotimer beim Runterfahren aktualisiert werden (VDRAdmin muss ohne Benutzername/Passwort funktionieren).


    Mit
    wget "http://user:password@127.0.0.1/vdradmin.pl?aktion=force_update" -T 30 -O /dev/null
    funktioniert es auch mit gesetztem User/Passwort.


    Zitat


    Idee 3:
    Zu meiner Verteidigung muss ich sagen, dass das im VDR 1.3 enthaltene EPG-Scan-Feature nicht funktioniert (nur eine DVB-Karte, das mag der Grund sein).


    Bei mir (auch nur 1 DVB-Karte) funktioniert der Aufruf von
    /usr/local/bin/svdrpsend.pl scan | at now + 1 minute
    wie er es soll.


    Bei der Verwendung des settime-Scriptes anstelle von nvram gibt es ein Problem. Cron führt dann, wohl durch die Zeitumstellung beim Neustart bedingt, den Job bei jedem Bootvorgang aus.


    Evtl. hilft es, Cron erst nach dem Aufruf von settime aus runvdr zu starten. Da es auf meiner SuSE den Runleveleditor zerschossen hat, konnte ich das allerdings nicht testen (vielleicht hat ja jemand einen Tip, wie ich mittels insserv den automatischen Start von Cron verhindere).


    Aufgrund dieser Probleme verwende ich folgende Lösung:

    • VDR soll 10 Minuten vor nächstem Timer aufwachen
    • Timeout für VDRadmins Autotimer auf 10 Minuten gesetzt
    • Regelmässiger täglicher Timer auf einen Sender für 1 Minute, Aufnahme wird beim Runterfahren sofort wieder gelöscht
    • in der letzten Zeile von runvdr wird der EPG-Scan gestartet mit
      /usr/local/bin/svdrpsend.pl scan | at now + 1 minute

    VDR-User #992
    Server: Asrock N3700-ITX mit Cine S2 6.5 headless
    System: Ubuntu 22.04.LTS
    VDR: VDR 2.2.0 mit epgsearch, live, vnsiserver
    Client: Raspberry Pi v4 mit LibreElec

  • Kann doch sein. Funktioniert wie er soll, nämlich gar nicht. ;)


    Ne, Scherz beiseite. Ich bleibe auch bei meinem Scan-Script. Da weiß ich wenigstens, wann es fertig ist und es scannt nicht bis zum Sanktnimmerleinstag weiter.

  • Zitat

    Original von ronnykornexl


    Code
    Bei mir (auch nur 1 DVB-Karte) funktioniert der Aufruf von
    
    
    /usr/local/bin/svdrpsend.pl scan | at now + 1 minute
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
    
    wie er es soll.


    6 Setzen :-))


    [Mode=Bernhard Hoecker]
    Wieso das denn? 8o
    [/Mode]


    Ich habe clocker so verstanden, als würde das mit vdr 1.3 ff. kommende Feature EPG-Scan nicht funktionieren. Kann natürlich sein, dass er sich nur auf die konkrete Version 1.3.0 bezogen hat.

    VDR-User #992
    Server: Asrock N3700-ITX mit Cine S2 6.5 headless
    System: Ubuntu 22.04.LTS
    VDR: VDR 2.2.0 mit epgsearch, live, vnsiserver
    Client: Raspberry Pi v4 mit LibreElec

  • Naja, in deiner Code-Zeile fehlt ein Wörtchen.


    "echo"


    Ansonsten dürfte "at" meckern. Aber prinzipiell dürfte der Scan-Start so natürlich trotzdem klappen (allerdings ohne Zeitverzögerung). Wenn, dann halt mit Fehlermeldung ;)


    Ich habe inzwischen rausgefunden woran es bei mir lag. Ganz simpel: Der Timeout für den EPG-Scan stand auf 0. Dann geht es nicht. Ist eventuell vielleicht auch nicht unbedingt logisch, aber so ist es halt.


    Trotzdem verwende ich o.g. Script (inzwischen wieder etwas verändert), da es halt für den gedachten Zweck am besten geeignet ist.

  • Zitat

    Original von clocker
    Naja, in deiner Code-Zeile fehlt ein Wörtchen.


    "echo"


    Ansonsten dürfte "at" meckern. Aber prinzipiell dürfte der Scan-Start so natürlich trotzdem klappen (allerdings ohne Zeitverzögerung). Wenn, dann halt mit Fehlermeldung ;)


    Den Hinweis mit echo habe ich schnon mehrfach gelesen.
    Trotzdem:

    Code
    tux-vdr:~ # date
    Wed Nov 24 20:30:03 CET 2004
    tux-vdr:~ # /usr/local/bin/svdrpsend.pl scan | at now +1 minutes
    warning: commands will be executed using /bin/sh
    job 308 at 2004-11-24 20:31

    VDR-User #992
    Server: Asrock N3700-ITX mit Cine S2 6.5 headless
    System: Ubuntu 22.04.LTS
    VDR: VDR 2.2.0 mit epgsearch, live, vnsiserver
    Client: Raspberry Pi v4 mit LibreElec

  • Servus,


    bei LinVDR programmiert die poweroff.pl (verlinkt mit /sbin/poweroff) stets den neuen Aufwachzeitpunkt -- und zwar entweder den des nächsten Timers, oder aber 2:00 Uhr, je nach dem was früher liegt.


    Anschließend läuft VDR (da kein Timer ansteht geht VDR von einem manuellen Start aus) für MinUserInactivity. Mit "Timeout für Auto Timer" kleiner als MinUserInactivity arbeitet VDR-Admin vor dem Runterfahren die Autotimer ab, so dass beim Shutdown der nächste Timer (oder wieder 2 Uhr) programmiert wird.


    Man kann VDR-Admin übrigens auch zum Update überreden, indem man es mit "vdradmin -k" killt und anschließend neu aufruft.


    Das einzige, was du also noch beim Ein-Karten-System lösen müsstest, ist der EPG-Scan. Aber dafür hast du ja schon ein Script, was alle Kanäle durchschaltet.


    Viele Grüße, Mirko

  • Mein Verständis ist so, dass "at" einen Text erwartet, den es dann ausführt. Einen Text übergibt man ihm mit "echo" und dann den Text.
    Der erste Teil vor dem | wird ausgeführt und dann dem Teil hinter dem | (der auf eine Eingabe wartet) übergeben.


    Lässt man "echo" weg, übergibt man "at" quasi die Meldungen, die svdrpsend in der Konsole ausspuckt (es wird dazu gleich ausgeführt).


    cooper


    Danke für die Infos. :) Ich lasse den VDR aber ungerne bis zur MinUserActivity laufen. Das wären nämlich 3 Stunden; ich will ja ab und zu einen Film ungestört gucken ;)


    Das Script oben ist irgendwie genial. Es macht einfach einen Scan auf allen Transpondern, wählt dabei jeden nur 1x an und fährt den VDR am Ende runter. Geht optimal und dauert nur wenige Minuten.


    VDRAdmin beenden und neu starten, hmm, klar, das ginge natürlich auch.

  • Servus,


    Zitat

    Ich lasse den VDR aber ungerne bis zur MinUserActivity laufen. Das wären nämlich 3 Stunden; ich will ja ab und zu einen Film ungestört gucken ;)


    Dazu reicht auch eine MinUserInactivity von 45 Minuten -- das Abspielen eines Recordings ist ebenfalls Aktivität. VDR schaltet also höchstens dann ab, wenn du 45 Minuten Live-TV guckst, ohne auch nur die Fernbedienung anzufassen (und dann weitere 5 Minuten die Meldung nicht beachtest, dass er bald runter fährt). Beim derzeitigen Fernsehprogramm kann ich nicht glauben, dass du das so lange aushältst :D


    Viele Grüße, Mirko

  • Zitat

    Original von cooper
    Beim derzeitigen Fernsehprogramm kann ich nicht glauben, dass du das so lange aushältst :D


    LOL OK, das war ein etwas realitätfernes Beispiel ;) Aber ab und an gucke ich in der Tat mal mit dem VDR etwas "live". Nicht so häufig, kommt aber vor.


    Wenn du willst, kannst du das Script ja im LinVDR "verwursten". :)

  • HA! Es gibt doch ein kleines Problem mit dem Script oben:


    Manchmal kommt VDR wohl nicht dazu, die epg.data rechtzeitig zu speichern, so dass trotz EPG-Scans weiterhin die alte (unaktualisierte) Fassung auf der Platte liegt. Im RAM sind die neuen Daten schon vorhanden, nur die Datei wird nicht aktualisiert. Auch nicht, wenn der VDR heruntergefahren wird. Und genau das ist das Problem: Wird er neu gestartet, hat er die neuen EPG-Daten "vergessen".


    Wann speichert VDR das EPG in seiner Datei? Alle paar Minuten? Oder auch, wenn die Software beendet wird? Wenn nein, wäre das eine Verbesserung. Oder hat jemand eine andere Idee?


    PS: Hab mir jetzt erstmal damit geholfen, am Ende der vdr.c eine neue Zeile vor


    Code
    cRecordControls::Shutdown();
    cCutter::Stop();


    einzubauen. Jetzt steht da:


    Code
    cSchedules::Cleanup(true);
    cRecordControls::Shutdown();
    cCutter::Stop();
  • also mein vdr speichert alle 10 Minuten seine epg daten ab.

    Aktuelle Systeme:
    VDR-Server: MSI KT6A Ultra FISR ; Athlon XP 2200+ ; GrKa Geforce 2 MX; 256MB DDR-SDRam Plugins: streamdev-server, remote
    2 x DVB-Budget Karte, Gentoo, Kernel 2.6.8 usw....

  • Funktioniert bei Euch das Script für den EPG-Scan so, wie clocker es geschrieben hat?


    Ich musste hier noch die Zeile

    Code
    for i in `grep '^[A-Z]' /etc/vdr/channels.conf | awk -F ':' '{print $2$3$4":"$1}' | sort -nu | awk -F ':' '{print $2}'`; do

    erweitern in

    Code
    for i in `grep '^[A-Z]' /etc/vdr/channels.conf | awk -F ':' '{print $2$3$4":"$1}' | sort -nu | awk -F ':' '{print $2}' | awk -F ';' '{print $1}`; do

    Ohne diese Änderung brachte mir svdrpsend.pl immer den Fehler 501 Undefined channel "$sender;$bouqet"

    VDR-User #992
    Server: Asrock N3700-ITX mit Cine S2 6.5 headless
    System: Ubuntu 22.04.LTS
    VDR: VDR 2.2.0 mit epgsearch, live, vnsiserver
    Client: Raspberry Pi v4 mit LibreElec

  • Hmmm. Dann hast du noch die ausführlichen Kanalnamen à la "ARD;blabla", wie sie vor 1.3.17 üblich waren. Danke für den Hinweis. Ist bei mir nicht aufgefallen, da ich die Kurznamen in der channels.conf habe und VDR nicht die Namen ändern lasse. Wäre alles einfacher, wenn man auf eine einfache Art an die Kanalnummer käme. Naja.


    Ronny
    Danke für den Tipp. Hab es jetzt nicht ausprobiert weil der VDRAdmin mit seinen AutoTimern bei mir eigentlich ziemlich gut läuft (man muss halt wissen, was man einträgt). Aber so, wie ich es verstanden habe, hätte man auch bei deinem Plugin das Problem, dass man es manuell dazu überreden müsste, die Timer zu aktualisieren, kurz bevor der VDR wieder heruntergefahren wird.
    Mir kommt gerade eine Idee: Optimal wäre das Plugin ja, wenn es über einen Timer den VDR aufweckt, gleich einen EPG-Scan macht, die Timer aktualisiert und den VDR wieder herunterfährt. Sozusagen eine saubere Alles-In-Einem-Lösung ohne Scriptpfuscherei.

  • Weiß jemand, wie man die entsprechenden Änderung der vdrshutdown auf den ctVDR übertragen kann? Dort werden ja die NVRAM-Zeiten in der S90.nvram-wakeup ermittelt.

    Asus Pundit-S 2600 - Celeron 2,6 GHz - 512 MB - Samsung 160 GB - NEC DVD-+RW 1300 - WinTV Nova-T (alt) - DXR3 (Creative);
    c't3 - tobi Distri experimental (Sarge)/ VDR 1.4.x + (DXR3 oder em84xx 4MB bin am testen) , Streamdev, LIRC

    Einmal editiert, zuletzt von cyberthom ()

  • das mit der aufwachzeit immer um 3 Uhr z.B. läßt sich bestimmt sehr leicht einbauen. schaue einfach mal nach der stelle wo nvram aufgerufen wird. Dann schauste noch wie die variable mit dem aufwach timestamp heißt, und modifizierst den einfach mit den richtigen codezeilen wie oben gepostet.


    MFG
    Ulrich


    PS: Ich habe bei mir das shutdown script nur soweit angepasst das es um 3 Uhr nacht den vdr startet wenn innerhalb von den nächsten 24 Stunden kein Timer festgelegt ist. EPG einsammel ist wegen meiner 2 DVB karten kein Problem, und die Timer setzt der Vdradmin ja.

    Aktuelle Systeme:
    VDR-Server: MSI KT6A Ultra FISR ; Athlon XP 2200+ ; GrKa Geforce 2 MX; 256MB DDR-SDRam Plugins: streamdev-server, remote
    2 x DVB-Budget Karte, Gentoo, Kernel 2.6.8 usw....

    Einmal editiert, zuletzt von BlackKing ()

Jetzt mitmachen!

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