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. Skripten / Logik
  4. Blockly
  5. Ausgabe Name des Senders

NEWS

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

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

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

Ausgabe Name des Senders

Geplant Angeheftet Gesperrt Verschoben Blockly
44 Beiträge 7 Kommentatoren 1.1k Aufrufe 6 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.
  • matze55M Offline
    matze55M Offline
    matze55
    schrieb am zuletzt editiert von
    #35

    Guten morgen....Danke für die Hinweise und eure Antworten. Der entscheidente Tip kamm von @oliverio. Die Sendernamen zeigen an und auch der Titel der Sender. Und ja @ullij die Daten kommen alle an, die stehen in der API.
    Nur wo es jetzt noch ein wenig hängt das ist die Uhrzeit da klemmt es noch.

    Geändert:

    const startTime = new Date(event.start * 1000);
            const timeString = startTime.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' }) + ' Uhr';
    

    Vorher:

    const startTime = new Date(event.event_start * 1000);
            const timeString = startTime.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' }) + ' Uhr';
    

    Homematic CCU3,-Synology NAS 4TB,- 2 Sonos One,- Gigabyte N4500 8GB DDR4 2TB
    Tapo C210 Cam
    WLED Steuerung über lcdwiki

    OliverIOO U 2 Antworten Letzte Antwort
    0
    • matze55M matze55

      Guten morgen....Danke für die Hinweise und eure Antworten. Der entscheidente Tip kamm von @oliverio. Die Sendernamen zeigen an und auch der Titel der Sender. Und ja @ullij die Daten kommen alle an, die stehen in der API.
      Nur wo es jetzt noch ein wenig hängt das ist die Uhrzeit da klemmt es noch.

      Geändert:

      const startTime = new Date(event.start * 1000);
              const timeString = startTime.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' }) + ' Uhr';
      

      Vorher:

      const startTime = new Date(event.event_start * 1000);
              const timeString = startTime.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' }) + ' Uhr';
      
      OliverIOO Offline
      OliverIOO Offline
      OliverIO
      schrieb am zuletzt editiert von
      #36

      @matze55

      Und in welcher Zeile ist das Problem?
      Gibt es einen Fehler?
      Wird in irgendeiner Zeile etwas nicht erwartetes zurückgegeben?

      Hast du log Ausgaben eingebaut.
      Leider weiß ich nicht, wie die Daten tatsächlich aussehen.
      Du hast zwar event.event_start geändert.
      Oben sehe ich aber, dass es eher now_timestamp heißt.
      Aber das sind die Daten von jemand anderen, keine Ahnung, wie es bei dir aussieht.

      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
      • matze55M Offline
        matze55M Offline
        matze55
        schrieb am zuletzt editiert von
        #37

        Ich habe deine Änderungen übernommen. Nur das mit dem Timestamp da stimmt was nicht.
        In der Json zeigt das Timestamp an nur in der Html nicht. Name des senders Korrekt. Titel des Senders Korrekt.

        Homematic CCU3,-Synology NAS 4TB,- 2 Sonos One,- Gigabyte N4500 8GB DDR4 2TB
        Tapo C210 Cam
        WLED Steuerung über lcdwiki

        1 Antwort Letzte Antwort
        0
        • matze55M matze55

          Guten morgen....Danke für die Hinweise und eure Antworten. Der entscheidente Tip kamm von @oliverio. Die Sendernamen zeigen an und auch der Titel der Sender. Und ja @ullij die Daten kommen alle an, die stehen in der API.
          Nur wo es jetzt noch ein wenig hängt das ist die Uhrzeit da klemmt es noch.

          Geändert:

          const startTime = new Date(event.start * 1000);
                  const timeString = startTime.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' }) + ' Uhr';
          

          Vorher:

          const startTime = new Date(event.event_start * 1000);
                  const timeString = startTime.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' }) + ' Uhr';
          
          U Offline
          U Offline
          UlliJ
          schrieb am zuletzt editiert von
          #38

          @matze55 sagte:

          die stehen in der API

          dann zeig doch mal wie die Attribute des Json aussehen. Dann kann Dir auch jemand helfen

          Proxmox auf iNuc, lxc für IoB, InfluxDB2, Grafana, u.a. *** Homematic & Homematic IP, Shellies, Zigbee etc

          1 Antwort Letzte Antwort
          0
          • matze55M Offline
            matze55M Offline
            matze55
            schrieb am zuletzt editiert von
            #39

            Der gesamte Code so wie er jetzt aussieht:

            // --- KONFIGURATION GIGABLUE ENIGMA2 BOX---
            const BOX_IP = 'XXX.XXX.XXX.XX'; // IP deiner Enigma2 Box bitte anpassen
            const TARGET_JSON_DP = '0_userdata.0.enigma2.epg_json'; //Datenpunkt Json
            const TARGET_HTML_DP = '0_userdata.0.enigma2.epg_html'; //Datenpunkt Html
            // ---------------------
            
            const axios = require('axios');
            
            // Datenpunkte erstellen, falls sie fehlen
            await createStateAsync(TARGET_JSON_DP, { name: 'Enigma2 EPG JSON', type: 'string', role: 'json', read: true, write: false });
            await createStateAsync(TARGET_HTML_DP, { name: 'Enigma2 EPG HTML für VIS', type: 'string', role: 'html', read: true, write: false });
            
            // Holt vollautomatisch die exakte ID des ersten TV-Bouquets
            async function fetchValidBouquetRef() {
                try {
                    const response = await axios.get(`http://${BOX_IP}/api/getallservices`, { timeout: 3000 });
                    
                    if (response && response.data && response.data.services) {
                        const services = response.data.services;
                        
                        // Fall 1: API liefert ein direktes Array
                        if (Array.isArray(services) && services.length > 0) {
                            return services[0].servicereference;
                        } 
                        // Fall 2: API liefert ein verschachteltes Objekt
                        if (services.servicereference) {
                            return services.servicereference;
                        }
                    }
                } catch (e) {
                    log(`Enigma2: Fehler beim automatischen Bouquet-Abruf: ${e.message}`, 'warn');
                }
                return null;
            }
            
            function buildHtmlTable(epgData) {
                if (!epgData || !epgData.events || !Array.isArray(epgData.events) || epgData.events.length === 0) {
                    return '<p style="color: #ff5252; padding: 10px;">Keine EPG-Daten empfangen. Bitte Bouquet-Einstellung prüfen.</p>';
                }
            
                let html = `
                <style>
                    .e2-epg-table { width: 100%; border-collapse: collapse; font-family: sans-serif; font-size: 14px; color: #ffffff; }
                    .e2-epg-table tr { border-bottom: 1px solid #444444; }
                    .e2-epg-table tr:nth-child(even) { background-color: rgba(255,255,255,0.5); }
                    .e2-epg-table td { padding: 10px 8px; vertical-align: top; }
                    .e2-ch-name { font-weight: bold; color: #3498db; width: 33%; }
                    .e2-time { color: #f1c40f; font-weight: bold; width: 33%; white-space: nowrap; }
                    .e2-title { font-weight: bold; color: #ffffff; margin-bottom: 3px; }
                    .e2-desc { color: #aaaaaa; font-size: 12px; line-height: 1.3; }
                </style>
                <table class="e2-epg-table">
                `;
            
                epgData.events.forEach(event => {
                    if (!event.sname || !event.title ) return;
            
                    //const startTime = new Date(event.begin * 1000);
                    //const timeString = startTime.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' }) + ' Uhr';
            
                    ////
                    // WICHTIG: Wert explizit in eine Ganzzahl konvertieren
                    const timestampInSeconds = parseInt(event.start, 10);
                    // Erst jetzt das Date-Objekt erzeugen
                    const startDateObj = new Date(timestampInSeconds * 1000);
                    // Formatieren der Ausgabe
                    const timeString = startDateObj.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' }) + ' Uhr';
                    const dateString = startDateObj.toLocaleDateString('de-DE');
                    ////
                    
                    html += `
                    <tr>
                        <td class="e2-ch-name">${event.sname}</td>
                        <td class="e2-time">${timeString} - ${dateString}</td>
                        <td>
                            <div class="e2-title">${event.title}</div>
                            <div class="e2-desc">${event.description || ''}</div>
                        </td>
                    </tr>
                    `;
                });
            
                html += '</table>';
                return html;
            }
            
            async function updateEPG() {
                try {
                    // 1. Automatisch die korrekte, vom OpenWebif akzeptierte ID ermitteln
                    const verifiedBref = await fetchValidBouquetRef();
                    
                    if (!verifiedBref) {
                        log('Enigma2 EPG abgebrochen: Es konnte keine gültige Bouquet-Referenz von der Box gelesen werden.', 'error');
                        return;
                    }
            
                    // 2. Abfrage mit dem vom OpenWebif exakt geforderten Parameter 'bRef'
                    const url = `http://${BOX_IP}/api/epgnow?bRef=${encodeURIComponent(verifiedBref)}`;
                    const response = await axios.get(url, { timeout: 5000 });
                    
                    if (response && response.status === 200 && response.data) {
                        const data = response.data;
            
                        if (data.result === false) {
                            log(`Enigma2 meldet Fehler im Payload: ${data.message || 'Unbekannt'}`, 'warn');
                            return;
                        }
            
                        // 1. JSON speichern
                        await setStateAsync(TARGET_JSON_DP, JSON.stringify(data), true);
                        
                        // 2. HTML generieren und speichern
                        const htmlTable = buildHtmlTable(data);
                        await setStateAsync(TARGET_HTML_DP, htmlTable, true);
                        log('Enigma2 EPG erfolgreich aktualisiert.', 'info');
                        
                    } else {
                        const status = response ? response.status : 'Keine Antwort';
                        log(`Enigma2 HTTP-Fehler: Status ${status}`, 'warn');
                    }
                } catch (error) {
                    log(`Enigma2 EPG-Abruf fehlgeschlagen: ${error.message}`, 'warn');
                }
            }
            
            // Trigger: Alle 15 Minuten
            schedule('*/15 * * * *', updateEPG);
            
            // Sofortstart beim Speichern
            updateEPG();
            

            So richtig?

            Homematic CCU3,-Synology NAS 4TB,- 2 Sonos One,- Gigabyte N4500 8GB DDR4 2TB
            Tapo C210 Cam
            WLED Steuerung über lcdwiki

            OliverIOO 1 Antwort Letzte Antwort
            0
            • matze55M matze55

              Der gesamte Code so wie er jetzt aussieht:

              // --- KONFIGURATION GIGABLUE ENIGMA2 BOX---
              const BOX_IP = 'XXX.XXX.XXX.XX'; // IP deiner Enigma2 Box bitte anpassen
              const TARGET_JSON_DP = '0_userdata.0.enigma2.epg_json'; //Datenpunkt Json
              const TARGET_HTML_DP = '0_userdata.0.enigma2.epg_html'; //Datenpunkt Html
              // ---------------------
              
              const axios = require('axios');
              
              // Datenpunkte erstellen, falls sie fehlen
              await createStateAsync(TARGET_JSON_DP, { name: 'Enigma2 EPG JSON', type: 'string', role: 'json', read: true, write: false });
              await createStateAsync(TARGET_HTML_DP, { name: 'Enigma2 EPG HTML für VIS', type: 'string', role: 'html', read: true, write: false });
              
              // Holt vollautomatisch die exakte ID des ersten TV-Bouquets
              async function fetchValidBouquetRef() {
                  try {
                      const response = await axios.get(`http://${BOX_IP}/api/getallservices`, { timeout: 3000 });
                      
                      if (response && response.data && response.data.services) {
                          const services = response.data.services;
                          
                          // Fall 1: API liefert ein direktes Array
                          if (Array.isArray(services) && services.length > 0) {
                              return services[0].servicereference;
                          } 
                          // Fall 2: API liefert ein verschachteltes Objekt
                          if (services.servicereference) {
                              return services.servicereference;
                          }
                      }
                  } catch (e) {
                      log(`Enigma2: Fehler beim automatischen Bouquet-Abruf: ${e.message}`, 'warn');
                  }
                  return null;
              }
              
              function buildHtmlTable(epgData) {
                  if (!epgData || !epgData.events || !Array.isArray(epgData.events) || epgData.events.length === 0) {
                      return '<p style="color: #ff5252; padding: 10px;">Keine EPG-Daten empfangen. Bitte Bouquet-Einstellung prüfen.</p>';
                  }
              
                  let html = `
                  <style>
                      .e2-epg-table { width: 100%; border-collapse: collapse; font-family: sans-serif; font-size: 14px; color: #ffffff; }
                      .e2-epg-table tr { border-bottom: 1px solid #444444; }
                      .e2-epg-table tr:nth-child(even) { background-color: rgba(255,255,255,0.5); }
                      .e2-epg-table td { padding: 10px 8px; vertical-align: top; }
                      .e2-ch-name { font-weight: bold; color: #3498db; width: 33%; }
                      .e2-time { color: #f1c40f; font-weight: bold; width: 33%; white-space: nowrap; }
                      .e2-title { font-weight: bold; color: #ffffff; margin-bottom: 3px; }
                      .e2-desc { color: #aaaaaa; font-size: 12px; line-height: 1.3; }
                  </style>
                  <table class="e2-epg-table">
                  `;
              
                  epgData.events.forEach(event => {
                      if (!event.sname || !event.title ) return;
              
                      //const startTime = new Date(event.begin * 1000);
                      //const timeString = startTime.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' }) + ' Uhr';
              
                      ////
                      // WICHTIG: Wert explizit in eine Ganzzahl konvertieren
                      const timestampInSeconds = parseInt(event.start, 10);
                      // Erst jetzt das Date-Objekt erzeugen
                      const startDateObj = new Date(timestampInSeconds * 1000);
                      // Formatieren der Ausgabe
                      const timeString = startDateObj.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' }) + ' Uhr';
                      const dateString = startDateObj.toLocaleDateString('de-DE');
                      ////
                      
                      html += `
                      <tr>
                          <td class="e2-ch-name">${event.sname}</td>
                          <td class="e2-time">${timeString} - ${dateString}</td>
                          <td>
                              <div class="e2-title">${event.title}</div>
                              <div class="e2-desc">${event.description || ''}</div>
                          </td>
                      </tr>
                      `;
                  });
              
                  html += '</table>';
                  return html;
              }
              
              async function updateEPG() {
                  try {
                      // 1. Automatisch die korrekte, vom OpenWebif akzeptierte ID ermitteln
                      const verifiedBref = await fetchValidBouquetRef();
                      
                      if (!verifiedBref) {
                          log('Enigma2 EPG abgebrochen: Es konnte keine gültige Bouquet-Referenz von der Box gelesen werden.', 'error');
                          return;
                      }
              
                      // 2. Abfrage mit dem vom OpenWebif exakt geforderten Parameter 'bRef'
                      const url = `http://${BOX_IP}/api/epgnow?bRef=${encodeURIComponent(verifiedBref)}`;
                      const response = await axios.get(url, { timeout: 5000 });
                      
                      if (response && response.status === 200 && response.data) {
                          const data = response.data;
              
                          if (data.result === false) {
                              log(`Enigma2 meldet Fehler im Payload: ${data.message || 'Unbekannt'}`, 'warn');
                              return;
                          }
              
                          // 1. JSON speichern
                          await setStateAsync(TARGET_JSON_DP, JSON.stringify(data), true);
                          
                          // 2. HTML generieren und speichern
                          const htmlTable = buildHtmlTable(data);
                          await setStateAsync(TARGET_HTML_DP, htmlTable, true);
                          log('Enigma2 EPG erfolgreich aktualisiert.', 'info');
                          
                      } else {
                          const status = response ? response.status : 'Keine Antwort';
                          log(`Enigma2 HTTP-Fehler: Status ${status}`, 'warn');
                      }
                  } catch (error) {
                      log(`Enigma2 EPG-Abruf fehlgeschlagen: ${error.message}`, 'warn');
                  }
              }
              
              // Trigger: Alle 15 Minuten
              schedule('*/15 * * * *', updateEPG);
              
              // Sofortstart beim Speichern
              updateEPG();
              

              So richtig?

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

              @matze55

              Also, ich schau es mir jetzt nicht mehr an, ohne die Datengrundlage zu kennen

              Sonst raten wir hier munter weiter

              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
              • matze55M Offline
                matze55M Offline
                matze55
                schrieb am zuletzt editiert von
                #41

                Datengrundlage...habe ich gepostet. Aber ich nehme die Zeitangabe jetzt raus. sonst zeigt es ja an. Danke nochmal

                Homematic CCU3,-Synology NAS 4TB,- 2 Sonos One,- Gigabyte N4500 8GB DDR4 2TB
                Tapo C210 Cam
                WLED Steuerung über lcdwiki

                U OliverIOO 2 Antworten Letzte Antwort
                0
                • matze55M matze55

                  Datengrundlage...habe ich gepostet. Aber ich nehme die Zeitangabe jetzt raus. sonst zeigt es ja an. Danke nochmal

                  U Offline
                  U Offline
                  UlliJ
                  schrieb am zuletzt editiert von
                  #42

                  @matze55 sagte:

                  Datengrundlage...habe ich gepostet.

                  hast Du nicht, sondern nur das Skript. Wir können die Antwort der Box nicht sehen, das wäre der Input für das Skript . Poste das Json von der Box

                  der Timestamp sollte in "s" sein

                  Proxmox auf iNuc, lxc für IoB, InfluxDB2, Grafana, u.a. *** Homematic & Homematic IP, Shellies, Zigbee etc

                  1 Antwort Letzte Antwort
                  0
                  • matze55M matze55

                    Datengrundlage...habe ich gepostet. Aber ich nehme die Zeitangabe jetzt raus. sonst zeigt es ja an. Danke nochmal

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

                    @matze55

                    referenzier mal den post wo du das geschickt hast.
                    ich finde nur widget export und das html was aus deinem script hinten raus kommt.

                    lese mal nochmal diesen post
                    https://forum.iobroker.net/topic/84961/ausgabe-name-des-senders/32?_=1785448461574

                    2-3 Beispiele eines events.
                    Wenn dir die Ausgabe peinlich ist, kannst du die Texte (also Text zwischen 2 Anführungsstriche " anonymisieren. Aber vorsichtig, nicht das json zerstören.

                    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
                    • matze55M Offline
                      matze55M Offline
                      matze55
                      schrieb zuletzt editiert von
                      #44

                      Nach stunden...und vielen versuchen sieht es so momentan aus. Jetzt noch ein wenig feinarbeit dann passt es.

                      tvscreen.jpg

                      Homematic CCU3,-Synology NAS 4TB,- 2 Sonos One,- Gigabyte N4500 8GB DDR4 2TB
                      Tapo C210 Cam
                      WLED Steuerung über lcdwiki

                      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

                      309

                      Online

                      33.0k

                      Benutzer

                      83.5k

                      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