Für die Bereitstellung von Elektronischen Programmführern (EPG) für IPTV-Kanäle in Tvheadend existieren zwei grundlegend verschiedene Ansätze:
Nutzung der EIT-Daten eines DVB-S-Transponders (sehr einfache Methode) Wenn mindestens ein Sender desselben Transponders (z. B. 12551 H bei Astra 19.2°) über DVB-S empfangen werden kann, lassen sich die vom Transponder übertragenen EIT/OTA-EPG-Daten auch für IPTV-Kanäle nutzen, die selbst nicht per Satellit empfangen werden (z. B. 3sat IPTV). Da die EPG-Daten für den gesamten Transponder gemeinsam übertragen werden, reicht der Empfang eines beliebigen Senders dieses Transponders aus, um dieProgramminformationen aller zugehörigen Sender – einschließlich nicht empfangener Kanäle – zu erhalten. Die Zuordnung erfolgt in Tvheadend über die „EPG-Reuse“-Funktion.
Import externer XMLTV-Daten (flexible, aber aufwändigere Methode) Alternativ können Programmdaten unabhängig von einem DVB-S-Empfang über externe XMLTV-Quellen eingepflegt werden. Hierzu wird eine XMLTV-Datei heruntergeladen, über einen Unix-Socket oder eine Datei in Tvheadend importiert und den IPTV-Kanälen manuell oder halbautomatisch zugeordnet. Diese Variante erfordert die Einrichtung eines zusätzlichen EPG-Grabbers sowie – für einen automatisierten Betrieb – ein entsprechendes Update-Skript (z. B. per Cron-Job) inklusive Fehlerbehandlung und Fallback-Mechanismen.
Die nachfolgenden Abschnitte beschreiben beide Verfahren detailliert. Die erste Methode (EPG-Reuse) ist in den meisten Haushalten mit vorhandenem Sat-Empfang die deutlich einfachere und wartungsärmere Lösung.
Übernahme der EPG-Daten vom DVB-S-Transponder
In der vorliegenden Konfiguration ist ein Empfang von 3sat über DVB-S nicht möglich. Es besteht jedoch ein stabiler DVB-S-Empfang von anderen Sendern, die auf demselben Transponder wie 3sat übertragen werden (12551 MHz Horizontal, SR 22000). Somit können die Transponder EPG Daten für den 3sat IPTV Stream verwendet werden. Diese Vorgehensweise gilt in den meisten Anwendungsfällen als die effizienteste, stabilste und wartungsärmste Lösung.
Voraussetzungen
– Mindestens einer der folgenden Sender ist über DVB-S empfangbar:
Das Erste HD, ZDF HD, arte HD, phoenix HD, KiKA HD
(Transponder: 12551 MHz H, Symbolrate 22000, FEC 5/6)
– Der Kanal 3sat ist als IPTV-Stream in Tvheadend eingerichtet und einem Kanal zugeordnet
Konfigurationsschritte
1. Zurücksetzen der EPG-Quelle
→ Konfiguration → Kanal / EPG → Kanäle
→ Kanal „3sat HD“ (IPTV) auswählen → Bearbeiten
→ Feld EPG-Quelle auf „Nicht gesetzt“ setzen
→ Änderungen speichern
2. Zuweisung der EPG-Daten über die Reuse-Funktion
→ Im Bearbeitungsfenster des Kanals „3sat HD“ zu den Experten-Einstellungen navigieren
→ Feld Benutze EPG von:
Einen Sender desselben Transponders auswählen, z. B.:
– Das Erste HD
– ZDF HD
– arte HD
– phoenix HD
→ Änderungen speichern und übernehmen
3. Überprüfung und Priorisierung des EIT-Grabbers
→ Konfiguration → Kanal / EPG → EPG-Grabber-Module
– Modul EIT: DVB Grabber muss aktiviert sein
– Priorität auf Wert 1 oder 2 setzen (höher als XMLTV-Module)
– Andere Grabber-Module (insbesondere XMLTV) gegebenenfalls temporär deaktivieren
4. Aktualisierung der EPG-Daten
– Automatische Aktualisierung abwarten (meist innerhalb von 10–60 Minuten)
– Alternativ: Manuelles Anstoßen des Internal EPG Grabber über die Benutzeroberfläche
Nach erfolgreicher Übernahme werden im Elektronischen Programmführer (EPG) für den Kanal 3sat HD die vollständigen EIT-Daten des Transponders 12551 H angezeigt. Kanäle des Transponders 12515 V (Vertical) sind nicht geeignet, da dort eine andere EIT-Tabelle übertragen wird.
Vorteile der Methode
– Keine Abhängigkeit von externen Programmdatenquellen
– Hohe Datenqualität (inkl. Genre, Episodeninformationen, detaillierte Beschreibungen)
– Vollständig wartungs- und kostenfrei
– Direkte Nutzung der nativen EIT-Daten von Astra 19.2° E
EPG-Daten aus externen Quellen beziehen (XMLTV-Methode)
Wenn kein DVB-S-, DVB-C- oder DVB-T-Empfang verfügbar ist, können Programminformationen (EPG) über externe XMLTV-Datenquellen bereitgestellt werden. Diese Lösung nutzt externe XMLTV-Quellen, ein automatisches Kanal-Mapping sowie ein Update-Skript das über einen Unix-Socket EPG Daten in Tvheadend importiert. Dadurch entsteht eine zuverlässige und weitgehend wartungsarme EPG-Versorgung. Ein täglicher Cron-Job sorgt für die automatische Aktualisierung.
- Externe XMLTV-Quellen: Bis zu 14 Tage Programmvorlauf durch öffentlich aktualisierte Quellen; Unterstützung für komprimierte und unkomprimierte XML-Formate.
- Kanal-Mapping: Einmalige manuelle Zuordnung im Tvheadend-Webinterface; dauerhafte Verknüpfung über standardisierte XMLTV-Channel-IDs.
- Robustes Skript: Primärquelle (
epgshare01) mit Fallback (open-epg); umfangreiche Fehlerbehandlung und Logging. - Automatische Updates: Täglicher Import (z. B. 04:30 Uhr) im Hintergrund; Integration in Systemd-Journal für zentrale Überwachung.
Voraussetzungen
– Tvheadend läuft nativ auf Debian (kein Docker)
– Externer XMLTV-Grabber ist aktiviert (External: XMLTV mit Socket /var/lib/tvheadend/epggrab/xmltv.sock)
– Der Benutzer „hts“ existiert und Tvheadend läuft unter diesem Benutzer
– socat ist installiert (sudo apt install socat)
– IPTV-Kanäle sind bereits in Tvheadend angelegt
EPG-Grabber einmalig konfigurieren
1. Tvheadend-Webinterface öffnen
→ Configuration → General → Base
→ User interface level = Expert → Save
2. EPG-Grabber aktivieren
→ Configuration → Channel/EPG → EPG Grabber Modules
→ External: XMLTV doppelt anklicken
→ Aktiviert = Ja
→ Priorität = 1
→ Pfad = /var/lib/tvheadend/epggrab/xmltv.sock (meist schon vorausgefüllt)
→ Save
3. Retention-Einstellungen setzen
→ Configuration → Channel/EPG → EPG Grabber
→ Speichere EPG periodisch auf Festplatte (Stunden) = 336 oder 720
→ Save EPG to disk after xmltv import = Ja (Häkchen)
→ Save
EPG-Quelle auswählen und testen
Empfohlene Quellen (Stand 2026):
| Quelle | URL / Befehl | Größe | Tage ca. | Kommentar |
| open-epg (schnell) | wget https://www.open-epg.com/files/germany1.xml -O /tmp/epg.xml | ~1–5 MB | 1–3 Tage | Sehr aktuell, klein & schnell |
Test-Import (nach Download):
|
1 2 |
sudo chown hts:hts /tmp/epg.xml sudo cat /tmp/epg.xml | socat - UNIX-CONNECT:/var/lib/tvheadend/epggrab/xmltv.sock |
Log prüfen (live):
|
1 2 |
sudo journalctl -t tvheadend | tail -n20 #last 20 entries sudo journalctl -t tvheadend -fn #livelog |
Wichtige Zeilen:
– xmltv: broadcasts tot= ... new= ... → Zahl > 0 = Erfolg
– epgdb: broadcasts ... → zeigt Gesamtzahl
IPTV-Kanäle mit EPG verknüpfen
1. Configuration → Channel/EPG → Channels
2. Jeden IPTV-Kanal (z. B. 3sat) bearbeiten
3. Feld EPG Source oder XMLTV channel ID anklicken
4. Aus Dropdown den passenden Eintrag wählen (häufig: 3sat.de, 3sat, C3SAT, 3sat HD)
5. Speichern
Nach Mapping → EPG in Web-Interface oder Kodi nach kurzer Zeit sichtbar.
Automatisches tägliches Update (Cron-Script)
Script erstellen (ggf. germany1.xml und germany2.xml zusammenführen)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
#!/bin/bash # /usr/local/bin/tvh_epg_update.sh set -e # ==================== Settings ==================== EPG_URL="https://www.open-epg.com/files/germany1.xml" # EPG_URL="https://www.open-epg.com/files/germany2.xml" TEMP_XML="/tmp/epg.xml" SOCKET="/var/lib/tvheadend/epggrab/xmltv.sock" # ==================== Functions ==================== log() { echo "$*" | systemd-cat -t tvheadend -p info } error() { echo "ERROR: $*" | systemd-cat -t tvheadend -p err } # ==================== Main Logic ==================== log "Starting EPG update" # Remove old files rm -f "$TEMP_XML" 2>/dev/null || true # Try primary source log "Downloading EPG from $EPG_URL..." if wget -q --no-check-certificate -O "$TEMP_XML" "$EPG_URL"; then log "Download from $EPG_URL successful" else MSG="Download from $EPG_URL failed. Please consider using WebGrab+Plus as an alternative EPG source." error "$MSG" echo "$MSG" exit 1 fi # Check if the file exists if [ ! -f "$TEMP_XML" ]; then error "EPG file $TEMP_XML does not exist" exit 1 fi # Set permissions chown hts:hts "$TEMP_XML" || error "chown failed for $TEMP_XML" # Start import log "Importing EPG from $TEMP_XML into Tvheadend..." if cat "$TEMP_XML" | socat - UNIX-CONNECT:"$SOCKET"; then log "Import completed successfully" else error "Socket import failed for $TEMP_XML" exit 1 fi # Clean up rm -f "$TEMP_XML" 2>/dev/null || true log "EPG update fully completed" exit 0 |
Script einrichten
|
1 2 3 4 5 6 |
sudo nano /usr/local/bin/tvh_epg_update.sh # (Inhalt einfügen) sleep 1 sudo chmod +x /usr/local/bin/tvh_epg_update.sh sudo chown root:root /usr/local/bin/tvh_epg_update.sh |
Testlauf
|
1 2 |
sudo /usr/local/bin/tvh_epg_update.sh sudo journalctl -u tvheadend -n 100 | grep -i xmltv |
Cron einrichten (täglich 04:30 Uhr)
|
1 |
sudo crontab -e |
Eintrag hinzufügen:
|
1 |
30 4 * * * /usr/local/bin/update_epg.sh |
– EPG wird jetzt täglich automatisch aktualisiert
– Bei Problemen: /var/log/epg_update.log und journalctl -t tvheadend prüfen
– Für noch mehr Tage: im Script weitere wget-Befehle für germany2.xml etc. ergänzen und Dateien zusammenführen (cat file1 file2 > combined.xml)
by Speefak