epgsearch(4)

NAME
EPGSearch – Suchtimer und Ablösung des VDR-Programm-Menüs

ÜBERSICHT
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.

INHALT

1. Verwendung von Variablen im Verzeichniseintrag eines Suchtimers
2. Das Format der Datei epgsearch.conf
3. Ablauf des Suchvorgangs
4. Wie funktionieren Suchtimer?
5. Wie stößt man ein Timer-Update an?
6. Quellen für das Menü 'Verzeichnis wählen'
7. Sprachabhängige Kommandos für die Programmübersicht
8. Nutzung von anderen Plugins oder Skripten
9. Die SVDRP-Schnittstelle
10. Anpassung von EPG-Menüs
11. Nutzung des Timer-Konfliktmenüs
12. Benutzerdefinierte Variablen
13. Benachrichtigung per E-Mail
14. Das Verzeichnis conf.d

1. Verwendung von Variablen im Verzeichniseintrag eines Suchtimers
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:

%Title%
    Der Titel der Sendung.

%Subtitle%
    Der Untertitel der Sendung.

%ChLng%
    Der Name des Kanals, auf dem die Sendung läuft.

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:

%Search.Query%
    Der Suchbegriff des Suchtimers.

%Search.Series%
    Liefert 1, wenn 'Serienaufnahme' auf 'ja' steht, sonst 0.

Siehe auch epgsearchuservars.conf(5).

2. Das Format der Datei epgsearch.conf
Jede Zeile der Datei repräsentiert eine Suche oder einen Suchtimer und umfasst die folgenden Felder:

1 – Eindeutige Kennung (ID)
    Integer mit einem positiven Wert.

2 – Suchbegriff ("Abfrage")
    String zur Festlegung des Suchbegriffs.

3 – Uhrzeit verwenden
    Flag mit den Werten 0 = nein, 1 = ja.

4 – Start nach [HHMM]
    Integer mit HH = 0..23, MM = 0..59; andere Werte können zu undefiniertem Verhalten führen.

5 – Start vor [HHMM]
    Integer mit HH = 0..23, MM = 0..59; andere Werte können zu undefiniertem Verhalten führen.

6 – Kanal verwenden
    Enumeration mit den Werten 0 = nein, 1 = Bereich, 2 = Kanalgruppe, 3 = ohne PayTV.

7 – Kanalauswahl
    wenn 'Kanal verwenden' = 1:
        String mit 'KanalID' oder 'MinKanalID'|'MaxKanalID'; die Kanalkennungen müssen der VDR-Notation entsprechen (bspw. 'S19.2E-1-1019-10301').

        Achtung: Nach einer Änderung der Kanalreihenfolge sollten die Bereichseinstellungen von Suchtimern unbedingt kontrolliert werden!

    wenn 'Kanal verwenden' = 2:
        String mit dem Namen einer zuvor erstellten Kanalgruppe.

8 – Groß/Kleinschreibung beachten
    Flag mit den Werten 0 = nein, 1 = ja.

9 – Suchmodus
    Enumeration mit den folgenden Werten:

    0 = Ausdruck
    1 = alle Worte
    2 = ein Wort
    3 = exakt
    4 = regulärer Ausdruck
    5 = unscharf (Toleranz im Feld 42; nicht verfügbar für erweiterte EPG-Kategorien)

    Siehe auch "3. Ablauf des Suchvorgangs" bezüglich der Frage, wie sich diese Einstellungen auf die Suche auswirken.

10 – Titel verwenden
    Flag mit den Werten 0 = nein, 1 = ja.

11 – Untertitel verwenden
    Flag mit den Werten 0 = nein, 1 = ja.

12 – Beschreibung verwenden
    Flag mit den Werten 0 = nein, 1 = ja.

13 – Dauer verwenden
    Flag mit den Werten 0 = nein, 1 = ja.

14 – Minimale Dauer [HHMM]
    Integer mit HH = 0..23, MM = 0..59; andere Werte können zu undefiniertem Verhalten führen.

15 – Maximale Dauer [HHMM]
    Integer mit HH = 0..23, MM = 0..59; andere Werte können zu undefiniertem Verhalten führen.

16 – Als Suchtimer verwenden
    Enumeration den folgenden Werten:

    0 = nein
    1 = ja
    2 = Zeitspanne (Felder 48 und 49)

17 – Wochentag verwenden
    Flag mit den Werten 0 = nein, 1 = ja.

18 – Wochentag
    Integer im Wertebereich von −127 bis 6. Die Bedeutung ist zweigeteilt:

    wenn Wt ≥ 0: ein einzelner Wochentag
        Enumeration mit den Werten 0 = Sonntag, 1 = Montag, ..., 6 = Samstag.

    wenn Wt < 0: eine Auswahl von Wochentagen
        Integer, in dem die Bits von −Wt die Wochentage darstellen. Die Bitmasken ergeben sich aus der Verschiebung von 0x01 um den Enumerationswert eines Wochentages:

        0x01 = Sonntag
        0x02 = Montag
        0x04 = Dienstag
        0x08 = Mittwoch
        0x10 = Donnerstag
        0x20 = Freitag
        0x40 = Samstag

        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

19 – Serienaufnahme
    Flag mit den Werten 0 = nein, 1 = ja.

20 – Aufnahmeverzeichnis
    String mit dem Namen eines Verzeichnisses unterhalb des Video-Verzeichnisses des VDR, jedoch ohne den Pfad zu diesem Video-Verzeichnis.

21 – Priorität der Aufzeichnung
    Integer im Wertebereich von 0 bis 99.

22 – Lebensdauer der Aufzeichnung [Tage]
    Integer im Wertebereich von 0 bis 99.

23 – Vorlauf zum Timer-Beginn [Minuten]
    Integer mit einem positiven Wert.

24 – Nachlauf am Timer-Ende [Minuten]
    Integer mit einem positiven Wert.

25 – VPS verwenden
    Flag mit den Werten 0 = nein, 1 = ja.

26 – Aktion
    Enumeration mit den folgenden Werten:

    0 = aufnehmen
    1 = per OSD ankündigen (kein Timer)
    2 = nur umschalten (kein Timer)
    3 = per OSD ankündigen und umschalten (kein Timer)
    4 = per E-Mail ankündigen
    5 = deaktiviert

27 – Erweiterte EPG-Informationen verwenden
    Flag mit den Werten 0 = nein, 1 = ja.

28 – Erweiterte EPG-Kategoriedaten
    Liste der erweiterten EPG-Kategoriedaten, jeweils dargestellt durch ein Tupel aus:

    28.1 – Kennung
        Eindeutige Kennung der erweiterten EPG-Kategorie, wie in epgsearchcats.conf angegeben.

    28.2 – Kategoriedaten
        Kommaseparierte Liste von Werten, wie für die EPG-Kategorie in epgsearchcats.conf angegeben. Leerzeichen vor und nach Kategoriewerten werden ignoriert. Ist in einem Wert ein ':' enthalten, wie etwa in '16:9', muss es als '!^colon^!' kodiert werden.

    Das Zeichen '|' trennt benachbarte Kategorientupel, während '#' die Kennungen und Kategorienamen trennt.

    Beispiel: '1#Film, Serie|2#Horror|8#16!^colon^!9'

29 – Wiederholungen vermeiden
    Flag mit den Werten 0 = nein, 1 = ja.

30 – Erlaubte Wiederholungen
    Integer im Wertebereich von 0 bis 99.

31 – Titel vergleichen (für den Test auf Wiederholungen)
    Flag mit den Werten 0 = nein, 1 = ja.

32 – Untertitel vergleichen (für den Test auf Wiederholungen)
    Enumeration mit den Werten 0 = nein, 1 = ja, 2 = falls vorhanden.

33 – Beschreibung vergleichen (für den Test auf Wiederholungen)
    Flag mit den Werten 0 = nein, 1 = ja.

34 – Kategorien vergleichen (für den Test auf Wiederholungen)
    Integer, in dem jedes Bit eine erweiterte EPG-Kategorie repräsentiert. Die erste in epgsearchcats.conf angegebene EPG-Kategorie wird durch Bit 0 (0x01) dargestellt, die zweite durch Bit 1 (0x02) usw. Ein Wert ungleich Null aktiviert den Vergleich.

    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.

35 – Nur innerhalb von ... Tagen
    Integer im Wertebereich von 0 bis 999.

36 – Aufzeichnungen nach ... Tagen löschen
    Integer im Wertebereich von 0 bis 999.

37 – Bis zu ... Aufzeichnungen behalten
    Integer im Wertebereich von 0 bis 999.

38 – Umschalten ... Minuten vor Start
    Integer im Wertebereich von 0 bis 99; nur relevant für 'Aktion' = 2.

39 – Pause, wenn ... Aufzeichnungen existieren
    Integer im Wertebereich von 0 bis 999.

40 – Ausschlusslisten verwenden
    Enumeration mit den Werten 0 = nur globale, 1 = Auswahl, 2 = alle, 3 = keine.

41 – Genutzte Ausschlusslisten
    Liste mit Kennungen von Ausschlusslisten, jeweils per '|' getrennt; nur relevant für 'Ausschlusslisten verwenden' = 1.

42 – Unschärfetoleranz
    Integer im Wertebereich von 1 bis 9, der als Schwellwert für die unscharfe Suche dient; nur relevant für 'Suchmodus' = 5.

43 – Im Favoriten-Menü verwenden
    Flag mit den Werten 0 = nein, 1 = ja.

44 – Layout der Suchergebnisse im Favoriten-Menü
    Integer, der auf eine in epgsearchmenu.conf spezifizierte Vorlage für Suchergebnisse verweist. Der Wert ist der Index (beginnend bei 0) innerhalb aller Einträge mit dem Präfix 'MenuSearchResults'; Details finden sich unter "Anpassen der EPG-Menüs" in epgsearch(4).

    Hinweis: Dieses Feld ist nur relevant, wenn mehrere Vorlagen für Suchergebnisse vorliegen.

45 – Suchtimer automatisch löschen
    Enumeration mit den folgenden Werten:

    0 = nicht löschen
    1 = nach einer Anzahl von Aufnahmen löschen (Feld 46)
    2 = nach einer Anzahl von Tagen nach der ersten Aufnahme löschen (Feld 47)

46 – Nach ... Aufnahmen löschen
    Integer im Wertebereich von 0 bis 999; nur relevant für 'Suchtimer automatisch löschen' = 1.

47 – Nach ... Tagen nach erster Aufnahme löschen
    Integer im Wertebereich von 0 bis 999; nur relevant für 'Suchtimer automatisch löschen' = 2.

48 – Erster Tag (als Suchtimer verwenden ab)
    Datum und Zeit in Epoch-Notation (Sekunden seit dem 01.01.1970, 00:00 UTC), ab wann der Suchtimer aktiv ist; ein Wert von 0 deaktiviert die Prüfung.

    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.

49 – Letzter Tag (als Suchtimer verwenden bis)
    Datum und Zeit in Epoch-Notation (Sekunden seit dem 01.01.1970, 00:00 UTC), bis wann der Suchtimer aktiv ist; ein Wert von 0 deaktiviert die Prüfung.

    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.

50 – Übereinstimmung von erweiterten EPG-Kategorien
    Enumeration mit den folgenden Werten:

    0 = alle Kategorien
    1 = alle außer fehlende Kategorien
    2 = mindestens eine Kategorie

    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.

51 – Ton anschalten
    Flag mit den Werten 0 = nein, 1 = ja; nur relevant für 'Aktion' = 2 oder 3.

52 – Minimale Übereinstimmung in Prozent
    Integer im Wertebereich von 1 bis 100, der festlegt, wie groß die erforderliche Übereinstimmung beim Vergleich der Beschreibungen von Sendungen mindestens sein muss, um Wiederholungen zu vermeiden; nur relevant für 'Beschreibung vergleichen' = 1.

53 – Inhaltskennungen
    String mit zu prüfenden Inhaltskennungen. Eine Inhaltskennung ist ein Wert von 0 bis 255 (siehe DIN EN 300 468, Tabelle 18), der als zweistellige Hexadezimalzahl kodiert ist. Das obere Nibble (Bits [7..4]) repräsentiert eine Gruppe von Inhalten, das untere Nibble (Bits [3..0]) eine Kennung für einen bestimmten Inhalt innerhalb dieser Gruppe. Die erste Kennung einer Gruppe mit dem Wert 0 ist üblicherweise eine allgemeine Charakterisierung dieser Gruppe (bspw. 0x10 = Film, Drama), wohingegen die Werte 1..15 eine untergeordnete, feinere Charakterisierung darstellen (wie 0x11 = Detektiv, Thriller; 0x14 = Komödie). Die Inhaltsgruppe 11 (besondere Merkmale) entspricht jedoch nicht diesem Schema (wie etwa ersichtlich anhand von 0xB0 = Originalsprache; 0xB1 = schwarzweiß), weshalb für deren Inhaltskennungen eine eigene Art der Übereinstimmung gewählt werden kann.

    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.

54 – Zeitpunkt vergleichen (für den Test auf Wiederholungen)
    Enumeration mit den Werten 0 = nein, 1 = gleicher Tag, 2 = gleiche Woche, 3 = gleicher Monat.

55 – Übereinstimmung von Inhaltskategorien
    Enumeration mit den folgenden Werten:

    0 = alle gewählten Kennungen
    1 = eine der gewählten Kennungen
    2 = eine gewählte Kennung je Gruppe

    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.

56 – Übereinstimmung besonderer Inhaltsmerkmale
    Enumeration mit den Werten 0 = alle gewählten Kennungen, 1 = eine der gewählten Kennungen; nur relevant, wenn 'Inhaltskennungen' nicht leer ist.

57 – Altersfreigabe verwenden
    Flag mit den Werten 0 = nein, 1 = ja.

58 – Minimale Altersfreigabe
    Integer im Wertebereich von 0 bis 18.

59 – Maximale Altersfreigabe
    Integer im Wertebereich von 0 bis 18.

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).

3. Ablauf des Suchvorgangs
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:

Ausdruck
    Stimmt überein, wenn der Suchbegriff an einer beliebigen Stelle im Suchttext gefunden wird.

Alle Worte
Ein Wort
    Zunächst wird der Suchbegriff in einzelne Worte zerlegt, die durch eines der Zeichen ',;|~' oder Leerzeichen getrennt sind. Die Suche ist erfolgreich, wenn mindestens ein Wort oder alle Worte im Suchtext vorkommen.

Exakt
    Stimmt überein, wenn Suchbegriff und Suchtext identisch sind.

Regulärer Ausdruck
    Die Suche erfolgt anhand eines regulären Ausdrucks. Hierfür werden zwei Standards unterstützt: erweiterte POSIX- und Perl-kompatible reguläre Ausdrücke (PCRE) (siehe INSTALL).

    Hinweis: Anders als etwa in Perl, sind führende und abschließende '/' als Begrenzungszeichen für den Suchbegriff nicht erforderlich.

Unscharf
    Vergleicht den Suchbegriff anhand des Levenshtein-Distanz-Algorithmus. Der Wert des Feldes 'Unschärfetoleranz' bestimmt, wie groß die Abweichung sein darf.

    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.

4. Wie funktionieren Suchtimer?
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.

5. Wie stößt man ein Timer-Update an?
Die Aktualisierung der Suchtimer erfolgt in einem eigenen Thread. Eine Aktualisierung kann auf verschiedene Weise ausgelöst werden:

Regelmäßig
    Die Suchtimer werden einige Sekunden nach dem Start des VDR aktualisiert. Nach Abschluss der Aktualisierung legt die Setup-Option 'Aktualisierungsintervall [min]' fest, in welchen Intervallen weitere Aktualisierungen durchgeführt werden sollen.

Extern
    Der Thread überwacht die Datei '.epgsearchupdate' im Konfigurationsverzeichnis des Plugins. Nach der Ausführung von:

        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.

Intern
    Der Aufruf von 'Aktionen' » 'Suchtimer jetzt aktualisieren' oder das Drücken von 3 im Menü 'Sucheinträge' stößt ebenfalls eine Aktualisierung an.

Von anderen Plugins
    Der Dienst 'Epgsearch-updatesearchtimers-v1.0' kann über die Service-Schnittstelle des VDR von anderen Plugins genutzt werden. Der Aufrufer kann eine OSD-Benachrichtigung anfordern, sobald die Aktualisierung abgeschlossen ist.

6. Quellen für das Menü 'Verzeichnis wählen'
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:

•   aktuelle Aufnahmeverzeichnisse

•   in Timern genutzte Verzeichnisse

•   in Suchtimern genutzte Verzeichnisse

•   in epgsearchdirs.conf definierte Verzeichnisse, siehe epgsearchdirs.conf(5)

•   Verzeichnisse aus der Datei folders.conf des VDR

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.

7. Sprachabhängige Kommandos für die Programmübersicht
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).

8. Nutzung von anderen Plugins oder Skripten
Die EPG-Suche und andere Funktionen können von anderen Plugins oder Skripten genutzt werden. Es gibt zwei Ansätze:

  8.1. Kommandodatei (vorzugsweise per Skript)
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.

  8.2 Plugin-Schnittstelle (aus anderen Plugins heraus)
Ein Plugin kann mit nur wenigen Codezeilen zwei Funktionen von EPGSearch direkt aufrufen:

•   Suche im EPG und Anzeige der Ergebnisse

•   Aufruf des erweiterten Timer-Editieren-Menüs

Ein einfaches Beispiel-Plugin im Verzeichnis source von EPGSearch (vdr-epgsearchclient-0.0.1.tgz) demonstriert die Nutzung.

9. Die SVDRP-Schnittstelle
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.

  9.1 Suche und Suchtimer

LSTS [ID]
    Ruft alle Sucheinträge oder nur den mit der angegebenen ID ab. Das Format der zurückgegebenen Daten entspricht dem von epgsearch.conf (siehe oben).

NEWS Parameter
    Legt einen neuen Sucheintrag an. Das Datenformat von Parameter entspricht dem von epgsearch.conf (siehe oben).

    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

EDIS Parameter
    Ändert einen bestehenden Sucheintrag. Das Datenformat von Parameter entspricht dem von epgsearch.conf (siehe oben). Die Kennung im ersten Feld gibt den zu ändernden Sucheintrag an.

    Hinweis: Ein leeres Feld ('::') wird ignoriert. Die Werte der Felder 'Suchbegriff', 'Verzeichnis' und 'Inhaltskennungen' werden jedoch gelöscht, wenn keine Werte angegeben wurden.

MODS ID ON|OFF
    Aktiviert ('ON') oder deaktiviert ('OFF') die Option 'Als Suchtimer verwenden' für den Sucheintrag mit der angegebenen ID.

DELS ID
    Löscht den Sucheintrag mit der angegebenen ID.

SETS ON|OFF
    Startet ('ON') oder stoppt ('OFF') den im Hintergrund laufenden Suchtimer-Thread.

UPDS [OSD]
    Aktualisiert die Suchtimer. Mit dem optionalen Schlüsselwort 'OSD' wird eine OSD-Meldung nach Abschluss der Aktualisierung angezeigt.

UPDT
    Liest die Datei epgsearch.conf erneut ein, beispielsweise nachdem sie von einem externen Tool geändert wurde.

UPDD
    Liest die Datei epgsearchdone.data erneut ein, beispielsweise nachdem sie von einem externen Tool geändert wurde.

FIND Parameter
    Sucht im EPG nach Sendungen. Das Datenformat von Parameter entspricht dem von epgsearch.conf (siehe oben).

    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.

QRYS ID[|ID|...]
    Führt die Suche mit der angegebenen ID aus. Weitere IDs können, jeweils mit '|' als Trennzeichen, angefügt werden.

    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

QRYS Parameter
    Ruft die Ergebnisse einer Suche anhand der angegebenen Parameter ab. Das Datenformat von Parameter entspricht dem von von epgsearch.conf (siehe oben), wobei die eindeutige Kennung im ersten Feld ignoriert wird.

QRYF [Stunden]
    Ruft die Ergebnisse für das Favoriten-Menü ab; das Datenformat entspricht dem von 'QRYS'. Der optionale Parameter gibt die Anzahl der Zeitspanne in Stunden an (standardmäßig 24 Stunden).

MENU [NOW|PRG|SUM]
    Ruft eines der Menüs von EPGSearch oder die Beschreibung der aktuellen Sendung auf:

    •   NOW – Was läuft jetzt?

    •   PRG – Programmübersicht

    •   SUM – Beschreibung der Sendung

    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.

  9.2 Kanalgruppen

LSTC [Name]
    Ruft alle Kanalgruppen oder nur die mit Name bezeichnete ab. Das Format der zurückgegebenen Daten entspricht dem von epgsearchchangrps.conf.

NEWC Parameter
    Erstellt eine neue Kanalgruppe. Das Datenformat von Parameter entspricht dem von epgsearchchangrps.conf.

EDIC Parameter
    Ändert eine bestehende Kanalgruppe. Das Datenformat von Parameter entspricht dem von epgsearchchangrps.conf. Der Name im ersten Feld gibt die zu ändernde Kanalgruppe an.

RENC alterName|neuerName
    Benennt eine bestehende Kanalgruppe um.

DELC Name
    Löscht eine bestehende Kanalgruppe.

  9.3 Ausschlusslisten

LSTB [ID]
    Ruft alle Ausschlusslisten oder nur die mit der angegebenen ID ab. Das Format der zurückgegebenen Daten entspricht dem von epgsearchblacklists.conf.

NEWB Parameter
    Legt eine neue Ausschlussliste an. Das Datenformat von Parameter entspricht dem von epgsearchblacklists.conf.

    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

DELB ID
    Löscht die Ausschlussliste mit der angegeben ID.

EDIB Parameter
    Ändert eine bestehende Ausschlussliste. Das Datenformat von Parameter entspricht dem von epgsearchblacklists.conf. Der Name im ersten Feld gibt die zu ändernde Ausschlussliste an.

    Hinweis: Ein leeres Feld ('::') wird ignoriert. Die Werte der Felder 'Suchbegriff' und 'Inhaltskennungen' werden jedoch gelöscht, wenn keine Werte angegeben wurden.

  9.4 Suchvorlagen

LSTT [ID]
    Ruft alle Suchvorlagen oder nur die mit der angegebenen ID ab. Das Format der zurückgegebenen Daten entspricht dem von epgsearch.conf (siehe oben).

NEWT Parameter
    Legt eine neue Suchvorlage an. Das Datenformat von Parameter entspricht dem von epgsearch.conf (siehe oben).

    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

EDIT Parameter
    Ändert eine bestehende Suchvorlage. Das Datenformat von Parameter entspricht dem von epgsearch.conf (siehe oben). Die Kennung im ersten Feld gibt die zu ändernde Suchvorlage an.

    Hinweis: Ein leeres Feld ('::') wird ignoriert. Die Werte der Felder 'Suchbegriff' und 'Inhaltskennungen' werden jedoch gelöscht, wenn keine Werte angegeben wurden.

DELT ID
    Löscht die Suchvorlage mit der angegebenen ID.

DEFT [ID]
    Gibt die eindeutige Kennung (ID) der Standardsuchvorlage zurück. Bei Angabe einer ID wird die entsprechende Suchvorlage als neue Standardvorlage festgelegt.

  9.5 Erweiterte EPG-Kategorien

LSTE [ID]
    Ruft alle in epgsearchcats.conf definierten EPG-Kategorien oder nur die mit der angegebenen ID ab. Das Format der zurückgegebenen Daten entspricht dem von epgsearchcats.conf.

  9.6 Timer-Konflikte

LSCC [REL]
    Ruft die aktuellen Timer-Konflikte ab. Mit der Option 'REL' werden nur relevante Konflikte aufgeführt. Die Ergebnisliste sieht ähnlich aus wie für das folgende Beispiel zweier Timer-Konflikte zu einer bestimmten Zeit:

        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:

    •   152 ist die ID des Timers, mit der er auch im VDR-Kommando 'LSTT' geführt wird

    •   30 ist der Prozentsatz des Timers, der aufgenommen würde (0..100)

    •   '50#152#45' ist die Liste aller von diesem Konflikt betroffenen Timer

    '45|10|50#152#45' beschreibt einen weiteren Konflikt für diesen Zeitpunkt.

  9.7 Verschiedenes

LSRD
    Ruft alle Verzeichnisse ab, die in Aufzeichnungen, Timern und Suchtimern verwendet werden oder in epgsearchdirs.conf definiert sind.

SETP [Option]
    Gibt eine Liste ausgewählter Setup-Optionen mit ihren aktuellen Werten oder nur den aktuellen Wert der angegebenen Setup-Option zurück.

    Auf die folgenden Setup-Optionen kann zugegriffen werden:

    •   ShowFavoritesMenu

    •   UseSearchTimers

    •   DefRecordingDir

    •   AddSubtitleToTimerMode

    •   DefPriority

    •   DefLifetime

    •   DefMarginStart

    •   DefMarginStop

10. Anpassung von EPG-Menüs
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:

MenuWhatsOnNow
    Vorlage für das Menü 'Jetzt'.

MenuWhatsOnNext
    Vorlage für das Menü 'Nächste'.

MenuWhatsOnElse
    Vorlage für das Menü einer benutzerdefinierten Zeit.

MenuSchedule
    Vorlage für das Menü 'Programm'.

MenuSearchResults
    Vorlage für das Menü 'Suchergebnisse'.

MenuFavorites
    Vorlage für das Menü 'Favoriten'.

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):

%Time%
    Der Beginn einer Sendung im Format 'HH:MM'.

%TimeEnd%
    Das Ende einer Sendung im Format 'HH:MM'.

%Time_D%
    Das Datum des Beginns einer Sendung im Format 'TT'.

%Time_W%
    Der Name des Wochentages, an dem eine Sendung beginnt.

%Time_Lng%
    Datum und Startzeit einer Sendung in Epoch-Notation (Sekunden seit dem 01.01.1970, 00:00 UTC).

%TimeSpan%
    Die Zeit bis zum Beginn einer Sendung (bspw. 'in 15m') oder die bereits verstrichene Zeit (bspw. '10m').

%Date%
    Das Datum des Beginns einer Sendung im Format 'TT.MM.JJ'.

%DateSh%
    Das Datum des Beginns einer Sendung im Format 'TT.MM'.

%Date_ISO%
    Das Datum des Beginns einer Sendung im Format 'JJJJ-MM-TT'.

%Day%
    Der Tag des Beginns einer Sendung (1..31).

%Week%
    Die Kalenderwoche, in der eine Sendung beginnt (01..53).

    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.

%Month%
    Der Monat des Beginns einer Sendung (1..12).

%Year%
    Das Jahr des Beginns einer Sendung (1970..2038, gegebenenfalls auch später).

%EventID%
    Die numerische Kennung einer Sendung.

%LiveEventID%
    Die Kennung einer Sendung, wie sie vom Frontend live verwendet wird.

%Title%
    Der Titel einer Sendung.

%Subtitle%
    Der Untertitel einer Sendung.

%Summary%
    Die Beschreibung einer Sendung.

%HtmlSummary%
    Die Beschreibung einer Sendung, in der alle Zeilenumbrüche durch '<br />' ersetzt sind.

    Achtung: Die in HTML reservierten Zeichen '<&">' werden nicht durch ihre Substitute '&lt;', '&amp;', '&quot;' und '&gt;' ersetzt.

%<EPG-Kategorie>%
    Der für eine Sendung zutreffende Wert einer erweiterten EPG-Kategorie aus epgsearchcats.conf, etwa '%Genre%' oder '%Category%'.

%Length%
    Die Länge einer Sendung in Sekunden.

%Status%
    Der Status einer Sendung (entspricht '%T_Status%%V_Status%%R_Status%').

%T_Status%
    Der Status eines Timers ('T', 't' oder 'R'), andernfalls ein Leerzeichen.

%V_Status%
    Der VPS-Status einer Sendung ('V'), andernfalls ein Leerzeichen.

%R_Status%
    Der Status, ob eine Sendung läuft ('*'), andernfalls ein Leerzeichen.

Für die Menüs benutzerdefinierter Zeiten sowie das Menu 'Suchergebnisse' stehen ergänzend noch folgende Variablen zur Verfügung:

%ChNr%
    Die Kanalnummer einer Sendung.

%ChSh%
    Die Kurzbezeichnung des Kanals einer Sendung.

%ChLng%
    Der ausführliche Name des Kanals einer Sendung.

%ChData%
    Die interne Kanalkennung des VDR (bspw. 'S19.2E-1-1101-28106').

%Progr%
    Eine grafische Fortschrittsanzeige; nicht verfügbar für das Menü 'Suchergebnisse'.

    Hinweis: Zur Anzeige der Grafik muss die Schriftart VDRSymbols installiert sein.

%ProgrT2S%
    Eine Fortschrittsanzeige im Stil von text2skin; nicht verfügbar für das Menü 'Suchergebnisse'.

Abschließend noch einige allgemeine Variablen:

%TimeNow%
    Die aktuelle Zeit im Format 'HH:MM'.

%DateNow%
    Das aktuelle Datum im Format 'TT.MM.JJ'.

%DateShNow%
    Das aktuelle Datum im Format 'TT.MM'.

%Date_ISO_Now%
    Das aktuelle Datum im Format 'JJJJ-MM-TT'.

%VideoDir%
    Das Video-Verzeichnis des VDR (bspw. /video).

%PlugConfDir%
    Das Konfigurationsverzeichnis des VDR für die Plugins (bspw. /etc/vdr/plugins).

%EPGSearchDir%
    Das Konfigurationsverzeichnis von EPGSearch (bspw. /etc/vdr/plugins/epgsearch)

%Colon%
    Ein Doppelpunkt.

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).

11. Nutzung des Timer-Konfliktmenüs
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:

•   Suche nach einer Wiederholung der Sendung

•   Deaktivieren oder Löschen eines Timers

•   Änderung der Start- oder Stoppzeit eines Timers oder seiner Priorität

•   Ausführung anderer Timer-Befehle

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%)

    Die möglichen Argumente finden sich bei "12.3 Aufrufen eines Systembefehls".

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.

12. Benutzerdefinierte Variablen
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.

  12.1 Zuweisung
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".

  12.2 Bedingte Zuweisung
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:

    == gleich
    != ungleich

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.

  12.3 Aufruf von Systemkommandos
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.

  12.4 Aufruf von TCP-Diensten
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.

  12.5 Länge von Argumenten
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%)

  12.6 Weitere Variablen
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).

  12.7 Beispiele
 # 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%

13. Benachrichtigung per E-Mail
EPGSearch kann E-Mail-Benachrichtigungen versenden, wenn Timer vom Suchtimer-Thread hinzugefügt, geändert oder entfernt werden oder wenn Timer-Konflikte erkannt wurden.

  13.1 Einrichten der E-Mail-Benachrichtigung
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:

epgsearchupdmail.templ
    Vorlage für die Benachrichtigung über Suchtimer-Aktualisierungen.

epgsearchconflmail.templ
    Vorlage für die Benachrichtigung von Timer-Konflikten.

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.

  13.2 Anpassung der E-Mail-Benachrichtigungen
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:

Subject
    Der Begriff, der als E-Mail-Betreff verwendet werden soll.

MailBody
    Der Inhalt der E-Mail. Variablen legen fest, welche Informationen an welchen Stellen im Text eingefügt werden sollen.

    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.

Timer
    Vorlage für die Darstellung eines einzelnen Timers. Dieser Abschnitt dient der Formatierung eines Timers innerhalb einer Timerübersicht, beispielsweise in '%Update.NewTimers%'.

Event
    Vorlage für die Darstellung einer einzelnen Sendung. Dieser Abschnitt dient der Formatierung einer Sendung innerhalb einer Sendungsübersicht, beispielsweise in '%Update.NewEvents%'.

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:

%Update.NewTimers%
    Wird durch die Liste der bei einer Aktualisierung neu erstellten Timer ersetzt. Die Timer werden entsprechend dem Abschnitt 'Timer' formatiert.

%Update.CountNewTimers%
    Die Anzahl neu erstellter Timer.

%Update.ModTimers%
    Wie '%Update.NewTimers%', jedoch für die geänderten Timer.

%Update.CountModTimers%
    Die Anzahl geänderter Timer.

%Update.DelTimers%
    Wie '%Update.NewTimers%', jedoch für die gelöschten Timer.

    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.

%Update.CountDelTimers%
    Die Anzahl gelöschter Timer.

%Update.NewEvents%
    Wird durch die Liste der anzukündigenden Sendungen ersetzt. Diese stammen von Suchtimern mit der Aktion 'per E-Mail ankündigen'. Die Sendungen werden entsprechend dem Abschnitt 'Event' formatiert.

%Update.CountNewEvents%
    Die Anzahl anzukündigender Sendungen.

%DateNow%
    Das aktuelle Datum im Format 'TT.MM.JJ'.

%DateShNow%
    Das aktuelle Datum im Format 'TT.MM'.

%TimeNow%
    Die aktuelle Zeit im Format 'HH:MM'.

%Colon%
    Ein Doppelpunkt.

13.2.1.2 Abschnitt 'Timer'

Die folgenden Variablen stehen im Abschnitt 'Timer' zur Verfügung:

%Timer.Date%
    Das Datum des Startzeitpunkts eines Timers.

%Timer.Start%
    Die Startzeit eines Timers.

%Timer.Stop%
    Die Stoppzeit eines Timers.

%Timer.File%
    Das Aufnahmeverzeichnis eines Timers.

%Timer.ChNr%
    Die Kanalnummer eines Timers.

%Timer.ChSh%
    Die Kurzbezeichnung des Kanals eines Timers.

%Timer.ChLng%
    Der vollständige Name des Kanals eines Timers.

%Timer.Search%
    Der Suchbegriff, der einen Timer erzeugt hat.

%Timer.SearchID%
    Die eindeutige Kennung (ID) der Suche, die einen Timer erzeugt hat.

%Timer.LiveID%
    Die Kennung eines Timers, wie sie vom Frontend live verwendet wird.

%Timer.ModReason%
    Die Erläuterung einer Timer-Änderung Als Klartext.

%<Variable einer Sendung>%
    Siehe "10. Anpassung von EPG-Menüs".

%<EPG-Kategorie>%
    Der für eine Sendung zutreffende Wert einer erweitern EPG-Kategorie aus epgsearchcats.conf, etwa '%Genre%' oder '%Category%'.

%<Benutzerdefinierte Variable>%
    Siehe "12. Benutzerdefinierte Variablen".

13.2.1.3 Abschnitt 'Event'

Die folgenden Variablen stehen im Abschnitt 'Event' zur Verfügung:

%Search%
    Der Suchbegriff, der die Benachrichtigung für eine Sendung erzeugt hat.

%SearchID%
    Die eindeutige Kennung (ID) der Suche, welche die Benachrichtigung für eine Sendung erzeugt hat.

%<Variable einer Sendung>%
    Siehe "10. Anpassung von EPG-Menüs".

%<EPG-Kategorie>%
    Der für eine Sendung zutreffende Wert einer erweiterten EPG-Kategorie aus epgsearchcats.conf, etwa '%Genre%' oder '%Category%'.

%<Benutzerdefinierte Variable>%
    Siehe "12. Benutzerdefinierte Variablen".

13.2.2 E-Mails zu Timer-Konflikten

Für eine E-Mail zur Meldung von Timer-Konflikten müssen folgende Abschnitte definiert werden:

Subject
    Der Begriff, der als E-Mail-Betreff verwendet werden soll.

MailBody
    Der Inhalt der E-Mail. Variablen legen fest, welche Informationen an welchen Stellen im Text eingefügt werden sollen.

    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.

ConflictsAt
    Vorlage zur Darstellung des Zeitpunkts, zu dem ein oder mehrere Konflikte aufgetreten sind.

ConflTimer
    Die Beschreibung eines konfliktbehafteten Timers.

13.2.2.1 Abschnitt 'MailBody'

Die folgenden Variablen stehen im Abschnitt 'MailBody' zur Verfügung:

%Conflict.Count%
    Die Anzahl aller Timer-Konflikte, einschließlich relevanter und unwichtiger Konflikte.

%Conflict.Conflicts%
    Eine Liste der in Konflikt stehenden Timer.

13.2.2.2 Abschnitt 'ConflictsAt'

Die folgenden Variablen stehen im Abschnitt 'ConflictsAt' zur Verfügung:

%Conflict.Date%
    Das Datum eines Konflikts.

%Conflict.Time%
    Die Uhrzeit eines Konflikts.

%Conflict.ConflTimers%
    Eine Liste der zu diesem Zeitpunkt in Konflikt stehenden Timer.

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).

14. Das Verzeichnis conf.d
EPGSearch unterstützt ein unter Linux wohlbekanntes Konfigurationsverfahren. Diese betrifft die Einstellungen folgender Konfigurationsdateien:

•   epgsearchuservars.conf

•   epgsearchdirs.conf

•   epgsearchmenu.conf

•   epgsearchcats.conf

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:

•   epgsearchuservars

•   epgsearchdirs

•   epgsearchmenu

•   epgsearchcats

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.

AUTOREN (Man-Pages)
Ursprünglich erstellt von Mike Constabel <epgsearch (at) constabel (dot) net>.

Überarbeitet und an die aktuellen Features von EPGSearch adaptiert durch die derzeitigen Maintainer.

PROJEKTSEITE
Das Plugin wird als Projekt auf GitHub geführt:

<https://github.com/vdr-projects/vdr-plugin-epgsearch/>

FEHLER MELDEN
Fehlerberichte sowie Feature-Anfragen können über den Bugtracker des Projekts eingespeist werden:

<https://github.com/vdr-projects/vdr-plugin-epgsearch/issues/>

COPYRIGHT und LIZENZ
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.

SIEHE AUCH
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)