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

  • Monatsrückblick Juli / August 2026 ist online!
    BluefoxB
    Bluefox
    0
    1
    12

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

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

Ausgabe Name des Senders

Geplant Angeheftet Gesperrt Verschoben Blockly
44 Beiträge 7 Kommentatoren 1.3k 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 matze55

    Ich habe mein tun erweitert und ich habe dank @icebear viel gegoggelt und habe per Ki ein Code mir brutzeln lassen der in der VIS nicht anzeigt. ich habe mir es es per Html ausgeben lassen und auch per Json und zwar betrifft es die EPG Daten aus der Enigma Box.

    Da meine Box Xml ausspuckt per Obenwebif kann man sie ja per Api abrufen. Ich habe httpget Fehler gehabt und ect.
    Jetzt zu dem Problem. Die Daten werden sauber gespeicht und auch in den Datenpunkten die in Javascript generiet werden aus der Api sauber gespeichert...aber Anzeige in der VIS nix.
    Sogar ist im dem Code sind die Tags für CSS intergriert.

    Kann ich den Code Posten da ja das thema abschweift?

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

    @matze55

    mach

    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 matze55
      #25

      Code:

      // --- KONFIGURATION GIGABLUE ENIGMA2 BOX---
      const BOX_IP = '192.XX.XXX.XX'; // IP deiner Enigma2 Box
      const TARGET_JSON_DP = '0_userdata.0.enigma2.epg_json'; 
      const TARGET_HTML_DP = '0_userdata.0.enigma2.epg_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/getservices`, { 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(32,32,32,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.event_title) return;
      
              const startTime = new Date(event.event_start * 1000);
              const timeString = startTime.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' }) + ' Uhr';
      
              html += `
              <tr>
                  <td class="e2-ch-name">${event.sname}</td>
                  <td class="e2-time">${timeString}</td>
                  <td>
                      <div class="e2-title">${event.event_title}</div>
                      <div class="e2-desc">${event.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();
      

      Anzeige in VIS nix oder habe ich ein CSS Prob

      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

        Code:

        // --- KONFIGURATION GIGABLUE ENIGMA2 BOX---
        const BOX_IP = '192.XX.XXX.XX'; // IP deiner Enigma2 Box
        const TARGET_JSON_DP = '0_userdata.0.enigma2.epg_json'; 
        const TARGET_HTML_DP = '0_userdata.0.enigma2.epg_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/getservices`, { 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(32,32,32,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.event_title) return;
        
                const startTime = new Date(event.event_start * 1000);
                const timeString = startTime.toLocaleTimeString('de-DE', { hour: '2-digit', minute: '2-digit' }) + ' Uhr';
        
                html += `
                <tr>
                    <td class="e2-ch-name">${event.sname}</td>
                    <td class="e2-time">${timeString}</td>
                    <td>
                        <div class="e2-title">${event.event_title}</div>
                        <div class="e2-desc">${event.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();
        

        Anzeige in VIS nix oder habe ich ein CSS Prob

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

        @matze55

        also datenpunkt mit dem html wird geschrieben?
        sende mal den inhalt des datenpunkts
        und welches widget verwendest du? html widget?
        davon bitte auch einen export des widgets.

        vis1 oder vis2?

        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
          #27

          Ja der Datenpunkt wird geschrieben in der Html.
          HTML basic nehme ich.
          VIS 1 verwende ich
          widget :

          [{"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,"html":"{0_userdata.0.enigma2.epg_json}"},"style":{"left":"73px","top":"53px","width":"1039px","height":"385px","border-width":"1px","border-style":"solid","border-color":"#ffffff","border-radius":"8px"},"widgetSet":"basic"}]
          

          ich haoffe habe es richtig gemacht mit dem export

          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

            Ja der Datenpunkt wird geschrieben in der Html.
            HTML basic nehme ich.
            VIS 1 verwende ich
            widget :

            [{"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,"html":"{0_userdata.0.enigma2.epg_json}"},"style":{"left":"73px","top":"53px","width":"1039px","height":"385px","border-width":"1px","border-style":"solid","border-color":"#ffffff","border-radius":"8px"},"widgetSet":"basic"}]
            

            ich haoffe habe es richtig gemacht mit dem export

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

            @matze55

            inhalt des datenpunkts mit dem html noch

            sehe aber schon was:
            941d1095-bc22-4328-9e21-e60f9fd654be-image.jpeg

            willst du nicht html anzeigen?

            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
              #29
              [{"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,"html":"{0_userdata.0.enigma2.epg_html}"},"style":{"left":"73px","top":"53px","width":"1039px","height":"385px","border-width":"1px","border-style":"solid","border-color":"#ffffff","border-radius":"8px"},"widgetSet":"basic"}]
              

              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
                [{"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,"html":"{0_userdata.0.enigma2.epg_html}"},"style":{"left":"73px","top":"53px","width":"1039px","height":"385px","border-width":"1px","border-style":"solid","border-color":"#ffffff","border-radius":"8px"},"widgetSet":"basic"}]
                
                OliverIOO Offline
                OliverIOO Offline
                OliverIO
                schrieb am zuletzt editiert von OliverIO
                #30

                @matze55

                das ist wieder der widget export
                den inhalt von
                0_userdata.0.enigma2.epg_html

                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
                  #31
                  Wert:
                  <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(32,32,32,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"> </table>
                  

                  So richtig?

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

                  OliverIOO U 3 Antworten Letzte Antwort
                  0
                  • matze55M matze55
                    Wert:
                    <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(32,32,32,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"> </table>
                    

                    So richtig?

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

                    @matze55 sagte:

                    das html element ist leer

                    <table class="e2-epg-table"> </table>
                    

                    das bedeutet das die folgende zeile nicht ausgeführt wird

                    epgData.events.forEach(event => {

                    weil epgData.events keine daten enthält oder kein array ist
                    mach mal im javascript editor davor ein

                    console.log(epgData.events);

                    im log, also im unteren bereich sollten dann daten oder nix ausgegeben werden.

                    alternativ auch
                    console.log(epgData);

                    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 matze55
                      Wert:
                      <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(32,32,32,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"> </table>
                      

                      So richtig?

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

                      @matze55

                      der fehler liegt wahrscheinlich an der folgenden zeile

                      if (!event.sname || !event.event_title) return;

                      prüfe mal ob die attribute im event objekt tatsächlich so heißen.
                      evtl heißt

                      event.event_title

                      doch nur

                      event.title
                      ?

                      das selbe dann auch mit
                      event.event_start
                      event.event_description

                      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 matze55
                        Wert:
                        <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(32,32,32,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"> </table>
                        

                        So richtig?

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

                        @matze55

                        die Box bzw. Openwebif liefert über /api/... eigentlich ein Json als Antwort (zumindest die VU+ Box hier). XML kommt über /web/...

                        Probier mal im Browser, ob die Antworten überhaupt kommen. Adresse anpassen nicht vergessen:

                        http://192.168.xx.xx/api/getservices 
                        

                        sollte ähnliches liefern:

                        {
                            "services": [
                                {
                                    "servicereference": "1:7:1:0:0:0:0:0:0:0:FROM BOUQUET \"userbouquet.favourites.tv\" ORDER BY bouquet",
                                    "program": 0,
                                    "servicename": "Favourites (TV)",
                                    "pos": 1
                                },
                                {
                                    "servicereference": "1:7:1:0:0:0:0:0:0:0:FROM BOUQUET \"userbouquet.vti_192_000.tv\" ORDER BY bouquet",
                                    "program": 0,
                                    "servicename": "German Free SD",
                                    "pos": 2
                                },
                                {
                                    "servicereference": "1:7:1:0:0:0:0:0:0:0:FROM BOUQUET \"userbouquet.vti_192_001.tv\" ORDER BY bouquet",
                                    "program": 0,
                                    "servicename": "German Free HD",
                                    "pos": 3
                                },
                        

                        Die Epg Daten für jetzt kommen dann mit (1. Bouquet)

                        http://192.168.xx.xx/api/epgnow?bRef=1:7:1:0:0:0:0:0:0:0:
                        
                        {
                            "events": [
                                {
                                    "sname": ".",
                                    "title": null,
                                    "begin_timestamp": null,
                                    "now_timestamp": 1785390224,
                                    "sref": "1:0:1:300:7:85:C00000:0:0:0:",
                                    "id": null,
                                    "duration_sec": null,
                                    "shortdesc": null,
                                    "longdesc": null
                                },
                                {
                                    "sname": "CGTN Documentary",
                                    "title": null,
                                    "begin_timestamp": null,
                                    "now_timestamp": 1785390224,
                                    "sref": "1:0:1:1B00:3FE:1:C00000:0:0:0:",
                                    "id": null,
                                    "duration_sec": null,
                                    "shortdesc": null,
                                    "longdesc": null
                                },
                                {
                                    "sname": "Comedy Central HD.",
                                    "title": null,
                                    "begin_timestamp": null,
                                    "now_timestamp": 1785390224,
                                    "sref": "1:0:1:7000:436:1:C00000:0:0:0:",
                                    "id": null,
                                    "duration_sec": null,
                                    "shortdesc": null,
                                    "longdesc": null
                                },...
                        ], "result": true}
                        

                        danach oder gleich die Logausgaben von @oliverio einbauen

                        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
                          #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

                                          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

                                          421

                                          Online

                                          33.0k

                                          Benutzer

                                          83.7k

                                          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