epgsearch(4)                 EPGSearch Version 2.4.6                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  De‐
     tail.  Es handelt sich also nicht um ein Handbuch, sondern eher um eine er‐
     weiterte 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  Er‐
     stellen  eines  Timers automatisch an den Verzeichniseintrag angefügt. Wenn
     im Suchtimer zudem 'Serienaufnahme' auf 'ja' gesetzt ist, wird auch der Un‐
     tertitel 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 um‐
     fasst 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  un‐
         definiertem Verhalten führen.

     5 – Start vor [HHMM]
         Integer  mit  HH  =  0..23,  MM  =  0..59;  andere  Werte können zu un‐
         definiertem 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 Kanalken‐
             nungen    müssen    der     VDR-Notation     entsprechen     (bspw.
             'S19.2E-1-1019-10301').

             Achtung: Nach einer Änderung der Kanalreihenfolge sollten die Bere‐
             ichseinstellungen 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  un‐
         definiertem Verhalten führen.

     15 – Maximale Dauer [HHMM]
         Integer  mit  HH  =  0..23,  MM  =  0..59;  andere  Werte können zu un‐
         definiertem 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  =  Sam‐
             stag.

         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 Enumer‐
             ationswert 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-Verzeich‐
         nisses 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 epgsearch‐
             cats.conf angegeben.

         28.2 – Kategoriedaten
             Kommaseparierte Liste von Werten,  wie  für  die  EPG-Kategorie  in
             epgsearchcats.conf  angegeben. Leerzeichen vor und nach Kategoriew‐
             erten 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 un‐
         gleich 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  un‐
         scharfe 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)  in‐
         nerhalb  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 au‐
         tomatisch löschen' = 1.

     47 – Nach ... Tagen nach erster Aufnahme löschen
         Integer im Wertebereich von 0 bis 999; nur relevant für 'Suchtimer  au‐
         tomatisch 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 inner‐
         halb  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 inner‐
         halb 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 teil‐
         weise übereinstimmenden Kategorien. Ohne andere ausreichend einschränk‐
         ende   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 er‐
         forderliche  Ü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 zweis‐
         tellige 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 allge‐
         meine Charakterisierung dieser  Gruppe  (bspw.  0x10  =  Film,  Drama),
         wohingegen  die  Werte  1..15  eine  untergeordnete, feinere Charakter‐
         isierung 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 zweistelli‐
         gen 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, verwen‐
         den aber dennoch die Einstellung aus Feld 56 zur Überprüfung der beson‐
         deren Merkmale.  Daher können Kombinationen wie  'UND'  für  die  Kate‐
         goriengruppen  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 (Grup‐
         pen 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 Aus‐
         nahme 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 Aufnahmeverze‐
     ichnis, 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  er‐
     forderlich 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 Feldw‐
     ert herum verworfen. Dies bedeutet jedoch, dass Strings nicht  mit  Leerze‐
     ichen beginnen oder enden können.

     Hinweis:  Strings  in  Feldern dürfen nicht in einfachen oder doppelten An‐
     fü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 Ti‐
     tel, Untertitel und Beschreibung durch '~' getrennt sind:

         Title~Untertitel~Beschreibung

     Abhängig von den Einstellungen von 'Titel verwenden',  'Untertitel  verwen‐
     den' und 'Beschreibung verwenden' werden die entsprechenden Komponenten en‐
     tweder 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 Abwe‐
         ichung sein darf.

         Hinweis: Der Suchbegriff ist bei unscharfer Suche auf  32  Zeichen  be‐
         grenzt.

     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-Pri‐
     oritä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 Ak‐
     tualisierung kann auf verschiedene Weise ausgelöst werden:

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

     Extern
         Der   Thread  überwacht  die  Datei  '.epgsearchupdate'  im  Konfigura‐
         tionsverzeichnis 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 Aktual‐
         isierung anzustoßen.

     Intern
         Der Aufruf von 'Aktionen' » 'Suchtimer jetzt  aktualisieren'  oder  das
         Drücken  von  3  im  Menü  'Sucheinträge'  stößt ebenfalls eine Aktual‐
         isierung 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 Verze‐
     ichnisse   ä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 im‐
     mer 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 wer‐
     den.  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üg‐
     baren Befehle beschrieben.

   9.1 Suche und Suchtimer
     LSTS [ID]
         Ruft alle Sucheinträge oder nur den mit der angegebenen ID ab. Das For‐
         mat 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.

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

     UPDDLiest  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ück‐
         gegeben:

             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 an‐
         deres Menü geöffnet ist. Andernfalls wird das aktuell  angezeigte  Menü
         geschlossen.   Daher  ist  dieser  Befehl nicht vollständig determinis‐
         tisch.

   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 epgsearchblack‐
         lists.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 For‐
         mat  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  Standard‐
         vorlage 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' ge‐
           fü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 Zeit‐
         punkt.

   9.7 Verschiedenes
     LSRDRuft  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 Suchergeb‐
     nisse die Auswahl zwischen der Standardvorlage  und  eigenen  Vorlagen  er‐
     mö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 ig‐
     noriert):

     %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.  Kalen‐
         derwoche 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 Leerze‐
         ichen.

     %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  instal‐
         liert 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/plug‐
         ins/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  '|'  ge‐
     trennt 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  Konfigura‐
     tionsä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 Konfigura‐
     tionsverzeichnis 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-devel‐
     oper.org/fonts/download.html> heruntergeladen werden.

     Hinweis: Wenn eine Datei epgsearchmenu.conf mit einem Eintrag für ein  bes‐
     timmtes  Menü  vorhanden ist, werden die Standardeinstellungen zur Darstel‐
     lung 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 Pri‐
     oritä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 aktual‐
     isiert, 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  Aktual‐
     isierung der Detailübersicht.

     Hinweis:  Eine  versteckte Setup-Option 'ConflCheckCmd' ermöglicht die Aus‐
     fü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 Systembe‐
         fehls".

     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  auss‐
     chließ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 unter‐
     scheiden.

   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 bed‐
     ingter 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  Bedin‐
     gung  "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 wer‐
     den.    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 Aus‐
     druck sein, der gegebenenfalls andere Variablen enthält, jedoch  kein  Sys‐
     temaufruf 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 An‐
     fü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 hil‐
     freich  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 verwen‐
     det 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  kon‐
     figuriert  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 Kon‐
     figurationsverzeichnis  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%',  '%Up‐
         date.DelTimers%'  und  '%Update.NewEvents%'  entsprechende Listen geän‐
         derter beziehungsweise gelöschter Timer und Ankündigungen neuer Sendun‐
         gen 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 Benachrichtigun‐
     gen  zu  Sendungen  genutzt, können innerhalb von 'MailBody' sowohl die Ab‐
     schnitte '%Update.NewEvents%' als auch die zugehörige Vorlage 'Event'  ent‐
     fallen. 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'  for‐
         matiert.

     %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 zuge‐
         ordnet. 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 stam‐
         men  von Suchtimern mit der Aktion 'per E-Mail ankündigen'. Die Sendun‐
         gen 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 Kon‐
         flikte 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  un‐
         wichtiger 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 Konfigurationsver‐
     fahren.  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 bereit‐
     gestellt  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üssel‐
     wörter:

     • epgsearchuservars

     • epgsearchdirs

     • epgsearchmenu

     • epgsearchcats

     Das Format von 'Einstellungen' entspricht dem der entsprechenden Konfigura‐
     tionsdatei.  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  Pro‐
     jekts 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öf‐
     fentlicht, 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 Ih‐
     nen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die im‐
     plizite Garantie der MARKTREIFE oder  der  VERWENDBARKEIT  FÜR  EINEN  BES‐
     TIMMTEN 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-li‐
     censes/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)

perl v5.40.1                       2026-04-19                       epgsearch(4)
