Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Tester
  4. Test/Support für Adapter rssfeed und vis-2-widgets-rssfeed

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

Test/Support für Adapter rssfeed und vis-2-widgets-rssfeed

Scheduled Pinned Locked Moved Tester
adapteratomfeediobroker.rssfeedrdfrssviswidget
695 Posts 34 Posters 169.7k Views 38 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • OliverIOO OliverIO

    Neue Version

    vis-2-widget-rssfeed 3.3

    • übersetzung wurde verbessert
    • javascript in den template ist nun wieder möglich
    T Offline
    T Offline
    trojanhector
    wrote on last edited by
    #603

    @oliverio
    Moin,

    gerne auch als widget-export. dann ist das nachstellen einfacher.

    [
      {
        "tpl": "tplRSSArticleMarquee",
        "data": {
          "bindings": [],
          "count": 2,
          "g_common": true,
          "speed": 50,
          "divider": "+++",
          "pauseonhover": true,
          "withlink": false,
          "withtime": true,
          "withdate": false,
          "withyear": false,
          "withname": true,
          "feed-oid1": "rssfeed.0.Nachrichten.Tageschau",
          "feed-name1": "Tagesschau",
          "feed-maxarticles1": 2,
          "feed-filter1": null,
          "g_feeds-1": true,
          "g_css_font_text": true,
          "g_feeds-0": true,
          "g_feeds-2": true,
          "feed-oid2": "rssfeed.0.Nachrichten.Spiegel",
          "feed-name2": "Spiegel",
          "feed-maxarticles2": 2,
          "feed-filter2": null
        },
        "style": {
          "bindings": [],
          "left": "5px",
          "top": "194px",
          "width": "1500px",
          "height": "26px",
          "color": "rgba(229,228,236,1)"
        },
        "widgetSet": "vis-2-widgets-rssfeed",
        "_id": "i000001"
      }
    ]
    

    Habe das mit Version 0.3.3 getestet.

    Marquee_Fehler_2_mit_Tagesschau_V0.3.3.PNG

    Das scheint mit der Anzahl der RSS-Feeds zusammenzuhängen. Ich habe Tagesschau und Spiegel als Test installiert. Jeder Feed für sich genommen funktioniert. Habe die Anzahl der Artikel hoch und runter skaliert. Kein Issue.
    Wenn ich aber nur die Anzahl der RSS-Feeds von 1 auf 2 erhöhe kommen die Fehler in der Anzeige. Das geht auch nicht mehr weg. Da hilft nur löschen vom Widget und neu anlegen.

    OliverIOO 1 Reply Last reply
    0
    • OliverIOO OliverIO

      @trojanhector said in Test/Support für Adapter rssfeed und vis-2-widgets-rssfeed:

      eine konfigurierbare Dia-Show wäre natürlich die Kirche auf der Sahne

      probiere mal das folgende template im multifeed widget.
      das kann man layout technisch sicherlich noch verbessern. aber das grundprinzip sollte klar sein.
      die größe eines slides (also ein artikel. passt sich an die größe des widgets an.
      funn fact. den ausgangs code hab ich mir von chat gpt erstellen lassen.
      musste dann nur noch ein wenig anpassen.
      ab version 0.3.3 müsste das gehen

      noch ein hinweis. die css regeln wurden nicht nur auf dieses widget begrenzt. daher kann es sein, das es auch auf andere elemente wirkt. besser ist es noch jeweils die widget id im style-tag direkt davor zu schreiben, so das das schön gekapselt ist.
      ungefähr so wie es auch für die beiden ersten regeln gemacht wurde. das muss dann beim aktivieren/deaktivieren eines slides dann ebenfalls mit adressiert werden,.

      
      <!--
       available variables:
       widgetid      ->  id of the widget 
       rss.articles  ->  all articles as array, details see Article Helper widget 
       style         ->  all style settings for the widget
       
       all variables are read only
      -->
      
      <style> 
      #<%- widgetid %> img {
          width: calc(<%- style.width || "230px" %> - 15px);
          height: auto;
      }
      #<%- widgetid %> img.rssfeed  {
          width: auto;
          height: auto;
      }
      
      .container {
          overflow: hidden;
          height: 100%;
      }
      .content {
          position: relative;
          border: 1px solid #ccc;
          overflow: scroll;
          height: 90%;
      }
      
      .slide {
          position: absolute;
          display: none;
      }
      
      .slide.active {
          display: contents;
      }
      
      .controls {
          margin-top: 10px;
      }
      </style>
      
      <div class="container">
          <div class="content">
              <% rss.articles.forEach(function(item){ %>
              <div class="article slide">
                <p><small><%- vis.formatDate(item.pubdate, "TT.MM.JJJJ SS:mm") %></small></p>
                <h3><%- item.title %></h3>
                <p><%- item.description %></p>
                <div style="clear:both;"></div>
              </div>
              <% }); %>
          </div>
          <div class="controls">
              <button onclick="prevSlide()">Zurück</button>
              <button onclick="nextSlide()">Weiter</button>
          </div>
      </div>
      
      <script>
      currentSlide = 0;
      slides = document.querySelectorAll('.slide');
      
      function showSlide(index) {
          slides.forEach((slide, i) => {
              if (i === index) {
                  slide.classList.add('active');
              } else {
                  slide.classList.remove('active');
              }
          });
      }
      
      function prevSlide() {
          currentSlide = (currentSlide > 0) ? currentSlide - 1 : slides.length - 1;
          showSlide(currentSlide);
      }
      
      function nextSlide() {
          currentSlide = (currentSlide < slides.length - 1) ? currentSlide + 1 : 0;
          showSlide(currentSlide);
      }
      showSlide(currentSlide);
      
      </script>
                      
      
      T Offline
      T Offline
      trojanhector
      wrote on last edited by
      #604

      @oliverio said in Test/Support für Adapter rssfeed und vis-2-widgets-rssfeed:

      probiere mal das folgende template im multifeed widget.

      Das habe ich auch getestet, mit bis zu drei RSS-Feeds. Habe x-mal vorwärts und rückwärts geklickt. Und auch das Anpassen des Artikels an das Widget geprüft. Ich konnte keine Issues feststellen.
      Eine Auswirkung der CSS-Regeln auf andere Elemente konnte ich erstmal nicht feststellen.

      OliverIOO 1 Reply Last reply
      0
      • T trojanhector

        @oliverio
        Moin,

        gerne auch als widget-export. dann ist das nachstellen einfacher.

        [
          {
            "tpl": "tplRSSArticleMarquee",
            "data": {
              "bindings": [],
              "count": 2,
              "g_common": true,
              "speed": 50,
              "divider": "+++",
              "pauseonhover": true,
              "withlink": false,
              "withtime": true,
              "withdate": false,
              "withyear": false,
              "withname": true,
              "feed-oid1": "rssfeed.0.Nachrichten.Tageschau",
              "feed-name1": "Tagesschau",
              "feed-maxarticles1": 2,
              "feed-filter1": null,
              "g_feeds-1": true,
              "g_css_font_text": true,
              "g_feeds-0": true,
              "g_feeds-2": true,
              "feed-oid2": "rssfeed.0.Nachrichten.Spiegel",
              "feed-name2": "Spiegel",
              "feed-maxarticles2": 2,
              "feed-filter2": null
            },
            "style": {
              "bindings": [],
              "left": "5px",
              "top": "194px",
              "width": "1500px",
              "height": "26px",
              "color": "rgba(229,228,236,1)"
            },
            "widgetSet": "vis-2-widgets-rssfeed",
            "_id": "i000001"
          }
        ]
        

        Habe das mit Version 0.3.3 getestet.

        Marquee_Fehler_2_mit_Tagesschau_V0.3.3.PNG

        Das scheint mit der Anzahl der RSS-Feeds zusammenzuhängen. Ich habe Tagesschau und Spiegel als Test installiert. Jeder Feed für sich genommen funktioniert. Habe die Anzahl der Artikel hoch und runter skaliert. Kein Issue.
        Wenn ich aber nur die Anzahl der RSS-Feeds von 1 auf 2 erhöhe kommen die Fehler in der Anzeige. Das geht auch nicht mehr weg. Da hilft nur löschen vom Widget und neu anlegen.

        OliverIOO Offline
        OliverIOO Offline
        OliverIO
        wrote on last edited by
        #605

        @trojanhector said in Test/Support für Adapter rssfeed und vis-2-widgets-rssfeed:

        Wenn ich aber nur die Anzahl der RSS-Feeds von 1 auf 2 erhöhe kommen die Fehler in der Anzeige. Das geht auch nicht mehr weg. Da hilft nur löschen vom Widget und neu anlegen.

        gefunden. hatte was mit der verbesserungswürdigen management von diesen gruppierungsregeln zusammen. das war bei vis1 besser. da wird im hintergrund was angelegt, was nicht angelegt werden dürfte. ich überspringe das jetzt einfach.
        in dem zusammenhang auch noch einen anderes react problem entdeckt und behoben.

        mal heute noch schauen was noch kommt. ich weiß ja nicht wer noch testet.

        wer noch testet, bitte mal ein kleiner hinweis hier reinschreiben.

        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 Reply Last reply
        0
        • T trojanhector

          @oliverio said in Test/Support für Adapter rssfeed und vis-2-widgets-rssfeed:

          probiere mal das folgende template im multifeed widget.

          Das habe ich auch getestet, mit bis zu drei RSS-Feeds. Habe x-mal vorwärts und rückwärts geklickt. Und auch das Anpassen des Artikels an das Widget geprüft. Ich konnte keine Issues feststellen.
          Eine Auswirkung der CSS-Regeln auf andere Elemente konnte ich erstmal nicht feststellen.

          OliverIOO Offline
          OliverIOO Offline
          OliverIO
          wrote on last edited by
          #606

          @trojanhector

          ich habe einen neuen adapter angelegt in dem für vis-2
          das json-template widget enthalten ist.

          aktuell zum installieren per

          • expert mode
          • adapter
          • katzenknopf
          • custom/benutzerdefiniert
          • im feld dann vis-2-widgets-ovarious eintragen
          • dann per + noch eine instanz hinzufügen.

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

          T 1 Reply Last reply
          0
          • OliverIOO OliverIO

            @trojanhector

            ich habe einen neuen adapter angelegt in dem für vis-2
            das json-template widget enthalten ist.

            aktuell zum installieren per

            • expert mode
            • adapter
            • katzenknopf
            • custom/benutzerdefiniert
            • im feld dann vis-2-widgets-ovarious eintragen
            • dann per + noch eine instanz hinzufügen.
            T Offline
            T Offline
            trojanhector
            wrote on last edited by
            #607

            @oliverio said in Test/Support für Adapter rssfeed und vis-2-widgets-rssfeed:

            dann per + noch eine instanz hinzufügen.

            Ich komme nicht über die Lizenzvereinbarung hinaus. Der Button ist deaktiviert und in irgendeiner Form nach unten bewegen oder scrollen geht nicht.

            json-template-lizenzvereinbarung.PNG

            1 Reply Last reply
            0
            • OliverIOO Offline
              OliverIOO Offline
              OliverIO
              wrote on last edited by OliverIO
              #608

              @trojanhector

              hm lustig, bei mir ist das anders.
              da kommt das fenster mit rohem html und der mitteilung das der lizenztext nicht existiert.
              iobroker versucht da allerdings auf branch master zuzugreifen anstatt auf main
              hab das mal noch so interpretiert, das iobroker den adapter noch nicht kennt.

              e92df050-e44c-48e7-8f62-5d19f126a96f-image.png

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

              T 1 Reply Last reply
              0
              • OliverIOO OliverIO

                @trojanhector

                hm lustig, bei mir ist das anders.
                da kommt das fenster mit rohem html und der mitteilung das der lizenztext nicht existiert.
                iobroker versucht da allerdings auf branch master zuzugreifen anstatt auf main
                hab das mal noch so interpretiert, das iobroker den adapter noch nicht kennt.

                e92df050-e44c-48e7-8f62-5d19f126a96f-image.png

                T Offline
                T Offline
                trojanhector
                wrote on last edited by
                #609

                @oliverio So, mit der neuen Admin-Version klappt das auch mit der Lizenz.
                Konnte die ersten Tests machen. Bin leider dabei auf das Problem gestoßen, dass das Widget die bei einer Combo-Box die ausgewählte Id in die Quelle für das Select stmt zurückschreibt und damit die Auswahl überschreibt.
                Hier meine Jsonliste:

                [
                  {
                    "id": 0,
                    "name": "Test_1"
                  },
                  {
                    "id": 0,
                    "name": "Test_2"
                  },
                  {
                    "id": 0,
                    "name": "Test_3"
                  }
                ]
                

                und hier die Vorlage. Damit ging das früher hervorragend.

                <% 
                    let selectid="mydropdown1"; 
                    //der folgende datenpunkt muss auch unter dp1 in den widgeteinstellungen eingetragen werden
                    let dp_write = "0_userdata.0.Allgemein.Test.JsonTemplateResult"; 
                    
                %>
                <script>
                    let selectid="<%- selectid %>";
                    let dp_write="<%- dp_write %>";
                    
                    function writeDP<%- selectid %>(el) {
                        //debugger;
                        if (el.selectedOptions[0].value) vis.setValue(dp_write,el.selectedOptions[0].value);
                    }
                
                </script>
                <style>
                #mydropdown {
                    color:rgb(255,255,255);
                    background:black;
                    font-size:22px;
                }
                </style>
                <select id="<%- selectid %>" name="<%- selectid %>" size="1" onchange="javascript:writeDP<%- selectid %>(this)" >
                <% 
                  //debugger;
                  for (var i = 0; i<data.length;i++) { 
                      var el = data[i];
                %>
                  <option value="<%- el.id %>" <%- ((dp[dp_write]==el.id) ? "selected":"") %>><%- el.name %></option>
                <% } %>
                </select>
                
                OliverIOO 1 Reply Last reply
                0
                • T trojanhector

                  @oliverio So, mit der neuen Admin-Version klappt das auch mit der Lizenz.
                  Konnte die ersten Tests machen. Bin leider dabei auf das Problem gestoßen, dass das Widget die bei einer Combo-Box die ausgewählte Id in die Quelle für das Select stmt zurückschreibt und damit die Auswahl überschreibt.
                  Hier meine Jsonliste:

                  [
                    {
                      "id": 0,
                      "name": "Test_1"
                    },
                    {
                      "id": 0,
                      "name": "Test_2"
                    },
                    {
                      "id": 0,
                      "name": "Test_3"
                    }
                  ]
                  

                  und hier die Vorlage. Damit ging das früher hervorragend.

                  <% 
                      let selectid="mydropdown1"; 
                      //der folgende datenpunkt muss auch unter dp1 in den widgeteinstellungen eingetragen werden
                      let dp_write = "0_userdata.0.Allgemein.Test.JsonTemplateResult"; 
                      
                  %>
                  <script>
                      let selectid="<%- selectid %>";
                      let dp_write="<%- dp_write %>";
                      
                      function writeDP<%- selectid %>(el) {
                          //debugger;
                          if (el.selectedOptions[0].value) vis.setValue(dp_write,el.selectedOptions[0].value);
                      }
                  
                  </script>
                  <style>
                  #mydropdown {
                      color:rgb(255,255,255);
                      background:black;
                      font-size:22px;
                  }
                  </style>
                  <select id="<%- selectid %>" name="<%- selectid %>" size="1" onchange="javascript:writeDP<%- selectid %>(this)" >
                  <% 
                    //debugger;
                    for (var i = 0; i<data.length;i++) { 
                        var el = data[i];
                  %>
                    <option value="<%- el.id %>" <%- ((dp[dp_write]==el.id) ? "selected":"") %>><%- el.name %></option>
                  <% } %>
                  </select>
                  
                  OliverIOO Offline
                  OliverIOO Offline
                  OliverIO
                  wrote on last edited by
                  #610

                  @trojanhector

                  kannst du das beispiel noch kompletieren?
                  woher kommt mydropdown1?
                  was für ein datenpunkt ist in jsonid eingetragen?
                  ist der erste teil dann der inhalt des datenpunktes bei jsonid?

                  schreib nochmal was eigentlich erreicht werden soll?

                  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 Reply Last reply
                  0
                  • T Offline
                    T Offline
                    trojanhector
                    wrote on last edited by
                    #611

                    @oliverio Das ist ein altes Template von vor 2 Jahren von dir. Zweck ist es eine Kombobox/Dropdownfeld zu kreieren. Der Name mydropdown1 ist einfach nur eine eindeutige ID, weil so mehrere Komboboxen je view angelegt werden können. Und ja, der erste Teil ist der Inhalt des Datenpunktes.

                    Schau hier mal nach:
                    link text

                    OliverIOO 1 Reply Last reply
                    0
                    • T trojanhector

                      @oliverio Das ist ein altes Template von vor 2 Jahren von dir. Zweck ist es eine Kombobox/Dropdownfeld zu kreieren. Der Name mydropdown1 ist einfach nur eine eindeutige ID, weil so mehrere Komboboxen je view angelegt werden können. Und ja, der erste Teil ist der Inhalt des Datenpunktes.

                      Schau hier mal nach:
                      link text

                      OliverIOO Offline
                      OliverIOO Offline
                      OliverIO
                      wrote on last edited by OliverIO
                      #612

                      @trojanhector

                      so hier einmal eine anpassung der id, sonst macht das kein sinn
                      du brauchst 2 datenpunkte.
                      in den ersten (0_userdata.0.testFolder.a) kommt das json
                      einen 2. (0_userdata.0.testFolder.b) wo dann die id der auswahl reingeschrieben wird.
                      der 2. wird im template unter dp_write eingetragen
                      und als zusätzlicher datenpunkt in den widget attributen eingetragen

                      [
                        {
                          "id": 0,
                          "name": "Test_1"
                        },
                        {
                          "id": 1,
                          "name": "Test_2"
                        },
                        {
                          "id": 2,
                          "name": "Test_3"
                        }
                      ]
                      

                      template wie oben unverändert

                      widget export

                      [
                        {
                          "tpl": "tplJSONTemplateWidget",
                          "data": {
                            "bindings": [],
                            "oid": "0_userdata.0.testFolder.a",
                            "dpcount": 1,
                            "g_common": true,
                            "name": null,
                            "comment": null,
                            "class": null,
                            "filterkey": null,
                            "multi-views": null,
                            "locked": null,
                            "g_fixed": true,
                            "template": "<% \r\n    let selectid=\"mydropdown1\"; \r\n    //der folgende datenpunkt muss auch unter dp1 in den widgeteinstellungen eingetragen werden\r\n    let dp_write = \"0_userdata.0.testFolder.b\"; \r\n    \r\n%>\r\n<script>\r\n    let selectid=\"<%- selectid %>\";\r\n    let dp_write=\"<%- dp_write %>\";\r\n    \r\n    function writeDP<%- selectid %>(el) {\r\n        //debugger;\r\n        if (el.selectedOptions[0].value) vis.setValue(dp_write,el.selectedOptions[0].value);\r\n    }\r\n\r\n</script>\r\n<style>\r\n#mydropdown {\r\n    color:rgb(255,255,255);\r\n    background:black;\r\n    font-size:22px;\r\n}\r\n</style>\r\n<select id=\"<%- selectid %>\" name=\"<%- selectid %>\" size=\"1\" onchange=\"javascript:writeDP<%- selectid %>(this)\" >\r\n<% \r\n  //debugger;\r\n  for (var i = 0; i<data.length;i++) { \r\n      var el = data[i];\r\n%>\r\n  <option value=\"<%- el.id %>\" <%- ((dp[dp_write]==el.id) ? \"selected\":\"\") %>><%- el.name %></option>\r\n<% } %>\r\n</select>",
                            "datapoint-oid1": "0_userdata.0.testFolder.b",
                            "g_datapoints-1": true
                          },
                          "style": {
                            "bindings": [],
                            "left": "138px",
                            "top": "55px",
                            "width": "98px",
                            "height": "64px"
                          },
                          "widgetSet": "vis-2-widgets-ovarious",
                          "_id": "i000001"
                        }
                      ]
                      

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

                      T 1 Reply Last reply
                      0
                      • OliverIOO OliverIO

                        @trojanhector

                        so hier einmal eine anpassung der id, sonst macht das kein sinn
                        du brauchst 2 datenpunkte.
                        in den ersten (0_userdata.0.testFolder.a) kommt das json
                        einen 2. (0_userdata.0.testFolder.b) wo dann die id der auswahl reingeschrieben wird.
                        der 2. wird im template unter dp_write eingetragen
                        und als zusätzlicher datenpunkt in den widget attributen eingetragen

                        [
                          {
                            "id": 0,
                            "name": "Test_1"
                          },
                          {
                            "id": 1,
                            "name": "Test_2"
                          },
                          {
                            "id": 2,
                            "name": "Test_3"
                          }
                        ]
                        

                        template wie oben unverändert

                        widget export

                        [
                          {
                            "tpl": "tplJSONTemplateWidget",
                            "data": {
                              "bindings": [],
                              "oid": "0_userdata.0.testFolder.a",
                              "dpcount": 1,
                              "g_common": true,
                              "name": null,
                              "comment": null,
                              "class": null,
                              "filterkey": null,
                              "multi-views": null,
                              "locked": null,
                              "g_fixed": true,
                              "template": "<% \r\n    let selectid=\"mydropdown1\"; \r\n    //der folgende datenpunkt muss auch unter dp1 in den widgeteinstellungen eingetragen werden\r\n    let dp_write = \"0_userdata.0.testFolder.b\"; \r\n    \r\n%>\r\n<script>\r\n    let selectid=\"<%- selectid %>\";\r\n    let dp_write=\"<%- dp_write %>\";\r\n    \r\n    function writeDP<%- selectid %>(el) {\r\n        //debugger;\r\n        if (el.selectedOptions[0].value) vis.setValue(dp_write,el.selectedOptions[0].value);\r\n    }\r\n\r\n</script>\r\n<style>\r\n#mydropdown {\r\n    color:rgb(255,255,255);\r\n    background:black;\r\n    font-size:22px;\r\n}\r\n</style>\r\n<select id=\"<%- selectid %>\" name=\"<%- selectid %>\" size=\"1\" onchange=\"javascript:writeDP<%- selectid %>(this)\" >\r\n<% \r\n  //debugger;\r\n  for (var i = 0; i<data.length;i++) { \r\n      var el = data[i];\r\n%>\r\n  <option value=\"<%- el.id %>\" <%- ((dp[dp_write]==el.id) ? \"selected\":\"\") %>><%- el.name %></option>\r\n<% } %>\r\n</select>",
                              "datapoint-oid1": "0_userdata.0.testFolder.b",
                              "g_datapoints-1": true
                            },
                            "style": {
                              "bindings": [],
                              "left": "138px",
                              "top": "55px",
                              "width": "98px",
                              "height": "64px"
                            },
                            "widgetSet": "vis-2-widgets-ovarious",
                            "_id": "i000001"
                          }
                        ]
                        

                        T Offline
                        T Offline
                        trojanhector
                        wrote on last edited by
                        #613

                        @oliverio Servus,
                        habe mittlerweile die Version 0.1.8 von vis-2-widget ovarious. Das mit dem abspeichern bei einem Widget klappt jetzt. Allerdings bei zwei und mehr Widgets werden die Werte nicht gespeichert. Ich habe unterschiedliche Zieldatenpunkte angelegt und diese jeweils im Template berücksichtigt und ich ich habe die ID im Template ebenfalls unterschiedlich gestaltet. Ich teste mit drei Widgets. Der erste Zieldatenpunkt wird immer richtig aktualisiert, alle weiteren bleiben leer.

                        json-template-Problem_bei_mehreren_Widgets.PNG

                        OliverIOO 1 Reply Last reply
                        0
                        • T trojanhector

                          @oliverio Servus,
                          habe mittlerweile die Version 0.1.8 von vis-2-widget ovarious. Das mit dem abspeichern bei einem Widget klappt jetzt. Allerdings bei zwei und mehr Widgets werden die Werte nicht gespeichert. Ich habe unterschiedliche Zieldatenpunkte angelegt und diese jeweils im Template berücksichtigt und ich ich habe die ID im Template ebenfalls unterschiedlich gestaltet. Ich teste mit drei Widgets. Der erste Zieldatenpunkt wird immer richtig aktualisiert, alle weiteren bleiben leer.

                          json-template-Problem_bei_mehreren_Widgets.PNG

                          OliverIOO Offline
                          OliverIOO Offline
                          OliverIO
                          wrote on last edited by
                          #614

                          @trojanhector

                          ok, dann muss in der neuen version etwas mehr gekapselt werden

                          <% 
                              let selectid="mydropdown1"; 
                              //der folgende datenpunkt muss auch unter dp1 in den widgeteinstellungen eingetragen werden
                              let dp_write = "0_userdata.0.testFolder.b1"; 
                              
                          %>
                          <script>
                              (()=>{
                                  
                              debugger;
                              let selectid="<%- selectid %>";
                              let dp_write="<%- dp_write %>";
                              
                              window.writeDP<%- selectid %>=(el)=>{
                                  debugger;
                                  if (el.selectedOptions[0].value) vis.setValue(dp_write,el.selectedOptions[0].value);
                              }
                              })();
                          </script>
                          <style>
                          #mydropdown {
                              color:rgb(255,255,255);
                              background:black;
                              font-size:22px;
                          }
                          </style>
                          <select id="<%- selectid %>" name="<%- selectid %>" size="1" onchange="javascript:writeDP<%- selectid %>(this)" >
                          <% 
                            //debugger;
                            for (var i = 0; i<data.length;i++) { 
                                var el = data[i];
                          %>
                            <option value="<%- el.id %>" <%- ((dp[dp_write]==el.id) ? "selected":"") %>><%- el.name %></option>
                          <% } %>
                          </select>
                          
                          

                          test-widegts zum importieren

                          [
                           {
                             "tpl": "tplJSONTemplateWidget",
                             "data": {
                               "bindings": [],
                               "oid": "0_userdata.0.testFolder.a",
                               "dpcount": 1,
                               "g_common": true,
                               "name": null,
                               "comment": null,
                               "class": null,
                               "filterkey": null,
                               "multi-views": null,
                               "locked": null,
                               "g_fixed": true,
                               "template": "<% \r\n    let selectid=\"mydropdown1\"; \r\n    //der folgende datenpunkt muss auch unter dp1 in den widgeteinstellungen eingetragen werden\r\n    let dp_write = \"0_userdata.0.testFolder.b1\"; \r\n    \r\n%>\r\n<script>\r\n    (()=>{\r\n        \r\n    debugger;\r\n    let selectid=\"<%- selectid %>\";\r\n    let dp_write=\"<%- dp_write %>\";\r\n    \r\n    window.writeDP<%- selectid %>=(el)=>{\r\n        debugger;\r\n        if (el.selectedOptions[0].value) vis.setValue(dp_write,el.selectedOptions[0].value);\r\n    }\r\n    })();\r\n</script>\r\n<style>\r\n#mydropdown {\r\n    color:rgb(255,255,255);\r\n    background:black;\r\n    font-size:22px;\r\n}\r\n</style>\r\n<select id=\"<%- selectid %>\" name=\"<%- selectid %>\" size=\"1\" onchange=\"javascript:writeDP<%- selectid %>(this)\" >\r\n<% \r\n  //debugger;\r\n  for (var i = 0; i<data.length;i++) { \r\n      var el = data[i];\r\n%>\r\n  <option value=\"<%- el.id %>\" <%- ((dp[dp_write]==el.id) ? \"selected\":\"\") %>><%- el.name %></option>\r\n<% } %>\r\n</select>\r\n",
                               "datapoint-oid1": "0_userdata.0.testFolder.b1",
                               "g_datapoints-1": true
                             },
                             "style": {
                               "bindings": [],
                               "left": "138px",
                               "top": "55px",
                               "width": "98px",
                               "height": "33px"
                             },
                             "widgetSet": "vis-2-widgets-ovarious",
                             "_id": "i000001"
                           },
                           {
                             "tpl": "tplValueStringRaw",
                             "data": {
                               "bindings": [],
                               "oid": "0_userdata.0.testFolder.b1"
                             },
                             "style": {
                               "bindings": [],
                               "left": 277,
                               "top": 60
                             },
                             "widgetSet": "basic",
                             "_id": "i000002"
                           },
                           {
                             "tpl": "tplJSONTemplateWidget",
                             "data": {
                               "bindings": [],
                               "oid": "0_userdata.0.testFolder.a",
                               "dpcount": 1,
                               "g_common": true,
                               "name": null,
                               "comment": null,
                               "class": null,
                               "filterkey": null,
                               "multi-views": null,
                               "locked": null,
                               "g_fixed": true,
                               "template": "<% \r\n    let selectid=\"mydropdown2\"; \r\n    //der folgende datenpunkt muss auch unter dp1 in den widgeteinstellungen eingetragen werden\r\n    let dp_write = \"0_userdata.0.testFolder.b2\"; \r\n    \r\n%>\r\n<script>\r\n    (()=>{\r\n        \r\n    debugger;\r\n    let selectid=\"<%- selectid %>\";\r\n    let dp_write=\"<%- dp_write %>\";\r\n    \r\n    window.writeDP<%- selectid %>=(el)=>{\r\n        debugger;\r\n        if (el.selectedOptions[0].value) vis.setValue(dp_write,el.selectedOptions[0].value);\r\n    }\r\n    })();\r\n</script>\r\n\r\n<style>\r\n#mydropdown {\r\n    color:rgb(255,255,255);\r\n    background:black;\r\n    font-size:22px;\r\n}\r\n</style>\r\n<select id=\"<%- selectid %>\" name=\"<%- selectid %>\" size=\"1\" onchange=\"javascript:writeDP<%- selectid %>(this)\" >\r\n<% \r\n  //debugger;\r\n  for (var i = 0; i<data.length;i++) { \r\n      var el = data[i];\r\n%>\r\n  <option value=\"<%- el.id %>\" <%- ((dp[dp_write]==el.id) ? \"selected\":\"\") %>><%- el.name %></option>\r\n<% } %>\r\n</select>\r\n\r\n",
                               "datapoint-oid1": "0_userdata.0.testFolder.b2",
                               "g_datapoints-1": true
                             },
                             "style": {
                               "bindings": [],
                               "left": 139,
                               "top": 100,
                               "width": "98px",
                               "height": "33px"
                             },
                             "widgetSet": "vis-2-widgets-ovarious",
                             "_id": "i000003"
                           },
                           {
                             "tpl": "tplValueStringRaw",
                             "data": {
                               "bindings": [],
                               "oid": "0_userdata.0.testFolder.b2"
                             },
                             "style": {
                               "bindings": [],
                               "left": 278,
                               "top": 105
                             },
                             "widgetSet": "basic",
                             "_id": "i000004"
                           },
                           {
                             "tpl": "tplJSONTemplateWidget",
                             "data": {
                               "bindings": [],
                               "oid": "0_userdata.0.testFolder.a",
                               "dpcount": 1,
                               "g_common": true,
                               "name": null,
                               "comment": null,
                               "class": null,
                               "filterkey": null,
                               "multi-views": null,
                               "locked": null,
                               "g_fixed": true,
                               "template": "<% \r\n    let selectid=\"mydropdown3\"; \r\n    //der folgende datenpunkt muss auch unter dp1 in den widgeteinstellungen eingetragen werden\r\n    let dp_write = \"0_userdata.0.testFolder.b3\"; \r\n    \r\n%>\r\n<script>\r\n    (()=>{\r\n        \r\n    debugger;\r\n    let selectid=\"<%- selectid %>\";\r\n    let dp_write=\"<%- dp_write %>\";\r\n    \r\n    window.writeDP<%- selectid %>=(el)=>{\r\n        debugger;\r\n        if (el.selectedOptions[0].value) vis.setValue(dp_write,el.selectedOptions[0].value);\r\n    }\r\n    })();\r\n</script>\r\n\r\n<style>\r\n#mydropdown {\r\n    color:rgb(255,255,255);\r\n    background:black;\r\n    font-size:22px;\r\n}\r\n</style>\r\n<select id=\"<%- selectid %>\" name=\"<%- selectid %>\" size=\"1\" onchange=\"javascript:writeDP<%- selectid %>(this)\" >\r\n<% \r\n  //debugger;\r\n  for (var i = 0; i<data.length;i++) { \r\n      var el = data[i];\r\n%>\r\n  <option value=\"<%- el.id %>\" <%- ((dp[dp_write]==el.id) ? \"selected\":\"\") %>><%- el.name %></option>\r\n<% } %>\r\n</select>\r\n\r\n",
                               "datapoint-oid1": "0_userdata.0.testFolder.b3",
                               "g_datapoints-1": true
                             },
                             "style": {
                               "bindings": [],
                               "left": 139,
                               "top": 145,
                               "width": "98px",
                               "height": "33px"
                             },
                             "widgetSet": "vis-2-widgets-ovarious",
                             "_id": "i000005"
                           },
                           {
                             "tpl": "tplValueStringRaw",
                             "data": {
                               "bindings": [],
                               "oid": "0_userdata.0.testFolder.b3"
                             },
                             "style": {
                               "bindings": [],
                               "left": 278,
                               "top": 150
                             },
                             "widgetSet": "basic",
                             "_id": "i000006"
                           }
                          ]
                          

                          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 Reply Last reply
                          0
                          • T Offline
                            T Offline
                            trojanhector
                            wrote on last edited by
                            #615

                            @oliverio Ich habe das jetzt mit einem und mehreren Widgets ausführlich getestet. Immer wieder Widgets gelöscht oder neue hinzugefügt. Es klappt.

                            OliverIOO 1 Reply Last reply
                            0
                            • T trojanhector

                              @oliverio Ich habe das jetzt mit einem und mehreren Widgets ausführlich getestet. Immer wieder Widgets gelöscht oder neue hinzugefügt. Es klappt.

                              OliverIOO Offline
                              OliverIOO Offline
                              OliverIO
                              wrote on last edited by OliverIO
                              #616

                              @trojanhector
                              super, danke

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

                              T 1 Reply Last reply
                              0
                              • OliverIOO OliverIO

                                @trojanhector
                                super, danke

                                T Offline
                                T Offline
                                trojanhector
                                wrote on last edited by
                                #617

                                @oliverio Servus,
                                es geht um das json widget aus rss-feed.
                                Grundsätzlich ist mein Vorhaben die Daten aus dem JSON-Datenpunkt per Javascript in eine einfache Tabelle zu bringen. Dazu habe ich aus dem Netz folgenden Code, der in Visial Studio Code funktioniert:

                                <!DOCTYPE html>
                                <html lang="en">
                                 
                                <body>
                                    <script>
                                        const data = [
                                            { name: 'Rahul', age: 25, city: 'New Delhi' },
                                            { name: 'Vijay', age: 30, city: 'Muzaffarpur' },
                                            { name: 'Gaurav', age: 22, city: 'Noida' },
                                        ];
                                 
                                        function createTableWithForEach() {
                                            const table = document.createElement('table');
                                            table.setAttribute('border', '1');
                                 
                                            const headerRow = document.createElement('tr');
                                            Object.keys(data[0]).forEach(key => {
                                                const th = document.createElement('th');
                                                th.appendChild(document.createTextNode(key));
                                                headerRow.appendChild(th);
                                            });
                                            table.appendChild(headerRow);
                                 
                                            data.forEach(item => {
                                                const row = document.createElement('tr');
                                                Object.values(item).forEach(value => {
                                                    const td = document.createElement('td');
                                                    td.appendChild(document.createTextNode(value));
                                                    row.appendChild(td);
                                                });
                                                table.appendChild(row);
                                            });
                                 
                                            document.body.appendChild(table);
                                        }
                                 
                                        createTableWithForEach();
                                    </script>
                                </body>
                                 
                                </html>
                                

                                Als ersten Schritt wollte ich erstmal diesen Code im JSON Widget zum Laufen bringen, was mir schon nicht gelingt. Und ich habe verschiedene Variationen versucht.
                                Wenn das aber mal geklärt ist, wollte ich die Variable Data, die vom Template bereitgestellt wird, hier anstatt der const Data ersetzen. Hättest Du da einen Vorschlag?

                                OliverIOO 1 Reply Last reply
                                0
                                • T trojanhector

                                  @oliverio Servus,
                                  es geht um das json widget aus rss-feed.
                                  Grundsätzlich ist mein Vorhaben die Daten aus dem JSON-Datenpunkt per Javascript in eine einfache Tabelle zu bringen. Dazu habe ich aus dem Netz folgenden Code, der in Visial Studio Code funktioniert:

                                  <!DOCTYPE html>
                                  <html lang="en">
                                   
                                  <body>
                                      <script>
                                          const data = [
                                              { name: 'Rahul', age: 25, city: 'New Delhi' },
                                              { name: 'Vijay', age: 30, city: 'Muzaffarpur' },
                                              { name: 'Gaurav', age: 22, city: 'Noida' },
                                          ];
                                   
                                          function createTableWithForEach() {
                                              const table = document.createElement('table');
                                              table.setAttribute('border', '1');
                                   
                                              const headerRow = document.createElement('tr');
                                              Object.keys(data[0]).forEach(key => {
                                                  const th = document.createElement('th');
                                                  th.appendChild(document.createTextNode(key));
                                                  headerRow.appendChild(th);
                                              });
                                              table.appendChild(headerRow);
                                   
                                              data.forEach(item => {
                                                  const row = document.createElement('tr');
                                                  Object.values(item).forEach(value => {
                                                      const td = document.createElement('td');
                                                      td.appendChild(document.createTextNode(value));
                                                      row.appendChild(td);
                                                  });
                                                  table.appendChild(row);
                                              });
                                   
                                              document.body.appendChild(table);
                                          }
                                   
                                          createTableWithForEach();
                                      </script>
                                  </body>
                                   
                                  </html>
                                  

                                  Als ersten Schritt wollte ich erstmal diesen Code im JSON Widget zum Laufen bringen, was mir schon nicht gelingt. Und ich habe verschiedene Variationen versucht.
                                  Wenn das aber mal geklärt ist, wollte ich die Variable Data, die vom Template bereitgestellt wird, hier anstatt der const Data ersetzen. Hättest Du da einen Vorschlag?

                                  OliverIOO Offline
                                  OliverIOO Offline
                                  OliverIO
                                  wrote on last edited by OliverIO
                                  #618

                                  @trojanhector sagte in Test/Support für Adapter rssfeed und vis-2-widgets-rssfeed:

                                  1. dein json ist kein gültiges json.
                                    eigentlich sind dort nur doppelte anführungsstriche erlaubt
                                  [
                                    {
                                      "name": "Rahul",
                                      "age": 25,
                                      "city": "New Delhi"
                                    },
                                    {
                                      "name": "Vijay",
                                      "age": 30,
                                      "city": "Muzaffarpur"
                                    },
                                    {
                                      "name": "Gaurav",
                                      "age": 22,
                                      "city": "Noida"
                                    }
                                  ]
                                  
                                  1. das dahinterliegende system ist das ejs templating system.
                                    daher macht es keinen sinn elemente programatisch zu erzeugen.
                                    daher eine methode wie es für das widget besser ist
                                    ich habe dir mal 2 beispiele gemacht. das 2. verwendet css als styling.
                                    was besser ist, da wahrscheinlich diese alten properties wie border, die zum styling gedacht waren nicht mehr zeitgemäß sind
                                  <table border="1">
                                      <tr>
                                      <% let keys1 = Object.keys(data[0]);
                                      keys1.map(key => { %>
                                          <th><%= key %></th>
                                      <% }) %>
                                      <% data.map(row => { %>
                                          <tr>
                                          <% keys1.map(key => { %>
                                              <td><%= row[key] %></td>
                                          <% }) %>
                                          </tr>
                                      <% }) %>        
                                      </tr>
                                  </table> 
                                  <style>
                                  table.mytable,
                                  .mytable th,
                                  .mytable td {
                                  	border: 1px solid red;
                                  	border-collapse: collapse;
                                  }
                                  </style>
                                  <table class="mytable">
                                      <tr>
                                      <% let keys2 = Object.keys(data[0]);
                                      keys2.map(key => { %>
                                          <th><%= key %></th>
                                      <% }) %>
                                      <% data.map(row => { %>
                                          <tr>
                                          <% keys2.map(key => { %>
                                              <td><%= row[key] %></td>
                                          <% }) %>
                                          </tr>
                                      <% }) %>        
                                      </tr>
                                  </table>
                                  

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

                                  T 2 Replies Last reply
                                  0
                                  • OliverIOO OliverIO

                                    @trojanhector sagte in Test/Support für Adapter rssfeed und vis-2-widgets-rssfeed:

                                    1. dein json ist kein gültiges json.
                                      eigentlich sind dort nur doppelte anführungsstriche erlaubt
                                    [
                                      {
                                        "name": "Rahul",
                                        "age": 25,
                                        "city": "New Delhi"
                                      },
                                      {
                                        "name": "Vijay",
                                        "age": 30,
                                        "city": "Muzaffarpur"
                                      },
                                      {
                                        "name": "Gaurav",
                                        "age": 22,
                                        "city": "Noida"
                                      }
                                    ]
                                    
                                    1. das dahinterliegende system ist das ejs templating system.
                                      daher macht es keinen sinn elemente programatisch zu erzeugen.
                                      daher eine methode wie es für das widget besser ist
                                      ich habe dir mal 2 beispiele gemacht. das 2. verwendet css als styling.
                                      was besser ist, da wahrscheinlich diese alten properties wie border, die zum styling gedacht waren nicht mehr zeitgemäß sind
                                    <table border="1">
                                        <tr>
                                        <% let keys1 = Object.keys(data[0]);
                                        keys1.map(key => { %>
                                            <th><%= key %></th>
                                        <% }) %>
                                        <% data.map(row => { %>
                                            <tr>
                                            <% keys1.map(key => { %>
                                                <td><%= row[key] %></td>
                                            <% }) %>
                                            </tr>
                                        <% }) %>        
                                        </tr>
                                    </table> 
                                    <style>
                                    table.mytable,
                                    .mytable th,
                                    .mytable td {
                                    	border: 1px solid red;
                                    	border-collapse: collapse;
                                    }
                                    </style>
                                    <table class="mytable">
                                        <tr>
                                        <% let keys2 = Object.keys(data[0]);
                                        keys2.map(key => { %>
                                            <th><%= key %></th>
                                        <% }) %>
                                        <% data.map(row => { %>
                                            <tr>
                                            <% keys2.map(key => { %>
                                                <td><%= row[key] %></td>
                                            <% }) %>
                                            </tr>
                                        <% }) %>        
                                        </tr>
                                    </table>
                                    
                                    T Offline
                                    T Offline
                                    trojanhector
                                    wrote on last edited by trojanhector
                                    #619

                                    @oliverio Servus,
                                    vielen Dank für Deine Hilfe. Das ist genau das, was ich brauche. Ich habe einige Zeit gebraucht, bis ich ein vernünftiges JSON-Array hatte, was durch Trigger aktualisiert wird. Deshalb die Verspätung. Jetzt passt alles.
                                    Ergebnis_JSON_Template.PNG

                                    1 Reply Last reply
                                    0
                                    • OliverIOO OliverIO

                                      @trojanhector sagte in Test/Support für Adapter rssfeed und vis-2-widgets-rssfeed:

                                      1. dein json ist kein gültiges json.
                                        eigentlich sind dort nur doppelte anführungsstriche erlaubt
                                      [
                                        {
                                          "name": "Rahul",
                                          "age": 25,
                                          "city": "New Delhi"
                                        },
                                        {
                                          "name": "Vijay",
                                          "age": 30,
                                          "city": "Muzaffarpur"
                                        },
                                        {
                                          "name": "Gaurav",
                                          "age": 22,
                                          "city": "Noida"
                                        }
                                      ]
                                      
                                      1. das dahinterliegende system ist das ejs templating system.
                                        daher macht es keinen sinn elemente programatisch zu erzeugen.
                                        daher eine methode wie es für das widget besser ist
                                        ich habe dir mal 2 beispiele gemacht. das 2. verwendet css als styling.
                                        was besser ist, da wahrscheinlich diese alten properties wie border, die zum styling gedacht waren nicht mehr zeitgemäß sind
                                      <table border="1">
                                          <tr>
                                          <% let keys1 = Object.keys(data[0]);
                                          keys1.map(key => { %>
                                              <th><%= key %></th>
                                          <% }) %>
                                          <% data.map(row => { %>
                                              <tr>
                                              <% keys1.map(key => { %>
                                                  <td><%= row[key] %></td>
                                              <% }) %>
                                              </tr>
                                          <% }) %>        
                                          </tr>
                                      </table> 
                                      <style>
                                      table.mytable,
                                      .mytable th,
                                      .mytable td {
                                      	border: 1px solid red;
                                      	border-collapse: collapse;
                                      }
                                      </style>
                                      <table class="mytable">
                                          <tr>
                                          <% let keys2 = Object.keys(data[0]);
                                          keys2.map(key => { %>
                                              <th><%= key %></th>
                                          <% }) %>
                                          <% data.map(row => { %>
                                              <tr>
                                              <% keys2.map(key => { %>
                                                  <td><%= row[key] %></td>
                                              <% }) %>
                                              </tr>
                                          <% }) %>        
                                          </tr>
                                      </table>
                                      
                                      T Offline
                                      T Offline
                                      trojanhector
                                      wrote on last edited by
                                      #620

                                      @oliverio Hi,
                                      ich bräuchte noch mal Unterstützung. Ich habe die Tabelle um einen TableHeader erweitert. Dort soll drinstehen, um was es sich handelt. Soweit so gut. Der colSpan soll über alle Spalten von data gehen. Das funktioniert nur beim ersten Aufruf. Beim Refresh der Seite oder Update das JSON erscheint ein Fehler. Habe schon mehrere Varianten durch, lande aber immer in der Sackgasse. Ich bekomme das auch nur wieder hin, indem ich einmal den Scriptteil entferne, abspeichere und wieder neu einfüge. Mit fest codierter Zahl im Scriptteil bekomme ich das hin, das Ganze soll aber generisch sein.
                                      Hast Du hier noch eine Idee?

                                      <table id="table_SunSensor" class="blacktable">
                                          <tr>
                                          <% let keys2 = Object.keys(data[0]);
                                          let keysCount = Object.keys(data[0]).length;%>
                                          <th id="tbhd" class="th_orange">Sonnensensor</th>
                                          </tr>
                                          <tr>
                                          <% keys2.map(key => { %>
                                              <th><%= key %></th>
                                          <% }) %>
                                         
                                          <% data.map(row => { %>
                                              <tr>
                                              <% keys2.map(key => { %>
                                                  <td><%= row[key] %></td>
                                              <% }) %>
                                              </tr>
                                          <% }) %>        
                                          </tr>
                                      </table>
                                      <script>
                                          <% document.getElementById("tbhd").colSpan=keysCount; %>
                                      </script>
                                      

                                      Fehler:

                                      ejs:22
                                          20| </table>
                                          21| <script>
                                       >> 22|     <% document.getElementById("tbhd").colSpan=keysCount; %>
                                          23| </script>
                                      
                                      Cannot set properties of null (setting 'colSpan')
                                      
                                      
                                      1 Reply Last reply
                                      0
                                      • OliverIOO Offline
                                        OliverIOO Offline
                                        OliverIO
                                        wrote on last edited by
                                        #621

                                        @trojanhector

                                        eigentlich sollte das nie funktionieren, da du

                                        1. colSpan falschgeschrieben hast (groß/kleinschreibung beachten. dass attribut ist colspan ) und
                                        2. das prinzip der template maschine nicht ganz verstanden hast

                                        etwas zum ablauf wie die template engine funktioniert.
                                        wenn das widget von iobroker aktualisiert wird, wird das widget komplett entfernt und sogleich wieder hinzugefügt. das betrifft aber nur das oberste element. sogleich wird eine funktion aufgerufen, die dann den inhalt definiert.
                                        diese funktion nimmt das von dir definierte template lässt es durch die template engine laufen, das ergebnis ist dann html/script/css-inhalt, welcher dann dem sogenannten dom-baum hinzugefügt wird. das löst wiederum im browser den prozess des renderings aus. d.h. die elemente werden dann auf den bildschirm gemalt und evtls javascript wird ausgeführt.

                                        diese answeisung ist falsch, weil du zum einen das script tag definierst, aber die javascript anweisung mit den template tags umklammerst. im ergebnis würde das bedeuten, das während der templateverarbeitung an die stelle das ergebnis der javaschript anweisung geschrieben wird. da die aber falsch ist, bricht das ab und die fehlermeldung erscheint.

                                        <script>
                                            <% document.getElementById("tbhd").colSpan=keysCount; %>
                                        </script>
                                        

                                        wenn dann müsste es so aussehen, das heißt bei der verarbeitung des templates wird hinten die zahl geschrieben, sobald das ergebis dem dom baum hinztugefügt wurde, werden die anweisungen des script tags ausgeführt. aber auch das würde ich nicht empfehlen

                                        <script>
                                            document.getElementById("tbhd").colSpan= <%= keysCount %;>
                                        </script>
                                        

                                        du hast ja den wert schon und kannst ihn direkt eintragen.

                                        <table id="table_SunSensor" class="blacktable">
                                            <tr>
                                            <% let keys2 = Object.keys(data[0]);
                                            let keysCount = Object.keys(data[0]).length;%>
                                            <th id="tbhd" class="th_orange" colspan="<%= keysCount %>">Sonnensensor</th>
                                            </tr>
                                            <tr>
                                            <% keys2.map(key => { %>
                                                <th><%= key %></th>
                                            <% }) %>
                                           
                                            <% data.map(row => { %>
                                                <tr>
                                                <% keys2.map(key => { %>
                                                    <td><%= row[key] %></td>
                                                <% }) %>
                                                </tr>
                                            <% }) %>        
                                            </tr>
                                        </table>
                                        
                                        

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

                                        T 2 Replies Last reply
                                        0
                                        • OliverIOO OliverIO

                                          @trojanhector

                                          eigentlich sollte das nie funktionieren, da du

                                          1. colSpan falschgeschrieben hast (groß/kleinschreibung beachten. dass attribut ist colspan ) und
                                          2. das prinzip der template maschine nicht ganz verstanden hast

                                          etwas zum ablauf wie die template engine funktioniert.
                                          wenn das widget von iobroker aktualisiert wird, wird das widget komplett entfernt und sogleich wieder hinzugefügt. das betrifft aber nur das oberste element. sogleich wird eine funktion aufgerufen, die dann den inhalt definiert.
                                          diese funktion nimmt das von dir definierte template lässt es durch die template engine laufen, das ergebnis ist dann html/script/css-inhalt, welcher dann dem sogenannten dom-baum hinzugefügt wird. das löst wiederum im browser den prozess des renderings aus. d.h. die elemente werden dann auf den bildschirm gemalt und evtls javascript wird ausgeführt.

                                          diese answeisung ist falsch, weil du zum einen das script tag definierst, aber die javascript anweisung mit den template tags umklammerst. im ergebnis würde das bedeuten, das während der templateverarbeitung an die stelle das ergebnis der javaschript anweisung geschrieben wird. da die aber falsch ist, bricht das ab und die fehlermeldung erscheint.

                                          <script>
                                              <% document.getElementById("tbhd").colSpan=keysCount; %>
                                          </script>
                                          

                                          wenn dann müsste es so aussehen, das heißt bei der verarbeitung des templates wird hinten die zahl geschrieben, sobald das ergebis dem dom baum hinztugefügt wurde, werden die anweisungen des script tags ausgeführt. aber auch das würde ich nicht empfehlen

                                          <script>
                                              document.getElementById("tbhd").colSpan= <%= keysCount %;>
                                          </script>
                                          

                                          du hast ja den wert schon und kannst ihn direkt eintragen.

                                          <table id="table_SunSensor" class="blacktable">
                                              <tr>
                                              <% let keys2 = Object.keys(data[0]);
                                              let keysCount = Object.keys(data[0]).length;%>
                                              <th id="tbhd" class="th_orange" colspan="<%= keysCount %>">Sonnensensor</th>
                                              </tr>
                                              <tr>
                                              <% keys2.map(key => { %>
                                                  <th><%= key %></th>
                                              <% }) %>
                                             
                                              <% data.map(row => { %>
                                                  <tr>
                                                  <% keys2.map(key => { %>
                                                      <td><%= row[key] %></td>
                                                  <% }) %>
                                                  </tr>
                                              <% }) %>        
                                              </tr>
                                          </table>
                                          
                                          
                                          T Offline
                                          T Offline
                                          trojanhector
                                          wrote on last edited by
                                          #622

                                          @oliverio
                                          Jetzt habe ich zum Einen gelernt, dass ich beim Copy/Paste aus dem Internet besser aufpassen muss und zum Anderen etwas über die Engine. Da war/ist noch großer Lernbedarf. Das passt jetzt wie gedacht. Danke Dir.

                                          1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          655

                                          Online

                                          32.4k

                                          Users

                                          81.4k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe