Der Leitfaden zeigt, wie man die EPG-Bereitstellung für Tvheadend-IPTV-Sender vollständig automatisiert – durch externe XMLTV-Quellen, automatisches Kanal-Mapping und ein robustes Skript mit Fallback-Mechanismen. Das Ergebnis ist eine zuverlässige, wartungsarme Lösung. Statt auf unzureichende interne EPG-Grabber zu setzen, werden externe XMLTV-Datenquellen genutzt. Diese werden über einen Unix-Socket in Tvheadend importiert, nachdem die IPTV-Kanäle den XMLTV-Kanalbezeichnern zugeordnet wurden. Ein täglicher Cron-Job aktualisiert automatisch, während redundante Quellen und Fehlerbehandlung für maximale Zuverlässigkeit sorgen.
- 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
Schritt 1 – 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
Schritt 2 – 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 3 |
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
Schritt 3 – 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.
Schritt 4 – 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 -u 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