{"id":8617,"date":"2026-02-06T20:05:49","date_gmt":"2026-02-06T19:05:49","guid":{"rendered":"https:\/\/speefak.spdns.de\/oss_lifestyle\/?p=8617"},"modified":"2026-02-12T09:01:45","modified_gmt":"2026-02-12T08:01:45","slug":"epg-fuer-iptv-kanaele-in-tvheadend-einrichten-und-automatisch-aktualisieren","status":"publish","type":"post","link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/epg-fuer-iptv-kanaele-in-tvheadend-einrichten-und-automatisch-aktualisieren\/","title":{"rendered":"EPG f\u00fcr IPTV-Kan\u00e4le in Tvheadend einrichten und automatisch aktualisieren"},"content":{"rendered":"<p>F\u00fcr die Bereitstellung von Elektronischen Programmf\u00fchrern (EPG) f\u00fcr IPTV-Kan\u00e4le in Tvheadend existieren zwei grundlegend verschiedene Ans\u00e4tze:<\/p>\n<p><strong>Nutzung der EIT-Daten eines DVB-S-Transponders (sehr einfache Methode)<\/strong> Wenn mindestens ein Sender desselben Transponders (z. B. 12551 H bei Astra 19.2\u00b0) \u00fcber DVB-S empfangen werden kann, lassen sich die vom Transponder \u00fcbertragenen EIT\/OTA-EPG-Daten auch f\u00fcr IPTV-Kan\u00e4le nutzen, die selbst nicht per Satellit empfangen werden (z. B. 3sat IPTV). Da die EPG-Daten f\u00fcr den gesamten Transponder gemeinsam \u00fcbertragen werden, reicht der Empfang eines beliebigen Senders dieses Transponders aus, um dieProgramminformationen aller zugeh\u00f6rigen Sender \u2013 einschlie\u00dflich nicht empfangener Kan\u00e4le \u2013 zu erhalten. Die Zuordnung erfolgt in Tvheadend \u00fcber die \u201eEPG-Reuse\u201c-Funktion.<\/p>\n<p><strong>Import externer XMLTV-Daten (flexible, aber aufw\u00e4ndigere Methode)<\/strong> Alternativ k\u00f6nnen Programmdaten unabh\u00e4ngig von einem DVB-S-Empfang \u00fcber externe XMLTV-Quellen eingepflegt werden. Hierzu wird eine XMLTV-Datei heruntergeladen, \u00fcber einen Unix-Socket oder eine Datei in Tvheadend importiert und den IPTV-Kan\u00e4len manuell oder halbautomatisch zugeordnet. Diese Variante erfordert die Einrichtung eines zus\u00e4tzlichen EPG-Grabbers sowie \u2013 f\u00fcr einen automatisierten Betrieb \u2013 ein entsprechendes Update-Skript (z. B. per Cron-Job) inklusive Fehlerbehandlung und Fallback-Mechanismen.<\/p>\n<p dir=\"auto\">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\u00e4rmere L\u00f6sung.<\/p>\n<hr \/>\n<h2>\u00dcbernahme der EPG-Daten vom DVB-S-Transponder<\/h2>\n<p>In der vorliegenden Konfiguration ist ein Empfang von 3sat \u00fcber DVB-S nicht m\u00f6glich. Es besteht jedoch ein stabiler DVB-S-Empfang von anderen Sendern, die auf demselben Transponder wie 3sat \u00fcbertragen werden (12551 MHz Horizontal, SR 22000). Somit k\u00f6nnen die Transponder EPG Daten f\u00fcr den 3sat IPTV Stream verwendet werden. Diese Vorgehensweise gilt in den meisten Anwendungsf\u00e4llen als die effizienteste, stabilste und wartungs\u00e4rmste L\u00f6sung.<\/p>\n<h4>Voraussetzungen<\/h4>\n<p>&#8211; Mindestens einer der folgenden Sender ist \u00fcber DVB-S empfangbar:<br \/>\nDas Erste HD, ZDF HD, arte HD, phoenix HD, KiKA HD<br \/>\n(Transponder: 12551 MHz H, Symbolrate 22000, FEC 5\/6)<br \/>\n&#8211; Der Kanal 3sat ist als IPTV-Stream in Tvheadend eingerichtet und einem Kanal zugeordnet<\/p>\n<h4>Konfigurationsschritte<\/h4>\n<p>1. Zur\u00fccksetzen der EPG-Quelle<br \/>\n\u2192 Konfiguration \u2192 Kanal \/ EPG \u2192 Kan\u00e4le<br \/>\n\u2192 Kanal \u201e3sat HD\u201c (IPTV) ausw\u00e4hlen \u2192 Bearbeiten<br \/>\n\u2192 Feld EPG-Quelle auf \u201eNicht gesetzt\u201c setzen<br \/>\n\u2192 \u00c4nderungen speichern<\/p>\n<p>2. Zuweisung der EPG-Daten \u00fcber die Reuse-Funktion<br \/>\n\u2192 Im Bearbeitungsfenster des Kanals \u201e3sat HD\u201c zu den Experten-Einstellungen navigieren<br \/>\n\u2192 Feld Benutze EPG von:<br \/>\nEinen Sender desselben Transponders ausw\u00e4hlen, z. B.:<br \/>\n&#8211; Das Erste HD<br \/>\n&#8211; ZDF HD<br \/>\n&#8211; arte HD<br \/>\n&#8211; phoenix HD<br \/>\n\u2192 \u00c4nderungen speichern und \u00fcbernehmen<\/p>\n<p>3. \u00dcberpr\u00fcfung und Priorisierung des EIT-Grabbers<br \/>\n\u2192 Konfiguration \u2192 Kanal \/ EPG \u2192 EPG-Grabber-Module<br \/>\n&#8211; Modul EIT: DVB Grabber muss aktiviert sein<br \/>\n&#8211; Priorit\u00e4t auf Wert 1 oder 2 setzen (h\u00f6her als XMLTV-Module)<br \/>\n&#8211; Andere Grabber-Module (insbesondere XMLTV) gegebenenfalls tempor\u00e4r deaktivieren<\/p>\n<p>4. Aktualisierung der EPG-Daten<br \/>\n&#8211; Automatische Aktualisierung abwarten (meist innerhalb von 10\u201360 Minuten)<br \/>\n&#8211; Alternativ: Manuelles Ansto\u00dfen des Internal EPG Grabber \u00fcber die Benutzeroberfl\u00e4che<\/p>\n<p>Nach erfolgreicher \u00dcbernahme werden im Elektronischen Programmf\u00fchrer (EPG) f\u00fcr den Kanal 3sat HD die vollst\u00e4ndigen EIT-Daten des Transponders 12551 H angezeigt. Kan\u00e4le des Transponders 12515 V (Vertical) sind nicht geeignet, da dort eine andere EIT-Tabelle \u00fcbertragen wird.<\/p>\n<p>Vorteile der Methode<br \/>\n&#8211; Keine Abh\u00e4ngigkeit von externen Programmdatenquellen<br \/>\n&#8211; Hohe Datenqualit\u00e4t (inkl. Genre, Episodeninformationen, detaillierte Beschreibungen)<br \/>\n&#8211; Vollst\u00e4ndig wartungs- und kostenfrei<br \/>\n&#8211; Direkte Nutzung der nativen EIT-Daten von Astra 19.2\u00b0 E<\/p>\n<hr \/>\n<h2 dir=\"auto\">EPG-Daten aus externen Quellen beziehen (XMLTV-Methode)<\/h2>\n<p dir=\"auto\">Wenn kein DVB-S-, DVB-C- oder DVB-T-Empfang verf\u00fcgbar ist, k\u00f6nnen Programminformationen (EPG) \u00fcber externe XMLTV-Datenquellen bereitgestellt werden. Diese L\u00f6sung nutzt externe XMLTV-Quellen, ein automatisches Kanal-Mapping sowie ein Update-Skript das \u00fcber einen Unix-Socket EPG Daten in Tvheadend importiert. Dadurch entsteht eine zuverl\u00e4ssige und weitgehend wartungsarme EPG-Versorgung. Ein t\u00e4glicher Cron-Job sorgt f\u00fcr die automatische Aktualisierung.<\/p>\n<ul>\n<li dir=\"auto\"><strong>Externe XMLTV-Quellen:<\/strong> Bis zu 14 Tage Programmvorlauf durch \u00f6ffentlich aktualisierte Quellen; Unterst\u00fctzung f\u00fcr komprimierte und unkomprimierte XML-Formate.<\/li>\n<li dir=\"auto\"><strong>Kanal-Mapping:<\/strong> Einmalige manuelle Zuordnung im Tvheadend-Webinterface; dauerhafte Verkn\u00fcpfung \u00fcber standardisierte XMLTV-Channel-IDs.<\/li>\n<li dir=\"auto\"><strong>Robustes Skript:<\/strong> Prim\u00e4rquelle (<code class=\"font-weight-400 rounded-md bg-state-ghost-hover p-1 text-sm whitespace-normal\" data-testid=\"code-block\">epgshare01<\/code>) mit Fallback (<code class=\"font-weight-400 rounded-md bg-state-ghost-hover p-1 text-sm whitespace-normal\" data-testid=\"code-block\">open-epg<\/code>); umfangreiche Fehlerbehandlung und Logging.<\/li>\n<li dir=\"auto\"><strong>Automatische Updates:<\/strong> T\u00e4glicher Import (z. B. 04:30 Uhr) im Hintergrund; Integration in Systemd-Journal f\u00fcr zentrale \u00dcberwachung.<\/li>\n<\/ul>\n<h4>Voraussetzungen<\/h4>\n<p>&#8211; Tvheadend l\u00e4uft nativ auf Debian (kein Docker)<br \/>\n&#8211; Externer XMLTV-Grabber ist aktiviert (External: XMLTV mit Socket \/var\/lib\/tvheadend\/epggrab\/xmltv.sock)<br \/>\n&#8211; Der Benutzer \u201ehts\u201c existiert und Tvheadend l\u00e4uft unter diesem Benutzer<br \/>\n&#8211; socat ist installiert (`sudo apt install socat`)<br \/>\n&#8211; IPTV-Kan\u00e4le sind bereits in Tvheadend angelegt<\/p>\n<h4>EPG-Grabber einmalig konfigurieren<\/h4>\n<p>1. Tvheadend-Webinterface \u00f6ffnen<br \/>\n\u2192 Configuration \u2192 General \u2192 Base<br \/>\n\u2192 User interface level = Expert \u2192 Save<\/p>\n<p>2. EPG-Grabber aktivieren<br \/>\n\u2192 Configuration \u2192 Channel\/EPG \u2192 EPG Grabber Modules<br \/>\n\u2192 External: XMLTV doppelt anklicken<br \/>\n\u2192 Aktiviert = Ja<br \/>\n\u2192 Priorit\u00e4t = 1<br \/>\n\u2192 Pfad = `\/var\/lib\/tvheadend\/epggrab\/xmltv.sock` (meist schon vorausgef\u00fcllt)<br \/>\n\u2192 Save<\/p>\n<p>3. Retention-Einstellungen setzen<br \/>\n\u2192 Configuration \u2192 Channel\/EPG \u2192 EPG Grabber<br \/>\n\u2192 Speichere EPG periodisch auf Festplatte (Stunden) = 336 oder 720<br \/>\n\u2192 Save EPG to disk after xmltv import = Ja (H\u00e4kchen)<br \/>\n\u2192 Save<\/p>\n<h4>EPG-Quelle ausw\u00e4hlen und testen<\/h4>\n<p>Empfohlene Quellen (Stand 2026):<\/p>\n<table style=\"border-collapse: collapse; width: 100%;\">\n<tbody>\n<tr>\n<td style=\"width: 20%;\">Quelle<\/td>\n<td style=\"width: 20%;\">URL \/ Befehl<\/td>\n<td style=\"width: 20%;\">Gr\u00f6\u00dfe<\/td>\n<td style=\"width: 20%;\">Tage ca.<\/td>\n<td style=\"width: 20%;\">Kommentar<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 20%;\">open-epg (schnell)<\/td>\n<td style=\"width: 20%;\">wget https:\/\/www.open-epg.com\/files\/germany1.xml -O \/tmp\/epg.xml<\/td>\n<td style=\"width: 20%;\">~1\u20135 MB<\/td>\n<td style=\"width: 20%;\">1\u20133 Tage<\/td>\n<td style=\"width: 20%;\">Sehr aktuell, klein &amp; schnell<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 20%;\"><\/td>\n<td style=\"width: 20%;\"><\/td>\n<td style=\"width: 20%;\"><\/td>\n<td style=\"width: 20%;\"><\/td>\n<td style=\"width: 20%;\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Test-Import (nach Download):<\/p>\n<pre class=\"lang:default decode:true\">sudo chown hts:hts \/tmp\/epg.xml\r\nsudo cat \/tmp\/epg.xml | socat - UNIX-CONNECT:\/var\/lib\/tvheadend\/epggrab\/xmltv.sock<\/pre>\n<p>Log pr\u00fcfen (live):<\/p>\n<pre class=\"lang:default decode:true \">sudo journalctl -t tvheadend | tail -n20  #last 20 entries\r\nsudo journalctl -t tvheadend -fn          #livelog<\/pre>\n<p>Wichtige Zeilen:<br \/>\n&#8211; `xmltv: broadcasts tot= &#8230; new= &#8230;` \u2192 Zahl &gt; 0 = Erfolg<br \/>\n&#8211; `epgdb: broadcasts &#8230;` \u2192 zeigt Gesamtzahl<\/p>\n<h4>IPTV-Kan\u00e4le mit EPG verkn\u00fcpfen<\/h4>\n<p>1. Configuration \u2192 Channel\/EPG \u2192 Channels<br \/>\n2. Jeden IPTV-Kanal (z. B. 3sat) bearbeiten<br \/>\n3. Feld <strong>EPG Source<\/strong> oder <strong>XMLTV channel ID<\/strong> anklicken<br \/>\n4. Aus Dropdown den passenden Eintrag w\u00e4hlen (h\u00e4ufig: `3sat.de`, `3sat`, `C3SAT`, `3sat HD`)<br \/>\n5. Speichern<\/p>\n<p>Nach Mapping \u2192 EPG in Web-Interface oder Kodi nach kurzer Zeit sichtbar.<\/p>\n<h4>Automatisches t\u00e4gliches Update (Cron-Script)<\/h4>\n<p>Script erstellen (ggf. germany1.xml und germany2.xml zusammenf\u00fchren)<\/p>\n<pre class=\"lang:default decode:true\">#!\/bin\/bash\r\n# \/usr\/local\/bin\/tvh_epg_update.sh \r\n\r\nset -e\r\n\r\n# ==================== Settings ====================\r\nEPG_URL=\"https:\/\/www.open-epg.com\/files\/germany1.xml\" # EPG_URL=\"https:\/\/www.open-epg.com\/files\/germany2.xml\"\r\nTEMP_XML=\"\/tmp\/epg.xml\"\r\nSOCKET=\"\/var\/lib\/tvheadend\/epggrab\/xmltv.sock\"\r\n\r\n# ==================== Functions ====================\r\nlog() {\r\n    echo \"$*\" | systemd-cat -t tvheadend -p info\r\n}\r\n\r\nerror() {\r\n    echo \"ERROR: $*\" | systemd-cat -t tvheadend -p err\r\n}\r\n\r\n# ==================== Main Logic ====================\r\n\r\nlog \"Starting EPG update\"\r\n\r\n# Remove old files\r\nrm -f \"$TEMP_XML\" 2&gt;\/dev\/null || true\r\n\r\n# Try primary source\r\nlog \"Downloading EPG from $EPG_URL...\"\r\nif wget -q --no-check-certificate -O \"$TEMP_XML\" \"$EPG_URL\"; then\r\n    log \"Download from $EPG_URL successful\"\r\nelse\r\n    MSG=\"Download from $EPG_URL failed. Please consider using WebGrab+Plus as an alternative EPG source.\"\r\n    error \"$MSG\"\r\n    echo \"$MSG\"\r\n    exit 1\r\nfi\r\n\r\n# Check if the file exists\r\nif [ ! -f \"$TEMP_XML\" ]; then\r\n    error \"EPG file $TEMP_XML does not exist\"\r\n    exit 1\r\nfi\r\n\r\n# Set permissions\r\nchown hts:hts \"$TEMP_XML\" || error \"chown failed for $TEMP_XML\"\r\n\r\n# Start import\r\nlog \"Importing EPG from $TEMP_XML into Tvheadend...\"\r\nif cat \"$TEMP_XML\" | socat - UNIX-CONNECT:\"$SOCKET\"; then\r\n    log \"Import completed successfully\"\r\nelse\r\n    error \"Socket import failed for $TEMP_XML\"\r\n    exit 1\r\nfi\r\n\r\n# Clean up\r\nrm -f \"$TEMP_XML\" 2&gt;\/dev\/null || true\r\n\r\nlog \"EPG update fully completed\"\r\nexit 0<\/pre>\n<h4>Script einrichten<\/h4>\n<pre class=\"lang:default decode:true \">sudo nano \/usr\/local\/bin\/tvh_epg_update.sh\r\n# (Inhalt einf\u00fcgen)\r\n\r\nsleep 1\r\nsudo chmod +x \/usr\/local\/bin\/tvh_epg_update.sh\r\nsudo chown root:root \/usr\/local\/bin\/tvh_epg_update.sh<\/pre>\n<h4>Testlauf<\/h4>\n<pre class=\"lang:default decode:true\">sudo \/usr\/local\/bin\/tvh_epg_update.sh\r\nsudo journalctl -u tvheadend -n 100 | grep -i xmltv<\/pre>\n<h4>Cron einrichten (t\u00e4glich 04:30 Uhr)<\/h4>\n<pre class=\"lang:default decode:true \">sudo crontab -e<\/pre>\n<p>Eintrag hinzuf\u00fcgen:<\/p>\n<pre class=\"lang:default decode:true \">30 4 * * * \/usr\/local\/bin\/update_epg.sh<\/pre>\n<hr \/>\n<p>&#8211; EPG wird jetzt t\u00e4glich automatisch aktualisiert<br \/>\n&#8211; Bei Problemen: `\/var\/log\/epg_update.log` und `journalctl -t tvheadend` pr\u00fcfen<br \/>\n&#8211; F\u00fcr noch mehr Tage: im Script weitere wget-Befehle f\u00fcr germany2.xml etc. erg\u00e4nzen und Dateien zusammenf\u00fchren (`cat file1 file2 &gt; combined.xml`)<\/p>\n<hr \/>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2821 alignleft\" src=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2014\/08\/CC_BY_NC_SA.png\" alt=\"CC_BY_NC_SA\" width=\"65\" height=\"23\" \/>by Speefak<\/p>\n","protected":false},"excerpt":{"rendered":"<p>F\u00fcr die Bereitstellung von Elektronischen Programmf\u00fchrern (EPG) f\u00fcr IPTV-Kan\u00e4le in Tvheadend existieren zwei grundlegend verschiedene Ans\u00e4tze: 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\u00b0) \u00fcber DVB-S empfangen werden kann, lassen sich die vom Transponder \u00fcbertragenen EIT\/OTA-EPG-Daten auch f\u00fcr IPTV-Kan\u00e4le nutzen, die selbst [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-8617","post","type-post","status-publish","format-standard","hentry","category-anleitungen"],"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"speefak","author_link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/author\/speefak_oss\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/anleitungen\/\" rel=\"category tag\">Anleitungen<\/a>","rttpg_excerpt":"F\u00fcr die Bereitstellung von Elektronischen Programmf\u00fchrern (EPG) f\u00fcr IPTV-Kan\u00e4le in Tvheadend existieren zwei grundlegend verschiedene Ans\u00e4tze: 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\u00b0) \u00fcber DVB-S empfangen werden kann, lassen sich die vom Transponder \u00fcbertragenen EIT\/OTA-EPG-Daten auch f\u00fcr IPTV-Kan\u00e4le nutzen, die selbst&hellip;","_links":{"self":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8617","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/comments?post=8617"}],"version-history":[{"count":0,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/8617\/revisions"}],"wp:attachment":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/media?parent=8617"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/categories?post=8617"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/tags?post=8617"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}