Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Visualisierung
  4. EPG-Daten via Script

NEWS

  • Der neue Monatsrückblick für Mai und Juni 2026 ist online!
    BluefoxB
    Bluefox
    7
    1
    197

  • wichtiges UPDATE für controller 7.2.2 im stable
    HomoranH
    Homoran
    10
    1
    3.3k

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    16
    1
    5.1k

EPG-Daten via Script

Geplant Angeheftet Gesperrt Verschoben Visualisierung
vismaterial ui
71 Beiträge 9 Kommentatoren 4.8k Aufrufe 10 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • bahnuhrB bahnuhr

    @Thomas-Braun
    Ja, das versteh ich.
    Und ist dies hier auch so ?

    OliverIOO Offline
    OliverIOO Offline
    OliverIO
    schrieb am zuletzt editiert von OliverIO
    #59

    @bahnuhr

    habe dazu nur agb aus österreich gefunden.
    ich gehe davon aus das es in deutschland ähnlich ist

    https://www.magenta.at/tv-nutzungsbedingungen

    81ecd224-9b62-4b75-a15c-e53d313feae9-image.jpeg

    und hier die analyse von chatgpt was meinem verständnis entspricht

    Nutzung Risiko
    Privat EPG in MagentaTV ansehen Unproblematisch
    Eigenes Tool liest EPG für den persönlichen Gebrauch aus Graubereich
    XMLTV-Feed aus MagentaTV erzeugen und veröffentlichen Wahrscheinlich lizenzrechtlich problematisch
    Kommerzielle Nutzung oder Weiterverkauf Sehr wahrscheinlich lizenzpflichtig

    zumindest die seite, die die xml daten anbietet bewegt sich im graubereich.

    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.

    wie gesagt: graubereich
    ob das auffindbar ist? eher nicht, da ja keine informationen von den vielen clients direkt von der eigentlichen quelle gelesen werden.

    ich mag hier das niemand madig machen.
    nur damit man das risiko entsprechen selbst bewerten kann.

    Meine Adapter und Widgets
    TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
    Links im Profil

    1 Antwort Letzte Antwort
    0
    • sigi234S sigi234

      @Ro75 sagte:

      Aber es wird doch etwas vergleichbares geben?
      Ro75.

      Da bin ich gerade dabei

      Edit:
      Einige probiert der DP ist nicht dazu fähig.

      63d42acd-350c-49d6-be4f-3b74ae8eeb00-image.jpeg

      icebearI Online
      icebearI Online
      icebear
      schrieb am zuletzt editiert von
      #60

      @sigi234 sagte:

      Da bin ich gerade dabei

      Edit:
      Einige probiert der DP ist nicht dazu fähig.

      Funktioniert es denn jetzt bei dir mit Vis-2 ? Und welches Widget bzw. welche Widgets hast du genommen um das EPG darzustellen?

      sigi234S 1 Antwort Letzte Antwort
      0
      • icebearI icebear

        @sigi234 sagte:

        Da bin ich gerade dabei

        Edit:
        Einige probiert der DP ist nicht dazu fähig.

        Funktioniert es denn jetzt bei dir mit Vis-2 ? Und welches Widget bzw. welche Widgets hast du genommen um das EPG darzustellen?

        sigi234S Online
        sigi234S Online
        sigi234
        Forum Testing Most Active
        schrieb am zuletzt editiert von
        #61

        @icebear sagte:

        @sigi234 sagte:

        Da bin ich gerade dabei

        Edit:
        Einige probiert der DP ist nicht dazu fähig.

        Funktioniert es denn jetzt bei dir mit Vis-2 ? Und welches Widget bzw. welche Widgets hast du genommen um das EPG darzustellen?

        Nein, bin wieder zum TV Adapter zurück gegangen.

        Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
        Immer Daten sichern!

        icebearI 1 Antwort Letzte Antwort
        0
        • sigi234S sigi234

          @icebear sagte:

          @sigi234 sagte:

          Da bin ich gerade dabei

          Edit:
          Einige probiert der DP ist nicht dazu fähig.

          Funktioniert es denn jetzt bei dir mit Vis-2 ? Und welches Widget bzw. welche Widgets hast du genommen um das EPG darzustellen?

          Nein, bin wieder zum TV Adapter zurück gegangen.

          icebearI Online
          icebearI Online
          icebear
          schrieb am zuletzt editiert von
          #62

          @sigi234 sagte:

          Nein, bin wieder zum TV Adapter zurück gegangen.

          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.
          Info dazu: Seit dem läuft mein System wesentlich stabiler und schneller als vorher wo ich beide parallel laufen hatte.

          Schade wäre eine sinnvolle Ergänzung zu meinem bestehenden TV Programm gewesen.

          1 Antwort Letzte Antwort
          0
          • Ro75R Online
            Ro75R Online
            Ro75
            schrieb am zuletzt editiert von
            #63

            Zur Darstellung ist ein json widget notwendig.

            Ro75.

            SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

            bahnuhrB icebearI 2 Antworten Letzte Antwort
            0
            • Ro75R Ro75

              Zur Darstellung ist ein json widget notwendig.

              Ro75.

              bahnuhrB Online
              bahnuhrB Online
              bahnuhr
              Forum Testing Most Active
              schrieb am zuletzt editiert von
              #64

              @Ro75
              Hallo,
              bekommt man die Senderlogos in Spalte 1 irgendwie kleiner.
              Habe schon mal transform:scale(0.6) oder nur scale)0.6) probiert.
              Auch verschiedene json widgets.

              Aber klappt nicht.

              haste eine Idee ?


              Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
              Danke.
              gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
              ScreenToGif :https://www.screentogif.com/downloads.html

              1 Antwort Letzte Antwort
              0
              • Ro75R Online
                Ro75R Online
                Ro75
                schrieb am zuletzt editiert von
                #65

                Suche danach:

                            result.push({sender_icon_url: `<img style="max-width:80px; max-height:80px;
                

                ändere max-width:80px; max-height:80px in z.B 60 ab. Hinweis. Da gibt es mehr als eine Stelle.

                Ro75.

                SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

                bahnuhrB 1 Antwort Letzte Antwort
                0
                • Ro75R Ro75

                  Suche danach:

                              result.push({sender_icon_url: `<img style="max-width:80px; max-height:80px;
                  

                  ändere max-width:80px; max-height:80px in z.B 60 ab. Hinweis. Da gibt es mehr als eine Stelle.

                  Ro75.

                  bahnuhrB Online
                  bahnuhrB Online
                  bahnuhr
                  Forum Testing Most Active
                  schrieb am zuletzt editiert von
                  #66

                  @Ro75
                  Danke.
                  Hätte ich auch selber drauf kommen können ;-)


                  Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
                  Danke.
                  gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
                  ScreenToGif :https://www.screentogif.com/downloads.html

                  1 Antwort Letzte Antwort
                  0
                  • Ro75R Ro75

                    Zur Darstellung ist ein json widget notwendig.

                    Ro75.

                    icebearI Online
                    icebearI Online
                    icebear
                    schrieb am zuletzt editiert von icebear
                    #67

                    @Ro75 sagte:

                    Zur Darstellung ist ein json widget notwendig.

                    Ok. Ich habs jetzt doch mal zum testen installiert, und mit dem vis-inventwo-design 'Tabellen Widget bekomme ich auch das epg angezeigt.

                    Hab dann von Hand mit Notepad die 0_userdata.0.epg.sender_edit_list bearbeitet und das Ergebnis ist:

                    epg.png

                    Sieht ja schomal ganz gut aus.

                    Jetzt, könntest du mal beschreiben, wie du diese Leiste unten zusammengebaut hast, also welcher DP für welches Widget ist:

                    edit.png

                    Ich werde dann versuchen das nur mit VIS-2 Widgets nachzubauen.

                    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

                    Für input wäre ich dankbar.

                    1 Antwort Letzte Antwort
                    0
                    • Ro75R Online
                      Ro75R Online
                      Ro75
                      schrieb am zuletzt editiert von
                      #68

                      Alle Häckenfilter (z.B. Favoriten) sind die Datenpunkte beginnend mit "filter_"Fettschrift Vom Wert her true oder false. Ich habe es mit materialdesign (VIS 1 - 0.5.94) gelöst.

                      "Was läuft gerade jetzt" ist das Datenpunkt "broadcast_mode". Da kommt als Wert "all" rein. Das sollte mit einem Button möglich sein.

                      Der Bereich mit den Auswahlfelder ("alle Sender" und "Favoriten") zeigt alle Sendungen zu dem gewählten Sender an. Also alle Sendungen von JETZT an. Die Datenpunkte sind selected_channel bzw. selected_channel_favorite. Diese kannst du mit einem Auswahl-/Selektfeld steuern oder die hast pro Sender einen Button der die entsprechende ID da einträgt. Beispiel die 20 und dann bekommst du alles von "Das Erste". Wenn du danach wieder zur Liveansiocht willst, siehe weiter oben "Was läuft gerade jetzt".

                      @icebear sagte:

                      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

                      ANTWORT: siehe darüber Auswahlfelder

                      Ro75.

                      SERVER = Beelink U59 16GB DDR4 RAM 512GB SSD, FB 7490, FritzDect 200+301+440, ConBee II, Zigbee Aqara Sensoren + NOUS A1Z, NOUS A1T, Philips Hue ** ioBroker, REDIS, influxdb2, Grafana, PiHole, Plex-Mediaserver, paperless-ngx (Docker), MariaDB + phpmyadmin *** VIS-Runtime = Intel NUC 8GB RAM 128GB SSD + 24" Touchscreen

                      1 Antwort Letzte Antwort
                      0
                      • icebearI Online
                        icebearI Online
                        icebear
                        schrieb am zuletzt editiert von icebear
                        #69

                        Ok, für alle die für VIS-2 weiter mit testen wollen, hier schonmal ein Teilerfolg.

                        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.

                        TypeScript:

                        // 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<number, string> = {};
                        
                                senderListe.forEach((sender: TvSender) => {
                                    // 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
                                }, () => {
                                    // Eigenschaften des Objekts überschreiben/aktualisieren
                                    extendObject(targetDpId, {
                                        common: {
                                            type: 'number', // Typ im bestehenden Objekt auf 'number' erzwingen
                                            states: dropdownStates
                                        }
                                    }, (err) => {
                                        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' }, () => {
                            log(`Änderung in ${sourceDpId} erkannt. Aktualisiere Dropdown...`);
                            updateDropdown();
                        });
                        

                        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.

                        1 Antwort Letzte Antwort
                        0
                        • metaxaM Offline
                          metaxaM Offline
                          metaxa
                          schrieb am zuletzt editiert von
                          #70

                          Hallo und Respekt für dieses Script und die Aufbereitung.

                          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.

                          Benötige ich dafür eine 2. Instanz?

                          Auf der Seite https://iptv-epg.org/guides 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?

                          LG & Danke
                          mxa

                          1 Antwort Letzte Antwort
                          0
                          • icebearI Online
                            icebearI Online
                            icebear
                            schrieb am zuletzt editiert von icebear
                            #71

                            Ich habe das ganze jetzt mal für VIS-2 kompatibel hinbekommen.
                            Es werden Widgets vom vis-inventwo desgin Adapter und vom Widget Sammlung Adapter ( siehe 2 Posts oben drüber) benötigt.

                            Für das List-Widget (Auswahl, Boolscherwert,Zahl, Zeichenkette) aus dem Adapter Widget Sammlung wird zusätzlich der Hilfsdatenpunkt z.B 0_userdata.0.Test.TV_Sender_Auswahl benötigt. Den muß man im Script (TypeScript -> siehe zwei Posts drüber) den Pfad anpassen (const targetDpId: string = '0_userdata.0.TV_Sender_Auswahl';)

                            Hier die Seite aus der VIS-2:

                            epg-Vis2.txt

                            Für das PopUp Window zum editieren beim Klick auf den Button 'Details' wird ein weiteres Script (TypeScript) benötigt, diese legt zwei neue DP unter '0_userdata.0.epg.edit' an, einmal '0_userdata.0.epg.edit.btn_down' und einmal '0_userdata.0.epg.edit.btn_up' .

                            Im PopUp Window werden damit die zwei Button +Plus und -Minus gesteuert.

                            Hier das TypeScript:

                            const dpTarget = '0_userdata.0.epg.edit.order';
                            const dpBtnUp  = '0_userdata.0.epg.edit.btn_up';
                            const dpBtnDown = '0_userdata.0.epg.edit.btn_down';
                            
                            // Trigger-Datenpunkte automatisch anlegen
                            createState(dpBtnUp, false, { 
                                type: 'boolean', 
                                role: 'button', 
                                name: 'EPG Order Erhöhen', 
                                read: false, 
                                write: true,
                                def: false
                            });
                            
                            createState(dpBtnDown, false, { 
                                type: 'boolean', 
                                role: 'button', 
                                name: 'EPG Order Verringern', 
                                read: false, 
                                write: true,
                                def: false
                            });
                            
                            // Listener für Erhöhen (+)
                            on({ id: dpBtnUp, change: 'any', val: true }, async () => {
                                const currentState = await getStateAsync(dpTarget);
                                if (currentState && typeof currentState.val === 'number') {
                                    await setStateAsync(dpTarget, currentState.val + 1, true);
                                } else {
                                    // Fallback, falls der Wert leer oder kein Number ist
                                    await setStateAsync(dpTarget, 1, true);
                                }
                            });
                            
                            // Listener für Verringern (-)
                            on({ id: dpBtnDown, change: 'any', val: true }, async () => {
                                const currentState = await getStateAsync(dpTarget);
                                
                                if (currentState && typeof currentState.val === 'number') {
                                    // Zieht 1 ab, nimmt aber mindestens die 1 (verhindert 0 oder Minuswerte)
                                    const newValue = Math.max(1, currentState.val - 1);
                                    await setStateAsync(dpTarget, newValue, true);
                                } else {
                                    // Fallback, falls der Ursprungswert leer oder fehlerhaft war
                                    await setStateAsync(dpTarget, 1, true);
                                }
                            });
                            

                            Und das PopUp Widget:

                            epgPopUp-Vis2.txt

                            Bei mir funktioniert das soweit.

                            1 Antwort Letzte Antwort
                            0

                            Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                            Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                            Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                            Registrieren Anmelden
                            Antworten
                            • In einem neuen Thema antworten
                            Anmelden zum Antworten
                            • Älteste zuerst
                            • Neuste zuerst
                            • Meiste Stimmen


                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            387

                            Online

                            33.0k

                            Benutzer

                            83.4k

                            Themen

                            1.3m

                            Beiträge
                            Community
                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                            ioBroker Community 2014-2026
                            logo
                            • Anmelden

                            • Du hast noch kein Konto? Registrieren

                            • Anmelden oder registrieren, um zu suchen
                            • Erster Beitrag
                              Letzter Beitrag
                            0
                            • Home
                            • Aktuell
                            • Tags
                            • Ungelesen 0
                            • Kategorien
                            • Unreplied
                            • Beliebt
                            • GitHub
                            • Docu
                            • Hilfe