EPGSearch
Suchtimer und Ablösung des VDR-Programm-Menüs
- Provided by: vdr-plugin-epgsearch (Version: 2.4.6-1)
- Report a bug
Suchtimer und Ablösung des VDR-Programm-Menüs
Da die frühere README-Datei zu umfangreich geworden ist, dient diese Man-Page als Ersatz und erklärt einige Funktionen und Verhaltensweisen im Detail. Es handelt sich also nicht um ein Handbuch, sondern eher um eine erweiterte README-Datei.
Bei der Verwendung erweiterter EPG-Informationen können Variablen Teil des Verzeichniseintrags eines Suchtimers sein. Diese Variablen haben immer die Syntax '%Variable%'. Der Name einer Variablen entspricht dem internen Namen der erweiterten EPG-Information, wie er in der Datei epgsearchcats.conf angegeben ist. Beispiele finden Sie im Unterverzeichnis conf des Plugins.
Beispiel:
1|Category|Kategorie|Film,Kultur,Serie,Show,Spielfilm,Sport|3
Die Kategorie mit der ID 1 hat den internen Namen 'Category'. Sie können sie daher mit '%Category%' referenzieren. Variablennamen berücksichtigen keine Groß- und Kleinschreibung.
Beispielhafte Verzeichniseinträge könnten so aussehen:
Meine Filme~%Category%
Kinderfilme~%category%
%CATEGORY%~%genre%
Daneben gibt es drei weitere Variablen:
Wenn weder '%Title%' noch '%Subtitle%' angegeben ist oder in einer eingefügten benutzerdefinierten Variable vorkommt, wird der Titel beim Erstellen eines Timers automatisch an den Verzeichniseintrag angefügt. Wenn im Suchtimer zudem 'Serienaufnahme' auf 'ja' gesetzt ist, wird auch der Untertitel noch angefügt. Der Verzeichniseintrag:
%Category%~%Genre%~%Title%~%Subtitle%
ist also gleichwertig zu:
%Category%~%Genre%
wenn 'Serienaufnahme' auf 'ja' steht.
Achtung: Titel und Untertitel werden nicht automatisch angefügt, wenn eine der Variablen '%Title%' oder '%Subtitle%' im Verzeichniseintrag enthalten ist. Dadurch können Verzeichniseinträge wie dieser erstellt werden:
%Category%~%Genre%~%Title%~%Episode%~%Subtitle%
Des Weiteren stehen noch die folgenden Variablen aus dem Suchtimer zur Verfügung:
Siehe auch epgsearchuservars.conf(5).
Jede Zeile der Datei repräsentiert eine Suche oder einen Suchtimer und umfasst die folgenden Felder:
Achtung: Nach einer Änderung der Kanalreihenfolge sollten die Bereichseinstellungen von Suchtimern unbedingt kontrolliert werden!
Siehe auch "3. Ablauf des Suchvorgangs" bezüglich der Frage, wie sich diese Einstellungen auf die Suche auswirken.
Um die gewünschten Wochentage zu kodieren, muss der aus den ODER-verknüpften Bitmasken resultierende Wert negiert werden.
Beispiel: −67 (negiert: 0b01000011 = 0x40 | 0x02 | 0x01) kodiert Samstag, Montag und Sonntag
Das Zeichen '|' trennt benachbarte Kategorientupel, während '#' die Kennungen und Kategorienamen trennt.
Beispiel: '1#Film, Serie|2#Horror|8#16!^colon^!9'
Hinweis: Die Kennungen der erweiterten EPG-Kategorien (Feld 1 eines EPG-Kategorieeintrags) sind für die Kodierung des Bitfelds nicht von Bedeutung. Änderungen der EPG-Kategorien erfordern gegebenenfalls eine Aktualisierung von Suchtimern.
Hinweis: Dieses Feld ist nur relevant, wenn mehrere Vorlagen für Suchergebnisse vorliegen.
Hinweis: Jeder beliebige Epoch-Wert ist zulässig. Liegt die Zeit innerhalb eines Tages (anstelle von Mitternacht), bleibt der Timer inaktiv, bis diese Zeit erreicht ist.
Hinweis: Jeder beliebige Epoch-Wert ist zulässig. Liegt die Zeit innerhalb eines Tages (anstelle von Mitternacht), bleibt der Timer aktiv, bis diese Zeit erreicht ist.
Erlaubt die Berücksichtigung von Sendungen mit fehlenden oder nur teilweise übereinstimmenden Kategorien. Ohne andere ausreichend einschränkende Kriterien könnte dies jedoch zu einer enormen Anzahl von Suchergebnissen führen.
Die zu prüfenden Inhaltskennungen sind die Verkettung ihrer zweistelligen Hexadezimalzahlen ohne Trennzeichen.
Beispiel: Die Inhaltskennungen 17 (Detektiv, Thriller), 20 (Komödie) und 176 (Originalsprache) werden als '1114B0' kodiert.
Die Felder 55 (Inhaltskategorien) und 56 (besondere Merkmale) legen fest, wann eine Sendung den ausgewählten Inhaltskennungen entspricht.
Ein leerer String bewirkt, dass Inhaltskennungen nicht geprüft werden.
Die Optionen 0 und 1 prüfen über alle Kategoriengruppen hinweg, verwenden aber dennoch die Einstellung aus Feld 56 zur Überprüfung der besonderen Merkmale. Daher können Kombinationen wie 'UND' für die Kategoriengruppen und 'ODER' innerhalb der besonderen Merkmale auftreten und umgekehrt.
Option 2 hingegen verwendet einen zweistufigen Ansatz: Zunächst werden die Kategoriengruppen mit ausgewählten Inhaltskennungen geprüft (Gruppen ohne ausgewählte Inhaltskennungen entfallen). Eine Kategoriengruppe stimmt überein, wenn eine Sendung mindestens eine der für die Gruppe gewählten Inhaltskennungen enthält ('eine gewählte', ODER), mit Ausnahme der Gruppe der besonderen Merkmale, die stets die Einstellung aus Feld 56 verwendet. Abschließend müssen alle geprüften Kategoriengruppen übereinstimmen ('je Gruppe', UND).
Nur relevant, wenn 'Inhaltskennungen' nicht leer ist.
Der Eintrag eines Suchtimers wird als gültig betrachtet, wenn er mindestens die ersten 11 Felder abdeckt.
Die Felder ("Parameter") eines Suchtimers sind durch ':' getrennt. Daher wird ein ':' in Strings, wie etwa dem Suchbegriff oder dem Aufnahmeverzeichnis, durch '|' kodiert. Sollte ein '|' ebenfalls Teil des Strings sein, wie beispielsweise in regulären Ausdrücken, wird es durch '!^pipe^!' kodiert (was zwar unschön, aber aus Gründen der Abwärtskompatibilität erforderlich ist).
Felder, die von einem anderen Feld abhängen und aufgrund der Einstellung dieses Feldes belanglos sind, können (und sollten) leer gelassen werden. Beispielsweise kann ein Suchtimer ohne Zeitbeschränkung die Felder 'Start nach' und 'Start vor' leer lassen:
1:Meine Lieblingsserie: 0::: 0::0:0
^^^^
Darüber hinaus werden führende und nachfolgende Leerzeichen um einen Feldwert herum verworfen. Dies bedeutet jedoch, dass Strings nicht mit Leerzeichen beginnen oder enden können.
Hinweis: Strings in Feldern dürfen nicht in einfachen oder doppelten Anführungszeichen eingeschlossen werden, auch wenn dies in der Beschreibung so dargestellt sein sollte. Diese Zeichen wurden bei der Kompilierung dieser Man-Page eingefügt.
Siehe auch epgsearch.conf(5).
Zunächst wird für jede Sendung ein temporärer Suchtext erstellt, in dem Titel, Untertitel und Beschreibung durch '~' getrennt sind:
Title~Untertitel~Beschreibung
Abhängig von den Einstellungen von 'Titel verwenden', 'Untertitel verwenden' und 'Beschreibung verwenden' werden die entsprechenden Komponenten entweder eingefügt oder bleiben leer.
Wenn 'Groß/klein' nicht gesetzt ist, werden Suchtext und Suchbegriff in Kleinbuchstaben umgewandelt.
Je nach Suchmodus wird der Suchbegriff dann im Suchtext gesucht:
Hinweis: Anders als etwa in Perl, sind führende und abschließende '/' als Begrenzungszeichen für den Suchbegriff nicht erforderlich.
Hinweis: Der Suchbegriff ist bei unscharfer Suche auf 32 Zeichen begrenzt.
War die Suche bisher erfolgreich, werden die weiteren Kriterien (Startzeit, Dauer, Wochentag etc.) geprüft.
Bei jedem Update sortiert das Plugin die Suchtimer zunächst nach Timer-Priorität (absteigend) und Suchbegriff, bevor es nach neuen Treffern sucht. Wird ein neuer Treffer gefunden, wird ein neuer Timer erstellt.
Bei Serienaufnahmen wird der Untertitel an das Aufnahmeverzeichnis angefügt. Viele Anbieter befüllen den Untertitel allerdings erst wenige Tage vor der Sendung. Ist dieser nicht verfügbar, verwendet das Plugin vorübergehend Datum und Uhrzeit anstelle des Untertitels und ersetzt diese, sobald der Untertitel verfügbar ist.
Start- und Endzeitpunkte von Sendungen variieren oft leicht. Um eine Vielzahl von Timern für die gleiche Sendung zu vermeiden, prüft das Plugin, ob sich die Start- und Stoppzeit eines anderen Timers um nicht mehr als 10 Minuten unterscheiden. Bei einer Dauer von weniger als 10 Minuten wird stattdessen die Dauer verglichen.
Bei einer Übereinstimmung wird ein vorhandener Timer angepasst, andernfalls wird ein neuer Timer erstellt; inaktive Timer werden nicht aktualisiert. Manuell vorgenommene Einstellungen von Priorität oder Lebensdauer werden bei Updates nicht verändert.
Wenn 'Aktion' auf die Variante "Ankündigen (kein Timer)" eingestellt ist, wird kein Timer erstellt. Stattdessen erfolgt eine Benachrichtigung über die Sendung: Bei jedem Suchvorgang wird eine OSD-Meldung angezeigt, jedoch nur, wenn für das Ereignis kein Timer vorhanden war. Wenn Timer erstellt oder geändert wurden, wird gemäß dem eingestellten Zeitplan eine E-Mail versendet.
Die Aktualisierung der Suchtimer erfolgt in einem eigenen Thread. Eine Aktualisierung kann auf verschiedene Weise ausgelöst werden:
touch /pfad_zur_datei/.epgsearchupdate
wird eine Aktualisierung durchgeführt. Dies bietet eine einfache Möglichkeit, beispielsweise beim Ausführen eines Skripts eine Aktualisierung anzustoßen.
Dieses Menü zeigt Verzeichnisse an, die sowohl für Suchtimer als auch für normale Timer verwendet werden können. Die angezeigten Elemente stammen aus folgenden Quellen:
Das Menü führt diese Verzeichnisse zusammen und zeigt jedes Verzeichnis nur einmal an. Mit der Taste 'Gelb' lässt sich die Ebene der angezeigten Verzeichnisse ändern. Verzeichniseinträge, die EPG-Kategorievariablen wie '%Genre%' enthalten, werden immer vor anderen Verzeichniseinträgen angezeigt. Sie sind zudem nicht von der Ebene abhängig, sondern werden immer mit ihrem vollständigen Verzeichnispfad angezeigt.
Wird dieses Menü über das Timer-Bearbeitungsmenü aufgerufen und enthält der ausgewählte Eintrag bereits die Variablen '%Title%' oder %Subtitle, wird der Eintrag 'Datei' des Timers gelöscht, da Titel oder Untertitel bereits im Eintrag 'Verzeichnis' enthalten sind.
Die Liste der Verzeichnisse kann auch über den SVDRP-Befehl 'LSRD' abgerufen werden.
Wenn eine sprachabhängige Befehlsliste gewünscht wird, kann die Datei epgsearchcmds.conf in die entsprechende OSD-Sprache übersetzt und unter dem Dateinamen epgsearchcmds-<LOC>.conf gespeichert werden. Dabei entspricht <LOC> dem Sprachcode aus i18n.c:
{ "eng,dos",
"deu,ger",
"slv",
"ita",
"dut,nla,nld",
"por",
"fra,fre",
"nor",
"fin,smi",
"pol",
"esl,spa",
"ell,gre",
"sve,swe",
"rom,rum",
"hun",
"cat,cln",
"rus",
"hrv",
"est",
"dan"
// die vollständige Liste
// findet sich im Quellcode
}
Wenn für eine Sprache mehrere Codes verfügbar sind (bspw. 'deu,ger'), kann ein beliebiger davon verwendet werden.
Liegt eine Datei entsprechend der im VDR eingestellten OSD-Sprache vor, wird diese geladen. Existiert eine solche jedoch nicht, wird stattdessen versucht, die Datei epgsearchcmds.conf zu laden.
Siehe auch epgsearchcmds.conf(5).
Die EPG-Suche und andere Funktionen können von anderen Plugins oder Skripten genutzt werden. Es gibt zwei Ansätze:
Das Plugin überwacht, ob in seinem Konfigurationsverzeichnis die Datei .epgsearchrc vorhanden ist. Diese kann die folgenden Zeilen beinhalten:
Search=Suchbegriff
SearchMode=x // 0 = Ausdruck, 1 = alle (Standard), 2 = ein Wort, 3 = exakt, 4 = reg. Ausdruck
ChannelNr=x // sucht auf einem bestimmen Kanal, wenn angegeben
UseTitle=x // 1 (Standard) oder 0
UseSubtitle=x // 1 (Standard) oder 0
UseDescr=x // 1 (Standard) oder 0
Beim Start sucht EPGSearch nach dieser Datei und gibt, falls gefunden, die Suchergebnisse für die darin angegebene Suche zurück. Danach wird die Datei gelöscht.
Später kann über die SVDRP-Schnittstelle eine weitere Suche gestartet werden. Angenommen, die Taste 'Grün' wurde EPGSearch zugewiesen (siehe epgsearch(1), Abschnitt 5), kann EPGSearch einfach über svdrpsend aufgerufen werden:
svdrpsend HITK green
Ein Beispielskript recrep.sh, das nach Wiederholungen einer Aufnahme sucht, befindet sich im Unterverzeichnis scripts von EPGSearch.
Ein Plugin kann mit nur wenigen Codezeilen zwei Funktionen von EPGSearch direkt aufrufen:
Ein einfaches Beispiel-Plugin im Verzeichnis source von EPGSearch (vdr-epgsearchclient-0.0.1.tgz) demonstriert die Nutzung.
EPGSearch implementiert eine SVDRP-Schnittstelle, auf die folgendermaßen zugegriffen werden kann:
svdrpsend PLUG epgsearch LSTS
In den folgenden Abschnitten werden die an der SVDRP-Schnittstelle verfügbaren Befehle beschrieben.
Die eindeutige Kennung im ersten Feld wird ignoriert. EPGSearch weist einem neuen Sucheintrag immer die nächste freie Kennung zu und gibt diese in der Antwort bekannt:
svdrpsend PLUG epgsearch NEWS "0:Mustersuche:::::::::"
220 HostName SVDRP VideoDiskRecorder 2.7.7; ...
900 search 'Mustersuche' (with new ID 6) added
221 HostName closing connection
Hinweis: Ein leeres Feld ('::') wird ignoriert. Die Werte der Felder 'Suchbegriff', 'Verzeichnis' und 'Inhaltskennungen' werden jedoch gelöscht, wenn keine Werte angegeben wurden.
Für jede gefundene Sendung wird eine Zeile im Format des VDR-Befehls 'NEWT' zurückgegeben. Diese beinhaltet die folgenden Felder:
Timer : // 1 = neuen Timer anlegen
Kanal : // Kanalnummer des VDR
Datum : // Datum, an dem die Sendung läuft [JJJJ-MM-TT]
Beginn : // Beginn der Sendung [HHMM]
Ende : // Ende der Sendung [HHMM]
Priorität : // Priorität bei Aufnahme
Lebensdauer : // Lebensdauer bei Aufnahme
Datei : // Datei-Eintrag des Timers
Beispiel:
svdrpsend PLUG epgsearch FIND "0:The Rookie:::::::::"
220 HostName SVDRP VideoDiskRecorder 2.7.7; ...
900 NEWT 1:39:2025-08-07:1753:1845:50:99:The Rookie:
221 HostName closing connection
Ein Suchergebnis kann somit unmittelbar zur Programmierung eines Timers für die entsprechende Sendung verwendet werden.
Hinweis: Wenn keine VPS-Kennung vorliegt, beinhalten Datum sowie Start- und Stoppzeit die in den Parametern angegebenen Zeiten für Vor- und Nachlauf.
Für jede gefundene Sendung wird eine Zeile in folgendem Format zurückgegeben:
Suche : // Eindeutige Kennung der Suche
Sendung : // Eindeutige Kennung der Sendung im VDR
Titel : // Titel der Sendung, wobei C<:> durch C<|> ersetzt ist
Untertitel : // Untertitel der Sendung, wobei C<:> durch C<|> ersetzt ist
Beginn : // Beginn der Sendung in Epoch-Notation (Sekunden seit dem 01.01.1970, 00:00 UTC)
Ende : // Ende der Sendung in Epoch-Notation (Sekunden seit dem 01.01.1970, 00:00 UTC)
Kanal : // Kanalkennung im VDR-Format (bspw. S19.2E-1-1101-28106)
Start : // Startzeitpunkt des Timers in Epoch-Notation; nur gültig wenn 'Timer' > 0
Stop : // Stoppzeit des Timers in Epoch-Notation; nur gültig wenn 'Timer' > 0
Datei : // Datei-Eintrag des Timers; nur gültig wenn 'Timer' > 0
Timer : // 0 = ohne Timer, 1 = aktiver Timer, ... (Timer-Flags des VDR)
Beispiel:
svdrpsend PLUG epgsearch QRYS 0
220 HostName SVDRP VideoDiskRecorder 2.7.7; ...
900 0:3124:The Rookie:Jagdfieber:1756901400:1756903800:S19.2E-1-1011-11130:1756901280:1756904400:The Rookie~Jagdfieber:1
221 HostName closing connection
Achtung: Das Menü wird nur angezeigt, wenn zu diesem Zeitpunkt kein anderes Menü geöffnet ist. Andernfalls wird das aktuell angezeigte Menü geschlossen. Daher ist dieser Befehl nicht vollständig deterministisch.
Die eindeutige Kennung im ersten Feld wird ignoriert. EPGSearch weist einer neuen Ausschlussliste immer die nächste freie Kennung zu und gibt diese in der Antwort bekannt:
svdrpsend PLUG epgsearch NEWB "0:Musterliste:::::::::::::::::"
220 HostName SVDRP VideoDiskRecorder 2.7.7; ...
900 blacklist 'Musterliste' (with new ID 3) added
221 HostName closing connection
Hinweis: Ein leeres Feld ('::') wird ignoriert. Die Werte der Felder 'Suchbegriff' und 'Inhaltskennungen' werden jedoch gelöscht, wenn keine Werte angegeben wurden.
Die eindeutige Kennung im ersten Feld wird ignoriert. EPGSearch weist einer neuen Suchvorlage immer die nächste freie Kennung zu und gibt diese in der Antwort bekannt:
svdrpsend PLUG epgsearch NEWT "0:Mustervorlage:::::::::"
220 HostName SVDRP VideoDiskRecorder 2.7.7; ...
900 search template 'Mustervorlage' (with new ID 4) added
221 HostName closing connection
Hinweis: Ein leeres Feld ('::') wird ignoriert. Die Werte der Felder 'Suchbegriff' und 'Inhaltskennungen' werden jedoch gelöscht, wenn keine Werte angegeben wurden.
1190232780:152|30|50#152#45:45|10|50#152#45
1190232780 ist der Zeitpunkt des Konflikts in Epoch-Notation (Sekunden seit dem 01.01.1970, 00:00 UTC). Diesem folgt die Liste der Timer, die miteinander in Konflikt stehen.
'152|30|50#152#45' ist die Beschreibung des ersten konfliktbehafteten Timers:
'45|10|50#152#45' beschreibt einen weiteren Konflikt für diesen Zeitpunkt.
Auf die folgenden Setup-Optionen kann zugegriffen werden:
Die Datei epgsearchmenu.conf im Konfigurationsverzeichnis von EPGSearch speichert die Einstellungen zur Anpassung von EPG-Menüs. Jede Zeile legt das Erscheinungsbild eines bestimmten Menüs fest. Die einzelnen Einträge bestimmen, wie die folgenden Menüs gestaltet sein sollen:
Ein Beispiel:
MenuWhatsOnNow=%chnr%:3|%progrt2s%:5| %time% %t_status%:8|%category%:6| %title% ~ %subtitle%:35
MenuWhatsOnNext=%chnr%:3|%time% %t_status%:8|%category%:8| %title% ~ %subtitle%:35
MenuWhatsOnElse=%chnr%:3|%time% %t_status%:8|%category%:8| %title% ~ %subtitle%:35
MenuSchedule=%time% %t_status%:8|%genre%:14| %title% ~ %subtitle%:35
MenuFavorites=%chnr%:3|%datesh% %time% %t_status%:14|%genre%:8| %title%%colon%%subtitle%:35
MenuSearchResults=%chnr%:3|%datesh% %time% %t_status%:14|%genre%:8| %title%%colon% %subtitle%:35
Der Eintrag 'MenuWhatsOnNow' legt fest, wie eine Zeile für das Menü 'Jetzt' beschaffen sein soll. Die Menüzeile beginnt mit der Kanalnummer, gefolgt von einem Fortschrittsbalken im Stil von text2skin, einem Leerzeichen, dem Sendungsbeginn, dem Timer-Status, der EPG-Kategorie (bspw. "Film") und schließlich dem Titel und Untertitel der Sendung.
Nehmen wir außerdem an, dass noch folgender Eintrag hinzugefügt wird:
MenuSearchResultsTagestipp=%chnr%:3|%time_w%:4|%t_status%:3|%genre%:10|%title%%colon% %subtitle%:35
Dies bewirkt, dass im Menü 'Suche editieren' ein zusätzlicher Menüpunkt 'Layout des Ergebnis-Menüs' erscheint, der für die Anzeige der Suchergebnisse die Auswahl zwischen der Standardvorlage und eigenen Vorlagen ermöglicht. Im obigen Beispiel würde 'Tagestipp' als zusätzliche Option aufgeführt, da EPGSearch für den Vorlagennamen lediglich das Präfix 'MenuSearchResults' entfernt. Zur Anzeige der Suchergebnisse wird das gewählte Layout anstelle des Standardlayouts verwendet.
Folgende Variablen stehen zur Verfügung (Groß- und Kleinschreibung wird ignoriert):
Gemäß ISO-Standard 8601 ist Montag der erste Tag einer Woche. Kalenderwoche 1 ist die erste Woche eines Jahres, die mindestens vier Tage des Jahres umfasst, also einen Donnerstag bzw. den 4. Januar enthält.
Achtung: Die in HTML reservierten Zeichen '<&">' werden nicht durch ihre Substitute '<', '&', '"' und '>' ersetzt.
Für die Menüs benutzerdefinierter Zeiten sowie das Menu 'Suchergebnisse' stehen ergänzend noch folgende Variablen zur Verfügung:
Hinweis: Zur Anzeige der Grafik muss die Schriftart VDRSymbols installiert sein.
Abschließend noch einige allgemeine Variablen:
Des Weiteren können auch Variablen für erweiterte EPG-Kategorien, die in epgsearchcats.conf definiert sind, oder benutzerdefinierte Variablen aus epgsearchuservars.conf verwendet werden. Bei Variablennamen wird nicht zwischen Groß- und Kleinschreibung unterschieden.
Ein Eintrag besteht aus bis zu sechs Tabellenspalten, die durch '|' getrennt sind. Der letzte Eintrag einer jeden Tabellenzeile sollte, durch ':' abgetrennt, die Tabellenbreite in Zeichen angeben.
Wenn Elemente durch Zeichen wie '~', '−' oder '#' getrennt werden (bspw. '%Title% ~ %Subtitle%') und am Ende stehende Elemente leer sind, entfernt EPGSearch nach Möglichkeit verwaiste Leerräume und Trennzeichen.
Die Werte für die Spaltenbreiten sollten den eigenen Bedürfnissen anpasst werden, da das Erscheinungsbild oft von der gewählten Oberfläche abhängt.
Die Datei epgsearchmenu.conf wird nicht bei jedem Aufruf des Plugins neu geladen, da dies nur zum Testen der Konfigurationsdatei selbst sinnvoll ist. Um ein permanentes Neuladen der Datei zum Testen einer Konfigurationsänderung zu aktivieren, ist im Startskript des VDR (bspw. runvdr) der Startparameter '−r' oder '−−reloadmenuconf' zu ergänzen.
Ein Beispiel für epgsearchmenu.conf befindet sich im Unterverzeichnis conf von EPGSearch. Zum schnellen Ausprobieren kann die Datei in das Konfigurationsverzeichnis von EPGSearch (bspw. /etc/vdr/plugins/epgsearch) kopiert werden.
Um Symbole der Schriftart VDRSymbols zu aktivieren, muss die folgende Zeile in die Datei eingefügt werden:
WarEagleIcons=1
Die Schriftart VDRSymbols kann von <http://andreas.vdr-developer.org/fonts/download.html> heruntergeladen werden.
Hinweis: Wenn eine Datei epgsearchmenu.conf mit einem Eintrag für ein bestimmtes Menü vorhanden ist, werden die Standardeinstellungen zur Darstellung dieses Menüs ignoriert.
Siehe auch epgsearchmenu.conf(5).
Wird im Rahmen der regelmäßigen Hintergrundprüfung ein Konflikt erkannt, wird dies per OSD gemeldet. Nach Drücken von 'OK' öffnet sich ein Menü, das alle relevanten Konflikte anzeigt. Dieses Menü kann in EPGSearch auch über 'Sucheinträge' » 'Aktionen' » 'Auf Timer-Konflikte prüfen' geöffnet werden.
Neben den relevanten Konflikten (die Relevanz wird über die Setup-Optionen von EPGSearch gesteuert) können auch unwichtige Konflikte erkannt worden sein. Durch Drücken von 'Alle anzeigen' wird die vollständige Liste angezeigt. Der Titel des Timer-Konfliktmenüs vermerkt immer die Anzahl der relevanten Konflikte sowie die Gesamtzahl.
Die Übersicht zeigt zunächst den Zeitpunkt des Auftretens eines Konflikts, gefolgt von allen betroffenen Timern. Jeder Timer-Eintrag enthält die Kanalnummer und den Kanalnamen, die Priorität des Timers sowie den Prozentsatz, der von der Sendung aufgezeichnet würde. Abschließend wird der Datei-Eintrag des Timers angezeigt.
Wenn ein Timer-Eintrag ausgewählt und 'OK' gedrückt oder 'Details' aufgerufen wird, öffnet sich ein weiteres Menü, das alle in den Konflikt involvierten Timer anzeigt. In diesem Menü kann der Konflikt mit folgenden Maßnahmen aufgelöst werden:
Ein Eintrag in diesem Menü besteht aus dem Zeichen '>' zur Kennzeichnung eines aktiven Timers, der Kanalnummer, den Start- und Stoppzeiten, der Priorität, der Nummer des für die Aufnahme verwendeten Empfängers (oder 'C' bei einem Konflikt) sowie dem Datei-Eintrag des Timers. Durch Drücken von 'OK' auf einem ausgewählten Timer wird die Beschreibung zu dessen Sendung angezeigt, falls vorhanden.
Beim Verlassen dieses Menüs wird die Übersicht der Timer-Konflikte aktualisiert, um zu prüfen, ob ein Konflikt tatsächlich behoben wurde. Einige Änderungen an einem Timer in der Detailübersicht (bspw. Änderung von Start/Stoppzeit oder Löschen eines Timers) führen ebenfalls zur Aktualisierung der Detailübersicht.
Hinweis: Eine versteckte Setup-Option 'ConflCheckCmd' ermöglicht die Ausführung eines Befehls für eine Timer, der einen Konflikt verursacht. Dieser Befehl muss direkt in die Datei setup.conf des VDR eingetragen werden, und zwar wie folgt:
epgsearch.ConflCheckCmd = system(Skript_zur_Konfliktbehandlung.sh, weitere_Argumente wie %Timer.File%)
Wenn eine automatische Konfliktprüfung durchgeführt wird, wird der Befehl auf jeden Timer angewandt, der einen Konflikt verursacht. Der Befehl wird nicht angewandt, wenn die Konfliktprüfung über das OSD aufgerufen wird.
Dieser Mechanismus kann beispielsweise dazu verwendet werden, einen Timer im Konfliktfall an eine andere VDR-Instanz weiterzuleiten.
Eigene Variable können überall dort genutzt werden, wo Variablen zulässig sind. Dies gilt beispielsweise für das Standard-Aufnahmeverzeichnis eines manuell erstellten Timers, das Aufnahmeverzeichnis eines Suchtimers oder ein benutzerdefiniertes EPG-Menü.
Eine Variable hat die Syntax '%Variablenname%'. Ihr Name darf ausschließlich alphanumerische Zeichen enthalten, jedoch keine Leerzeichen oder andere Sonderzeichen – auch keine Umlaute.
Beispiele für zulässige Namen:
%Serie%
%DokuVar1%
%ThemaUntertitelDatum%
Bei Variablennamen wird nicht zwischen Groß- und Kleinschreibung unterscheiden.
Variablen werden immer Zeichenfolgen zugewiesen, deren Leerzeichen erhalten bleiben. Die folgenden Beispiele veranschaulichen dies:
%Serien%=Neue Serien~Krimis
Der Variable '%Serien%' wird die Zeichenfolge "Neue Serien~Krimis" zugewiesen. Sie lässt sich beliebig weiterverwenden:
%Pfad%=%Serien%
Der Variable '%Pfad%' wird der Inhalt der Variable '%Serien%' zugewiesen.
%Pfad%=%Serien%~Tatort
Die Variable '%Pfad%' enthält die Zeichenfolge "Neue Serien~Krimis~Tatort".
Für Zuweisungen werden einfache Wenn-dann-sonst-Konstrukte mittels bedingter Ausdrücke ('wenn ? dann : sonst') unterstützt. Bedingte Ausdrücke dürfen keine Zeichenfolgen enthalten, sondern nur Variablen; Leerzeichen werden ignoriert.
%Foo%=Verschiedenes
%Variable%=%Pfad% ? %Pfad% : %Foo%
Beim ternären Operator '?:' steht der Ausdruck '%Pfad% ?' für die Bedingung "Pfad nicht leer?". Wenn dies zutrifft, wird '%Variable%' der Inhalt von '%Pfad%' zugewiesen, andernfalls der Inhalt von '%Foo%'.
Auch andere Prüfungen sind möglich:
So zum Beispiel:
%Variable%=%Pfad%!=5 ? %Pfad% : %Foo%
Die Bedingung '%Path%!=5 ?' bedeutet "ist '%Pfad%' ungleich 5?".
Der Vergleich von Variablen ist ebenfalls möglich:
%Fuenf%=5
%Variable%=%Pfad%!=%Fuenf% ? %Pfad% : %Foo%
Man beachte, dass der Variablenname '%Fünf%' aufgrund des Umlauts ungültig wäre.
Während der Variablenauswertung können auch externe Befehle aufgerufen werden. Die zurückgegebene Zeichenfolge wird der jeweiligen Variablen zugewiesen:
%Ergebnis%=system(<Skriptname>[, <Parameter>])
Ruft das Skript Skriptname mit den in der optionalen Liste 'Parameter' angegebenen Parametern auf. Ein solcher Parameter kann ein beliebiger Ausdruck sein, der gegebenenfalls andere Variablen enthält, jedoch kein Systemaufruf oder bedingter Ausdruck.
Beispiel:
%Ergebnis%=system(/usr/local/bin/mein-skript.sh, -t %Title% -s %Subtitle% -u %EineAndereVariable%)
Als Parameter verwendete Variablen werden bei Bedarf in einfache Anführungszeichen (Apostrophe) gesetzt.
Das Skript sollte einen String ohne Zeilenvorschübe zurückgeben, da deren Entfernung zu unerwünschten Ergebnissen führen kann. Wenn das Skript nichts zurückgibt, wird der Variable '%Ergebnis%' ein leerer String zugewiesen.
in TCP-Dienst kann mit der folgenden Syntax aufgerufen werden:
%Ergebnis%=connect(<Adresse>, <Port>, [<Daten>])
Dadurch wird eine Verbindung zu 'Adresse' über den angegebenen 'Port' hergestellt und die optionalen 'Daten' übergeben. Der Parameter 'Adresse' kann eine IP-Adresse oder der Domänenname eines TCP-Dienstes sein. Das vom Dienst zurückgegebene Ergebnis muss mit einem Zeilenvorschub abgeschlossen sein.
Bei der Übergabe von Werten an Verbindungs- oder Systembefehle kann es hilfreich sein, zum einfacheren Parsen die Länge eines Arguments zu kennen. Diese lässt sich wie folgt ermitteln:
%Ergebnis%=length(<beliebige Argumente>)
Beispiel:
%Titellaenge%=length(%Title%)
Eine Liste der internen Variablen findet sich in epgsearchmenu.conf(5). Darüber hinaus kann jede in epgsearchcats.conf definierte Variable verwendet werden; siehe hierzu auch epgsearchcats.conf(5).
# Wochentag, Datum, Uhrzeit %Datum%=%time_w% %date% %time% # Thema oder Untertitel oder Datum %UntertitelDatum%=%Subtitle% ? %Subtitle% : %Datum% %ThemaUntertitelDatum%=%Themes% ? %Themes% : %UntertitelDatum% # Aufruf des Skripts, das den Aufnahmepfad erzeugt %DokuScript%=system(doku.pl,%Title%,%Subtitle%,%Episode%,%Themes%,%Category%,%Genre%) %Doku%=%DokuScript%
EPGSearch kann E-Mail-Benachrichtigungen versenden, wenn Timer vom Suchtimer-Thread hinzugefügt, geändert oder entfernt werden oder wenn Timer-Konflikte erkannt wurden.
Zunächst müssen das Skript sendEmail.pl an den Speicherort der ausführbaren Dateien (bspw. /usr/local/bin) kopiert und die E-Mail-Konten im Setup konfiguriert werden. Durch Aufruf von 'Test' kann geprüft werden, ob das Senden und Empfangen von E-Mails funktioniert. Am Ende der Ausgabe sollte eine Meldung wie 'Email successfully sent' erscheinen.
Der Inhalt der E-Mails wird durch die folgenden Dateien definiert:
Beispieldateien befinden sich im Verzeichnis conf. Diese können in das Konfigurationsverzeichnis von EPGSearch (bspw. /etc/vdr/plugins/epgsearch) kopiert und nach Bedarf angepasst werden.
Der Inhalt der E-Mails kann vielfältig angepasst werden. E-Mails können reinen Text oder HTML enthalten (siehe beispielsweise conf/epgsearchupdmail-html.templ).
13.2.1 E-Mails zu Aktualisierungen
Für eine E-Mail zur Meldung von Aktualisierungen müssen folgende Abschnitte definiert werden:
Die Variable '%Update.NewTimers%' fügt eine Liste neu erstellter Timer ein. Desgleichen fügen die Variablen '%Update.ModTimers%', '%Update.DelTimers%' und '%Update.NewEvents%' entsprechende Listen geänderter beziehungsweise gelöschter Timer und Ankündigungen neuer Sendungen ein. Ihre Darstellung wird durch die Abschnitte 'Timer' und 'Event' festgelegt.
Alle Abschnitte sind optional. Werden beispielsweise keine Benachrichtigungen zu Sendungen genutzt, können innerhalb von 'MailBody' sowohl die Abschnitte '%Update.NewEvents%' als auch die zugehörige Vorlage 'Event' entfallen. Der Abschnitt 'MailBody' muss jedoch immer vorhanden sein.
Jeder Abschnitt ist von einem Pseudo-XML-Tag umschlossen. Bei den Tags wird nicht zwischen Groß- und Kleinschreibung unterschieden.
13.2.1.1 Abschnitt 'MailBody'
Die folgenden Variablen stehen im Abschnitt 'MailBody' zur Verfügung:
Hinweis: Einem gelöschten Timer ist möglicherweise keine Sendung zugeordnet. In diesem Fall werden alle auf Sendungen bezogene Variablen im Abschnitt 'Timer' durch eine leere Zeichenfolge ersetzt.
13.2.1.2 Abschnitt 'Timer'
Die folgenden Variablen stehen im Abschnitt 'Timer' zur Verfügung:
13.2.1.3 Abschnitt 'Event'
Die folgenden Variablen stehen im Abschnitt 'Event' zur Verfügung:
13.2.2 E-Mails zu Timer-Konflikten
Für eine E-Mail zur Meldung von Timer-Konflikten müssen folgende Abschnitte definiert werden:
Die Variable '%Conflict.Conflicts%' fügt eine Liste konfliktbehafteter Zeitpunkte ein. Ihre Darstellung wird durch den Abschnitt 'ConflictsAt' festgelegt.
Hinweis: Zu einem Zeitpunkt können auch mehrere Timer-Konflikte auftreten.
13.2.2.1 Abschnitt 'MailBody'
Die folgenden Variablen stehen im Abschnitt 'MailBody' zur Verfügung:
13.2.2.2 Abschnitt 'ConflictsAt'
Die folgenden Variablen stehen im Abschnitt 'ConflictsAt' zur Verfügung:
13.2.2.3 Abschnitt 'ConflictTimer'
Im Abschnitt 'ConflictTimer' können die gleichen Variablen verwendet werden wie im Abschnitt 'Timer' einer E-Mail für Aktualisierungen (siehe oben).
EPGSearch unterstützt ein unter Linux wohlbekanntes Konfigurationsverfahren. Diese betrifft die Einstellungen folgender Konfigurationsdateien:
Deren Einstellungen können auch in einer einzigen Datei beliebigen Namens im Unterverzeichnis conf.d im Konfigurationsverzeichnis des Plugins bereitgestellt werden (bspw. /etc/vdr/plugins/epgsearch/conf.d). Dies ermöglicht das schnelle Testen verschiedener Setups durch bloßes Austauschen von Dateien, anstatt sie zu bearbeiten. Das Format der Dateien in conf.d ist wie folgt:
[<Name eines Abschnitts>]
<Einstellungen>
...
[<Name eines Abschnitts>]
<Einstellungen>
...
Dabei entspricht 'Name eines Abschnitts' einem der folgenden Schlüsselwörter:
Das Format von 'Einstellungen' entspricht dem der entsprechenden Konfigurationsdatei. Kommentarzeilen, die mit dem Zeichen '#' beginnen, sind ebenso zulässig wie Leerzeilen.
Beim Start liest EPGSearch zunächst die regulären Konfigurationsdateien ein und überprüft dann das Unterverzeichnis conf.d. Bereits in anderen Dateien definierte Variablen können bei diesem Schritt überschrieben werden. Dies wird jedoch durch eine Warnung in der EPGSearch-Logdatei angezeigt.
Ursprünglich erstellt von Mike Constabel <epgsearch (at) constabel (dot) net>.
Überarbeitet und an die aktuellen Features von EPGSearch adaptiert durch die derzeitigen Maintainer.
Das Plugin wird als Projekt auf GitHub geführt:
<https://github.com/vdr-projects/vdr-plugin-epgsearch/>
Fehlerberichte sowie Feature-Anfragen können über den Bugtracker des Projekts eingespeist werden:
<https://github.com/vdr-projects/vdr-plugin-epgsearch/issues/>
Copyright © 2004-2010 Christian Wieninger
Copyright © 2011-2025 TomJoad (VDR-Portal) et al.
Dieses Programm ist freie Software. Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 2 der Lizenz oder (nach Ihrer Option) jeder späteren Version.
Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License.
Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem Programm erhalten haben. Falls nicht, schreiben Sie an die Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. Oder rufen Sie in Ihrem Browser <https://www.gnu.org/licenses/old-licenses/gpl-2.0.html> auf.
Der ursprüngliche Autor kann über cwieninger@gmx.de erreicht werden.
Die aktuellen Maintainer können über die Projektseite auf GitHub (siehe oben) erreicht werden.
Der MD5-Code ist abgeleitet aus dem Message-Digest-Algorithmus MD5 von RSA Data Security, Inc.
epgsearch(1), epgsearchblacklists.conf(5), epgsearchcats.conf(5), epgsearchchangrps.conf(5), epgsearchcmds.conf(5), epgsearchdirs.conf(5), epgsearchdone.data(5), epgsearchmenu.conf(5), epgsearchswitchtimer.conf(5), epgsearchuservars.conf(5)