Projekte - cleanchannels.sh
Der VDR aktualisiert seine Kanalliste (cannels.conf) je nach Konfiguration automatisch. Einziger Nachteil ist, dass mit der Zeit die Kanalliste immer größer wird, da alte Kanäle nicht automatisch gelöscht werden. Mein Skript soll Abhilfe schaffen.
Das Skript sollte ca. alle drei bis vier Wochen laufen. Idealerweise kurz vor dem VDR-Start. Das Skript selbst braucht für das Prüfen weniger als eine Sekunde bei 2.500 Kanälen. Die Ausgabe beim ersten Lauf sieht in etwa so aus:
hdvdr01 ~ # /usr/local/sbin/cleanchannels.sh 0
cleanchannels: Erster/Erzwungener Start des Skript's
cleanchannels: VDR läuft! Neue Kanalliste: /etc/vdr/channels.conf.new
cleanchannels: 21 Marker gefunden
cleanchannels: 967 Kanäle wurden nach /etc/vdr/channels.conf.removed verschoben
cleanchannels: 1561 Kanäle wurden neu markiert
Die Funktionsweise ist relativ Simpel:
- Kanalliste sichern
- Nach $OLDMARKER ("-OLD-") suchen (In der gesicherten Datei)
- Wenn der Marker drin ist, dann den Kanal in die *.removed-Datei schreiben
- Wenn kein Marker, dann den Kanal neu Markieren und in die *.new Datei schreiben
- Wenn der VDR nicht läuft die Kanalliste aktivieren
Das Skript prüft anhand des Datums der *.new, wann es zuletzt gelaufen ist.
Zum Start vor VDR habe ich eine 8800_cleanchannels in /etc/vdr.d angelegt. Logausgaben erfolgen via logger im Syslog. Es werden die Dateien erstellt:
- channels.conf.bak - Backup von channels.conf
- channels.conf.new - Neue Kanalliste mit Markern (-OLD-)
- channels.conf.removed - Gelöschte Kanäle
Die Marker werden im Provider des Kanals angelegt. Dadurch bleibt im normalen Betrieb alles wie gehabt. Als Beispiel mal ein Kanal mit (direkt nach Skriptstart) und ohne Marker (Wieder zurück umbenannt):
RTL II HD Austria;-OLD-CBC:11082:HC34M5O20S1:S19.2E:22000:400=27:0;410=deu@106:420:648,9C4,98C:11941:1:1041:0
RTL II HD Austria;CBC:11082:HC34M5O20S1:S19.2E:22000:400=27:0;410=deu@106:420:648,9C4,98C:11941:1:1041:0
Nach dem zweiten lauf (mit ein paar Tagen Pause!) hat man dann eine
wesentlich aktuellere channels.conf
Die Option EPG aktualisieren sollte eingeschaltet sein, damit der VDR im
Hintergrund alle Transponder durchzappt!
Funktioniert am besten mit mind. zwei oder mehr Tunern, da der VDR dann automatisch im Hintergrund Scant. Bei Systemen mit einem tuner ist es ratsam, die Zeit auf mindestens 100 Tage zu stellen.
Ich habe hier mal alles zum Testen hinterlegt:
http://db.tt/V81VfkIa
Aktualisiert am 10.11.2012 10:55
- Hinweis für Systeme mit 1 Tunner (100 Tage)
- Check auf "EPGScanTimeout" und "UpdateChannels" eingebaut
Da ist das Skript (-> /usr/local/sbin) und die 8000_cleanchannels (-> /etc/vdr.d) drin. Im Skript sind viele Kommentare enthalten, die meinen Gedankengang erklären sollen. Zum Einbau in Gen2VDR.
Es gilt natürlich der Gefahrenhinweis, dass Fehler enthalten sein können und die Nutzung auf eigene Gefahr erfolgt.
Ich hoffe es ist für den ein oder anderen nützlich.