<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[EPG-Daten via Script]]></title><description><![CDATA[<p dir="auto">Hallo. Heute mal einen kleinen Einblick in mein neustes Projekt, mit etwas KI Unterstützung. Knapp 700 Zeilen Code liefern das hier:<br />
<img src="/assets/uploads/files/1782238629918-ac6d66e6-fd45-4963-8ab1-b005b59877ab-image-resized.jpeg" alt="ac6d66e6-fd45-4963-8ab1-b005b59877ab-image.jpeg" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="/assets/uploads/files/1782238655860-63c26a64-193d-40c1-8000-0d9828ba8031-image-resized.jpeg" alt="63c26a64-193d-40c1-8000-0d9828ba8031-image.jpeg" class=" img-fluid img-markdown" /></p>
<p dir="auto">Ca. 170 Sender. Favoritensteuerung, Senderreihenfolge, automatische Aktualisierung.</p>
<p dir="auto"><img src="/assets/uploads/files/1782238902362-2faf835b-fe3f-4141-9f2a-1838d48d958c-image-resized.jpeg" alt="2faf835b-fe3f-4141-9f2a-1838d48d958c-image.jpeg" class=" img-fluid img-markdown" /><br />
Oder alle anstehenden Sendungen zu einem Sender.</p>
<h1>EPG-TV für ioBroker</h1>
<p dir="auto">Mit diesem Script lassen sich aktuelle TV-Programmdaten (EPG) von über 160 deutschen TV-Sendern direkt in ioBroker integrieren. Die Daten werden automatisch aus einer XMLTV-Quelle geladen und als Datenpunkte zur Verfügung gestellt.</p>
<p dir="auto">Neben den eigentlichen Programminformationen bietet das Script eine komfortable Senderverwaltung mit Favoritenfunktion, individueller Sortierung sowie umfangreichen Filtermöglichkeiten. Dadurch eignet es sich hervorragend für Visualisierungen in Jarvis, VIS oder anderen Dashboards.</p>
<h2>Funktionen</h2>
<ul>
<li>Über 160 deutsche TV-Sender</li>
<li>Free-TV und Pay-TV</li>
<li>Automatischer Import der EPG-Daten</li>
<li>Aktuelle und kommende Sendungen</li>
<li>Senderlogos</li>
<li>Favoritenverwaltung</li>
<li>Individuelle Senderreihenfolge</li>
<li>Filter nach Senderart und Kategorie</li>
<li>Automatische tägliche Aktualisierung</li>
</ul>
<h2>Voraussetzungen</h2>
<p dir="auto">Für das Script werden folgende zusätzliche NPM-Module benötigt:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Modul</th>
<th>Verwendung</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>xml2js</code></td>
<td>Einlesen und Verarbeiten der XMLTV-Daten</td>
</tr>
<tr>
<td><code>user-agents</code></td>
<td>Erzeugung eines Browser-User-Agents für den Abruf der EPG-Daten</td>
</tr>
</tbody>
</table>
<p dir="auto">Die Module können im JavaScript-Adapter unter <strong>„Zusätzliche NPM-Module“</strong> eingetragen werden. Anschließend den JavaScript-Adapter neu starten.</p>
<h2>Visualisierung</h2>
<p dir="auto">Die Ausgabe erfolgt hauptsächlich über den Datenpunkt <code>broadcast_list</code>.</p>
<p dir="auto">Für die Darstellung verwende ich das <strong>JSON-Widget aus VIS Material Design ab Version 0.5.94</strong>. Die Programmdaten werden bereits als fertiges JSON bereitgestellt und können direkt im Widget verarbeitet werden.</p>
<h2>Wichtige Hinweise</h2>
<p dir="auto">Beim ersten Start werden automatisch alle verfügbaren Sender aus der XMLTV-Quelle eingelesen und die benötigten Datenpunkte angelegt.</p>
<p dir="auto">Folgende Datenpunkte werden vollständig vom Script verwaltet und sollten nicht manuell geändert werden:</p>
<ul>
<li><code>sender_json</code></li>
<li><code>active_sender_list</code></li>
<li><code>favorite_sender_list</code></li>
<li><code>broadcast_list</code></li>
</ul>
<p dir="auto">Die Senderbearbeitung erfolgt ausschließlich über die dafür vorgesehenen Datenpunkte im Bereich <code>edit.*</code>.</p>
<h2>Wichtige Datenpunkte</h2>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Datenpunkt</th>
<th>Bedeutung</th>
<th>Verwendung</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>sender_json</code></td>
<td>Interne Senderliste</td>
<td>Wird vom Script zur Senderverwaltung verwendet</td>
</tr>
<tr>
<td><code>active_sender_list</code></td>
<td>Alle aktiven Sender</td>
<td>Für Dropdowns und Senderauswahl</td>
</tr>
<tr>
<td><code>favorite_sender_list</code></td>
<td>Alle Favoritensender</td>
<td>Für Favoritenlisten und Senderauswahl</td>
</tr>
<tr>
<td><code>broadcast_list</code></td>
<td>Programmausgabe</td>
<td>Hauptdatenpunkt für Tabellen, Listen und TV-Guides</td>
</tr>
<tr>
<td><code>selected_channel</code></td>
<td>Ausgewählter Sender</td>
<td>Zeigt aktuelle und kommende Sendungen eines Senders</td>
</tr>
<tr>
<td><code>refresh</code></td>
<td>Manueller Reload</td>
<td>Lädt Sender- und EPG-Daten neu</td>
</tr>
<tr>
<td><code>filter_*</code></td>
<td>Filterfunktionen</td>
<td>Filterung nach Favoriten, Free-/Pay-TV und Kategorien</td>
</tr>
<tr>
<td><code>broadcast_mode</code></td>
<td>Anzeigemodus</td>
<td><code>all</code> = alle Sender, <code>selected</code> = ausgewählter Sender</td>
</tr>
<tr>
<td><code>count</code></td>
<td>Anzahl gefundener Sender</td>
<td>Kontrollwert nach dem Einlesen</td>
</tr>
<tr>
<td><code>max_order_number</code></td>
<td>Höchste vergebene Sendernummer</td>
<td>Hilfswert für die Senderreihenfolge</td>
</tr>
</tbody>
</table>
<h2>Verfügbare Filter</h2>
<ul>
<li>Favoriten</li>
<li>Free-TV</li>
<li>Pay-TV</li>
<li>Film</li>
<li>Serie</li>
<li>Doku</li>
<li>Kinder</li>
<li>Musik</li>
<li>Shopping</li>
<li>Sport</li>
<li>Nachrichten</li>
<li>Vollprogramm</li>
</ul>
<h2>Automatische Aktualisierung</h2>
<ul>
<li>Täglicher EPG-Import um <strong>03:00 Uhr</strong></li>
<li>Manueller Reload über <code>refresh</code></li>
<li>Laufende Aktualisierung der Programmliste</li>
</ul>
<h2>Verwendung</h2>
<h3>Alle aktuellen Sendungen anzeigen</h3>
<p dir="auto"><code>broadcast_mode = all</code></p>
<p dir="auto">Zeigt die aktuell laufenden Sendungen aller aktiven Sender in <code>broadcast_list</code>.</p>
<h3>Einzelnen Sender anzeigen</h3>
<p dir="auto"><code>selected_channel</code> auf die gewünschte Sender-ID setzen.</p>
<p dir="auto">Anschließend enthält <code>broadcast_list</code> die aktuelle sowie alle kommenden Sendungen dieses Senders.</p>
<h3>Favoriten verwenden</h3>
<p dir="auto">Sender können als Favoriten markiert und über <code>favorite_sender_list</code> oder den Filter <code>filter_favorite</code> verwendet werden.</p>
<h3>Sender filtern</h3>
<p dir="auto">Die Ausgabe kann über die verschiedenen <code>filter_*</code> Datenpunkte nach Senderart oder Kategorie eingeschränkt werden.</p>
<p dir="auto"><em><strong>Hinweis<br />
Dieses Script wurde mit Unterstützung von KI entwickelt und anschließend in ioBroker getestet und angepasst. Trotz umfangreicher Tests können Fehler oder Verbesserungspotenziale nicht ausgeschlossen werden. Rückmeldungen, Fehlerberichte und Verbesserungsvorschläge sind daher jederzeit willkommen.</strong></em></p>
<h2>Hier das Script:</h2>
<pre><code>// === EPG - TV-Daten ===
 
//Erst-Version 1.0.0 - 22.06.2026
//Version 1.0.1 - 24.06.2026
//Ersteller Ro75.
 
//Voraussetzungen (Version 1.0.1 getestet mit)
//NodeJS: 22.22.x
//Javascript-Adapter: 9.0.18
//Admin-Adapter: 7.8.23
//js-controler: 7.2.2

//********** START KONFIGURATION **********
const root     = "0_userdata.0.epg.";
const data     = root + "data.";
const sender   = root + "sender_json";

//********** AB HIER NICHTS MEHR ÄNDERN **********
const xml2js = require("xml2js");
const UserAgent = require("user-agents");

let select_channel_mode = 0;
let loading = false;

const CONFIG = {
    "1":   { url_id: "1-2-3tv.de",                art: "Free", typ: "Shopping",      name: "1-2-3.tv" },
    "2":   { url_id: "13THSTREET.de",             art: "Pay",  typ: "Film",          name: "13th Street" },
    "3":   { url_id: "3sat.de",                   art: "Free", typ: "Vollprogramm",  name: "3sat" },
    "4":   { url_id: "atv.de",                    art: "Free", typ: "Vollprogramm",  name: "ATV" },
    "5":   { url_id: "AnimalPlanet.de",           art: "Pay",  typ: "Doku",          name: "Animal Planet" },
    "6":   { url_id: "ANIXESerie.de",             art: "Free", typ: "Serie",         name: "ANIXE Serie" },
    "7":   { url_id: "ANIXE+.de",                 art: "Free", typ: "Vollprogramm",  name: "ANIXE+" },
    "8":   { url_id: "ARD-alpha.de",              art: "Free", typ: "Doku",          name: "ARD alpha" },
    "9":   { url_id: "ARTE.de",                   art: "Free", typ: "Doku",          name: "ARTE" },
    "10":  { url_id: "automotorundsport.de",      art: "Pay",  typ: "Doku",          name: "auto motor und sport" },
    "11":  { url_id: "AXNBlack.de",               art: "Pay",  typ: "Film",          name: "AXN Black" },
    "12":  { url_id: "AXNWhite.de",               art: "Pay",  typ: "Serie",         name: "AXN White" },
    "13":  { url_id: "Beate-UhseTV.de",           art: "Pay",  typ: "Film",          name: "Beate-Uhse.TV" },
    "14":  { url_id: "BR.de",                     art: "Free", typ: "Vollprogramm",  name: "BR Fernsehen" },
    "15":  { url_id: "CartoonNetwork.de",         art: "Pay",  typ: "Kinder",        name: "Cartoon Network" },
    "16":  { url_id: "Cartoonito.de",             art: "Pay",  typ: "Kinder",        name: "Cartoonito" },
    "17":  { url_id: "ComedyCentral.de",          art: "Free", typ: "Serie",         name: "Comedy Central" },
    "18":  { url_id: "Crime+Investigation.de",    art: "Pay",  typ: "Doku",          name: "Crime + Investigation" },
    "19":  { url_id: "CuriosityChannel.de",       art: "Pay",  typ: "Doku",          name: "Curiosity Channel" },
    "20":  { url_id: "DasErste.de",               art: "Free", typ: "Vollprogramm",  name: "Das Erste" },
    "21":  { url_id: "DAZN.de",                   art: "Pay",  typ: "Sport",         name: "DAZN" },
    "22":  { url_id: "DAZN1.de",                  art: "Pay",  typ: "Sport",         name: "DAZN 1" },
    "23":  { url_id: "DAZN2.de",                  art: "Pay",  typ: "Sport",         name: "DAZN 2" },
    "24":  { url_id: "DeluxeDanceByKontor.de",    art: "Free", typ: "Musik",         name: "DELUXE DANCE by Kontor" },
    "25":  { url_id: "DeluxeFlashback.de",        art: "Free", typ: "Musik",         name: "DELUXE FLASHBACK" },
    "26":  { url_id: "DeluxeLounge.de",           art: "Free", typ: "Musik",         name: "DELUXE LOUNGE" },
    "27":  { url_id: "DeluxeMusic.de",            art: "Free", typ: "Musik",         name: "DELUXE MUSIC" },
    "28":  { url_id: "DeluxeRap.de",              art: "Free", typ: "Musik",         name: "DELUXE RAP" },
    "29":  { url_id: "DeluxeRock.de",             art: "Free", typ: "Musik",         name: "DELUXE ROCK" },
    "30":  { url_id: "DeutschesMusikFernsehen.de",art: "Free", typ: "Musik",         name: "Deutsches Musik Fernsehen" },
    "31":  { url_id: "Discovery.de",              art: "Pay",  typ: "Doku",          name: "Discovery Channel" },
    "32":  { url_id: "DisneyChannel.de",          art: "Free", typ: "Kinder",        name: "Disney Channel" },
    "33":  { url_id: "DMAX.de",                   art: "Free", typ: "Doku",          name: "DMAX" },
    "34":  { url_id: "dokusat.de",                art: "Free", typ: "Doku",          name: "dokuSAT" },
    "35":  { url_id: "EDGESport.de",              art: "Pay",  typ: "Sport",         name: "EDGE Sport" },
    "36":  { url_id: "emsTV.de",                  art: "Free", typ: "Musik",         name: "ems TV" },
    "37":  { url_id: "eSPORTS1.de",               art: "Pay",  typ: "Sport",         name: "eSPORTS1" },
    "38":  { url_id: "Eurosport1.de",             art: "Free", typ: "Sport",         name: "Eurosport 1" },
    "39":  { url_id: "Eurosport2.de",             art: "Pay",  typ: "Sport",         name: "Eurosport 2" },
    "40":  { url_id: "Heimatkanal.de",            art: "Pay",  typ: "Film",          name: "Heimatkanal" },
    "41":  { url_id: "HGTV.de",                   art: "Free", typ: "Doku",          name: "HGTV" },
    "42":  { url_id: "HISTORY.de",                art: "Pay",  typ: "Doku",          name: "HISTORY" },
    "43":  { url_id: "hr.de",                     art: "Free", typ: "Vollprogramm",  name: "hr Fernsehen" },
    "44":  { url_id: "HSE.de",                    art: "Free", typ: "Shopping",      name: "HSE" },
    "45":  { url_id: "HSE24.de",                  art: "Free", typ: "Shopping",      name: "HSE24" },
    "46":  { url_id: "Jukebox.de",                art: "Free", typ: "Musik",         name: "Jukebox" },
    "47":  { url_id: "JustCooking.de",            art: "Free", typ: "Doku",          name: "Just Cooking" },
    "48":  { url_id: "KabelEins.de",              art: "Free", typ: "Vollprogramm",  name: "kabel eins" },
    "49":  { url_id: "KabelEinsCLASSICS.de",      art: "Pay",  typ: "Film",          name: "kabel eins CLASSICS" },
    "50":  { url_id: "KabelEinsDoku.de",          art: "Free", typ: "Doku",          name: "kabel eins Doku" },
    "51":  { url_id: "KiKA.de",                   art: "Free", typ: "Kinder",        name: "KiKA" },
    "52":  { url_id: "KinoweltTV.de",             art: "Pay",  typ: "Film",          name: "Kinowelt TV" },
    "53":  { url_id: "MDRSachsen.de",             art: "Free", typ: "Vollprogramm",  name: "MDR Sachsen" },
    "54":  { url_id: "MTV.de",                    art: "Pay",  typ: "Musik",         name: "MTV" },
    "55":  { url_id: "MTV00s.de",                 art: "Pay",  typ: "Musik",         name: "MTV 00s" },
    "56":  { url_id: "MTV80s.de",                 art: "Pay",  typ: "Musik",         name: "MTV 80s" },
    "57":  { url_id: "MTV90s.de",                 art: "Pay",  typ: "Musik",         name: "MTV 90s" },
    "58":  { url_id: "MTVHits.de",                art: "Pay",  typ: "Musik",         name: "MTV Hits" },
    "59":  { url_id: "MTVLive.de",                art: "Pay",  typ: "Musik",         name: "MTV Live" },
    "60":  { url_id: "n-tv.de",                   art: "Free", typ: "Doku",          name: "n-tv" },
    "61":  { url_id: "N24Doku.de",                art: "Free", typ: "Doku",          name: "N24 Doku" },
    "62":  { url_id: "NationalGeographic.de",     art: "Pay",  typ: "Doku",          name: "National Geographic" },
    "63":  { url_id: "NationalGeographicWILD.de", art: "Pay",  typ: "Doku",          name: "Nat Geo Wild" },
    "64":  { url_id: "NDR.de",                    art: "Free", typ: "Vollprogramm",  name: "NDR Fernsehen" },
    "65":  { url_id: "Nick.de",                   art: "Free", typ: "Kinder",        name: "Nick" },
    "66":  { url_id: "NickComedyCentral+1.de",    art: "Free", typ: "Kinder",        name: "Nick / CC +1" },
    "67":  { url_id: "NickJr.de",                 art: "Pay",  typ: "Kinder",        name: "Nick Jr." },
    "68":  { url_id: "Nicktoons.de",              art: "Pay",  typ: "Kinder",        name: "Nicktoons" },
    "69":  { url_id: "NITRO.de",                  art: "Free", typ: "Vollprogramm",  name: "NITRO" },
    "70":  { url_id: "ONE.de",                    art: "Free", typ: "Vollprogramm",  name: "ONE" },
    "71":  { url_id: "phoenix.de",                art: "Free", typ: "Doku",          name: "phoenix" },
    "72":  { url_id: "ProSieben.de",              art: "Free", typ: "Vollprogramm",  name: "ProSieben" },
    "73":  { url_id: "ProSiebenFUN.de",           art: "Pay",  typ: "Serie",         name: "ProSieben FUN" },
    "74":  { url_id: "ProSiebenMAXX.de",          art: "Free", typ: "Vollprogramm",  name: "ProSieben MAXX" },
    "75":  { url_id: "QVC.de",                    art: "Free", typ: "Shopping",      name: "QVC" },
    "76":  { url_id: "rbbBrandenburg.de",         art: "Free", typ: "Vollprogramm",  name: "rbb Brandenburg" },
    "77":  { url_id: "RiC.de",                    art: "Free", typ: "Kinder",        name: "RiC" },
    "78":  { url_id: "RomanceTV.de",              art: "Pay",  typ: "Film",          name: "Romance TV" },
    "79":  { url_id: "RTL.de",                    art: "Free", typ: "Vollprogramm",  name: "RTL" },
    "80":  { url_id: "RTLCrime.de",               art: "Pay",  typ: "Serie",         name: "RTL Crime" },
    "81":  { url_id: "RTLLiving.de",              art: "Pay",  typ: "Doku",          name: "RTL Living" },
    "82":  { url_id: "RTLPassion.de",             art: "Pay",  typ: "Serie",         name: "RTL Passion" },
    "83":  { url_id: "RTLplus.de",                art: "Free", typ: "Serie",         name: "RTLplus" },
    "84":  { url_id: "RTLup.de",                  art: "Free", typ: "Vollprogramm",  name: "RTLup" },
    "85":  { url_id: "RTLZWEI.de",                art: "Free", typ: "Vollprogramm",  name: "RTLZWEI" },
    "86":  { url_id: "SAT1.de",                   art: "Free", typ: "Vollprogramm",  name: "SAT.1" },
    "87":  { url_id: "SAT1emotions.de",           art: "Pay",  typ: "Serie",         name: "SAT.1 emotions" },
    "88":  { url_id: "SAT1GOLD.de",               art: "Free", typ: "Vollprogramm",  name: "SAT.1 GOLD" },
    "89":  { url_id: "SchlagerDeluxe.de",         art: "Free", typ: "Musik",         name: "Schlager Deluxe" },
    "90":  { url_id: "SchlagerparadiesTV.de",     art: "Free", typ: "Musik",         name: "Schlagerparadies TV" },
    "91":  { url_id: "sixx.de",                   art: "Free", typ: "Vollprogramm",  name: "sixx" },
    "92":  { url_id: "SkyCinemaAction.de",        art: "Pay",  typ: "Film",          name: "Sky Cinema Action" },
    "93":  { url_id: "SkyCinemaBlockbuster.de",   art: "Pay",  typ: "Film",          name: "Sky Cinema Blockbuster" },
    "94":  { url_id: "SkyCinemaClassics.de",      art: "Pay",  typ: "Film",          name: "Sky Cinema Classics" },
    "96":  { url_id: "SkyCinemaPremiere.de",      art: "Pay",  typ: "Film",          name: "Sky Cinema Premiere" },
    "97":  { url_id: "SkyCrime.de",               art: "Pay",  typ: "Serie",         name: "Sky Crime" },
    "98":  { url_id: "SkyDocumentaries.de",       art: "Pay",  typ: "Doku",          name: "Sky Documentaries" },
    "99":  { url_id: "SkyNature.de",              art: "Pay",  typ: "Doku",          name: "Sky Nature" },
    "100": { url_id: "SkyOne.de",                 art: "Pay",  typ: "Vollprogramm",  name: "Sky One" },
    "101": { url_id: "SkySciFi.de",               art: "Pay",  typ: "Film",          name: "Sky Sci-Fi" },
    "102": { url_id: "SkyShowcase.de",            art: "Pay",  typ: "Vollprogramm",  name: "Sky Showcase" },
    "103": { url_id: "SkySport1.de",              art: "Pay",  typ: "Sport",         name: "Sky Sport 1" },
    "104": { url_id: "SkySport10.de",             art: "Pay",  typ: "Sport",         name: "Sky Sport 10" },
    "105": { url_id: "SkySport2.de",              art: "Pay",  typ: "Sport",         name: "Sky Sport 2" },
    "106": { url_id: "SkySport3.de",              art: "Pay",  typ: "Sport",         name: "Sky Sport 3" },
    "107": { url_id: "SkySport4.de",              art: "Pay",  typ: "Sport",         name: "Sky Sport 4" },
    "108": { url_id: "SkySport5.de",              art: "Pay",  typ: "Sport",         name: "Sky Sport 5" },
    "109": { url_id: "SkySport6.de",              art: "Pay",  typ: "Sport",         name: "Sky Sport 6" },
    "110": { url_id: "SkySport7.de",              art: "Pay",  typ: "Sport",         name: "Sky Sport 7" },
    "111": { url_id: "SkySport8.de",              art: "Pay",  typ: "Sport",         name: "Sky Sport 8" },
    "112": { url_id: "SkySport9.de",              art: "Pay",  typ: "Sport",         name: "Sky Sport 9" },
    "113": { url_id: "SkySportAustria1.de",       art: "Pay",  typ: "Sport",         name: "Sky Sport Austria 1" },
    "114": { url_id: "SkySportBundesliga.de",     art: "Pay",  typ: "Sport",         name: "Sky Sport Bundesliga" },
    "115": { url_id: "SkySportBundesliga1.de",    art: "Pay",  typ: "Sport",         name: "Sky Sport Bundesliga 1" },
    "116": { url_id: "SkySportBundesliga10.de",   art: "Pay",  typ: "Sport",         name: "Sky Sport Bundesliga 10" },
    "117": { url_id: "SkySportBundesliga2.de",    art: "Pay",  typ: "Sport",         name: "Sky Sport Bundesliga 2" },
    "118": { url_id: "SkySportBundesliga3.de",    art: "Pay",  typ: "Sport",         name: "Sky Sport Bundesliga 3" },
    "119": { url_id: "SkySportBundesliga4.de",    art: "Pay",  typ: "Sport",         name: "Sky Sport Bundesliga 4" },
    "120": { url_id: "SkySportBundesliga5.de",    art: "Pay",  typ: "Sport",         name: "Sky Sport Bundesliga 5" },
    "121": { url_id: "SkySportBundesliga6.de",    art: "Pay",  typ: "Sport",         name: "Sky Sport Bundesliga 6" },
    "122": { url_id: "SkySportBundesliga7.de",    art: "Pay",  typ: "Sport",         name: "Sky Sport Bundesliga 7" },
    "123": { url_id: "SkySportBundesliga8.de",    art: "Pay",  typ: "Sport",         name: "Sky Sport Bundesliga 8" },
    "124": { url_id: "SkySportBundesliga9.de",    art: "Pay",  typ: "Sport",         name: "Sky Sport Bundesliga 9" },
    "125": { url_id: "SkySportBundesligaUHD.de",  art: "Pay",  typ: "Sport",         name: "Sky Sport Bundesliga UHD" },
    "126": { url_id: "SkySportF1.de",             art: "Pay",  typ: "Sport",         name: "Sky Sport F1" },
    "127": { url_id: "SkySportGolf.de",           art: "Pay",  typ: "Sport",         name: "Sky Sport Golf" },
    "128": { url_id: "SkySportKompakt1.de",       art: "Pay",  typ: "Sport",         name: "Sky Sport Kompakt 1" },
    "129": { url_id: "SkySportMix.de",            art: "Pay",  typ: "Sport",         name: "Sky Sport Mix" },
    "130": { url_id: "SkySportNews.de",           art: "Pay",  typ: "Sport",         name: "Sky Sport News" },
    "131": { url_id: "SkySportPremierLeague.de",  art: "Pay",  typ: "Sport",         name: "Sky Sport Premier League" },
    "132": { url_id: "SkySportTennis.de",         art: "Pay",  typ: "Sport",         name: "Sky Sport Tennis" },
    "133": { url_id: "SkySportTopEvent.de",       art: "Pay",  typ: "Sport",         name: "Sky Sport Top Event" },
    "134": { url_id: "SkySportUHD.de",            art: "Pay",  typ: "Sport",         name: "Sky Sport UHD" },
    "135": { url_id: "SkyAtlantic.de",            art: "Pay",  typ: "Serie",         name: "Sky Atlantic" },
    "136": { url_id: "SkyKrimi.de",               art: "Pay",  typ: "Serie",         name: "Sky Krimi" },
    "137": { url_id: "sonnenklarTV.de",           art: "Free", typ: "Shopping",      name: "sonnenklar.TV" },
    "138": { url_id: "SpiegelGeschichte.de",      art: "Pay",  typ: "Doku",          name: "Spiegel Geschichte" },
    "139": { url_id: "SPORT1.de",                 art: "Free", typ: "Sport",         name: "SPORT1" },
    "140": { url_id: "SPORT1+.de",                art: "Pay",  typ: "Sport",         name: "SPORT1+" },
    "141": { url_id: "SRFernsehen.de",            art: "Free", typ: "Vollprogramm",  name: "SR Fernsehen" },
    "142": { url_id: "SuperRTL.de",               art: "Free", typ: "Kinder",        name: "SUPER RTL" },
    "143": { url_id: "SWRBW.de",                  art: "Free", typ: "Vollprogramm",  name: "SWR BW" },
    "144": { url_id: "tagesschau24.de",           art: "Free", typ: "Doku",          name: "tagesschau24" },
    "145": { url_id: "Tele5.de",                  art: "Free", typ: "Film",          name: "Tele 5" },
    "146": { url_id: "TLC.de",                    art: "Free", typ: "Doku",          name: "TLC" },
    "147": { url_id: "TOGGOplus.de",              art: "Free", typ: "Kinder",        name: "TOGGO plus" },
    "148": { url_id: "UniversalTV.de",            art: "Pay",  typ: "Serie",         name: "Universal TV" },
    "149": { url_id: "VolksmusikTV.de",           art: "Free", typ: "Musik",         name: "Volksmusik TV" },
    "150": { url_id: "VOX.de",                    art: "Free", typ: "Vollprogramm",  name: "VOX" },
    "151": { url_id: "VOXup.de",                  art: "Free", typ: "Vollprogramm",  name: "VOXup" },
    "152": { url_id: "WaidwerkTV.de",             art: "Pay",  typ: "Doku",          name: "Waidwerk TV" },
    "153": { url_id: "WarnerTVComedy.de",         art: "Pay",  typ: "Serie",         name: "Warner TV Comedy" },
    "154": { url_id: "WarnerTVFilm.de",           art: "Pay",  typ: "Film",          name: "Warner TV Film" },
    "155": { url_id: "WarnerTVSerie.de",          art: "Pay",  typ: "Serie",         name: "Warner TV Serie" },
    "156": { url_id: "WDR.de",                    art: "Free", typ: "Vollprogramm",  name: "WDR Fernsehen" },
    "157": { url_id: "WELT.de",                   art: "Free", typ: "Doku",          name: "WELT" },
    "158": { url_id: "WeltderWunder.de",          art: "Free", typ: "Doku",          name: "Welt der Wunder" },
    "159": { url_id: "ZDF.de",                    art: "Free", typ: "Vollprogramm",  name: "ZDF" },
    "160": { url_id: "zdf_neo.de",                art: "Free", typ: "Vollprogramm",  name: "ZDFneo" },
    "161": { url_id: "ZDFinfo.de",                art: "Free", typ: "Doku",          name: "ZDFinfo" }
};

async function smartCreateState(id, value, options = {}) {
    if (existsState(id)) return;
    await createState(id, value, options);
}

function sleepMs(ms) {
    return new Promise(resolve =&gt; setTimeout(resolve, ms));
}

const MAP_URL_TO_ID = {};
for (const key in CONFIG) MAP_URL_TO_ID[CONFIG[key].url_id] = Number(key);

function parseXmltvTime(t) {
    const [stamp, offset] = t.split(" ");
    const d = new Date(`${stamp.slice(0,4)}-${stamp.slice(4,6)}-${stamp.slice(6,8)}T${stamp.slice(8,10)}:${stamp.slice(10,12)}:${stamp.slice(12,14)}${offset}`);
    return `${String(d.getDate()).padStart(2,"0")}.${String(d.getMonth()+1).padStart(2,"0")}.${d.getFullYear()} ` + `${String(d.getHours()).padStart(2,"0")}:${String(d.getMinutes()).padStart(2,"0")}:${String(d.getSeconds()).padStart(2,"0")}`;
}

function parseGermanDateTime(str) {
    const [datePart, timePart] = str.split(" ");
    const [day, month, year] = datePart.split(".").map(Number);
    const [hour, minute, second] = timePart.split(":").map(Number);
    return new Date(year, month - 1, day, hour, minute, second).getTime();
}

function setStateIfChanged(id, value, STOPPED = false) {
    if (STOPPED) return;

    const state = getState(id);
    if (!state) return;

    const old = state.val;
    const isObject = v =&gt; v !== null &amp;&amp; typeof v === "object";

    if (isObject(value)) {
        const newStr = JSON.stringify(value);
        let oldStr = null;

        if (typeof old === "string") oldStr = old;
        else if (isObject(old)) oldStr = JSON.stringify(old);

        if (newStr === oldStr) return;
        return setState(id, newStr, true);
    }

    if (old === value) return;
    setState(id, value, true);
}

async function main() {
    loading = true;
    await smartCreateState(sender, "[]", {name: "Senderliste", type: "string", read: true, write: false});
    await smartCreateState(root + "count", 0, {name: "Anzahl", type: "number", read: true, write: false});
    await smartCreateState(root + "refresh", false, {name: "Aktualisieren", type: "boolean", read: true, write: true});

    await smartCreateState(root + "filter_favorite", false, {name: "Filter nur Favoriten", type: "boolean", read: true, write: true});
    await smartCreateState(root + "filter_free", false, {name: "Filter nur Free-TV", type: "boolean", read: true, write: true});
    await smartCreateState(root + "filter_pay", false, {name: "Filter nur Pay-TV", type: "boolean", read: true, write: true});
    await smartCreateState(root + "filter_typ_film", false, {name: "Filter Typ Film", type: "boolean", read: true, write: true});
    await smartCreateState(root + "filter_typ_serie", false, {name: "Filter Typ Serie", type: "boolean", read: true, write: true});
    await smartCreateState(root + "filter_typ_doku", false, {name: "Filter Typ Doku", type: "boolean", read: true, write: true});
    await smartCreateState(root + "filter_typ_kinder", false, {name: "Filter Typ Kinder", type: "boolean", read: true, write: true});
    await smartCreateState(root + "filter_typ_musik", false, {name: "Filter Typ Musik", type: "boolean", read: true, write: true});
    await smartCreateState(root + "filter_typ_shopping", false, {name: "Filter Typ Shopping", type: "boolean", read: true, write: true});
    await smartCreateState(root + "filter_typ_sport", false, {name: "Filter Typ Sport", type: "boolean", read: true, write: true});
    await smartCreateState(root + "filter_typ_nachrichten", false, {name: "Filter Typ Nachrichten", type: "boolean", read: true, write: true});
    await smartCreateState(root + "filter_typ_vollprogramm", false, {name: "Filter Typ Vollprogramm", type: "boolean", read: true, write: true});

    await smartCreateState(root + "broadcast_mode", "all", {name: "Broadcast Modus", type: "string", read: true, write: true});
    await smartCreateState(root + "broadcast_list", "[]", {name: "aktuelle Sendungen", type: "string", read: true, write: false});
    await smartCreateState(root + "selected_channel", 0, {name: "Ausgewählter Sender", type: "number", read: true, write: true});
    await smartCreateState(root + "selected_channel_favorite", 0, {name: "Ausgewählter Favorit-Sender", type: "number", read: true, write: true});
    await smartCreateState(root + "active_sender_list", "[]", {name: "alle aktiven Sender mit ID", type: "string", read: true, write: false});
    await smartCreateState(root + "favorite_sender_list", "[]", {name: "alle Favoriten mit ID", type: "string", read: true, write: false});
    await smartCreateState(root + "max_order_number", 0, {name: "Höchste vergebene Sendernummer", type: "number", read: true, write: false});
    await smartCreateState(root + "sender_edit_list", "[]", {name: "Editierungsliste", type: "string", read: true, write: true});

    await smartCreateState(root + "edit.active", true, { name: "Aktiv", type: "boolean", read: true, write: true });
    await smartCreateState(root + "edit.favorite", false, { name: "Favorit", type: "boolean", read: true, write: true });
    await smartCreateState(root + "edit.icon_url", "", { name: "Icon URL", type: "string", read: true, write: true });
    await smartCreateState(root + "edit.art", "", { name: "Art", type: "string", read: true, write: false });
    await smartCreateState(root + "edit.typ", "", { name: "Typ", type: "string", read: true, write: false });
    await smartCreateState(root + "edit.name", "", { name: "Name", type: "string", read: true, write: true });
    await smartCreateState(root + "edit.order", 0, {name: "Sender Reihenfolge", type: "number", read: true, write: true});
    await smartCreateState(root + "edit.save", false, { name: "Speichern", type: "boolean", read: true, write: true });

    await sleepMs(200);
    await loadChannelsAndProgrammes();
    await sleepMs(500);
    await createSenderList("active");
    await createSenderList("favorite");
    await sleepMs(200);
    await initSenderEditList();
    await sleepMs(2000);
    
    await updateAllActiveBroadcasts();

    registerTriggers();
    loading = false;
}
main();

function senderPassesFilters(internal_id) {
    const base = data + internal_id;

    const active = getState(base + ".active")?.val;
    if (!active) return false;

    const favoriteOnly = getState(root + "filter_favorite")?.val === true;
    if (favoriteOnly) {
        const fav = getState(base + ".favorite")?.val;
        if (!fav) return false;
    }

    const allowedArt = [];
    if (getState(root + "filter_free")?.val === true) allowedArt.push("Free");
    if (getState(root + "filter_pay")?.val === true)  allowedArt.push("Pay");

    const art = getState(base + ".art")?.val;

    if (allowedArt.length &gt; 0 &amp;&amp; !allowedArt.includes(art)) return false;

    const senderTyp = getState(base + ".typ")?.val;

    const allowedTypes = [];
    if (getState(root + "filter_typ_film")?.val === true) allowedTypes.push("Film");
    if (getState(root + "filter_typ_serie")?.val === true) allowedTypes.push("Serie");
    if (getState(root + "filter_typ_doku")?.val === true) allowedTypes.push("Doku");
    if (getState(root + "filter_typ_kinder")?.val === true) allowedTypes.push("Kinder");
    if (getState(root + "filter_typ_musik")?.val === true) allowedTypes.push("Musik");
    if (getState(root + "filter_typ_shopping")?.val === true) allowedTypes.push("Shopping");
    if (getState(root + "filter_typ_sport")?.val === true) allowedTypes.push("Sport");
    if (getState(root + "filter_typ_nachrichten")?.val === true) allowedTypes.push("Nachrichten");
    if (getState(root + "filter_typ_vollprogramm")?.val === true) allowedTypes.push("Vollprogramm");

    if (allowedTypes.length &gt; 0 &amp;&amp; !allowedTypes.includes(senderTyp)) return false;

    return true;
}

async function updateMaxOrderNumber() {
    const senderList = JSON.parse(getState(sender).val || "[]");
    let max = 0;

    for (const s of senderList) {
        const order = getState(data + s.internal_id + ".order")?.val || 0;
        if (order &gt; max) max = order;
    }

    setStateIfChanged(root + "max_order_number", max);
    return max;
}

async function loadSenderIntoEdit(id) {
    const base = data + id;

    setStateIfChanged(root + "edit.active",   getState(base + ".active")?.val || false);
    setStateIfChanged(root + "edit.favorite", getState(base + ".favorite")?.val || false);
    setStateIfChanged(root + "edit.icon_url", getState(base + ".icon_url")?.val || "");
    setStateIfChanged(root + "edit.art",      getState(base + ".art")?.val || "");
    setStateIfChanged(root + "edit.typ",      getState(base + ".typ")?.val || "");
    setStateIfChanged(root + "edit.name",     getState(base + ".name")?.val || "");
    setStateIfChanged(root + "edit.order",    getState(base + ".order")?.val || 0);
}

async function saveEditToSender(id) {
    const base = data + id;

    setStateIfChanged(base + ".active",   getState(root + "edit.active")?.val);
    setStateIfChanged(base + ".favorite", getState(root + "edit.favorite")?.val);
    setStateIfChanged(base + ".order",    getState(root + "edit.order")?.val);
}

async function createEditSenderList() {
    const result = [];
    const senderList = JSON.parse(getState(sender).val || "[]");

    for (const s of senderList) {
        const base  = data + s.internal_id;

        const name     = getState(base + ".name")?.val || "";
        const order    = Number(getState(base + ".order")?.val || 0);
        const favorite = getState(base + ".favorite")?.val === true;
        const active   = getState(base + ".active")?.val === true;

        result.push({
            text: name,
            value: s.internal_id,
            order: order,
            favorite: favorite,
            active: active
        });
    }

    result.sort((a, b) =&gt; {
        const oa = a.order;
        const ob = b.order;

        if (oa &gt; 0 &amp;&amp; ob === 0) return -1;
        if (oa === 0 &amp;&amp; ob &gt; 0) return 1;

        if (oa &gt; 0 &amp;&amp; ob &gt; 0) return oa - ob;

        return a.text.localeCompare(b.text);
    });

    return result;
}

async function initSenderEditList() {
    const list = await createEditSenderList();
    setStateIfChanged(root + "sender_edit_list", JSON.stringify(list));
}

async function loadChannelsAndProgrammes() {
    try {
        const ua = new UserAgent().toString();

        const response = await httpGetAsync("https://iptv-epg.org/files/epg-de.xml", { timeout: 20000, headers: { "User-Agent": ua } });
        if (!response || response.statusCode !== 200) return;

        const xml = response.data;
        const result = await xml2js.parseStringPromise(xml);

        const channels = result.tv.channel
            .filter(ch =&gt; MAP_URL_TO_ID[ch.$.id])
            .map(ch =&gt; ({
                id: ch.$.id,
                name: Array.isArray(ch["display-name"]) ? (typeof ch["display-name"][0] === "string" ? ch["display-name"][0] : ch["display-name"][0]._ || "") : "",
                internal_id: MAP_URL_TO_ID[ch.$.id],
                icon_url: ch.icon?.[0]?.$.src || ""
            }))
            .sort((a, b) =&gt; a.internal_id - b.internal_id);

        setStateIfChanged(root + "count", channels.length);
        setStateIfChanged(sender, JSON.stringify(channels.map(c =&gt; ({id: c.id, name: CONFIG[c.internal_id].name, internal_id: c.internal_id}))));

        const programmes = result.tv.programme
            .filter(p =&gt; MAP_URL_TO_ID[p.$.channel])
            .map(p =&gt; ({
                internal_id: MAP_URL_TO_ID[p.$.channel],
                start: parseXmltvTime(p.$.start),
                stop:  parseXmltvTime(p.$.stop),
                title: Array.isArray(p.title) ? (p.title[0]._ || p.title[0]) : "",
                desc:  Array.isArray(p.desc)  ? (p.desc[0]._  || p.desc[0])  : "",
                date:  Array.isArray(p.date)  ? p.date[0] : "",
                episode: Array.isArray(p["episode-num"]) ? p["episode-num"][0] : "",
                categories: Array.isArray(p.category) ? p.category.map(c =&gt; (typeof c === "string" ? c : c._ || "")) : [],
                icon: p.icon?.[0]?.$.src || ""
            }));

        const grouped = {};
        for (const p of programmes) {
            if (!grouped[p.internal_id]) grouped[p.internal_id] = [];
            grouped[p.internal_id].push(p);
        }

        for (const ch of channels) {
            const list = grouped[ch.internal_id] || [];
            const base = data + ch.internal_id;

            const now = Date.now();
            const filtered = list.filter(p =&gt; {
                const stopTs = new Date(
                    p.stop.slice(6,10) + "-" + p.stop.slice(3,5) + "-" + p.stop.slice(0,2) + "T" +
                    p.stop.slice(11,19)
                ).getTime();
                return stopTs &gt;= now;
            });

            // internal_id aus JSON entfernen
            const cleaned = filtered.map(p =&gt; {
                const { internal_id, ...rest } = p;
                return rest;
            });

            await smartCreateState(base + ".broadcast", "[]", { name: "Sendungen", type: "string", read: true, write: false });
            await smartCreateState(base + ".active", true, { name: "Aktiv", type: "boolean", read: true, write: true });
            await smartCreateState(base + ".favorite", false, { name: "Favorit", type: "boolean", read: true, write: true });
            await smartCreateState(base + ".icon_url", ch.icon_url, { name: "Icon URL", type: "string", read: true, write: true });
            await smartCreateState(base + ".art", CONFIG[ch.internal_id].art, { name: "Art", type: "string", read: true, write: false });
            await smartCreateState(base + ".typ", CONFIG[ch.internal_id].typ, { name: "Typ", type: "string", read: true, write: false });
            await smartCreateState(base + ".name", CONFIG[ch.internal_id].name, { name: "Name", type: "string", read: true, write: true });
            await smartCreateState(base + ".order", 0, {name: "Sender Reihenfolge", type: "number", read: true, write: true});
            setStateIfChanged(base + ".broadcast", JSON.stringify(cleaned));
        }
    } catch (err) {
        log(err, "error");
    }
}

async function createSenderList(mode) {
    const result = [];
    const senderList = JSON.parse(getState(sender).val || "[]");

    for (const s of senderList) {
        const base = data + s.internal_id;

        if (mode === "favorite") {
            const favorite = getState(base + ".favorite")?.val;
            if (!favorite) continue;
        }

        const senderName = getState(base + ".name")?.val || "";
        result.push({text: senderName, value: s.internal_id
        });
    }

    if (mode === "favorite") {
        result.sort((a, b) =&gt; {
            const orderA = getState(data + a.value + ".order")?.val || 0;
            const orderB = getState(data + b.value + ".order")?.val || 0;

            if (orderA &gt; 0 &amp;&amp; orderB === 0) return -1;
            if (orderA === 0 &amp;&amp; orderB &gt; 0) return 1;
            if (orderA &gt; 0 &amp;&amp; orderB &gt; 0) return orderA - orderB;

            return a.text.localeCompare(b.text);
        });
    } else {
        result.sort((a, b) =&gt; a.text.localeCompare(b.text));
    }

    if (mode === "active") {
        setStateIfChanged(root + "active_sender_list", JSON.stringify(result));
    } else if (mode === "favorite") {
        setStateIfChanged(root + "favorite_sender_list", JSON.stringify(result));
    }

    return result;
}

async function updateAllActiveBroadcasts() {
    const result = [];
    const now = Date.now();

    const senderList = JSON.parse(getState(sender).val || "[]");
    for (const s of senderList) {
        if (!senderPassesFilters(s.internal_id)) continue;

        const base  = data + s.internal_id;
        const order = getState(base + ".order")?.val || 0;

        const raw = getState(base + ".broadcast")?.val || "[]";
        let list = [];

        try {
            list = JSON.parse(raw);
        } catch (e) {
            log("Fehler beim JSON-Parse für Sender " + s.internal_id + ": " + e, "warn");
            continue;
        }

        const senderIcon = getState(base + ".icon_url")?.val || "";
        const senderName = getState(base + ".name")?.val || "";

        for (const entry of list) {
            const start_ts = parseGermanDateTime(entry.start);
            const stop_ts  = parseGermanDateTime(entry.stop);

            if (now &gt;= start_ts &amp;&amp; now &lt; stop_ts) {
                const startTime = entry.start.split(" ")[1].slice(0,5);
                const stopTime  = entry.stop.split(" ")[1].slice(0,5);

                result.push({
                    sender_icon_url: `&lt;img style="max-width:80px; max-height:80px; object-fit:contain; vertical-align:middle;" src="${senderIcon}"&gt;`,
                    sender_name: senderName,
                    start: startTime,
                    stop: stopTime,
                    title: entry.title,
                    desc: entry.desc,
                    date: entry.date,
                    icon: entry.icon,
                    order: order
                });
                break;
            }
        }
    }

    result.sort((a, b) =&gt; {
        const oa = a.order || 0;
        const ob = b.order || 0;

        if (oa &gt; 0 &amp;&amp; ob === 0) return -1;
        if (oa === 0 &amp;&amp; ob &gt; 0) return 1;
        if (oa &gt; 0 &amp;&amp; ob &gt; 0) return oa - ob;

        return a.sender_name.localeCompare(b.sender_name);
    });

    setStateIfChanged(root + "broadcast_list", JSON.stringify(result));
    return result;
}

async function updateSelectedChannelBroadcast() {
    const result = [];
    const now = Date.now();

    let selected;
    if (select_channel_mode == 1) {
        selected = getState(root + "selected_channel")?.val;
    } else {
        selected = getState(root + "selected_channel_favorite")?.val;
    }
    if (!selected) return [];

    const base = data + selected;
    const raw = getState(base + ".broadcast")?.val || "[]";
    let list = [];

    try {
        list = JSON.parse(raw);
    } catch (e) {
        log("Fehler beim JSON-Parse für selected_channel " + selected + ": " + e, "warn");
        return [];
    }

    const senderIcon = getState(base + ".icon_url")?.val || "";
    const senderName = getState(base + ".name")?.val || "";

    for (const entry of list) {
        const stop_ts = parseGermanDateTime(entry.stop);

        if (stop_ts &gt; now) {
            const startTime = entry.start.split(" ")[1].slice(0,5);
            const stopTime  = entry.stop.split(" ")[1].slice(0,5);

            result.push({
                sender_icon_url: `&lt;img style="max-width:80px; max-height:80px; object-fit:contain; vertical-align:middle;" src="${senderIcon}"&gt;`,
                sender_name: senderName,
                start: startTime,
                stop: stopTime,
                title: entry.title,
                desc: entry.desc,
                date: entry.date,
                icon: entry.icon});
        }
    }

    setStateIfChanged(root + "broadcast_list", JSON.stringify(result));
    return result;
}

schedule("0 3 * * *", async () =&gt; {
    await loadChannelsAndProgrammes();
    await initSenderEditList();
});

schedule("1 * * * * *", async () =&gt; {
    if (loading === true) return;
    const mode = getState(root + "broadcast_mode")?.val;

    if (mode === "selected") {
        await updateSelectedChannelBroadcast();
    } else {
        await updateAllActiveBroadcasts();
    }
});

function registerTriggers() {
    on({ id: root + "refresh", change: "ne" }, async (obj) =&gt; {
        if (obj.state &amp;&amp; obj.state.ack === false &amp;&amp; obj.state.val === true) {
            try {
                await loadChannelsAndProgrammes();
                await createSenderList("active");
                await createSenderList("favorite");
                await initSenderEditList();
                await updateMaxOrderNumber();
            } catch (err) {}
            setState(root + "refresh", false, true);
        }
    });

    on({ id: root + "edit.save", change: "ne" }, async (obj) =&gt; {
        if (obj.state &amp;&amp; obj.state.ack === false &amp;&amp; obj.state.val === true) {
            try {
                if (select_channel_mode == 1) {
                    await saveEditToSender(getState(root + "selected_channel").val);
                } else if (select_channel_mode == 2) {
                    await saveEditToSender(getState(root + "selected_channel_favorite").val);
                }
                await createSenderList("active");
                await createSenderList("favorite");
            } catch (err) {}
            setState(root + "edit.save", false, true);
        }
    });

    on({ id: root + "selected_channel", change: "ne" }, async obj =&gt; {
        const val = obj.state.val;

        if (!val) {
            setStateIfChanged(root + "broadcast_mode", "all");
        } else {
            select_channel_mode = 1;
            setStateIfChanged(root + "broadcast_mode", "selected");
            await updateSelectedChannelBroadcast();
            await updateMaxOrderNumber();
            await loadSenderIntoEdit(val);
        }
    });

    on({ id: root + "selected_channel_favorite", change: "ne" }, async obj =&gt; {
        const val = obj.state.val;

        if (!val) {
            setStateIfChanged(root + "broadcast_mode", "all");
        } else {
            select_channel_mode = 2;
            setStateIfChanged(root + "broadcast_mode", "selected");
            await updateSelectedChannelBroadcast();
            await updateMaxOrderNumber();
            await loadSenderIntoEdit(val);
        }
    });

    const TYPE_FILTERS = [root + "filter_favorite", root + "filter_free", root + "filter_pay", root + "filter_typ_film", root + "filter_typ_serie", root + "filter_typ_doku", root + "filter_typ_kinder", root + "filter_typ_musik", root + "filter_typ_shopping", root + "filter_typ_sport", root + "filter_typ_nachrichten", root + "filter_typ_vollprogramm"];
    on({ id: TYPE_FILTERS, change: "ne" }, async () =&gt; {
        await updateAllActiveBroadcasts();
    });

    on({ id: root + "broadcast_mode", change: "ne" }, async obj =&gt; {
        const val = obj.state.val;

        if (val === 'all') {
            await updateAllActiveBroadcasts();
        }
    });

    on({ id: root + "sender_edit_list", change: "ne" }, async obj =&gt; {
        if (!obj || !obj.state || !obj.state.val) return;

        let list;
        try {
            list = JSON.parse(obj.state.val);
        } catch (e) {
            log("Fehler: sender_edit_list enthält kein gültiges JSON", "warn");
            return;
        }

        for (const entry of list) {
            const id = entry.value;
            const base = data + id;

            setStateIfChanged(base + ".order", Number(entry.order || 0));
            setStateIfChanged(base + ".favorite", entry.favorite === true);
            setStateIfChanged(base + ".active", entry.active === true);
        }
        
        await initSenderEditList();
    });
}
</code></pre>
<p dir="auto">Viel Spaß und Erfolg bei der Umsetzung.</p>
<p dir="auto">Ro75.</p>
<h2>Änderung 1.0.1 - 24.06.2026</h2>
<ul>
<li>Start und Stop jetzt nur im klassischen Stil (HH:MM). Also 19:15, 20:15, etc.</li>
<li>Weiterer Datenpunkt "<strong>selected_channel_favorite</strong>" löst die selben Ereignisse wie "<strong>selected_channel</strong>" aus. Senderdetails für Visualisierung und in der Hauptanzeige alle Sendungen zum gewählten Kanal.</li>
<li>Zentrale Sendereditierung. Jetzt können über den Datenpunkt "<strong>sender_edit_list</strong>" die wichtigsten Einstellungen pro Sender zentral vorgenommen werden. Dazu wird der Inhalt des Datenpunktes (json) angepasst. Dazu kann der Sender den Favoriten (<strong>favorite</strong>) hinzugefügt, aktiviert oder deaktiviert (<strong>active</strong>) werden. Darüber hinaus sit es möglich, die Senderreihenfolge (<strong>order</strong>) festzulegen. Wenn alle Änderungen durchgeführt - einfach speichern und ein Trigger erledigt automatisch den Rest (Daten werden an Sender übergeben und Einstellungen werden sofort aktiv).</li>
</ul>
]]></description><link>https://forum.iobroker.net/topic/84857/epg-daten-via-script</link><generator>RSS for Node</generator><lastBuildDate>Sun, 28 Jun 2026 17:50:24 GMT</lastBuildDate><atom:link href="https://forum.iobroker.net/topic/84857.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 23 Jun 2026 18:22:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to EPG-Daten via Script on Sun, 28 Jun 2026 14:18:06 GMT]]></title><description><![CDATA[<p dir="auto">Hallo und Respekt für dieses Script und die Aufbereitung.</p>
<p dir="auto">Bin schon recht weit mit der Implemtierung, habe leider einen sehr kleinen Screen, da will etliches angepaßt werden. Nachdem ich in AT wohne, würden mich natürlich zusätzlich auch eine Handvoll AT-Sender interessieren.</p>
<p dir="auto">Benötige ich dafür eine 2. Instanz?</p>
<p dir="auto">Auf der Seite <a href="https://iptv-epg.org/guides" rel="nofollow ugc">https://iptv-epg.org/guides</a> gibt es auch die AT Senderliste, über den Reiter "Combine" könnte man Senderlisten kombinieren. Hat das schon jemand versucht, bzw. weiß iwer ob bei der dafür notwendigen Regisitrierung Kosten entstehen?</p>
<p dir="auto">LG &amp; Danke<br />
mxa</p>
]]></description><link>https://forum.iobroker.net/post/1346367</link><guid isPermaLink="true">https://forum.iobroker.net/post/1346367</guid><dc:creator><![CDATA[metaxa]]></dc:creator><pubDate>Sun, 28 Jun 2026 14:18:06 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Sun, 28 Jun 2026 13:16:02 GMT]]></title><description><![CDATA[<p dir="auto">Ok, für alle die für VIS-2 weiter mit testen wollen, hier schonmal ein Teilerfolg.</p>
<p dir="auto">Ich hab mir ein Hilfsdatenpunkt gemacht '0_userdata.0.Test.TV_Sender_Auswahl' und ein Script erstellt, welches aus der gesamten json '0_userdata.0.epg.sender_json' eine Werte-Liste in dem Hilfsdatenpunkt erstellt.</p>
<p dir="auto"><strong>TypeScript</strong>:</p>
<pre><code>// 1. Typ-Definition für die JSON-Struktur
interface TvSender {
    id: string;
    name: string;
    internal_id: number;
}

// 2. Datenpunkt-Pfade definieren
const sourceDpId: string = '0_userdata.0.epg.sender_json';
const targetDpId: string = '0_userdata.0.TV_Sender_Auswahl';

// 3. Hauptfunktion zur Konvertierung und Aktualisierung
function updateDropdown(): void {
    // Prüfen, ob der Quell-Datenpunkt überhaupt existiert
    if (!existsState(sourceDpId)) {
        log(`Quell-Datenpunkt ${sourceDpId} existiert (noch) nicht!`, 'warn');
        return;
    }

    // Wert auslesen
    const jsonState = getState(sourceDpId);
    if (!jsonState || !jsonState.val || jsonState.val === '') {
        log(`Quell-Datenpunkt ${sourceDpId} ist leer.`, 'warn');
        return;
    }

    try {
        // JSON-String in ein echtes Array parsen
        const senderListe: TvSender[] = JSON.parse(jsonState.val as string);
        
        // Objekt für die VIS-Dropdown-Zuweisung erstellen
        const dropdownStates: Record&lt;number, string&gt; = {};

        senderListe.forEach((sender: TvSender) =&gt; {
            // WICHTIG: internal_id wird hier als Key gesetzt. 
            // Das ist der Wert, den das Widget später in den Datenpunkt schreibt.
            dropdownStates[sender.internal_id] = sender.name;
        });

        // Ziel-Datenpunkt sicherstellen (Standardwert 0, da Typ jetzt 'number' ist)
        createState(targetDpId, 0, {
            name: 'TV Sender Auswahlliste',
            desc: 'Dynamisch generiertes Dropdown aus epg.sender_json',
            type: 'number', // Geändert auf number, da die IDs Zahlen sind
            role: 'value',
            read: true,
            write: true
        }, () =&gt; {
            // Eigenschaften des Objekts überschreiben/aktualisieren
            extendObject(targetDpId, {
                common: {
                    type: 'number', // Typ im bestehenden Objekt auf 'number' erzwingen
                    states: dropdownStates
                }
            }, (err) =&gt; {
                if (err) {
                    log(`Fehler beim Aktualisieren der Dropdown-Liste: ${err}`, 'error');
                } else {
                    log(`Dropdown-Liste in ${targetDpId} erfolgreich aktualisiert! (${Object.keys(dropdownStates).length} Sender eingetragen).`);
                }
            });
        });

    } catch (e) {
        log(`Fehler beim Parsen des JSON aus ${sourceDpId}: ${e}`, 'error');
    }
}

// =============================================================================
// LOGIK-TRIGGER
// =============================================================================

// A. Beim Start des Skripts die Liste einmalig aufbauen
updateDropdown();

// B. Automatisch triggern, sobald sich das JSON im EPG-Datenpunkt ändert
on({ id: sourceDpId, change: 'ne' }, () =&gt; {
    log(`Änderung in ${sourceDpId} erkannt. Aktualisiere Dropdown...`);
    updateDropdown();
});
</code></pre>
<p dir="auto">Dann in VIS-2 aus der Widget-Sammlung das (Auswahl, Boolscherwert,Zahl, Zeichenkette) Widget genommen und bei OID = 0_userdata.0.Test.TV_Sender_Auswahl und bei Steuer-ID = 0_userdata.0.epg.selected_channel eintragen, dann wird das EPG nach der Auswahl gefiltert.</p>
]]></description><link>https://forum.iobroker.net/post/1346361</link><guid isPermaLink="true">https://forum.iobroker.net/post/1346361</guid><dc:creator><![CDATA[icebear]]></dc:creator><pubDate>Sun, 28 Jun 2026 13:16:02 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Sun, 28 Jun 2026 11:18:31 GMT]]></title><description><![CDATA[<p dir="auto">Alle <strong>Häckenfilter (z.B. Favoriten)</strong> sind die Datenpunkte beginnend mit "filter_"<strong>Fettschrift</strong> Vom Wert her true oder false. Ich habe es mit <strong>materialdesign</strong> (<strong>VIS 1  - 0.5.94</strong>) gelöst.</p>
<p dir="auto">"<strong>Was läuft gerade jetzt</strong>" ist das Datenpunkt "<strong>broadcast_mode</strong>". Da kommt als Wert "<strong>all</strong>" rein. Das sollte mit einem Button möglich sein.</p>
<p dir="auto">Der Bereich mit den <strong>Auswahlfelder</strong> ("alle Sender" und "Favoriten") zeigt <strong>alle</strong> Sendungen zu dem gewählten Sender an. <strong>Also alle Sendungen von JETZT an</strong>. Die Datenpunkte sind <strong>selected_channel</strong> bzw. <strong>selected_channel_favorite</strong>. Diese kannst du mit einem <strong>Auswahl-/Selektfeld steuern oder die hast pro Sender einen Button</strong> der die entsprechende <strong>ID</strong> da einträgt. Beispiel die <strong>20</strong> und dann bekommst du alles von "<strong>Das Erste</strong>". Wenn du danach wieder zur Liveansiocht willst, siehe weiter oben "<strong>Was läuft gerade jetzt</strong>".</p>
<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/icebear" aria-label="Profile: icebear">@<bdi>icebear</bdi></a> <a href="/post/1346343">sagte</a>:</p>
<p dir="auto">Irgendwie fehlt mir da auch die Funktion, wie kann ich z.B. so springen das angezeigt wird was um 20:15 läuft, oder um 22:00</p>
<blockquote>
<blockquote>
<p dir="auto">ANTWORT: siehe darüber <strong>Auswahlfelder</strong></p>
</blockquote>
</blockquote>
</blockquote>
<p dir="auto">Ro75.</p>
]]></description><link>https://forum.iobroker.net/post/1346348</link><guid isPermaLink="true">https://forum.iobroker.net/post/1346348</guid><dc:creator><![CDATA[Ro75]]></dc:creator><pubDate>Sun, 28 Jun 2026 11:18:31 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Sun, 28 Jun 2026 11:12:48 GMT]]></title><description><![CDATA[<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/ro75" aria-label="Profile: Ro75">@<bdi>Ro75</bdi></a> <a href="/post/1346319">sagte</a>:</p>
<p dir="auto">Zur Darstellung ist ein json widget notwendig.</p>
</blockquote>
<p dir="auto">Ok. Ich habs jetzt doch mal zum testen installiert, und mit dem vis-inventwo-design 'Tabellen Widget bekomme ich auch das epg angezeigt.</p>
<p dir="auto">Hab dann von Hand mit Notepad die 0_userdata.0.epg.sender_edit_list bearbeitet und das Ergebnis ist:</p>
<p dir="auto"><img src="/assets/uploads/files/1782644626712-epg.png" alt="epg.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Sieht ja schomal ganz gut aus.</p>
<p dir="auto">Jetzt, könntest du mal beschreiben, wie du diese Leiste unten zusammengebaut hast, also welcher DP für welches Widget ist:</p>
<p dir="auto"><img src="/assets/uploads/files/1782644689230-edit.png" alt="edit.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Ich werde dann versuchen das nur mit VIS-2 Widgets nachzubauen.</p>
<p dir="auto">Irgendwie fehlt mir da auch die Funktion, wie kann ich z.B. so springen das angezeigt wird was um 20:15 läuft, oder um 22:00</p>
<p dir="auto">Für input wäre ich dankbar.</p>
]]></description><link>https://forum.iobroker.net/post/1346343</link><guid isPermaLink="true">https://forum.iobroker.net/post/1346343</guid><dc:creator><![CDATA[icebear]]></dc:creator><pubDate>Sun, 28 Jun 2026 11:12:48 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Sun, 28 Jun 2026 09:25:42 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/ro75" aria-label="Profile: Ro75">@<bdi>Ro75</bdi></a><br />
Danke.<br />
Hätte ich auch selber drauf kommen können ;-)</p>
]]></description><link>https://forum.iobroker.net/post/1346336</link><guid isPermaLink="true">https://forum.iobroker.net/post/1346336</guid><dc:creator><![CDATA[bahnuhr]]></dc:creator><pubDate>Sun, 28 Jun 2026 09:25:42 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Sun, 28 Jun 2026 08:38:42 GMT]]></title><description><![CDATA[<p dir="auto">Suche danach:</p>
<pre><code>            result.push({sender_icon_url: `&lt;img style="max-width:80px; max-height:80px;
</code></pre>
<p dir="auto">ändere max-width:80px; max-height:80px in z.B 60 ab. Hinweis. Da gibt es mehr als eine Stelle.</p>
<p dir="auto">Ro75.</p>
]]></description><link>https://forum.iobroker.net/post/1346331</link><guid isPermaLink="true">https://forum.iobroker.net/post/1346331</guid><dc:creator><![CDATA[Ro75]]></dc:creator><pubDate>Sun, 28 Jun 2026 08:38:42 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Sun, 28 Jun 2026 08:27:58 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/ro75" aria-label="Profile: Ro75">@<bdi>Ro75</bdi></a><br />
Hallo,<br />
bekommt man die Senderlogos in Spalte 1 irgendwie kleiner.<br />
Habe schon mal transform:scale(0.6) oder nur scale)0.6) probiert.<br />
Auch verschiedene json widgets.</p>
<p dir="auto">Aber klappt nicht.</p>
<p dir="auto">haste eine Idee ?</p>
]]></description><link>https://forum.iobroker.net/post/1346326</link><guid isPermaLink="true">https://forum.iobroker.net/post/1346326</guid><dc:creator><![CDATA[bahnuhr]]></dc:creator><pubDate>Sun, 28 Jun 2026 08:27:58 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Sun, 28 Jun 2026 08:10:22 GMT]]></title><description><![CDATA[<p dir="auto">Zur Darstellung ist ein json widget notwendig.</p>
<p dir="auto">Ro75.</p>
]]></description><link>https://forum.iobroker.net/post/1346319</link><guid isPermaLink="true">https://forum.iobroker.net/post/1346319</guid><dc:creator><![CDATA[Ro75]]></dc:creator><pubDate>Sun, 28 Jun 2026 08:10:22 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Sun, 28 Jun 2026 08:08:44 GMT]]></title><description><![CDATA[<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/sigi234" aria-label="Profile: sigi234">@<bdi>sigi234</bdi></a> <a href="/post/1346311">sagte</a>:</p>
<p dir="auto">Nein, bin wieder zum TV Adapter zurück gegangen.</p>
</blockquote>
<p dir="auto">Danke für die Info, dann brauch ich es ja garnicht versuchen, da ich mich mittlerweile konsequent von VIS-1 und allen Widget's die nicht VIS-2 kompatibel sind getrennt habe.<br />
Info dazu: Seit dem läuft mein System wesentlich stabiler und schneller als vorher wo ich beide parallel laufen hatte.</p>
<p dir="auto">Schade wäre eine sinnvolle Ergänzung zu meinem bestehenden TV Programm gewesen.</p>
]]></description><link>https://forum.iobroker.net/post/1346317</link><guid isPermaLink="true">https://forum.iobroker.net/post/1346317</guid><dc:creator><![CDATA[icebear]]></dc:creator><pubDate>Sun, 28 Jun 2026 08:08:44 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Sun, 28 Jun 2026 07:47:30 GMT]]></title><description><![CDATA[<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/icebear" aria-label="Profile: icebear">@<bdi>icebear</bdi></a> <a href="/post/1346302">sagte</a>:</p>
<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/sigi234" aria-label="Profile: sigi234">@<bdi>sigi234</bdi></a> <a href="/post/1345876">sagte</a>:</p>
<p dir="auto">Da bin ich gerade dabei</p>
<p dir="auto">Edit:<br />
Einige probiert der DP ist nicht dazu fähig.</p>
</blockquote>
<p dir="auto">Funktioniert es denn jetzt bei dir mit Vis-2 ? Und welches Widget bzw. welche Widgets hast du genommen um das EPG darzustellen?</p>
</blockquote>
<p dir="auto">Nein, bin wieder zum TV Adapter zurück gegangen.</p>
]]></description><link>https://forum.iobroker.net/post/1346311</link><guid isPermaLink="true">https://forum.iobroker.net/post/1346311</guid><dc:creator><![CDATA[sigi234]]></dc:creator><pubDate>Sun, 28 Jun 2026 07:47:30 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Sun, 28 Jun 2026 06:39:06 GMT]]></title><description><![CDATA[<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/sigi234" aria-label="Profile: sigi234">@<bdi>sigi234</bdi></a> <a href="/post/1345876">sagte</a>:</p>
<p dir="auto">Da bin ich gerade dabei</p>
<p dir="auto">Edit:<br />
Einige probiert der DP ist nicht dazu fähig.</p>
</blockquote>
<p dir="auto">Funktioniert es denn jetzt bei dir mit Vis-2 ? Und welches Widget bzw. welche Widgets hast du genommen um das EPG darzustellen?</p>
]]></description><link>https://forum.iobroker.net/post/1346302</link><guid isPermaLink="true">https://forum.iobroker.net/post/1346302</guid><dc:creator><![CDATA[icebear]]></dc:creator><pubDate>Sun, 28 Jun 2026 06:39:06 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Wed, 24 Jun 2026 21:02:32 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/bahnuhr" aria-label="Profile: bahnuhr">@<bdi>bahnuhr</bdi></a></p>
<p dir="auto">habe dazu nur agb aus österreich gefunden.<br />
ich gehe davon aus das es in deutschland ähnlich ist</p>
<p dir="auto"><a href="https://www.magenta.at/tv-nutzungsbedingungen" rel="nofollow ugc">https://www.magenta.at/tv-nutzungsbedingungen</a></p>
<p dir="auto"><img src="/assets/uploads/files/1782334192939-81ecd224-9b62-4b75-a15c-e53d313feae9-image.jpeg" alt="81ecd224-9b62-4b75-a15c-e53d313feae9-image.jpeg" class=" img-fluid img-markdown" /></p>
<p dir="auto">und hier die analyse von chatgpt was meinem verständnis entspricht</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Nutzung</th>
<th>Risiko</th>
</tr>
</thead>
<tbody>
<tr>
<td>Privat EPG in MagentaTV ansehen</td>
<td>Unproblematisch</td>
</tr>
<tr>
<td>Eigenes Tool liest EPG für den persönlichen Gebrauch aus</td>
<td>Graubereich</td>
</tr>
<tr>
<td>XMLTV-Feed aus MagentaTV erzeugen und veröffentlichen</td>
<td>Wahrscheinlich lizenzrechtlich problematisch</td>
</tr>
<tr>
<td>Kommerzielle Nutzung oder Weiterverkauf</td>
<td>Sehr wahrscheinlich lizenzpflichtig</td>
</tr>
</tbody>
</table>
<p dir="auto">zumindest die seite, die die xml daten anbietet bewegt sich im graubereich.</p>
<p dir="auto">beim scraping, wenn die sind metadaten (sender, uhrzeit, titel) generell, wenn sie  ohne zugangsbeschränkung geladen werden können (login, captcha, oder andere sicherungsmaßnahmen) unproblematisch. redaktionelle informationen (beschreibung zur sendung, bilder) können problematisch sein.</p>
<p dir="auto">wie gesagt: graubereich<br />
ob das auffindbar ist? eher nicht, da ja keine informationen von den vielen clients direkt von der eigentlichen quelle gelesen werden.</p>
<p dir="auto">ich mag hier das niemand madig machen.<br />
nur damit man das risiko entsprechen selbst bewerten kann.</p>
]]></description><link>https://forum.iobroker.net/post/1345988</link><guid isPermaLink="true">https://forum.iobroker.net/post/1345988</guid><dc:creator><![CDATA[OliverIO]]></dc:creator><pubDate>Wed, 24 Jun 2026 21:02:32 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Wed, 24 Jun 2026 19:30:10 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/bahnuhr" aria-label="Profile: bahnuhr">@<bdi>bahnuhr</bdi></a></p>
<p dir="auto">Weiß ich nicht. Hab mich weder mit dem Skript noch mit den AGB der Seite beschäftigt. Müsstest du selber prüfen.</p>
]]></description><link>https://forum.iobroker.net/post/1345980</link><guid isPermaLink="true">https://forum.iobroker.net/post/1345980</guid><dc:creator><![CDATA[Thomas Braun]]></dc:creator><pubDate>Wed, 24 Jun 2026 19:30:10 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Wed, 24 Jun 2026 19:28:44 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/thomas-braun" aria-label="Profile: Thomas-Braun">@<bdi>Thomas-Braun</bdi></a><br />
Ja, das versteh ich.<br />
Und ist dies hier auch so ?</p>
]]></description><link>https://forum.iobroker.net/post/1345979</link><guid isPermaLink="true">https://forum.iobroker.net/post/1345979</guid><dc:creator><![CDATA[bahnuhr]]></dc:creator><pubDate>Wed, 24 Jun 2026 19:28:44 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Wed, 24 Jun 2026 19:30:27 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/bahnuhr" aria-label="Profile: bahnuhr">@<bdi>bahnuhr</bdi></a></p>
<p dir="auto">Das abgreifen von Daten via Skript untersagen aber viele Anbieter. Du sollst ja deine Daten dort hinterlassen und dir die Werbung anschauen.</p>
]]></description><link>https://forum.iobroker.net/post/1345978</link><guid isPermaLink="true">https://forum.iobroker.net/post/1345978</guid><dc:creator><![CDATA[Thomas Braun]]></dc:creator><pubDate>Wed, 24 Jun 2026 19:30:27 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Wed, 24 Jun 2026 19:14:39 GMT]]></title><description><![CDATA[<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/oliverio" aria-label="Profile: OliverIO">@<bdi>OliverIO</bdi></a> <a href="/post/1345940">sagte</a>:</p>
<p dir="auto">Ansonsten sind wir hier bei vielen Adaptern, welche ihre Daten aus dem Internet zusammen scrapen im graubereich.</p>
</blockquote>
<p dir="auto">So ganz nachvollziehbar ist das für mich nicht.<br />
Hier gibt es ein Script.<br />
Und dieses verweist auf eine Seite.<br />
Und dieses Script wird zur Verfügung gestellt. Es werden doch nicht die Daten zur Verfügung gestellt.<br />
Und jeder nutzt dieses Script doch / oder auch nicht.<br />
Ist doch nichts anderes als wenn ich persönlich mir die Daten hole.</p>
<p dir="auto">Und nun halt per Script.</p>
]]></description><link>https://forum.iobroker.net/post/1345976</link><guid isPermaLink="true">https://forum.iobroker.net/post/1345976</guid><dc:creator><![CDATA[bahnuhr]]></dc:creator><pubDate>Wed, 24 Jun 2026 19:14:39 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Wed, 24 Jun 2026 16:17:21 GMT]]></title><description><![CDATA[<p dir="auto">wenn du schon den aktuellen stand hast, dann über den Datenpunkt "<strong>sender_edit_list</strong>". In dieser Liste alle Pay-TV Kanäle auf <strong>false</strong> stellen (<strong>active</strong>) und dann speichern.</p>
<p dir="auto">Ro75.</p>
]]></description><link>https://forum.iobroker.net/post/1345949</link><guid isPermaLink="true">https://forum.iobroker.net/post/1345949</guid><dc:creator><![CDATA[Ro75]]></dc:creator><pubDate>Wed, 24 Jun 2026 16:17:21 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Wed, 24 Jun 2026 16:10:11 GMT]]></title><description><![CDATA[<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/ro75" aria-label="Profile: Ro75">@<bdi>Ro75</bdi></a> <a href="/post/1345813">sagte</a>:</p>
<p dir="auto">aktiviert oder deaktiviert (active) werden</p>
</blockquote>
<p dir="auto">wie kann ich alle Pay TV Sender auf einmal deaktivieren?</p>
]]></description><link>https://forum.iobroker.net/post/1345948</link><guid isPermaLink="true">https://forum.iobroker.net/post/1345948</guid><dc:creator><![CDATA[sigi234]]></dc:creator><pubDate>Wed, 24 Jun 2026 16:10:11 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Wed, 24 Jun 2026 14:38:23 GMT]]></title><description><![CDATA[<p dir="auto">@David-G.</p>
<p dir="auto">Die Daten sind immer lizenzrechtlich problematisch.<br />
Quelle ist für Deutschland meist horizon (das ist von Liberty global, zu der unity Media gehörte und jetzt Vodafone Kabel ist),<br />
Magenta und <a href="http://Blue.ch" rel="nofollow ugc">Blue.ch</a></p>
<p dir="auto">Wer sich selber seine Daten zusammenstellen will kann das mit den Skripten aus diesem github machen. Da sind dann auch weltweit viele Sender verzeichnet.<br />
<a href="https://github.com/iptv-org/epg" rel="nofollow ugc">https://github.com/iptv-org/epg</a></p>
<p dir="auto">Ich hatte das mal für meinen Adapter Tvprogram angeschaut. Bin dann aber erstmal bei einem Provider, allerdings mit begrenzter Senderauswahl, geblieben.</p>
<p dir="auto">Ansonsten sind wir hier bei vielen Adaptern, welche ihre Daten aus dem Internet zusammen scrapen im graubereich.</p>
]]></description><link>https://forum.iobroker.net/post/1345940</link><guid isPermaLink="true">https://forum.iobroker.net/post/1345940</guid><dc:creator><![CDATA[OliverIO]]></dc:creator><pubDate>Wed, 24 Jun 2026 14:38:23 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Wed, 24 Jun 2026 14:11:05 GMT]]></title><description><![CDATA[<p dir="auto">Mir ging es nicht darum, meine Lösung vorzustellen (hab ich sogar schon).</p>
<p dir="auto">Eher darum, ob man nicht nochmal über die Quelle reden muss.<br />
Aber im Endeffekt muss das ein Admin entscheiden.</p>
<p dir="auto">Bei mir sagt die KI</p>
<pre><code>Fazit: iptv-epg.org lizenziert die Daten nicht sauber und verletzt damit sehr wahrscheinlich die Datenbankrechte der Original-Anbieter. Als privater Nutzer musst du dir beim Einbinden der XML-Links im Alltag jedoch keine Sorgen um rechtliche Konsequenzen machen, solltest dich aber auf schwankende Datenqualität einstellen.
</code></pre>
<p dir="auto">Wenn es um Forum verbreitet wird ist es eben nicht privat.</p>
]]></description><link>https://forum.iobroker.net/post/1345935</link><guid isPermaLink="true">https://forum.iobroker.net/post/1345935</guid><dc:creator><![CDATA[David G.]]></dc:creator><pubDate>Wed, 24 Jun 2026 14:11:05 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Wed, 24 Jun 2026 14:08:46 GMT]]></title><description><![CDATA[<h2>Änderung 1.0.1 - 24.06.2026 - siehe Post #47</h2>
<ul>
<li>Start und Stop jetzt nur im klassischen Stil (HH:MM). Also 19:15, 20:15, etc.</li>
<li>Weiterer Datenpunkt "<strong>selected_channel_favorite</strong>" löst die selben Ereignisse wie "<strong>selected_channel</strong>" aus. Senderdetails für Visualisierung und in der Hauptanzeige alle Sendungen zum gewählten Kanal.</li>
<li>Zentrale Sendereditierung. Jetzt können über den Datenpunkt "<strong>sender_edit_list</strong>" die wichtigsten Einstellungen pro Sender zentral vorgenommen werden. Dazu wird der Inhalt des Datenpunktes (json) angepasst. Dazu kann der Sender den Favoriten (<strong>favorite</strong>) hinzugefügt, aktiviert oder deaktiviert (<strong>active</strong>) werden. Darüber hinaus sit es möglich, die Senderreihenfolge (<strong>order</strong>) festzulegen. Wenn alle Änderungen durchgeführt - einfach speichern und ein Trigger erledigt automatisch den Rest (Daten werden an Sender übergeben und Einstellungen werden sofort aktiv).</li>
</ul>
<p dir="auto">Das Script in Post #1 wurde aktualisiert. Bitte beachten. Falls Änderungen im Konfigbereich vorgenommen wurden, müssen diese zuvor gesichert und danach wieder einkopiert werden.</p>
<p dir="auto">Hier nochmal alle Widget von der Hauptview (VIS 1 und materialdesign 0.5.94):</p>
<pre><code>[{"tpl":"tplVis-materialdesign-Select","data":{"oid":"0_userdata.0.epg.selected_channel","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":true,"g_css_border":true,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","inputType":"text","vibrateOnMobilDevices":"50","clickSoundVolume":"0.5","inputLayout":"filled","inputAlignment":"left","inputLayoutBorderColor":"#mdwTheme:vis-materialdesign.0.colors.input.border","inputLayoutBorderColorHover":"#mdwTheme:vis-materialdesign.0.colors.input.border_hover","inputLayoutBorderColorSelected":"#mdwTheme:vis-materialdesign.0.colors.input.border_selected","inputTextFontFamily":"InterVariable","inputTextFontSize":"20","inputTextColor":"rgba(255,255,255,0.8)","inputLabelColor":"#mdwTheme:vis-materialdesign.0.colors.input.label","inputLabelColorSelected":"#mdwTheme:vis-materialdesign.0.colors.input.label_selected","inputLabelFontFamily":"#mdwTheme:vis-materialdesign.0.fonts.input.label","inputLabelFontSize":"#mdwTheme:vis-materialdesign.0.fontSizes.input.label","inputAppendixColor":"#mdwTheme:vis-materialdesign.0.colors.input.appendix","inputAppendixFontSize":"#mdwTheme:vis-materialdesign.0.fontSizes.input.appendix","inputAppendixFontFamily":"#mdwTheme:vis-materialdesign.0.fonts.input.appendix","showInputMessageAlways":false,"inputMessageFontFamily":"RobotoCondensed-Regular","inputMessageFontSize":"21","inputMessageColor":"#mdwTheme:vis-materialdesign.0.colors.input.message","showInputCounter":false,"inputCounterColor":"#mdwTheme:vis-materialdesign.0.colors.input.counter","inputCounterFontSize":"#mdwTheme:vis-materialdesign.0.fontSizes.input.counter","inputCounterFontFamily":"#mdwTheme:vis-materialdesign.0.fonts.input.counter","clearIconShow":false,"clearIconColor":"#mdwTheme:vis-materialdesign.0.colors.input.icon_clear","collapseIconColor":"#mdwTheme:vis-materialdesign.0.colors.input.icon_collapse","listDataMethod":"jsonStringObject","countSelectItems":"0","listPosition":"auto","listItemBackgroundColor":"#000000","listItemBackgroundHoverColor":"#mdwTheme:vis-materialdesign.0.colors.input.menu.hover","listItemBackgroundSelectedColor":"#mdwTheme:vis-materialdesign.0.colors.input.menu.selected","listItemRippleEffectColor":"#mdwTheme:vis-materialdesign.0.colors.input.menu.effect","showSelectedIcon":"no","listIconColor":"#mdwTheme:vis-materialdesign.0.colors.input.menu.icon","listItemFontSize":"#mdwTheme:vis-materialdesign.0.fontSizes.input.dropdown.text","listItemFont":"#mdwTheme:vis-materialdesign.0.fonts.input.dropdown.text","listItemFontColor":"#mdwTheme:vis-materialdesign.0.colors.input.menu.text","listItemSubFontSize":"#mdwTheme:vis-materialdesign.0.fontSizes.input.dropdown.subText","listItemSubFont":"#mdwTheme:vis-materialdesign.0.fonts.input.dropdown.subText","listItemSubFontColor":"#mdwTheme:vis-materialdesign.0.colors.input.menu.subText","showValue":false,"listItemValueFontSize":"#mdwTheme:vis-materialdesign.0.fontSizes.input.dropdown.value","listItemValueFont":"#mdwTheme:vis-materialdesign.0.fonts.input.dropdown.value","listItemValueFontColor":"#mdwTheme:vis-materialdesign.0.colors.input.menu.value","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"autoFocus":true,"jsonStringObject":"{0_userdata.0.epg.active_sender_list}","listItemHeight":"6","inputLayoutBackgroundColor":"#000000"},"style":{"left":"1037px","top":"863px","width":"376px","height":"40px","box-shadow":"3px 3px 8px 1px rgba(110, 70, 62, 0.45)","border-width":"1px","border-style":"solid","border-color":"rgba(110, 70, 62, 1)","border-radius":"5px","z-index":"3","margin-left":""},"widgetSet":"materialdesign"},{"tpl":"tplVis-materialdesign-Table","data":{"oid":"0_userdata.0.epg.broadcast_list","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":true,"g_gestures":false,"g_signals":false,"g_last_change":false,"countCols":"7","tableLayout":"standard","showHeader":false,"roundBorder":false,"headerTextSize":"13","headerFontFamily":"InterVariable","colorBackground":"transparent","colorHeaderRowBackground":"rgba(110, 70, 62, 0.25)","colorHeaderRowText":"rgba(255,255,255,0.8)","colorRowBackground":"transparent","colorRowBackgroundHover":"transparent","colorRowText":"rgba(255,255,255,0.8)","borderColor":"transparent","dividers":"#ffffff","showColumn0":true,"colType0":"text","textAlign0":"center","colTextSize0":"","fontFamily0":"RobotoCondensed-Regular","showColumn1":true,"colType1":"text","textAlign1":"left","colTextSize1":"20","fontFamily1":"InterVariable","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"dataJson":"","padding_right0":"0","fixedHeader":true,"columnWidth0":"100","debug":false,"colTextColor0":"#ffffff","colNoWrap0":false,"padding_left0":"0","rowHeight":"120","columnWidth1":"150","colNoWrap1":false,"imageSize1":"50","padding_left1":"20","g_columnLayout_§6":true,"label0":" ","label1":"Sender","g_columnLayout_§2":true,"showColumn2":true,"colType2":"text","textAlign2":"center","colTextSize2":"20","fontFamily2":"InterVariable","g_columnLayout_§3":true,"showColumn3":"true","colType3":"text","textAlign3":"center","colTextSize3":"20","fontFamily3":"InterVariable","g_columnLayout_§4":true,"showColumn4":"true","colType4":"text","textAlign4":"left","colTextSize4":"20","fontFamily4":"InterVariable","g_columnLayout_§5":true,"showColumn5":true,"colType5":"text","textAlign5":"left","colTextSize5":"20","fontFamily5":"InterVariable","showColumn6":"true","colType6":"text","textAlign6":"center","colTextSize6":"20","fontFamily6":"InterVariable","colTextColor1":"rgba(255,255,255,0.8)","colTextColor2":"rgba(255,255,255,0.8)","suffix2":"","colTextColor3":"rgba(255,255,255,0.8)","suffix3":"","headerRowHeight":"0","padding_right1":"0","padding_left2":"0","padding_right2":"0","padding_left3":"0","padding_right3":"0","sortKey1":"","colTextColor4":"rgba(255,255,255,0.8)","padding_right4":"0","padding_right5":"0","colTextColor5":"rgba(255,255,255,0.8)","label2":"Start","label3":"Ende","label4":"Titel","label5":"Beschreibung","label6":"Jahr","columnWidth2":"100","columnWidth3":"100","colNoWrap3":false,"padding_left4":"20","columnWidth4":"200","padding_left5":"20","columnWidth5":"1000","padding_left6":"0","padding_right6":"0","columnWidth6":"80","suffix4":"","suffix5":"","showColumn7":"true","colType7":"image","textAlign7":"right","colTextSize7":"16","fontFamily7":"InterVariable","label7":" ","colTextColor6":"rgba(255,255,255,0.8)","padding_left7":"0","padding_right7":"20","colNoWrap5":false,"columnWidth7":"120","showColumn8":"true","colType8":"text","textAlign8":"right","colTextSize8":"12.5","fontFamily8":"InterVariable","colTextColor7":"","label8":"Tag","padding_left8":"0","padding_right8":"20","showColumn9":"true","colType9":"text","textAlign9":"center","colTextSize9":"12.5","fontFamily9":"InterVariable","label9":"€ / Tag","padding_left9":"0","padding_right9":"0","colTextColor8":"rgba(255,255,255,0.8)","imageSize2":"","imageSize0":"100","showColumn10":"true","colType10":"text","textAlign10":"left","colTextSize10":"12.5","fontFamily10":"InterVariable","padding_left10":"0","padding_right10":"0","colTextColor9":"rgba(255,255,255,0.8)","label10":"Zustand","visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","colNoWrap2":false,"colTextColor10":"rgba(255,255,255,0.8)","prefix2":"","colNoWrap4":false,"imageSize7":"100"},"style":{"left":"31px","top":"99px","width":"1860px","height":"730px","z-index":"3","text-shadow":"3px 3px 4px #000","font-family":"InterVariable","font-style":"normal","font-variant":"normal","font-weight":"normal","font-size":"12.5px","border-radius":"10px","border-width":"1px","border-style":"solid","border-color":"transparent","opacity":"{0_userdata.0.HardwareInfo.DashBoard.Opacity}%"},"widgetSet":"materialdesign"},{"tpl":"tplValueStringImg","data":{"oid":"0_userdata.0.Bing.Bild","g_fixed":true,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"0","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"name":"Background","locked":true},"style":{"left":"0px","top":"94px","width":"1920px","height":"900px","z-index":"0","opacity":"30%"},"widgetSet":"basic"},{"tpl":"tplJquiButtonState","data":{"oid":"0_userdata.0.epg.broadcast_mode","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","buttontext":"Was läuft gerade jetzt?","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"value":"all"},"style":{"left":"53px","top":"873px","width":"162px","height":"76px","z-index":"4"},"widgetSet":"jqui"},{"tpl":"tplHtml","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"0","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html":"alle Sender:"},"style":{"left":"880px","top":"871px","z-index":"3","color":"#ffffff","text-align":"left","text-shadow":"3px 3px 4px #000","font-family":"InterVariable","font-style":"normal","font-variant":"normal","font-weight":"normal","font-size":"20px","width":"140px","height":"20px"},"widgetSet":"basic"},{"tpl":"tplHtml","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"0","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html":"Favoriten:"},"style":{"left":"879px","top":"925px","z-index":"3","color":"#ffffff","text-align":"left","text-shadow":"3px 3px 4px #000","font-family":"InterVariable","font-style":"normal","font-variant":"normal","font-weight":"normal","font-size":"20px","width":"140px","height":"20px"},"widgetSet":"basic"},{"tpl":"tplVis-materialdesign-Select","data":{"oid":"0_userdata.0.epg.selected_channel_favorite","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":true,"g_css_border":true,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","inputType":"text","vibrateOnMobilDevices":"50","clickSoundVolume":"0.5","inputLayout":"filled","inputAlignment":"left","inputLayoutBorderColor":"#mdwTheme:vis-materialdesign.0.colors.input.border","inputLayoutBorderColorHover":"#mdwTheme:vis-materialdesign.0.colors.input.border_hover","inputLayoutBorderColorSelected":"#mdwTheme:vis-materialdesign.0.colors.input.border_selected","inputTextFontFamily":"InterVariable","inputTextFontSize":"20","inputTextColor":"rgba(255,255,255,0.8)","inputLabelColor":"#mdwTheme:vis-materialdesign.0.colors.input.label","inputLabelColorSelected":"#mdwTheme:vis-materialdesign.0.colors.input.label_selected","inputLabelFontFamily":"#mdwTheme:vis-materialdesign.0.fonts.input.label","inputLabelFontSize":"#mdwTheme:vis-materialdesign.0.fontSizes.input.label","inputAppendixColor":"#mdwTheme:vis-materialdesign.0.colors.input.appendix","inputAppendixFontSize":"#mdwTheme:vis-materialdesign.0.fontSizes.input.appendix","inputAppendixFontFamily":"#mdwTheme:vis-materialdesign.0.fonts.input.appendix","showInputMessageAlways":false,"inputMessageFontFamily":"RobotoCondensed-Regular","inputMessageFontSize":"21","inputMessageColor":"#mdwTheme:vis-materialdesign.0.colors.input.message","showInputCounter":false,"inputCounterColor":"#mdwTheme:vis-materialdesign.0.colors.input.counter","inputCounterFontSize":"#mdwTheme:vis-materialdesign.0.fontSizes.input.counter","inputCounterFontFamily":"#mdwTheme:vis-materialdesign.0.fonts.input.counter","clearIconShow":false,"clearIconColor":"#mdwTheme:vis-materialdesign.0.colors.input.icon_clear","collapseIconColor":"#mdwTheme:vis-materialdesign.0.colors.input.icon_collapse","listDataMethod":"jsonStringObject","countSelectItems":"0","listPosition":"auto","listItemBackgroundColor":"#000000","listItemBackgroundHoverColor":"#mdwTheme:vis-materialdesign.0.colors.input.menu.hover","listItemBackgroundSelectedColor":"#mdwTheme:vis-materialdesign.0.colors.input.menu.selected","listItemRippleEffectColor":"#mdwTheme:vis-materialdesign.0.colors.input.menu.effect","showSelectedIcon":"no","listIconColor":"#mdwTheme:vis-materialdesign.0.colors.input.menu.icon","listItemFontSize":"#mdwTheme:vis-materialdesign.0.fontSizes.input.dropdown.text","listItemFont":"#mdwTheme:vis-materialdesign.0.fonts.input.dropdown.text","listItemFontColor":"#mdwTheme:vis-materialdesign.0.colors.input.menu.text","listItemSubFontSize":"#mdwTheme:vis-materialdesign.0.fontSizes.input.dropdown.subText","listItemSubFont":"#mdwTheme:vis-materialdesign.0.fonts.input.dropdown.subText","listItemSubFontColor":"#mdwTheme:vis-materialdesign.0.colors.input.menu.subText","showValue":false,"listItemValueFontSize":"#mdwTheme:vis-materialdesign.0.fontSizes.input.dropdown.value","listItemValueFont":"#mdwTheme:vis-materialdesign.0.fonts.input.dropdown.value","listItemValueFontColor":"#mdwTheme:vis-materialdesign.0.colors.input.menu.value","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"autoFocus":true,"jsonStringObject":"{0_userdata.0.epg.favorite_sender_list}","listItemHeight":"6","inputLayoutBackgroundColor":"#000000"},"style":{"left":"1037px","top":"917px","width":"376px","height":"40px","box-shadow":"3px 3px 8px 1px rgba(110, 70, 62, 0.45)","border-width":"1px","border-style":"solid","border-color":"rgba(110, 70, 62, 1)","border-radius":"5px","z-index":"3","margin-left":""},"widgetSet":"materialdesign"},{"tpl":"tplHtml","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":true,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"0","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"36px","top":"851px","border-width":"1px","border-style":"dashed","border-color":"#ffffff","border-radius":"10px","width":"805px","height":"116px","z-index":"2"},"widgetSet":"basic"},{"tpl":"tplVis-materialdesign-CheckBox","data":{"oid":"0_userdata.0.epg.filter_favorite","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","toggleType":"boolean","stateIfNotTrueValue":"on","vibrateOnMobilDevices":"50","labelPosition":"right","labelClickActive":true,"valueFontFamily":"InterVariable","valueFontSize":"13","colorCheckBox":"rgba(110, 70, 62, 0.45)","colorCheckBoxBorder":"rgba(110, 70, 62, 1)","colorCheckBoxHover":"#mdwTheme:vis-materialdesign.0.colors.checkbox.hover","labelColorFalse":"rgba(255,255,255,0.8)","labelColorTrue":"rgba(255,255,255,0.8)","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"valueOff":"false","valueOn":"true","labelFalse":"Favoriten","labelTrue":"Favoriten","g_lock":false,"autoLockAfter":"10","lockIconTop":"5","lockIconLeft":"5","lockIconColor":"#mdwTheme:vis-materialdesign.0.colors.checkbox.lock_icon","lockFilterGrayscale":"30","clickSoundVolume":"0.5"},"style":{"left":"234px","top":"863px","width":"140px","height":"30px","z-index":"2","text-shadow":"3px 3px 4px #000","font-family":"InterVariable","font-style":"normal","font-variant":"normal","font-weight":"normal","font-size":"12.5px"},"widgetSet":"materialdesign"},{"tpl":"tplVis-materialdesign-CheckBox","data":{"oid":"0_userdata.0.epg.filter_free","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","toggleType":"boolean","stateIfNotTrueValue":"on","vibrateOnMobilDevices":"50","labelPosition":"right","labelClickActive":true,"valueFontFamily":"InterVariable","valueFontSize":"13","colorCheckBox":"rgba(110, 70, 62, 0.45)","colorCheckBoxBorder":"rgba(110, 70, 62, 1)","colorCheckBoxHover":"#mdwTheme:vis-materialdesign.0.colors.checkbox.hover","labelColorFalse":"rgba(255,255,255,0.8)","labelColorTrue":"rgba(255,255,255,0.8)","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"valueOff":"false","valueOn":"true","labelFalse":"Free-TV","labelTrue":"Free-TV","g_lock":false,"autoLockAfter":"10","lockIconTop":"5","lockIconLeft":"5","lockIconColor":"#mdwTheme:vis-materialdesign.0.colors.checkbox.lock_icon","lockFilterGrayscale":"30","clickSoundVolume":"0.5"},"style":{"left":"234px","top":"895px","width":"140px","height":"30px","z-index":"2","text-shadow":"3px 3px 4px #000","font-family":"InterVariable","font-style":"normal","font-variant":"normal","font-weight":"normal","font-size":"12.5px"},"widgetSet":"materialdesign"},{"tpl":"tplVis-materialdesign-CheckBox","data":{"oid":"0_userdata.0.epg.filter_pay","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","toggleType":"boolean","stateIfNotTrueValue":"on","vibrateOnMobilDevices":"50","labelPosition":"right","labelClickActive":true,"valueFontFamily":"InterVariable","valueFontSize":"13","colorCheckBox":"rgba(110, 70, 62, 0.45)","colorCheckBoxBorder":"rgba(110, 70, 62, 1)","colorCheckBoxHover":"#mdwTheme:vis-materialdesign.0.colors.checkbox.hover","labelColorFalse":"rgba(255,255,255,0.8)","labelColorTrue":"rgba(255,255,255,0.8)","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"valueOff":"false","valueOn":"true","labelFalse":"Pay-TV","labelTrue":"Pay-TV","g_lock":false,"autoLockAfter":"10","lockIconTop":"5","lockIconLeft":"5","lockIconColor":"#mdwTheme:vis-materialdesign.0.colors.checkbox.lock_icon","lockFilterGrayscale":"30","clickSoundVolume":"0.5"},"style":{"left":"234px","top":"927px","width":"140px","height":"30px","z-index":"2","text-shadow":"3px 3px 4px #000","font-family":"InterVariable","font-style":"normal","font-variant":"normal","font-weight":"normal","font-size":"12.5px"},"widgetSet":"materialdesign"},{"tpl":"tplVis-materialdesign-CheckBox","data":{"oid":"0_userdata.0.epg.filter_typ_doku","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","toggleType":"boolean","stateIfNotTrueValue":"on","vibrateOnMobilDevices":"50","labelPosition":"right","labelClickActive":true,"valueFontFamily":"InterVariable","valueFontSize":"13","colorCheckBox":"rgba(110, 70, 62, 0.45)","colorCheckBoxBorder":"rgba(110, 70, 62, 1)","colorCheckBoxHover":"#mdwTheme:vis-materialdesign.0.colors.checkbox.hover","labelColorFalse":"rgba(255,255,255,0.8)","labelColorTrue":"rgba(255,255,255,0.8)","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"valueOff":"false","valueOn":"true","labelFalse":"Doku","labelTrue":"Doku","g_lock":false,"autoLockAfter":"10","lockIconTop":"5","lockIconLeft":"5","lockIconColor":"#mdwTheme:vis-materialdesign.0.colors.checkbox.lock_icon","lockFilterGrayscale":"30","clickSoundVolume":"0.5"},"style":{"left":"389px","top":"863px","width":"140px","height":"30px","z-index":"2","text-shadow":"3px 3px 4px #000","font-family":"InterVariable","font-style":"normal","font-variant":"normal","font-weight":"normal","font-size":"12.5px"},"widgetSet":"materialdesign"},{"tpl":"tplVis-materialdesign-CheckBox","data":{"oid":"0_userdata.0.epg.filter_typ_film","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","toggleType":"boolean","stateIfNotTrueValue":"on","vibrateOnMobilDevices":"50","labelPosition":"right","labelClickActive":true,"valueFontFamily":"InterVariable","valueFontSize":"13","colorCheckBox":"rgba(110, 70, 62, 0.45)","colorCheckBoxBorder":"rgba(110, 70, 62, 1)","colorCheckBoxHover":"#mdwTheme:vis-materialdesign.0.colors.checkbox.hover","labelColorFalse":"rgba(255,255,255,0.8)","labelColorTrue":"rgba(255,255,255,0.8)","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"valueOff":"false","valueOn":"true","labelFalse":"Film","labelTrue":"Film","g_lock":false,"autoLockAfter":"10","lockIconTop":"5","lockIconLeft":"5","lockIconColor":"#mdwTheme:vis-materialdesign.0.colors.checkbox.lock_icon","lockFilterGrayscale":"30","clickSoundVolume":"0.5"},"style":{"left":"389px","top":"895px","width":"140px","height":"30px","z-index":"2","text-shadow":"3px 3px 4px #000","font-family":"InterVariable","font-style":"normal","font-variant":"normal","font-weight":"normal","font-size":"12.5px"},"widgetSet":"materialdesign"},{"tpl":"tplVis-materialdesign-CheckBox","data":{"oid":"0_userdata.0.epg.filter_typ_serie","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","toggleType":"boolean","stateIfNotTrueValue":"on","vibrateOnMobilDevices":"50","labelPosition":"right","labelClickActive":true,"valueFontFamily":"InterVariable","valueFontSize":"13","colorCheckBox":"rgba(110, 70, 62, 0.45)","colorCheckBoxBorder":"rgba(110, 70, 62, 1)","colorCheckBoxHover":"#mdwTheme:vis-materialdesign.0.colors.checkbox.hover","labelColorFalse":"rgba(255,255,255,0.8)","labelColorTrue":"rgba(255,255,255,0.8)","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"valueOff":"false","valueOn":"true","labelFalse":"Serie","labelTrue":"Serie","g_lock":false,"autoLockAfter":"10","lockIconTop":"5","lockIconLeft":"5","lockIconColor":"#mdwTheme:vis-materialdesign.0.colors.checkbox.lock_icon","lockFilterGrayscale":"30","clickSoundVolume":"0.5"},"style":{"left":"389px","top":"927px","width":"140px","height":"30px","z-index":"2","text-shadow":"3px 3px 4px #000","font-family":"InterVariable","font-style":"normal","font-variant":"normal","font-weight":"normal","font-size":"12.5px"},"widgetSet":"materialdesign"},{"tpl":"tplVis-materialdesign-CheckBox","data":{"oid":"0_userdata.0.epg.filter_typ_kinder","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","toggleType":"boolean","stateIfNotTrueValue":"on","vibrateOnMobilDevices":"50","labelPosition":"right","labelClickActive":true,"valueFontFamily":"InterVariable","valueFontSize":"13","colorCheckBox":"rgba(110, 70, 62, 0.45)","colorCheckBoxBorder":"rgba(110, 70, 62, 1)","colorCheckBoxHover":"#mdwTheme:vis-materialdesign.0.colors.checkbox.hover","labelColorFalse":"rgba(255,255,255,0.8)","labelColorTrue":"rgba(255,255,255,0.8)","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"valueOff":"false","valueOn":"true","labelFalse":"Kinder","labelTrue":"Kinder","g_lock":false,"autoLockAfter":"10","lockIconTop":"5","lockIconLeft":"5","lockIconColor":"#mdwTheme:vis-materialdesign.0.colors.checkbox.lock_icon","lockFilterGrayscale":"30","clickSoundVolume":"0.5"},"style":{"left":"544px","top":"863px","width":"140px","height":"30px","z-index":"2","text-shadow":"3px 3px 4px #000","font-family":"InterVariable","font-style":"normal","font-variant":"normal","font-weight":"normal","font-size":"12.5px"},"widgetSet":"materialdesign"},{"tpl":"tplVis-materialdesign-CheckBox","data":{"oid":"0_userdata.0.epg.filter_typ_musik","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","toggleType":"boolean","stateIfNotTrueValue":"on","vibrateOnMobilDevices":"50","labelPosition":"right","labelClickActive":true,"valueFontFamily":"InterVariable","valueFontSize":"13","colorCheckBox":"rgba(110, 70, 62, 0.45)","colorCheckBoxBorder":"rgba(110, 70, 62, 1)","colorCheckBoxHover":"#mdwTheme:vis-materialdesign.0.colors.checkbox.hover","labelColorFalse":"rgba(255,255,255,0.8)","labelColorTrue":"rgba(255,255,255,0.8)","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"valueOff":"false","valueOn":"true","labelFalse":"Musik","labelTrue":"Musik","g_lock":false,"autoLockAfter":"10","lockIconTop":"5","lockIconLeft":"5","lockIconColor":"#mdwTheme:vis-materialdesign.0.colors.checkbox.lock_icon","lockFilterGrayscale":"30","clickSoundVolume":"0.5"},"style":{"left":"544px","top":"895px","width":"140px","height":"30px","z-index":"2","text-shadow":"3px 3px 4px #000","font-family":"InterVariable","font-style":"normal","font-variant":"normal","font-weight":"normal","font-size":"12.5px"},"widgetSet":"materialdesign"},{"tpl":"tplVis-materialdesign-CheckBox","data":{"oid":"0_userdata.0.epg.filter_typ_nachrichten","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","toggleType":"boolean","stateIfNotTrueValue":"on","vibrateOnMobilDevices":"50","labelPosition":"right","labelClickActive":true,"valueFontFamily":"InterVariable","valueFontSize":"13","colorCheckBox":"rgba(110, 70, 62, 0.45)","colorCheckBoxBorder":"rgba(110, 70, 62, 1)","colorCheckBoxHover":"#mdwTheme:vis-materialdesign.0.colors.checkbox.hover","labelColorFalse":"rgba(255,255,255,0.8)","labelColorTrue":"rgba(255,255,255,0.8)","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"valueOff":"false","valueOn":"true","labelFalse":"Nachrichten","labelTrue":"Nachrichten","g_lock":false,"autoLockAfter":"10","lockIconTop":"5","lockIconLeft":"5","lockIconColor":"#mdwTheme:vis-materialdesign.0.colors.checkbox.lock_icon","lockFilterGrayscale":"30","clickSoundVolume":"0.5"},"style":{"left":"544px","top":"927px","width":"140px","height":"30px","z-index":"2","text-shadow":"3px 3px 4px #000","font-family":"InterVariable","font-style":"normal","font-variant":"normal","font-weight":"normal","font-size":"12.5px"},"widgetSet":"materialdesign"},{"tpl":"tplVis-materialdesign-CheckBox","data":{"oid":"0_userdata.0.epg.filter_typ_shopping","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","toggleType":"boolean","stateIfNotTrueValue":"on","vibrateOnMobilDevices":"50","labelPosition":"right","labelClickActive":true,"valueFontFamily":"InterVariable","valueFontSize":"13","colorCheckBox":"rgba(110, 70, 62, 0.45)","colorCheckBoxBorder":"rgba(110, 70, 62, 1)","colorCheckBoxHover":"#mdwTheme:vis-materialdesign.0.colors.checkbox.hover","labelColorFalse":"rgba(255,255,255,0.8)","labelColorTrue":"rgba(255,255,255,0.8)","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"valueOff":"false","valueOn":"true","labelFalse":"Shopping","labelTrue":"Shopping","g_lock":false,"autoLockAfter":"10","lockIconTop":"5","lockIconLeft":"5","lockIconColor":"#mdwTheme:vis-materialdesign.0.colors.checkbox.lock_icon","lockFilterGrayscale":"30","clickSoundVolume":"0.5"},"style":{"left":"699px","top":"863px","width":"140px","height":"30px","z-index":"2","text-shadow":"3px 3px 4px #000","font-family":"InterVariable","font-style":"normal","font-variant":"normal","font-weight":"normal","font-size":"12.5px"},"widgetSet":"materialdesign"},{"tpl":"tplVis-materialdesign-CheckBox","data":{"oid":"0_userdata.0.epg.filter_typ_sport","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","toggleType":"boolean","stateIfNotTrueValue":"on","vibrateOnMobilDevices":"50","labelPosition":"right","labelClickActive":true,"valueFontFamily":"InterVariable","valueFontSize":"13","colorCheckBox":"rgba(110, 70, 62, 0.45)","colorCheckBoxBorder":"rgba(110, 70, 62, 1)","colorCheckBoxHover":"#mdwTheme:vis-materialdesign.0.colors.checkbox.hover","labelColorFalse":"rgba(255,255,255,0.8)","labelColorTrue":"rgba(255,255,255,0.8)","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"valueOff":"false","valueOn":"true","labelFalse":"Sport","labelTrue":"Sport","g_lock":false,"autoLockAfter":"10","lockIconTop":"5","lockIconLeft":"5","lockIconColor":"#mdwTheme:vis-materialdesign.0.colors.checkbox.lock_icon","lockFilterGrayscale":"30","clickSoundVolume":"0.5"},"style":{"left":"699px","top":"895px","width":"140px","height":"30px","z-index":"2","text-shadow":"3px 3px 4px #000","font-family":"InterVariable","font-style":"normal","font-variant":"normal","font-weight":"normal","font-size":"12.5px"},"widgetSet":"materialdesign"},{"tpl":"tplVis-materialdesign-CheckBox","data":{"oid":"0_userdata.0.epg.filter_typ_vollprogramm","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","toggleType":"boolean","stateIfNotTrueValue":"on","vibrateOnMobilDevices":"50","labelPosition":"right","labelClickActive":true,"valueFontFamily":"InterVariable","valueFontSize":"13","colorCheckBox":"rgba(110, 70, 62, 0.45)","colorCheckBoxBorder":"rgba(110, 70, 62, 1)","colorCheckBoxHover":"#mdwTheme:vis-materialdesign.0.colors.checkbox.hover","labelColorFalse":"rgba(255,255,255,0.8)","labelColorTrue":"rgba(255,255,255,0.8)","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"valueOff":"false","valueOn":"true","labelFalse":"Vollprogramm","labelTrue":"Vollprogramm","g_lock":false,"autoLockAfter":"10","lockIconTop":"5","lockIconLeft":"5","lockIconColor":"#mdwTheme:vis-materialdesign.0.colors.checkbox.lock_icon","lockFilterGrayscale":"30","clickSoundVolume":"0.5"},"style":{"left":"699px","top":"927px","width":"140px","height":"30px","z-index":"2","text-shadow":"3px 3px 4px #000","font-family":"InterVariable","font-style":"normal","font-variant":"normal","font-weight":"normal","font-size":"12.5px"},"widgetSet":"materialdesign"},{"tpl":"tplHtml","data":{"g_fixed":true,"g_visibility":false,"g_css_font_text":false,"g_css_background":true,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"0","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"name":"Linie","filterkey":"","comment":"","class":""},"style":{"left":"35px","top":"835px","width":"950px","height":"1px","background":"linear-gradient(to left, rgba(110, 70, 62, 1) 5px, rgba(110, 70, 62, 0.2) 100%)","z-index":"3"},"widgetSet":"basic"},{"tpl":"tplHtml","data":{"g_fixed":true,"g_visibility":false,"g_css_font_text":false,"g_css_background":true,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"0","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"name":"Linie","filterkey":"","comment":"","class":""},"style":{"left":"955px","top":"835px","width":"950px","height":"1px","background":"linear-gradient(to left, rgba(110, 70, 62, 0.2) 5px, rgba(110, 70, 62, 1) 100%)","z-index":"3"},"widgetSet":"basic"},{"tpl":"tplJquiButtonState","data":{"oid":"0_userdata.0.epg.refresh","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","buttontext":"Daten und Listen manuell aktualisieren","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"value":"true"},"style":{"left":"1704px","top":"864px","width":"174px","height":"85px","z-index":"3"},"widgetSet":"jqui"},{"tpl":"tplContainerIconDialog","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":true,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"contains_view":"EPG_Channel","dialog_width":"520","dialog_height":"400","title":"Einstellungen","src":"","imageHeight":"0","invert_icon":false,"modal":true,"dialog_top":"","autoclose":"","dialog_left":"","noHeader":false,"text":"Details"},"style":{"left":"1437px","top":"885px","width":"98px","height":"42px","line-height":"2.4","z-index":"3","border-radius":"5px"},"widgetSet":"jqui"},{"tpl":"tplHtml","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":true,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"0","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"863px","top":"851px","border-width":"1px","border-style":"dashed","border-color":"#ffffff","border-radius":"10px","width":"687px","height":"116px","z-index":"2"},"widgetSet":"basic"}]
</code></pre>
<p dir="auto">Und hier die Widget vom Popup:</p>
<pre><code>[{"tpl":"tplVis-materialdesign-CheckBox","data":{"oid":"0_userdata.0.epg.edit.active","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","toggleType":"boolean","stateIfNotTrueValue":"on","vibrateOnMobilDevices":"50","labelPosition":"right","labelClickActive":true,"valueFontFamily":"InterVariable","valueFontSize":"13","colorCheckBox":"rgba(110, 70, 62, 0.45)","colorCheckBoxBorder":"rgba(110, 70, 62, 1)","colorCheckBoxHover":"#mdwTheme:vis-materialdesign.0.colors.checkbox.hover","labelColorFalse":"rgba(255,255,255,0.8)","labelColorTrue":"rgba(255,255,255,0.8)","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"valueOff":"false","valueOn":"true","labelFalse":"Aktiv","labelTrue":"Aktiv","g_lock":false,"autoLockAfter":"10","lockIconTop":"5","lockIconLeft":"5","lockIconColor":"#mdwTheme:vis-materialdesign.0.colors.checkbox.lock_icon","lockFilterGrayscale":"30","clickSoundVolume":"0.5"},"style":{"left":"337px","top":"78px","width":"108px","height":"30px","z-index":"999","text-shadow":"3px 3px 4px #000","font-family":"InterVariable","font-style":"normal","font-variant":"normal","font-weight":"normal","font-size":"12.5px"},"widgetSet":"materialdesign"},{"tpl":"tplValueStringImg","data":{"oid":"nothing_selected","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"0","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"97px","top":"82px","z-index":"999"},"widgetSet":"basic"},{"tpl":"tplVis-materialdesign-CheckBox","data":{"oid":"0_userdata.0.epg.edit.favorite","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","toggleType":"boolean","stateIfNotTrueValue":"on","vibrateOnMobilDevices":"50","labelPosition":"right","labelClickActive":true,"valueFontFamily":"InterVariable","valueFontSize":"13","colorCheckBox":"rgba(110, 70, 62, 0.45)","colorCheckBoxBorder":"rgba(110, 70, 62, 1)","colorCheckBoxHover":"#mdwTheme:vis-materialdesign.0.colors.checkbox.hover","labelColorFalse":"rgba(255,255,255,0.8)","labelColorTrue":"rgba(255,255,255,0.8)","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"valueOff":"false","valueOn":"true","labelFalse":"Favorit","labelTrue":"Favorit","g_lock":false,"autoLockAfter":"10","lockIconTop":"5","lockIconLeft":"5","lockIconColor":"#mdwTheme:vis-materialdesign.0.colors.checkbox.lock_icon","lockFilterGrayscale":"30","clickSoundVolume":"0.5"},"style":{"left":"337px","top":"108px","width":"108px","height":"30px","z-index":"999","text-shadow":"3px 3px 4px #000","font-family":"InterVariable","font-style":"normal","font-variant":"normal","font-weight":"normal","font-size":"12.5px"},"widgetSet":"materialdesign"},{"tpl":"tplJquiButtonState","data":{"oid":"0_userdata.0.epg.edit.save","g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","buttontext":"Speichern","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"value":"true"},"style":{"left":"300px","top":"172px","width":"174px","height":"53px","z-index":"999"},"widgetSet":"jqui"},{"tpl":"tplHtml","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"0","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html":"&lt;img style=\"max-width:250px; max-height:250px; object-fit:contain; vertical-align:middle;\" src=\"{0_userdata.0.epg.edit.icon_url}\"&gt;"},"style":{"left":"13px","top":"15px","z-index":"999","width":"250px","height":"250px"},"widgetSet":"basic"},{"tpl":"tplValueString","data":{"oid":"0_userdata.0.epg.edit.name","g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0},"style":{"left":"24px","top":"298px","z-index":"999","color":"#ffffff","text-align":"center","text-shadow":"3px 3px 4px #000","font-family":"InterVariable","font-style":"normal","font-variant":"small-caps","font-weight":"normal","font-size":"xx-large","width":"472px","height":"38px"},"widgetSet":"basic"}]
</code></pre>
<p dir="auto">Und nochmal der Hinweis: Wenn der Pfad für die Datenpunkte in der Konfig geändert wurde, müssen auch diese Angaben in den Widgets angepasst werden.</p>
<p dir="auto">Ro75.</p>
]]></description><link>https://forum.iobroker.net/post/1345934</link><guid isPermaLink="true">https://forum.iobroker.net/post/1345934</guid><dc:creator><![CDATA[Ro75]]></dc:creator><pubDate>Wed, 24 Jun 2026 14:08:46 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Wed, 24 Jun 2026 13:50:10 GMT]]></title><description><![CDATA[<p dir="auto">Kannst ja in einem separatem Thread deine Lösung vorstellen.</p>
<p dir="auto">Ro75.</p>
]]></description><link>https://forum.iobroker.net/post/1345930</link><guid isPermaLink="true">https://forum.iobroker.net/post/1345930</guid><dc:creator><![CDATA[Ro75]]></dc:creator><pubDate>Wed, 24 Jun 2026 13:50:10 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Wed, 24 Jun 2026 13:45:19 GMT]]></title><description><![CDATA[<p dir="auto">So ganz safe wäre ich mit der Quelle der Daten nicht um es hier zu verfielfaltigen.<br />
Hatte mich vor ei ihrer Zeit schonmal mit der Seite beschäftigt.</p>
<p dir="auto">Da ich mir selber unsicher war, bin ich auf <a href="https://epg.best/" rel="nofollow ugc">https://epg.best/</a> umgestiegen.<br />
1€ pro Monat sind mir die Daten wert.</p>
]]></description><link>https://forum.iobroker.net/post/1345926</link><guid isPermaLink="true">https://forum.iobroker.net/post/1345926</guid><dc:creator><![CDATA[David G.]]></dc:creator><pubDate>Wed, 24 Jun 2026 13:45:19 GMT</pubDate></item><item><title><![CDATA[Reply to EPG-Daten via Script on Wed, 24 Jun 2026 13:12:25 GMT]]></title><description><![CDATA[<p dir="auto">Heute Abend wird es ein Update geben:</p>
<ul>
<li>Start und Stop nur noch HH:MM</li>
<li>Die 2 Auswahllisten bekommen getrennte Datenpunkte für eine bessere Optik, funktionell keine Änderung zu bisher</li>
<li>Eine Editierungs-Senderliste wird es geben. Darin kann die Sender-Reihenfolge, ob Favorit und Aktiv an/aus schnell - per Hand - zentral festgelegt werden. Beim Speichern werden die Änderungen im jeweiligen Sender gespeichert und sofort aktiv. Bedeutet, die Sender werden z.B. sofort sortiert angezeigt.</li>
</ul>
<p dir="auto">Ro75.</p>
<p dir="auto">EDIT:</p>
<p dir="auto"><img src="/assets/uploads/files/1782306652010-c13ff506-3950-4c02-ae48-7580ef130a73-image-resized.jpeg" alt="c13ff506-3950-4c02-ae48-7580ef130a73-image.jpeg" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="/assets/uploads/files/1782306739669-0853d717-96a2-47b8-91b9-5c63d9e78cdc-image.jpeg" alt="0853d717-96a2-47b8-91b9-5c63d9e78cdc-image.jpeg" class=" img-fluid img-markdown" /></p>
]]></description><link>https://forum.iobroker.net/post/1345920</link><guid isPermaLink="true">https://forum.iobroker.net/post/1345920</guid><dc:creator><![CDATA[Ro75]]></dc:creator><pubDate>Wed, 24 Jun 2026 13:12:25 GMT</pubDate></item></channel></rss>