<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[HTML-Table für VIS oder Iqontrol (js und blockly)]]></title><description><![CDATA[<p dir="auto">mit diesem script kann man HTML Tabellen erzeugen - diese können dann in der VIS oder Iqontrol eingebunden werden - via iframe<br />
es gibt jeweils ein script für 2,3,4 oder 5 spalten (anzuzeigende werte) - iqontrol braucht ein extra file, um eine tabelle anzeigen zu können - für die vis reicht ein datenpunkt mit einer html-tabelle darin - beides kann das script erzeugen</p>
<ul>
<li>
<p dir="auto">kann <strong>auch</strong> in <strong>blockly</strong> übernommen werden - <strong>siehe beschreibung unten</strong></p>
</li>
<li>
<p dir="auto">die <strong>eigentliche aufgabe</strong> ist es, eine <strong>eigene schleife</strong> in das script einzutragen, welche die gewünschten werte liefert</p>
</li>
<li>
<p dir="auto">das beispiel im script erzeugt eine datei <strong>htmlexample.htm</strong>l und legt es im iobroker-file-system unter  <strong>/opt/iobroker/iobroker-data/files/vis.0</strong> ab - als beispiel werden die adapter-zustände angezeigt - somit ist jedes der scripte schon lauffähig</p>
</li>
<li>
<p dir="auto"><span style="color:#8800ff">es ist ein schedule am ende des scripts - alle 20 sekunden eingestellt - bitte ändern und an eigene bedürfnisse angleichen</span></p>
</li>
<li>
<p dir="auto">das file ist im netzwerk erreichbar unter: <a href="http://192.168.178.59:8082/vis.0/htmlexample.html" rel="nofollow ugc">http://192.168.178.59:8082/vis.0/htmlexample.html</a> - der port und die ip adresse muss natürlich auf das eigene netzwerk angeglichen werden - port ist in dem instanz-setting der web-instanz zu entnehmen</p>
</li>
<li>
<p dir="auto">für iQontrol kann man ein popup verwenden (eingetragen im feld :HTML  - der port und die ip adresse angleichen)<br />
<strong>&lt;iframe width="100% "height="100% "frameborder="0" src="/vis.0/htmlexample.html"&gt;&lt;/iframe&gt;</strong></p>
</li>
<li>
<p dir="auto">es kann auch ein datenpunkt für die anzeige in der vis erzeugt werden -  in einem eigenen datenpunkt wird dann die tabelle geschrieben - mit binding in das basic-html-widget eintragen</p>
</li>
<li>
<p dir="auto">die tabelle kann verschiedenartig formatiert werden (auch im <strong><span style="color:#ff0000">1-, 2-, 3- oder 4-tabellen-nebeneinander-format</span></strong> (damit es kürzer, aber dafür breiter wird) - damit jede tabelle unterscheidbar ist, können die <strong>spaltenüberschriften</strong> und die <strong>felderschrift</strong> für jede 2.te tabelle <strong>geändert</strong> werden</p>
</li>
</ul>
<p dir="auto">bisher realisiert:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th></th>
<th>forum link</th>
<th>MaterialDesign Widget</th>
</tr>
</thead>
<tbody>
<tr>
<td>tabelle für batterie anzeige für sensoren (z.b. xiaomi):</td>
<td><a href="https://forum.iobroker.net/topic/28789/script-f%C3%BCrtabelle-der-batterie-zust%C3%A4nde">https://forum.iobroker.net/topic/28789/script-fürtabelle-der-batterie-zustände</a></td>
<td>ja</td>
</tr>
<tr>
<td>tabelle für web-speedy adapter:</td>
<td colspan="2"><a href="https://forum.iobroker.net/topic/30226/html-tabelle-f%C3%BCr-webspeedy-adapter-vis-iqontrol">https://forum.iobroker.net/topic/30226/html-tabelle-für-webspeedy-adapter-vis-iqontrol</a></td>
</tr>
<tr>
<td>tabelle sonoff geräte:</td>
<td><a href="https://forum.iobroker.net/topic/28953/sonoff-ger%C3%A4te-als-html-tabelle-vis-iqontrol">https://forum.iobroker.net/topic/28953/sonoff-geräte-als-html-tabelle-vis-iqontrol</a></td>
</tr>
<tr>
<td>fussball tabelle</td>
<td colspan="2"><a href="https://forum.iobroker.net/topic/29526/fussballmeisterschat-html-tabelle">https://forum.iobroker.net/topic/29526/fussballmeisterschat-html-tabelle</a></td>
</tr>
<tr>
<td>energieverbrauch anzeige</td>
<td><a href="https://forum.iobroker.net/topic/29189/energieanzeige-kwh-%C3%BCber-html-tabelle-vis">https://forum.iobroker.net/topic/29189/energieanzeige-kwh-über-html-tabelle-vis</a></td>
<td>ja</td>
</tr>
<tr>
<td>IP geräte im netzwerk</td>
<td><a href="https://forum.iobroker.net/topic/30057/ip-devices-im-netzwerk-html-tabelle-vis-iqontrol">https://forum.iobroker.net/topic/30057/ip-devices-im-netzwerk-html-tabelle-vis-iqontrol</a></td>
<td>ja</td>
</tr>
<tr>
<td>alexa listen als tabelle</td>
<td colspan="2"><a href="https://forum.iobroker.net/topic/28254/script-alexa-listen-pflegen-und-anzeigen">https://forum.iobroker.net/topic/28254/script-alexa-listen-pflegen-und-anzeigen</a></td>
</tr>
<tr>
<td>liste backitup adapter</td>
<td colspan="2"><a href="https://forum.iobroker.net/topic/30705/html-tabelle-f%C3%BCr-backitup">https://forum.iobroker.net/topic/30705/html-tabelle-für-backitup</a></td>
</tr>
<tr>
<td>alexa smart device</td>
<td colspan="2"><a href="https://forum.iobroker.net/topic/30833/html-table-f%C3%BCr-alexa-smart-devices">https://forum.iobroker.net/topic/30833/html-table-für-alexa-smart-devices</a></td>
</tr>
<tr>
<td>ping adapter</td>
<td colspan="2"><a href="https://forum.iobroker.net/post/396547">https://forum.iobroker.net/post/396547</a></td>
</tr>
<tr>
<td>time-switch adapter</td>
<td><a href="https://forum.iobroker.net/topic/33088/html-tabelle-f%C3%BCr-time-switch-adapter">https://forum.iobroker.net/topic/33088/html-tabelle-für-time-switch-adapter</a></td>
</tr>
<tr>
<td>unifi clients vom neuen adapter</td>
<td><a href="https://forum.iobroker.net/topic/34491/htmltabelle-unificlients-newadapter">https://forum.iobroker.net/topic/34491/htmltabelle-unificlients-newadapter</a></td>
</tr>
<tr>
<td>trashschedule anfallende tonnen</td>
<td><a href="https://forum.iobroker.net/topic/35399/html-tabelle-f%C3%BCr-trashschedule-adapter">https://forum.iobroker.net/topic/35399/html-tabelle-für-trashschedule-adapter</a></td>
<td>ja</td>
</tr>
<tr>
<td>Lebensmittel Warnungs Script</td>
<td colspan="2"><a href="https://forum.iobroker.net/topic/35474/html-tabelle-lebensmittel-warnung">https://forum.iobroker.net/topic/35474/html-tabelle-lebensmittel-warnung</a></td>
</tr>
<tr>
<td>Calender Adapter</td>
<td colspan="2"><a href="https://forum.iobroker.net/topic/35791/html-tabelle-calendar-adapter">https://forum.iobroker.net/topic/35791/html-tabelle-calendar-adapter</a></td>
</tr>
<tr>
<td>Linux-Control</td>
<td colspan="2"><a href="https://forum.iobroker.net/topic/35880/html-tabelle-linux-control-adapter">https://forum.iobroker.net/topic/35880/html-tabelle-linux-control-adapter</a></td>
</tr>
<tr>
<td>email postfach</td>
<td><a href="https://forum.iobroker.net/topic/36558/html-tabelle-f%C3%BCr-email-postfach">https://forum.iobroker.net/topic/36558/html-tabelle-für-email-postfach</a></td>
</tr>
<tr>
<td>Tasmota Timer Tabelle mit Setzen eines Timers</td>
<td><a href="https://forum.iobroker.net/topic/36613/html-tabelle-f%C3%BCr-tasmota-timer-setzen">https://forum.iobroker.net/topic/36613/html-tabelle-für-tasmota-timer-setzen</a></td>
</tr>
<tr>
<td>TankerKölnig adapter</td>
<td><a href="https://forum.iobroker.net/topic/37609/html-tabelle-f%C3%BCr-tankerk%C3%B6nig">https://forum.iobroker.net/topic/37609/html-tabelle-für-tankerkönig</a></td>
</tr>
<tr>
<td>iCal Adapter</td>
<td><a href="https://forum.iobroker.net/topic/40691/html-tabelle-f%C3%BCr-ical-adapter-mehrere-instanzen">https://forum.iobroker.net/topic/40691/html-tabelle-für-ical-adapter-mehrere-instanzen</a></td>
</tr>
</tbody>
</table>
<p dir="auto"><img src="/assets/uploads/files/1577809756625-image-9.png" alt="Image 9.png" class=" img-fluid img-markdown" /> <img src="/assets/uploads/files/1577283859800-image-8.png" alt="Image 8.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"></p><section class="spoiler-wrapper"><button class="spoiler-control btn btn-default">mehr Beispiele mit verschiedener spalten-anzahl (2,3,4,5)</button><section style="display:none" class="spoiler-content"><br />
<img src="/assets/uploads/files/1577126673239-image-10.png" alt="Image 10.png" class=" img-fluid img-markdown" />  <img src="/assets/uploads/files/1577189328207-image-4.png" alt="Image 4.png" class=" img-fluid img-markdown" /><img src="/assets/uploads/files/1577283936113-image-9.png" alt="Image 9.png" class=" img-fluid img-markdown" /><br />
3 verschiedene werte und 4 tabellen nebeneinander!<img src="/assets/uploads/files/1577283935914-image-12.png" alt="Image 12.png" class=" img-fluid img-markdown" /><br />
4 verschiedene werte und 4 tabellen nebeneinander! <img src="/assets/uploads/files/1577283935840-image-13.png" alt="Image 13.png" class=" img-fluid img-markdown" /><br />
5 verschiedene werte und 4 tabellen nebeneinander<img src="/assets/uploads/files/1577283935677-image-14.png" alt="Image 14.png" class=" img-fluid img-markdown" /><br />
3 verschiedene werte und 3 tabellen nebeneinander!<img src="/assets/uploads/files/1577285846115-image-15.png" alt="Image 15.png" class=" img-fluid img-markdown" /><br />
und für alle einhorn-fans - alle farben des regenbogen<img src="/assets/uploads/files/1577286303382-image-17.png" alt="Image 17.png" class=" img-fluid img-markdown" /><br />
</section></section><p></p>
<p dir="auto">was kann man alles einstellen:</p>
<ul>
<li>tabelle zentrieren</li>
<li>schriftart, schriftgröße</li>
<li>größe der zellen beispiele: <a href="https://forum.iobroker.net/post/348791">https://forum.iobroker.net/post/348791</a></li>
<li>tabelle aufteilen - nebeneinander - 1,2,3 oder4</li>
<li>farben: hintergrund allgemein, hintergrund tabelle (verlauf), felderfarbe, ...</li>
<li>gitterlinien - alle, nur spalten, nur zeilen, keine</li>
<li>eine gesamtüberschrift</li>
<li>tabellenwert-überschrift</li>
<li>schedule - wie oft wird geprüft</li>
<li>ob man eine datei möchte  - z.b. für iqontrol</li>
<li>überschriften der spalten in der tabelle ein- und abschalten</li>
<li>für jede spalte eigene zell-ausrichtung  (center,left,right)</li>
</ul>
<p dir="auto"></p><section class="spoiler-wrapper"><button class="spoiler-control btn btn-default">mehr Beispiele mit verschiedenen gitterlinien</button><section style="display:none" class="spoiler-content"><br />
<img src="/assets/uploads/files/1577355329194-image-5.png" alt="Image 5.png" class=" img-fluid img-markdown" /> <img src="/assets/uploads/files/1577355329146-image-4.png" alt="Image 4.png" class=" img-fluid img-markdown" /> <img src="/assets/uploads/files/1577355329106-image-7.png" alt="Image 7.png" class=" img-fluid img-markdown" /> <img src="/assets/uploads/files/1577355329049-image-6.png" alt="Image 6.png" class=" img-fluid img-markdown" /><br />
</section></section><p></p>
<p dir="auto">im script wird erklärt, was einzustellen ist - es muss der haupteil - je nach gewünschten daten - angelichen werden - evtl muss auch ein schedule erzeugt werden- damit die daten dynamisch geschrieben werden</p>
<p dir="auto"><strong>Script für verschiedene spaltenanzahl  (anzahl werte, die anzuzeigen sind)</strong></p>
<p dir="auto"></p><section class="spoiler-wrapper"><button class="spoiler-control btn btn-default">Tabellenerzeugung mit 2 Spalten</button><section style="display:none" class="spoiler-content"><p></p>
<pre><code>   //@liv-in-sky 2020  4.2.-18:42


//HIER WIRD PFAD UND FILENAME DEFINIERT
const path = "/htmlexamplesetting.html";                   //FIlenamen definieren
const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
let   braucheEinFile=false;                          // bei true wird ein file geschrieben
let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
let dpVIS="controll-own.0.AAATEST.TestHTML"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
let mySchedule=" */20 * * * * * ";                       //jede minute  
//---------------------------------------

//HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 2
var htmlFeld1='Instanz';       var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
var htmlFeld2='Alive';         var Feld2lAlign="right";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center

//-----------------------------------



//hier werden die styles für die tabelle definiert
//ÜBERSCHRIFT ÜBER TABELLE
let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
const htmlFeldUeber='Batterie Zustand Sensoren';              // Überschrift und Signature
const htmlFarbUber="white";                         // Farbe der Überschrift
const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
//MEHRERE TABELLEN NEBENEINANDER
let   mehrfachTabelle=3;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
const trennungsLinie="2";                             //extra trennungslinie bei mehrfachtabellen - evtl auf 0 stellen, wnn htmlRahmenLinien auf none sind
const farbetrennungsLinie="white";
const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
const htmlFarbTableColorUber="#BDBDBD";               // Überschrift in der tabelle - der einzelnen Spalten
//ÜBERSCHRIFT SPALTEN
const UeberSchriftHöhe="35";                          //Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe
const LinieUnterUeberschrift="3";                   // Linie nur unter Spaltenüberschrift - 
const farbeLinieUnterUeberschrift="white";
const groesseUeberschrift=16;
const UeberschriftStyle="normal"                     // möglich "bold"
//GANZE TABELLE
let abstandZelle="1";
let farbeUngeradeZeilen="#000000";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
let farbeGeradeZeilen="#151515";                        //Farbe für gerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
let weite="auto";                                     //Weite der Tabelle
let zentriert=true;                                   //ganze tabelle zentriert
const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
const htmlSchriftart="Helvetica";
const htmlSchriftgroesse="14px";
//FELDER UND RAHMEN
let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
const htmlFarbFelderschrift="#BDBDBD";                  // SchriftFarbe der Felder
const htmlFarbFelderschrift2="#D8D8D8";                 // SchriftFarbe der Felder für jede 2te Tabelle
const htmlFarbTableColorGradient1="#424242";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
const htmlFarbTableColorGradient2="#424242";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
const htmlFarbTableBorderColor="grey";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
let htmlRahmenLinien="none";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
const htmlSpalte1Weite="auto";                   //  Weite der ersten beiden  Spalten oder z.b. 115px

// HIER NICHTS  ÄNDERN

let borderHelpBottum;
let borderHelpRight;
let htmlcenterHelp;
let htmlcenterHelp2;

if(htmlRahmenLinien=="rows") {borderHelpBottum=1;borderHelpRight=0;}
if(htmlRahmenLinien=="cols") {borderHelpBottum=0;borderHelpRight=1;}
if(htmlRahmenLinien=="none") {borderHelpBottum=0;borderHelpRight=0;}
if(htmlRahmenLinien=="all")  {borderHelpBottum=1;borderHelpRight=1;}
zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";


const htmlZentriert='&lt;center&gt;'
const htmlStart=    "&lt;!DOCTYPE html&gt;&lt;html lang=\"de\"&gt;&lt;head&gt;&lt;title&gt;Vorlage&lt;/title&gt;&lt;meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\"&gt;"+
                 "&lt;style&gt; * {  margin: 0;} body {background-color: "+backgroundAll+"; margin: 0 auto;  }"+
                 " p {padding-top: 10px; padding-bottom: 10px; text-align: "+htmlcenterHelp2+"}"+
                // " div { margin: 0 auto;  margin-left: auto; margin-right: auto;}"+
                 " td { padding:"+abstandZelle+"px; border:0px solid "+htmlFarbTableBorderColor+";  border-right:"+borderHelpRight+"px solid "+htmlFarbTableBorderColor+";border-bottom:"+borderHelpBottum+"px solid "+htmlFarbTableBorderColor+";}"+ 
                 " table { width: "+weite+";  margin: 0 "+htmlcenterHelp+"; border:1px solid "+htmlFarbTableBorderColor+"; border-spacing=\""+abstandZelle+"0px\" ; }"+   // margin macht center
                 "td:nth-child(1) {width: "+htmlSpalte1Weite+"}"+"td:nth-child(2) {width:"+htmlSpalte1Weite+"}"+
                 " &lt;/style&gt;&lt;/head&gt;&lt;body&gt; &lt;div&gt;";
//const htmlUeber=    "&lt;p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\"&gt;"+htmlFeldUeber+"&lt;/p&gt;";                    
const htmlTabStyle= "&lt;table bordercolor=\""+htmlFarbTableBorderColor+"\" border=\"2px\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+abstandZelle+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+
                    "; font-family:"+htmlSchriftart+";background-image: linear-gradient(42deg,"+htmlFarbTableColorGradient2+","+htmlFarbTableColorGradient1+");\"&gt;";
const htmlTabUeber1="&lt;tr height=\""+UeberSchriftHöhe+"\" style=\"color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \"&gt;";
const htmlTabUeber3="&lt;/tr&gt;";



////NICHTS ÄNDERN  - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 2

var htmlTabUeber2="&lt;td width="+htmlSpalte1Weite+" align="+Feld1lAlign+"&gt;&amp;ensp;"+htmlFeld1+"&amp;ensp;&lt;/td&gt;&lt;td width="+htmlSpalte1Weite+" align="+Feld2lAlign+"&gt;&amp;ensp;"+htmlFeld2+"&amp;ensp;&lt;/td&gt;";
var htmlTabUeber2_1="&lt;td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&gt;&amp;ensp;"+htmlFeld1+"&amp;ensp;&lt;/td&gt;&lt;td width="+htmlSpalte1Weite+" align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&gt;&amp;ensp;"+htmlFeld2+
                   "&amp;ensp;&lt;/td&gt;";
//------------------------------------------------------


var htmlOut="";
var mix;
var counter;
var val1;  var val0;
var htmlTabUeber="";

function writeHTML(){



htmlOut="";

counter=-1;
htmlTabUeber="";
switch (mehrfachTabelle) { 
   case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
   case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
   case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
   case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
};    
if (!UeberschriftSpalten) {htmlTabUeber=""}

//--------------------------------------------------------------------------------------------------------------------------------------------------
//---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
//---------alle valx werte müssen von euch bestimmt werden - val0,val1 !!!---------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------------------------

$('system.adapter.*.alive').each(function(id, i) {           // hier eigene schleife definieren
        var ida = id.split('.');
        if( !(id.includes("vis") || id.includes("devices") ||  id.includes("fullcalendar"))){
          counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
          val0=ida[2]+"."+ida[3];
          var val1help=getState(id.replace("alive","uptime")).val;
          val1=Math.floor( ((val1help)/60/60/24) )+"d "+ Math.floor(((val1help)/60/60) % 24) +"h "+ Math.floor( ((val1help)/60) % 60 )+" m" ;

       
    
     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
    
   }}); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!

//------------------------------------------------------------
//------------------------------------------------------------
//------------------------------------------------------------   

      tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
     
} // function ende

//MAIN:
 
schedule(mySchedule,  function () {
 writeHTML();
 if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
}); 
writeHTML();

function tabelleBind(){
       switch (mehrfachTabelle) {  
         case 1:  if(counter%2==0)         {   htmlOut=htmlOut+"&lt;tr bgcolor=\""+farbeGeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;"; break;  } else
                                           {   htmlOut=htmlOut+"&lt;tr bgcolor=\""+farbeUngeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;"; break;  }
//-------------------------------------
         case 2:  if(counter%4==0){
                  if(counter%2==0)  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeGeradeZeilen+"\" &gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                    ";\"align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;"; } 
                               else {htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+
                                     htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} break;
         }else{
                  if(counter%2==0)  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeUngeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+
                                    "px solid "+farbetrennungsLinie+";\" align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;"; } 
                               else {htmlOut = htmlOut+"&lt;td  align="+Feld1lAlign+" style=\" color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+
                                  " style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} break;}
//-------------------------------------               
         case 3: if(counter%2==0)   {
         
                 if(counter%3==0 )  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeGeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+
                                    farbetrennungsLinie+";\" align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;"; } 
                               else { if(counter%3==1 )  { htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+
                                                         " style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;";} 
                                                else    {htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";}
                                          } break; }else{
                 if(counter%3==0 )  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeUngeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+
                                    farbetrennungsLinie+";\" align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;"; } 
                               else { if(counter%3==1 )  { htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+
                                                         " style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;";} 
                                                else    {htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";}
                                          } break;  }                       
//------------------------------------- 
         case 4: //counter=counter+8 
         if(counter%8==0)   {
         
                  if(counter%4==0)  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeGeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+
                                    farbetrennungsLinie+";\" align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;"; } 
                                   else {if(counter%4==1 )  { htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+
                                                            " style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;";} 
                                                else    {if(counter%4==3)  { htmlOut= htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+
                                                                                           Feld2lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+
                                                                                           "\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} 
                                                                  else    {htmlOut = htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "
                                                                           +farbetrennungsLinie+";\" align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;";}}
                                          } break;}else{
                  if(counter%4==0)  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeUngeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+
                                    farbetrennungsLinie+";\" align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;"; } 
                                   else {if(counter%4==1 )  { htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+
                                                            " style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;";} 
                                                else    {if(counter%4==3)  { htmlOut= htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="
                                                                                           +Feld2lAlign+" style=\" color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} 
                                                                  else    {htmlOut = htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+
                                                                           farbetrennungsLinie+";\" align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;";}}
                                          }  break;   }                     

     } //switch ende

}

function tabelleFinish() {

       switch (mehrfachTabelle) {  
         case 1:    break;
         case 2:    if(counter%2==0)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, '&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;'); 
                         
                    break;
         case 3:    if(counter%3==2)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;/tr&gt;");
                    if(counter%3==1)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/,  '&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;');       
                    if(counter%3==0)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");
                     
                    break;
         case 4:    if(counter%4==3)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;/tr&gt;");
                    if(counter%4==2)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");
                    if(counter%4==1)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");    
                    if(counter%4==0)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");   
                      
                    break; }
          var htmlUeber=    "&lt;p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\"&gt;"+htmlFeldUeber+"&amp;ensp;&amp;ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"&lt;/p&gt;"; 
       var htmlUnter= "&lt;div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" &gt;"+htmlFeldUeber+"&amp;ensp;&amp;ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"&lt;/div&gt;"
        
        if (!htmlSignature) htmlUnter="";
          //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
           var htmlOutVIS="";
         //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;";
            if (htmlUberschrift) 
                { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;"+htmlUnter : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;"+htmlUnter ;

              } else {
               zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;"+htmlUnter :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;"+htmlUnter;

                 }

  // log("bin raus aus tabelleBind");
           if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );

 var htmlUnter= "&lt;div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" &gt;"+htmlFeldUeber+"&amp;ensp;&amp;ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"&lt;/div&gt;"
 var htmlEnd="&lt;/table&gt;"+htmlUnter+"&lt;/div&gt;&lt;/body&gt;";
 if (!htmlSignature) htmlUnter="";

 //mit oder ohne überschrift - zentriert oder links
htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
 //log(htmlOut);


}



</code></pre>
<p dir="auto"></p></section></section><br />
<section class="spoiler-wrapper"><button class="spoiler-control btn btn-default">Tabellenerzeugung mit 3 Spalten</button><section style="display:none" class="spoiler-content"><p></p>
<pre><code>   //@liv-in-sky 2020  4.2.-18:42


//HIER WIRD PFAD UND FILENAME DEFINIERT
const path = "/htmlexample.html";                   //FIlenamen definieren
const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
let   braucheEinFile=true;                          // bei true wird ein file geschrieben
let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
let dpVIS="controll-own.0.AAATEST.TestHTML"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
let mySchedule=" */20 * * * * * ";                       //jede minute  
//---------------------------------------

//HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
var htmlFeld1='Instanz';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
var htmlFeld2='Alive';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
var htmlFeld3='Status';         var Feld3lAlign="right";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
//-----------------------------------


//hier werden die styles für die tabelle definiert
//ÜBERSCHRIFT ÜBER TABELLE
let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
const htmlFeldUeber='Batterie Zustand Sensoren';              // Überschrift und Signature
const htmlFarbUber="white";                         // Farbe der Überschrift
const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
//MEHRERE TABELLEN NEBENEINANDER
let   mehrfachTabelle=3;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
const trennungsLinie="2";                             //extra trennungslinie bei mehrfachtabellen - evtl auf 0 stellen, wnn htmlRahmenLinien auf none sind
const farbetrennungsLinie="white";
const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
const htmlFarbTableColorUber="#BDBDBD";               // Überschrift in der tabelle - der einzelnen Spalten
//ÜBERSCHRIFT SPALTEN
const UeberSchriftHöhe="35";                          //Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe
const LinieUnterUeberschrift="3";                   // Linie nur unter Spaltenüberschrift - 
const farbeLinieUnterUeberschrift="white";
const groesseUeberschrift=16;
const UeberschriftStyle="normal"                     // möglich "bold"
//GANZE TABELLE
let abstandZelle="1";
let farbeUngeradeZeilen="#000000";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
let farbeGeradeZeilen="#151515";                        //Farbe für gerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
let weite="auto";                                     //Weite der Tabelle
let zentriert=true;                                   //ganze tabelle zentriert
const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
const htmlSchriftart="Helvetica";
const htmlSchriftgroesse="14px";
//FELDER UND RAHMEN
let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
const htmlFarbFelderschrift="#BDBDBD";                  // SchriftFarbe der Felder
const htmlFarbFelderschrift2="#D8D8D8";                 // SchriftFarbe der Felder für jede 2te Tabelle
const htmlFarbTableColorGradient1="#424242";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
const htmlFarbTableColorGradient2="#424242";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
const htmlFarbTableBorderColor="grey";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
let htmlRahmenLinien="none";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
const htmlSpalte1Weite="auto";                   //  Weite der ersten beiden  Spalten oder z.b. 115px

// HIER NICHTS  ÄNDERN

let borderHelpBottum;
let borderHelpRight;
let htmlcenterHelp;
let htmlcenterHelp2;

if(htmlRahmenLinien=="rows") {borderHelpBottum=1;borderHelpRight=0;}
if(htmlRahmenLinien=="cols") {borderHelpBottum=0;borderHelpRight=1;}
if(htmlRahmenLinien=="none") {borderHelpBottum=0;borderHelpRight=0;}
if(htmlRahmenLinien=="all")  {borderHelpBottum=1;borderHelpRight=1;}
zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";


const htmlZentriert='&lt;center&gt;'
const htmlStart=    "&lt;!DOCTYPE html&gt;&lt;html lang=\"de\"&gt;&lt;head&gt;&lt;title&gt;Vorlage&lt;/title&gt;&lt;meta http-equiv=\"content-type\" content=\"text/html;  http-equiv=\"refresh\" content=\"30\"; charset=utf-8\"&gt;"+
                   "&lt;style&gt; * {  margin: 0;} body {background-color: "+backgroundAll+"; margin: 0 auto;  }"+
                   " p {padding-top: 10px; padding-bottom: 10px; text-align: "+htmlcenterHelp2+"}"+
                  // " div { margin: 0 auto;  margin-left: auto; margin-right: auto;}"+
                   " td { padding:"+abstandZelle+"px; border:0px solid "+htmlFarbTableBorderColor+";  border-right:"+borderHelpRight+"px solid "+htmlFarbTableBorderColor+";border-bottom:"+borderHelpBottum+"px solid "+htmlFarbTableBorderColor+";}"+ 
                   " table { width: "+weite+";  margin: 0 "+htmlcenterHelp+"; border:1px solid "+htmlFarbTableBorderColor+"; border-spacing=\""+abstandZelle+"0px\" ; }"+   // margin macht center
                   "td:nth-child(1) {width: "+htmlSpalte1Weite+"}"+"td:nth-child(2) {width:"+htmlSpalte1Weite+"}"+
                   " &lt;/style&gt;&lt;/head&gt;&lt;body&gt; &lt;div&gt;";
//const htmlUeber=    "&lt;p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\"&gt;"+htmlFeldUeber+"&lt;/p&gt;";                    
const htmlTabStyle= "&lt;table bordercolor=\""+htmlFarbTableBorderColor+"\" border=\"2px\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+abstandZelle+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+
                      "; font-family:"+htmlSchriftart+";background-image: linear-gradient(42deg,"+htmlFarbTableColorGradient2+","+htmlFarbTableColorGradient1+");\"&gt;";
const htmlTabUeber1="&lt;tr height=\""+UeberSchriftHöhe+"\" style=\"color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \"&gt;";
const htmlTabUeber3="&lt;/tr&gt;";
/*
table td:first-child {}  //1
table td:nth-child(2) {} //2
table td:nth-child(3) {} //3
table td:last-child {}   //4
*/

//NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 3

   	var htmlTabUeber2="&lt;td width="+htmlSpalte1Weite+" align="+Feld1lAlign+"&gt;&amp;ensp;"+htmlFeld1+"&amp;ensp;&lt;/td&gt;&lt;td width="+htmlSpalte1Weite+" align="+Feld2lAlign+"&gt;&amp;ensp;"+htmlFeld2+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+"&gt;&amp;ensp;"+htmlFeld3+"&amp;ensp;&lt;/td&gt;";
var htmlTabUeber2_1="&lt;td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&gt;&amp;ensp;"+htmlFeld1+"&amp;ensp;&lt;/td&gt;&lt;td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&gt;&amp;ensp;"+htmlFeld2+
                   "&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&gt;&amp;ensp;"+htmlFeld3+"&amp;ensp;&lt;/td&gt;";
//------------------------------------------------------


var htmlTabUeber="";
var htmlOut="";
var mix;
var counter;
//HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
var val1; var val0; var val2;

function writeHTML(){


htmlOut="";

counter=-1;
htmlTabUeber="";
switch (mehrfachTabelle) { 
   case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
   case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
   case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
   case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
};   
if (!UeberschriftSpalten) {htmlTabUeber=""}


//--------------------------------------------------------------------------------------------------------------------------------------------------
//---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
//---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------------------------

$('system.adapter.*.alive').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
        var ida = id.split('.');
        if( !(id.includes("vis") || id.includes("device")  ||  id.includes("alexa2") ||  id.includes("phantom"))){
          counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
          val0=ida[2]+"."+ida[3];
          var val1help=getState(id.replace("alive","uptime")).val;
          val1=Math.floor( ((val1help)/60/60/24) )+"d "+ Math.floor(((val1help)/60/60) % 24) +"h "+ Math.floor( ((val1help)/60) % 60 )+" m" ;

          if (getState(id).val==null) {val2="never used"}; //log(id)}; 
     
          if (getState(id).val==false) {val2="❌"} else{val2="✅"}         
          
     
   
     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
    
   }}); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!

//-------------------------------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------------------------------

      tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
     
} // function ende

//MAIN:
 
schedule(mySchedule,  function () { 
 writeHTML();
 if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
}); 
writeHTML();                                   //     &lt;tdalign

 function tabelleBind(){
   //  counter=counter+mehrfachTabelle;
       switch (mehrfachTabelle) { 

         case 1: if(counter%2==0)         {  htmlOut=htmlOut+"&lt;tr bgcolor=\""+farbeGeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;"; break;}else    
                                          {  htmlOut=htmlOut+"&lt;tr bgcolor=\""+farbeUngeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;"; break;}
         case 2: if(counter%4==0){
                    if(counter%2==0)  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeGeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";\" align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;"; } 
                               else {htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} break;
                      }else{
                                if(counter%2==0)  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeUngeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";\"align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;"; } 
                               else {htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} break;}
                                    
         case 3:if(counter%2==0)   {
                    if(counter%3==0 )  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeGeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";\"align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;"; } //Teil1 c=0
                               else { if(counter%3==1 )  { htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        "; color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;";} //Teil 2 c=1
                                                else    {htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} //Teil 3 c=3
                                          } break;}else{
                    if(counter%3==0 )  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeUngeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";\"align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;"; } 
                               else { if(counter%3==1 )  { htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;";} 
                                                else    {htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";}
                                          } break;}                                          


         case 4:  // counter=counter+8;
                   if(counter%8==0)   {
                   if(counter%4==0)  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeGeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  style=\" border-right: "+trennungsLinie+"px solid "+ farbetrennungsLinie+";\" align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;"; } // teil1
                                   else {if(counter%4==1 )  { htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;";} //teil 2
                                                else    {if(counter%4==3)  { htmlOut= htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} //teil 4
                                                                  else    {htmlOut  = htmlOut+"&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"  align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;";}} //teil 3
                                          } break;}else{
                   if(counter%4==0)  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeUngeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;"; } //teil 1
                                   else {if(counter%4==1 )  { htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;";} // teil 2
                                                else    {if(counter%4==3)  { htmlOut= htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} // teil 4
                                                                  else    {htmlOut  = htmlOut+"&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;";}} //teil 3
                                          } break;}                                    
        } //switch ende

}

function tabelleFinish() {

switch (mehrfachTabelle) {  
       case 1:    break;

       case 2:    
                  if(counter%2==0)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, '&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;');
                
                  break;

       case 3:   if(counter%3==2)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;/tr&gt;");
                 if(counter%3==1)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");        
                 if(counter%3==0)      htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");
               
                  break;
       case 4:   if(counter%4==3)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;/tr&gt;");
                 if(counter%4==2)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");
                 if(counter%4==1)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");    
                 if(counter%4==0)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");      
                 break; }
     
         var htmlUeber=    "&lt;p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\"&gt;"+htmlFeldUeber+"&amp;ensp;&amp;ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"&lt;/p&gt;"; 
       var htmlUnter= "&lt;div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" &gt;"+htmlFeldUeber+"&amp;ensp;&amp;ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"&lt;/div&gt;";
        
        if (!htmlSignature) htmlUnter="";
          //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
           var htmlOutVIS="";
         //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;";
            if (htmlUberschrift) 
                { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;"+htmlUnter : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;"+htmlUnter ;

              } else {
               zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;"+htmlUnter :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;"+htmlUnter;

                 }
                 

  // log("bin raus aus tabelleBind");
           if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );

 var htmlUnter= "&lt;div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" &gt;"+htmlFeldUeber+"&amp;ensp;&amp;ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"&lt;/div&gt;"

 if (!htmlSignature) htmlUnter="";
  var htmlEnd="&lt;/table&gt;"+htmlUnter+"&lt;/div&gt;&lt;/body&gt;";
 //mit oder ohne überschrift - zentriert oder links
htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
 //log(htmlOut);


}




</code></pre>
<p dir="auto"></p></section></section><br />
<section class="spoiler-wrapper"><button class="spoiler-control btn btn-default">Tabellenerzeugung mit 4 Spalten</button><section style="display:none" class="spoiler-content"><p></p>
<pre><code>    //@liv-in-sky 2020  4.2.-18:42


//HIER WIRD PFAD UND FILENAME DEFINIERT
const path = "/htmlexample.html";                   //FIlenamen definieren
const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
let   braucheEinFile=false;                          // bei true wird ein file geschrieben
let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
let dpVIS="controll-own.0.AAATEST.TestHTML"         //WICHTIG wenn "braucheEinVISWidget" auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
let mySchedule=" */20 * * * * * ";                       //jede minute  

//---------------------------------------

//HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 4
var htmlFeld1='Instanz';       var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
var htmlFeld2='Alive';        var Feld2lAlign="right";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
var htmlFeld3='MemHeap';         var Feld3lAlign="right";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
var htmlFeld4='Status';        var Feld4lAlign="left";                    // überschrift Tabellen Spalte4 und  Ausrichtung left,right or center
//-----------------------------------



//ÜBERSCHRIFT ÜBER TABELLE
let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
const htmlFeldUeber='Batterie Zustand Sensoren';              // Überschrift und Signature
const htmlFarbUber="white";                         // Farbe der Überschrift
const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
//MEHRERE TABELLEN NEBENEINANDER
let   mehrfachTabelle=1;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
const trennungsLinie="2";                             //extra trennungslinie bei mehrfachtabellen - evtl auf 0 stellen, wnn htmlRahmenLinien auf none sind
const farbetrennungsLinie="white";
const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
const htmlFarbTableColorUber="#BDBDBD";               // Überschrift in der tabelle - der einzelnen Spalten
//ÜBERSCHRIFT SPALTEN
const UeberSchriftHöhe="35";                          //Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe
const LinieUnterUeberschrift="3";                   // Linie nur unter Spaltenüberschrift - 
const farbeLinieUnterUeberschrift="white";
const groesseUeberschrift=16;
const UeberschriftStyle="normal"                     // möglich "bold"
//GANZE TABELLE
let abstandZelle="1";
let farbeUngeradeZeilen="#000000";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
let farbeGeradeZeilen="#151515";                        //Farbe für gerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
let weite="auto";                                     //Weite der Tabelle
let zentriert=true;                                   //ganze tabelle zentriert
const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
const htmlSchriftart="Helvetica";
const htmlSchriftgroesse="14px";
//FELDER UND RAHMEN
let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
const htmlFarbFelderschrift="#BDBDBD";                  // SchriftFarbe der Felder
const htmlFarbFelderschrift2="#D8D8D8";                 // SchriftFarbe der Felder für jede 2te Tabelle
const htmlFarbTableColorGradient1="#424242";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
const htmlFarbTableColorGradient2="#424242";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
const htmlFarbTableBorderColor="grey";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
let htmlRahmenLinien="none";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
const htmlSpalte1Weite="auto";                   //  Weite der ersten beiden  Spalten oder z.b. 115px

// HIER NICHTS  ÄNDERN

let borderHelpBottum;
let borderHelpRight;
let htmlcenterHelp;
let htmlcenterHelp2;

if(htmlRahmenLinien=="rows") {borderHelpBottum=1;borderHelpRight=0;}
if(htmlRahmenLinien=="cols") {borderHelpBottum=0;borderHelpRight=1;}
if(htmlRahmenLinien=="none") {borderHelpBottum=0;borderHelpRight=0;}
if(htmlRahmenLinien=="all")  {borderHelpBottum=1;borderHelpRight=1;}
zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";


const htmlZentriert='&lt;center&gt;'
const htmlStart=    "&lt;!DOCTYPE html&gt;&lt;html lang=\"de\"&gt;&lt;head&gt;&lt;title&gt;Vorlage&lt;/title&gt;&lt;meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\"&gt;"+
                 "&lt;style&gt; * {  margin: 0;} body {background-color: "+backgroundAll+"; margin: 0 auto;  }"+
                 " p {padding-top: 10px; padding-bottom: 10px; text-align: "+htmlcenterHelp2+"}"+
                // " div { margin: 0 auto;  margin-left: auto; margin-right: auto;}"+
                 " td { padding:"+abstandZelle+"px; border:0px solid "+htmlFarbTableBorderColor+";  border-right:"+borderHelpRight+"px solid "+htmlFarbTableBorderColor+";border-bottom:"+borderHelpBottum+"px solid "+htmlFarbTableBorderColor+";}"+ 
                 " table { width: "+weite+";  margin: 0 "+htmlcenterHelp+"; border:1px solid "+htmlFarbTableBorderColor+"; border-spacing=\""+abstandZelle+"0px\" ; }"+   // margin macht center
                 "td:nth-child(1) {width: "+htmlSpalte1Weite+"}"+"td:nth-child(2) {width:"+htmlSpalte1Weite+"}"+
                 " &lt;/style&gt;&lt;/head&gt;&lt;body&gt; &lt;div&gt;";
//const htmlUeber=    "&lt;p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\"&gt;"+htmlFeldUeber+"&lt;/p&gt;";                    
const htmlTabStyle= "&lt;table bordercolor=\""+htmlFarbTableBorderColor+"\" border=\"2px\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+abstandZelle+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+
                    "; font-family:"+htmlSchriftart+";background-image: linear-gradient(42deg,"+htmlFarbTableColorGradient2+","+htmlFarbTableColorGradient1+");\"&gt;";
const htmlTabUeber1="&lt;tr height=\""+UeberSchriftHöhe+"\" style=\"color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \"&gt;";
const htmlTabUeber3="&lt;/tr&gt;";




//NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 4

var htmlTabUeber2="&lt;td width="+htmlSpalte1Weite+" align="+Feld1lAlign+"&gt;&amp;ensp;"+htmlFeld1+"&amp;ensp;&lt;/td&gt;&lt;td width="+htmlSpalte1Weite+" align="+Feld2lAlign+"&gt;&amp;ensp;"+htmlFeld2+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+"&gt;&amp;ensp;"+htmlFeld3+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld4lAlign+"&gt;&amp;ensp;"+htmlFeld4+"&amp;ensp;&lt;/td&gt;";
var htmlTabUeber2_1="&lt;td width="+htmlSpalte1Weite+" align=="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&gt;&amp;ensp;"+htmlFeld1+"&amp;ensp;&lt;/td&gt;&lt;td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&gt;&amp;ensp;"+htmlFeld2+
                   "&amp;ensp;&lt;/td&gt;&lt;td  align=="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&gt;&amp;ensp;"+htmlFeld3+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld4lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&gt;&amp;ensp;"+htmlFeld4+
                   "&amp;ensp;&lt;/td&gt;";
//------------------------------------------------------


var htmlOut="";
var mix;
var counter;
var val1; var val2; var val0; var val3;
var htmlTabUeber="";

function writeHTML(){


htmlOut="";



counter=-1;
htmlTabUeber="";
switch (mehrfachTabelle) { 
   case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
   case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
   case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2+htmlTabUeber2+htmlTabUeber3; break;
   case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
}; 
if (!UeberschriftSpalten) {htmlTabUeber=""} 

//--------------------------------------------------------------------------------------------------------------------------------------------------
//---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
//---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2,val3 !!!---------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------------------------

$('system.adapter.*.alive').each(function(id, i) {           // hier eigene schleife definieren
        var ida = id.split('.');
        if( !(id.includes("vis") || id.includes("devices") ||  id.includes("sss"))){
          counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
          val0=ida[2]+"."+ida[3];
          let val1help=getState(id.replace("alive","uptime")).val;
          val2=getState(id.replace("alive","memHeapUsed")).val;
          val1=Math.floor( ((val1help)/60/60/24) )+"d "+ Math.floor(((val1help)/60/60) % 24) +"h "+ Math.floor( ((val1help)/60) % 60 )+" m" ;

          if (getState(id).val==null) {val3="never used"}; //log(id)}; 
     
          if (getState(id).val==false) {val3="❌"} else{val3="✅"}         


   
     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
    
   }}); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!

//-------------------------------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------------------------------

      tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
     
} // function ende

//MAIN:

 
schedule(mySchedule,  function () {
 writeHTML();
 if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
}); 
writeHTML();


function tabelleBind(){
     //HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT - hat man oben 4 Felder definiert, braucht man hier 4 Werte 
   
       switch (mehrfachTabelle) {  
        case 1:  if(counter%2==0){  htmlOut=htmlOut+"&lt;tr bgcolor=\""+farbeGeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld4lAlign+"&gt;&amp;ensp;"+val3+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;"; break;} else
                                 {  htmlOut=htmlOut+"&lt;tr bgcolor=\""+farbeUngeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld4lAlign+"&gt;&amp;ensp;"+val3+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;"; break;}
        case 2: if(counter%4==0){ 
                 if(counter%2==0)  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeGeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                    ";\"align="+Feld4lAlign+"&gt;&amp;ensp;"+val3+"&amp;ensp;&lt;/td&gt;"; } 
                              else {htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val3+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} break;
                    }else{
                 if(counter%2==0)  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeUngeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                    ";\" align="+Feld4lAlign+"&gt;&amp;ensp;"+val3+"&amp;ensp;&lt;/td&gt;"; } 
                              else {htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val3+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} break;}                  
        case 3:  if(counter%2==0)   {
                  if(counter%3==0 )  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeGeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";\" align=left&gt;&amp;ensp;"+val3+"&amp;ensp;&lt;/td&gt;"; } 
                              else { if(counter%3==1 )  { htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld4lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val3+"&amp;ensp;&lt;/td&gt;";} 
                                               else    {htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld4lAlign+"&gt;&amp;ensp;"+val3+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";}
                                         } break;}else{
                  if(counter%3==0 )  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeUngeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";\" align=left&gt;&amp;ensp;"+val3+"&amp;ensp;&lt;/td&gt;"; } 
                              else { if(counter%3==1 )  { htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld4lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val3+"&amp;ensp;&lt;/td&gt;";} 
                                               else    {htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld4lAlign+"&gt;&amp;ensp;"+val3+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";}
                                         } break;}

        case 4:  if(counter%8==0)   {
                 if(counter%4==0)  {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeGeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+ ";\" align="+Feld4lAlign+"&gt;&amp;ensp;"+val3+"&amp;ensp;&lt;/td&gt;"; } 
                                  else {if(counter%4==1 )  { htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld4lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val3+"&amp;ensp;&lt;/td&gt;";} 
                                               else    {if(counter%4==3)  { htmlOut= htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&amp;ensp;&gt;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld4lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+ "color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val3+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} 
                                                                 else    {htmlOut  = htmlOut+"&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld4lAlign+"&gt;&amp;ensp;"+val3+"&amp;ensp;&lt;/td&gt;";}}
                                         } break;}else{
                 if(counter%4==0)   {htmlOut = htmlOut+"&lt;tr bgcolor=\""+farbeUngeradeZeilen+"\"&gt;&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+ ";\" align="+Feld4lAlign+"&gt;&amp;ensp;"+val3+"&amp;ensp;&lt;/td&gt;"; } 
                                  else {if(counter%4==1 )  { htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld4lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+ ";color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val3+"&amp;ensp;&lt;/td&gt;";} 
                                               else    {if(counter%4==3)  { htmlOut= htmlOut+"&lt;td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&amp;ensp;&gt;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;td  align="+Feld4lAlign+"  color:"+htmlFarbFelderschrift2+"\"&gt;&amp;ensp;"+val3+"&amp;ensp;&lt;/td&gt;&lt;/tr&gt;";} 
                                                                 else    {htmlOut = htmlOut+"&lt;td align="+Feld1lAlign+"&gt;&amp;ensp;"+val0+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld2lAlign+"&gt;&amp;ensp;"+val1+"&amp;ensp;&lt;/td&gt;&lt;td align="+Feld3lAlign+"&gt;&amp;ensp;"+val2+"&amp;ensp;&lt;/td&gt;&lt;td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld4lAlign+"&gt;&amp;ensp;"+val3+"&amp;ensp;&lt;/td&gt;";}}
                                         } break;     }                   

     } //switch ende

}


function tabelleFinish() {

     // tabelle fertigstellen


       switch (mehrfachTabelle) {  
       case 1:    break;

       case 2:    
                  if(counter%2==0)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, '&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;');   
                
                  break;

       case 3:   if(counter%3==1)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;/tr&gt;");
                 if(counter%3==2)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, '&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;');      
                 if(counter%3==0)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");
               
                  break;
       case 4:   if(counter%4==3) { log(htmlOut); htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;/tr&gt;"); log(htmlOut)}
                 if(counter%4==2)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");
                 if(counter%4==1)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");    
                 if(counter%4==0)  htmlOut = htmlOut.replace(/&lt;\/td&gt;$/, "&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;td&gt;&amp;ensp;&lt;/td&gt;&lt;/tr&gt;");      
                 break; } 


         var htmlUeber=    "&lt;p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\"&gt;"+htmlFeldUeber+"&amp;ensp;&amp;ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"&lt;/p&gt;"; 
       var htmlUnter= "&lt;div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" &gt;"+htmlFeldUeber+"&amp;ensp;&amp;ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"&lt;/div&gt;";
        
        if (!htmlSignature) htmlUnter="";
          //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
           var htmlOutVIS="";
         //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;";
            if (htmlUberschrift) 
                { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;"+htmlUnter : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;"+htmlUnter ;

              } else {
               zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;"+htmlUnter :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"&lt;/table&gt;"+htmlUnter;

                 }

  // log("bin raus aus tabelleBind");
           if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );

 var htmlUnter= "&lt;div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" &gt;"+htmlFeldUeber+"&amp;ensp;&amp;ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"&lt;/div&gt;"
 var htmlEnd="&lt;/table&gt;"+htmlUnter+"&lt;/div&gt;&lt;/body&gt;";
 if (!htmlSignature) htmlUnter="";

 //mit oder ohne überschrift - zentriert oder links
htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
 //log(htmlOut);


}








</code></pre>
<p dir="auto"></p></section></section><p></p>
<p dir="auto"></p><section class="spoiler-wrapper"><button class="spoiler-control btn btn-default"> Tabelle mit 5,6 und 8 Spalten</button><section style="display:none" class="spoiler-content"><p></p>
<pre><code>https://forum.iobroker.net/post/371271
</code></pre>
<p dir="auto"></p></section></section><p></p>
<p dir="auto"></p><section class="spoiler-wrapper"><button class="spoiler-control btn btn-default"> Tabellen mit 9 oder 10 Spalten</button><section style="display:none" class="spoiler-content"><p></p>
<pre><code>https://forum.iobroker.net/post/371274
</code></pre>
<p dir="auto"></p></section></section><br />
ähnlicher beitrag nur mit blockly: <a href="https://forum.iobroker.net/topic/27517/tabelle-erzeugen-f%C3%BCr-iqontrol-anzeige-blockly">https://forum.iobroker.net/topic/27517/tabelle-erzeugen-für-iqontrol-anzeige-blockly</a><p></p>
<p dir="auto"><strong><span style="color:#ff0000">diese scripts in blockly einbinden:</span></strong></p>
<ul>
<li>in diesem beispiel werden die sonoff.0.POWER datenpunkte abgefragt - macht jetzt  das blockly</li>
<li>dieses übergibt ein array an eine funktion - dieses array enthält die daten für die tabellenerstellung</li>
<li>die javascript-funktion im blockly  ist eines der -tabellen-javascripte - je nachdem wieviel werte man anzeigen möchte - im beispiel hier sind es 2 werte</li>
<li>das javascript muss noch angepaßt werden<br />
-im inneren des javascripts muss die schleife die daten aus dem im blockly erzeugten und übergebenden array (liste) aufbereiten</li>
<li></li>
</ul>
<ul>
<li>das schedule wird ins blockly übernommen - daher das schedule im javascript auskommentieren</li>
</ul>
<p dir="auto"><img src="/assets/uploads/files/1577384296547-image-14.png" alt="Image 14.png" class=" img-fluid img-markdown" /></p>
<ul>
<li>das blockly</li>
</ul>
<p dir="auto"><img src="/assets/uploads/files/1577384630119-image-10.png" alt="Image 10.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"></p><section class="spoiler-wrapper"><button class="spoiler-control btn btn-default">blockly mit einer tabelle für 2 werte</button><section style="display:none" class="spoiler-content"><p></p>
<pre><code>&lt;xml xmlns="http://www.w3.org/1999/xhtml"&gt;
 &lt;variables&gt;
   &lt;variable type="" id="y~gfT%L{V|O04MgdUo57"&gt;myList&lt;/variable&gt;
   &lt;variable type="" id="}K$K4dup~Vnv!`[}vnQy"&gt;Liste&lt;/variable&gt;
   &lt;variable type="" id="Z=?7wCQ1-49/,bxoE1#|"&gt;counter&lt;/variable&gt;
   &lt;variable type="" id="UrdtKDQ=Ky.^B@eAuwIJ"&gt;i&lt;/variable&gt;
 &lt;/variables&gt;
 &lt;block type="schedule" id="Cqz)^1L5B-*_#wudd;?i" x="-387" y="-662"&gt;
   &lt;field name="SCHEDULE"&gt;*/20 * * * * *&lt;/field&gt;
   &lt;statement name="STATEMENT"&gt;
     &lt;block type="variables_set" id="sWqJxa.MyY?*y-S}mHPz"&gt;
       &lt;field name="VAR" id="}K$K4dup~Vnv!`[}vnQy" variabletype=""&gt;Liste&lt;/field&gt;
       &lt;value name="VALUE"&gt;
         &lt;block type="lists_create_with" id="s1KG8o;:gtQ6DjJt@w9I"&gt;
           &lt;mutation items="0"&gt;&lt;/mutation&gt;
         &lt;/block&gt;
       &lt;/value&gt;
       &lt;next&gt;
         &lt;block type="variables_set" id="R6exgi+-F7xoKVW/[NE."&gt;
           &lt;field name="VAR" id="Z=?7wCQ1-49/,bxoE1#|" variabletype=""&gt;counter&lt;/field&gt;
           &lt;value name="VALUE"&gt;
             &lt;block type="math_number" id="AHHG~c/mltPLQ?]Ik;5M"&gt;
               &lt;field name="NUM"&gt;-1&lt;/field&gt;
             &lt;/block&gt;
           &lt;/value&gt;
           &lt;next&gt;
             &lt;block type="controls_forEach" id="~PaFX`X@5n{TM9K^{Jw6"&gt;
               &lt;field name="VAR" id="UrdtKDQ=Ky.^B@eAuwIJ" variabletype=""&gt;i&lt;/field&gt;
               &lt;value name="LIST"&gt;
                 &lt;block type="selector" id="xQ^Q5{h5V@5PLI+YO@i."&gt;
                   &lt;field name="TEXT"&gt;sonoff.0.Sonoff*.POWER&lt;/field&gt;
                 &lt;/block&gt;
               &lt;/value&gt;
               &lt;statement name="DO"&gt;
                 &lt;block type="lists_setIndex" id="-zUiNM(}BsoQ].Hu.|mx"&gt;
                   &lt;mutation at="true"&gt;&lt;/mutation&gt;
                   &lt;field name="MODE"&gt;INSERT&lt;/field&gt;
                   &lt;field name="WHERE"&gt;FROM_START&lt;/field&gt;
                   &lt;value name="LIST"&gt;
                     &lt;block type="variables_get" id="Q0Hct8=ken4m!!W]js)U"&gt;
                       &lt;field name="VAR" id="}K$K4dup~Vnv!`[}vnQy" variabletype=""&gt;Liste&lt;/field&gt;
                     &lt;/block&gt;
                   &lt;/value&gt;
                   &lt;value name="AT"&gt;
                     &lt;block type="variables_get" id="m`1tO?)De5*L9}MI~ux0"&gt;
                       &lt;field name="VAR" id="UrdtKDQ=Ky.^B@eAuwIJ" variabletype=""&gt;i&lt;/field&gt;
                     &lt;/block&gt;
                   &lt;/value&gt;
                   &lt;value name="TO"&gt;
                     &lt;block type="lists_create_with" id="6a@[p]s)BEL%k0#L3dY#"&gt;
                       &lt;mutation items="2"&gt;&lt;/mutation&gt;
                       &lt;value name="ADD0"&gt;
                         &lt;block type="variables_get" id="(sTiUEK5)L[Ct%sg[AR+"&gt;
                           &lt;field name="VAR" id="UrdtKDQ=Ky.^B@eAuwIJ" variabletype=""&gt;i&lt;/field&gt;
                         &lt;/block&gt;
                       &lt;/value&gt;
                       &lt;value name="ADD1"&gt;
                         &lt;block type="get_value_var" id="$([Ki:j)vn|kP]]Ce;Xv"&gt;
                           &lt;field name="ATTR"&gt;val&lt;/field&gt;
                           &lt;value name="OID"&gt;
                             &lt;shadow type="text" id="4xj+$Gix.+AO32.dH[cI"&gt;
                               &lt;field name="TEXT"&gt;&lt;/field&gt;
                             &lt;/shadow&gt;
                             &lt;block type="variables_get" id="e0LEE%1wtlN{@`z.=hw]"&gt;
                               &lt;field name="VAR" id="UrdtKDQ=Ky.^B@eAuwIJ" variabletype=""&gt;i&lt;/field&gt;
                             &lt;/block&gt;
                           &lt;/value&gt;
                         &lt;/block&gt;
                       &lt;/value&gt;
                     &lt;/block&gt;
                   &lt;/value&gt;
                 &lt;/block&gt;
               &lt;/statement&gt;
               &lt;next&gt;
                 &lt;block type="procedures_callcustomnoreturn" id="1tTT@y+3fd)eq*EKO%`c"&gt;
                   &lt;mutation name="tabelleMit3Werten"&gt;
                     &lt;arg name="myList"&gt;&lt;/arg&gt;
                   &lt;/mutation&gt;
                   &lt;value name="ARG0"&gt;
                     &lt;block type="variables_get" id="T3wm-=*hL+H$*f^H0[J9"&gt;
                       &lt;field name="VAR" id="}K$K4dup~Vnv!`[}vnQy" variabletype=""&gt;Liste&lt;/field&gt;
                     &lt;/block&gt;
                   &lt;/value&gt;
                 &lt;/block&gt;
               &lt;/next&gt;
             &lt;/block&gt;
           &lt;/next&gt;
         &lt;/block&gt;
       &lt;/next&gt;
     &lt;/block&gt;
   &lt;/statement&gt;
 &lt;/block&gt;
 &lt;block type="procedures_defcustomnoreturn" id="d+PXd6N1nBTxz}gaM@Co" x="-12" y="-438"&gt;
   &lt;mutation statements="false"&gt;
     &lt;arg name="myList" varid="y~gfT%L{V|O04MgdUo57"&gt;&lt;/arg&gt;
   &lt;/mutation&gt;
   &lt;field name="NAME"&gt;tabelleMit3Werten&lt;/field&gt;
   &lt;field name="SCRIPT"&gt;IA0KDQoNCiAvL0hJRVIgV0lSRCBQRkFEIFVORCBGSUxFTkFNRSBERUZJTklFUlQNCiBjb25zdCBwYXRoID0gIi9odG1sZXhhbXBsZS5odG1sIjsgICAgICAgICAgICAgICAgICAgLy9GSWxlbmFtZW4gZGVmaW5pZXJlbg0KIGNvbnN0IGhvbWUgPSd2aXMuMCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dvIHNvbGwgZGFzIGZpbGUgaW0gaW9icm9rZXItZmlsZS1zeXN0ZW0gbGllZ2VuID8gKG9kZXIgei5iIGF1Y2ggaXFvbnRyb2wubWV0YSkNCiBsZXQgICBicmF1Y2hlRWluRmlsZT10cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVpIHRydWUgd2lyZCBlaW4gZmlsZSBnZXNjaHJpZWJlbg0KIGxldCAgIGJyYXVjaGVFaW5WSVNXaWRnZXQ9dHJ1ZTsgICAgICAgICAgICAgICAgICAgICAvLyBiZWkgdHJ1ZSB3aXJkIGVpbiBodG1sLXRhYmVsbGUgaW4gZWluZW4gZHAgZ2VzY2hyaWViZW4gLSBzaWVoZSBuw6RjaHN0ZSB6ZWlsZQ0KIGxldCBkcFZJUz0iY29udHJvbGwtb3duLjAuQUFBVEVTVC5UZXN0SFRNTCIgICAgICAgICAvL1dJQ0hUSUcgd2VubiBicmF1Y2hlRWluVklTV2lkZ2V0IGF1ZiB0cnVlIGdlc2V0enQgISEgIGRwIHp1c8OkdHpsaWNoIGbDvHIgVklTLUhUTUwtQmFzaWMtV2lkZ2V0DQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KLy9ISUVSIERJRSBTUEFMVEVOIEFOWkFITCBERUZJTklFUkVOIC0gamVkZSBTcGFsdGUgZWluZW4gV2VydCAtIGluIGRpZXNlbSBCZWlzcGllbCBzaW5kIGVzIDINCnZhciBodG1sRmVsZDE9J0luc3RhbnonOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDDvGJlcnNjaHJpZnQgVGFiZWxsZW4gU3BhbHRlMQ0KdmFyIGh0bWxGZWxkMj0nQWxpdmUnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIMO8YmVyc2NocmlmdCBUYWJlbGxlbiBTcGFsdGUyDQoNCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KDQoNCi8vaGllciB3ZXJkZW4gZGllIHN0eWxlcyBmw7xyIGRpZSB0YWJlbGxlIGRlZmluaWVydA0KLy/DnEJFUlNDSFJJRlQgw5xCRVIgVEFCRUxMRQ0KbGV0ICAgaHRtbFViZXJzY2hyaWZ0PXRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWl0IMOcYmVyc2NocmlmdCDDvGJlciBkZXIgdGFiZWxsZQ0KY29uc3QgaHRtbEZlbGRVZWJlcj0nTUVJTkUgw5xCRVJTQ0hSSUZUJzsgICAgICAgICAgICAgIC8vIMOcYmVyc2NocmlmdA0KY29uc3QgaHRtbEZhcmJVYmVyPSIjMkM3RkI2IjsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmFyYmUgZGVyIMOcYmVyc2NocmlmdA0KLy9NRUhSRVJFIFRBQkVMTEVOIE5FQkVORUlOQU5ERVINCmxldCAgIG1laHJmYWNoVGFiZWxsZT00OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpcyB6dSA0IFRhYmVsbGVuIHdlcmRlbiBuZWJlbmVpbmFuZGVyIGdlc2NocmllYmVuLSAgdmVya8O8cnp0IGRhcyBHYW56ZSwgZGFmw7xyIGV0d2FzIGJyZWl0ZXIgLSBNw5ZHTElDSCAxLDIsMyxvZGVyIDQgISEhDQpjb25zdCBodG1sRmFyYlp3ZWl0ZVRhYmVsbGU9IiM0MkE2RUEiOyAgICAgICAgICAgICAgICAvLyBGYXJiZSBkZXIgw5xiZXJzY2hyaWZ0IGJlaSBqZWRlciAyLnRlbiBUYWJlbGxlDQpjb25zdCBodG1sRmFyYlRhYmxlQ29sb3JVYmVyPSIjMkM3RkI2IjsgICAgICAgICAgICAgICAvLyDDnGJlcnNjaHJpZnQgaW4gZGVyIHRhYmVsbGUgLSBkZXIgZWluemVsbmVuIFNwYWx0ZW4NCi8vR0FOWkUgVEFCRUxMRQ0KY29uc3QgaHRtbFNjaHJpZnRhcnQ9IkhlbHZldGljYSI7DQpjb25zdCBodG1sU2NocmlmdGdyb2Vzc2U9IjEzcHgiOw0KLy9GRUxERVIgVU5EIFJBSE1FTg0KY29uc3QgaHRtbEZhcmJGZWxkZXJzY2hyaWZ0PSIjREFERkRBIjsgICAgICAgICAgICAgICAgICAvLyBTY2hyaWZ0RmFyYmUgZGVyIEZlbGRlcg0KY29uc3QgaHRtbEZhcmJGZWxkZXJzY2hyaWZ0Mj0iI0UzRkJFMiI7ICAgICAgICAgICAgICAgICAvLyBTY2hyaWZ0RmFyYmUgZGVyIEZlbGRlciBmw7xyIGplZGUgMnRlIFRhYmVsbGUNCmNvbnN0IGh0bWxGYXJiVGFibGVDb2xvckdyYWRpZW50MT0iIzNGNDAzRiI7ICAgICAgICAgIC8vICBHcmFkaWVudCAtIEhpbnRlcmdydW5kIGRlciBUYWJlbGxlIC0gVmVybGF1ZmZhcmJlDQpjb25zdCBodG1sRmFyYlRhYmxlQ29sb3JHcmFkaWVudDI9IiMzRjQwM0YiOyAgICAgICAgICAvLyAgR3JhZGllbnQgLSBIaW50ZXJncnVuZCBkZXIgVGFiZWxsZSAtIGlzdCBkaWVzZXIgV2VydCBnbGVpY2ggR3JhZGllbnQxIGdpYnQgZXMga2VpbmVuIHZlcmxhdWYNCmNvbnN0IGh0bWxGYXJiVGFibGVCb3JkZXJDb2xvcj0iIzJDN0ZCNiI7ICAgICAgICAgICAgIC8vIEZhcmJlIGRlcyBSYWhtZW4gLSBpcyB0ZGllc2VyIGdsZWljaCBkZW4gZ3JhZGllbnRlbiwgc2luZCBkaWUgcmFobWVuIHVuc2ljaHRiYXINCmNvbnN0IGh0bWxSYWhtZW5MaW5pZW49MTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9ybWF0IGbDvHIgUmFobWVuKEdpdHRlcilsaW5pZW4gMT1hbGxlIC0gMj1udXIgdmVydGlrYWwgLSAzPSBudXIgaG9yaXpvbnRhbCAtIDQ9a2VpbmUNCg0KLy8gSElFUiBOSUNIVFMgIMOETkRFUk4NCmNvbnN0IGh0bWxFbmQ9ICAgICAgJzwvdGFibGU+PC9ib2R5Pic7DQpjb25zdCBodG1sU3RhcnQ9ICAgICc8IURPQ1RZUEUgaHRtbD48aHRtbCBsYW5nPSJkZSI+PGhlYWQ+PHRpdGxlPlZvcmxhZ2U8L3RpdGxlPjxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij48L2hlYWQ+PGJvZHk+JzsNCmNvbnN0IGh0bWxVZWJlcj0gICAgIjxwIHN0eWxlPVwiY29sb3I6IitodG1sRmFyYlViZXIrIjsgZm9udC1mYW1pbHk6IitodG1sU2NocmlmdGFydCsiOyBmb250LXdlaWdodDogYm9sZFwiPiIraHRtbEZlbGRVZWJlcisiPC9wPiI7DQpjb25zdCBodG1sVGFiU3R5bGVDb2w9ICI8dGFibGUgYm9yZGVyY29sb3I9XCIiK2h0bWxGYXJiVGFibGVCb3JkZXJDb2xvcisiXCIgYm9yZGVyPVwiM1wiIGNlbGxzcGFjaW5nPVwiM1wiIGNlbGxwYWRkaW5nPVwiM1wiICBydWxlcz1cImNvbHNcIiBzdHlsZT1cImNvbG9yOiIraHRtbEZhcmJGZWxkZXJzY2hyaWZ0KyI7ICBmb250LXNpemU6IitodG1sU2NocmlmdGdyb2Vzc2UrDQogICAgICAgICAgICAgICAgICAgICAgICI7IGZvbnQtZmFtaWx5OiIraHRtbFNjaHJpZnRhcnQrIjtiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoNDJkZWcsIitodG1sRmFyYlRhYmxlQ29sb3JHcmFkaWVudDIrIiwiK2h0bWxGYXJiVGFibGVDb2xvckdyYWRpZW50MSsiKTtcIj4iOw0KY29uc3QgaHRtbFRhYlN0eWxlUm93PSAiPHRhYmxlIGJvcmRlcmNvbG9yPVwiIitodG1sRmFyYlRhYmxlQm9yZGVyQ29sb3IrIlwiIGJvcmRlcj1cIjNcIiBjZWxsc3BhY2luZz1cIjNcIiBjZWxscGFkZGluZz1cIjNcIiAgcnVsZXM9XCJyb3dzXCIgc3R5bGU9XCJjb2xvcjoiK2h0bWxGYXJiRmVsZGVyc2NocmlmdCsiOyAgZm9udC1zaXplOiIraHRtbFNjaHJpZnRncm9lc3NlKw0KICAgICAgICAgICAgICAgICAgICAgICAiOyBmb250LWZhbWlseToiK2h0bWxTY2hyaWZ0YXJ0KyI7YmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQyZGVnLCIraHRtbEZhcmJUYWJsZUNvbG9yR3JhZGllbnQyKyIsIitodG1sRmFyYlRhYmxlQ29sb3JHcmFkaWVudDErIik7XCI+IjsNCmNvbnN0IGh0bWxUYWJTdHlsZUFsbD0gIjx0YWJsZSBib3JkZXJjb2xvcj1cIiIraHRtbEZhcmJUYWJsZUJvcmRlckNvbG9yKyJcIiBib3JkZXI9XCIzXCIgY2VsbHNwYWNpbmc9XCIzXCIgY2VsbHBhZGRpbmc9XCIzXCIgIHJ1bGVzPVwiYWxsXCIgc3R5bGU9XCJjb2xvcjoiK2h0bWxGYXJiRmVsZGVyc2NocmlmdCsiOyAgZm9udC1zaXplOiIraHRtbFNjaHJpZnRncm9lc3NlKw0KICAgICAgICAgICAgICAgICAgICAgICAiOyBmb250LWZhbWlseToiK2h0bWxTY2hyaWZ0YXJ0KyI7YmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KDQyZGVnLCIraHRtbEZhcmJUYWJsZUNvbG9yR3JhZGllbnQyKyIsIitodG1sRmFyYlRhYmxlQ29sb3JHcmFkaWVudDErIik7XCI+IjsgICANCmNvbnN0IGh0bWxUYWJTdHlsZU5vbmU9ICI8dGFibGUgYm9yZGVyY29sb3I9XCIiK2h0bWxGYXJiVGFibGVCb3JkZXJDb2xvcisiXCIgYm9yZGVyPVwiM1wiIGNlbGxzcGFjaW5nPVwiM1wiIGNlbGxwYWRkaW5nPVwiM1wiICBydWxlcz1cIm5vbmVcIiBzdHlsZT1cImNvbG9yOiIraHRtbEZhcmJGZWxkZXJzY2hyaWZ0KyI7ICBmb250LXNpemU6IitodG1sU2NocmlmdGdyb2Vzc2UrDQogICAgICAgICAgICAgICAgICAgICAgICI7IGZvbnQtZmFtaWx5OiIraHRtbFNjaHJpZnRhcnQrIjtiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoNDJkZWcsIitodG1sRmFyYlRhYmxlQ29sb3JHcmFkaWVudDIrIiwiK2h0bWxGYXJiVGFibGVDb2xvckdyYWRpZW50MSsiKTtcIj4iOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KY29uc3QgaHRtbFRhYlVlYmVyMT0iPHRyIHN0eWxlPVwiY29sb3I6IitodG1sRmFyYlRhYmxlQ29sb3JVYmVyKyI7IGZvbnQtd2VpZ2h0OiBib2xkXCI+IjsNCmNvbnN0IGh0bWxUYWJVZWJlcjM9IjwvdHI+IjsNCg0KDQoNCi8vLy9OSUNIVFMgw4ROREVSTiAgLSBhYmjDpG5naWcgdm9uIGRlbiBvYmVuIGRlZmluaWVydGVuIF9TcGFsdGVuIC0gaW4gZGllc2VtIEJlaXNwaWVsIHNpbmQgZXMgMg0KDQp2YXIgaHRtbFRhYlVlYmVyMj0iPHRkICBhbGlnbj1jZW50ZXI+JmVuc3A7IitodG1sRmVsZDErIiZlbnNwOzwvdGQ+PHRkIGFsaWduPWNlbnRlcj4mZW5zcDsiK2h0bWxGZWxkMisiJmVuc3A7PC90ZD4iOw0KdmFyIGh0bWxUYWJVZWJlcjJfMT0iPHRkICBhbGlnbj1jZW50ZXIgc3R5bGU9XCJjb2xvcjoiK2h0bWxGYXJiWndlaXRlVGFiZWxsZSsiXCI+JmVuc3A7IitodG1sRmVsZDErIiZlbnNwOzwvdGQ+PHRkICBhbGlnbj1jZW50ZXIgc3R5bGU9XCJjb2xvcjoiK2h0bWxGYXJiWndlaXRlVGFiZWxsZSsiXCI+JmVuc3A7IitodG1sRmVsZDIrDQogICAgICAgICAgICAgICAgICAgICImZW5zcDs8L3RkPiI7DQovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIA0KDQp2YXIgaHRtbE91dD0iIjsNCg0KDQoNCmZ1bmN0aW9uIHdyaXRlSFRNTCgpew0KDQogICAgICB2YXIgaHRtbFRhYlN0eWxlOw0KICAgIHN3aXRjaCAoK2h0bWxSYWhtZW5MaW5pZW4pIHsgDQogICAgY2FzZSAxOiBodG1sVGFiU3R5bGU9aHRtbFRhYlN0eWxlQWxsOyBicmVhazsNCiAgICBjYXNlIDI6IGh0bWxUYWJTdHlsZT1odG1sVGFiU3R5bGVDb2w7IGJyZWFrOw0KICAgIGNhc2UgMzogaHRtbFRhYlN0eWxlPWh0bWxUYWJTdHlsZVJvdzsgYnJlYWs7DQogICAgY2FzZSA0OiBodG1sVGFiU3R5bGU9aHRtbFRhYlN0eWxlTm9uZTsgYnJlYWs7DQogICAgDQp9OyAgDQoNCmh0bWxPdXQ9IiI7DQoNCnZhciBjb3VudGVyPS0xOw0KdmFyIGh0bWxUYWJVZWJlcj0iIjsNCnN3aXRjaCAobWVocmZhY2hUYWJlbGxlKSB7IA0KICAgIGNhc2UgMTogaHRtbFRhYlVlYmVyPWh0bWxUYWJVZWJlcjEraHRtbFRhYlVlYmVyMitodG1sVGFiVWViZXIzOyAgYnJlYWs7DQogICAgY2FzZSAyOiBodG1sVGFiVWViZXI9aHRtbFRhYlVlYmVyMStodG1sVGFiVWViZXIyK2h0bWxUYWJVZWJlcjJfMStodG1sVGFiVWViZXIzOyBicmVhazsNCiAgICBjYXNlIDM6IGh0bWxUYWJVZWJlcj1odG1sVGFiVWViZXIxK2h0bWxUYWJVZWJlcjIraHRtbFRhYlVlYmVyMl8xK2h0bWxUYWJVZWJlcjIraHRtbFRhYlVlYmVyMzsgYnJlYWs7DQogICAgY2FzZSA0OiBodG1sVGFiVWViZXI9aHRtbFRhYlVlYmVyMStodG1sVGFiVWViZXIyK2h0bWxUYWJVZWJlcjJfMStodG1sVGFiVWViZXIyK2h0bWxUYWJVZWJlcjJfMStodG1sVGFiVWViZXIzOyBicmVhazsNCn07ICAgIA0KDQogLy9ISUVSIFNJTkQgRElFIMKnIFdFUlRFLCBESUUgSU4gREVSIFNDSExFSUZFIEdFRklMVEVSRVQgV0VSJURFTiAtIEplZGUgc3BhbHRlIGVpbmVuIHdlcnQNCiB2YXIgdmFsMTsgIHZhciB2YWwwOw0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogDQogDQogLy9TQ0hMRUlGRSBGw5xSIERJRSBXRVJURQ0KICBmb3IgKHZhciB4PTA7eDxteUxpc3QubGVuZ3RoO3grKyl7DQogICAgICBjb3VudGVyKys7DQogICAgICBpZihteUxpc3RbeF1bMV0hPW51bGwpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbDAgID0gbXlMaXN0W3hdWzBdOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbDEgID0gbXlMaXN0W3hdWzFdDQogICAgIA0KICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbDE9PWZhbHNlKSB7dmFsMT0i4p2MIn0gZWxzZXt2YWwxPSLinIUifSAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgDQogICAgIA0KICAgICANCg0KDQoNCg0KICAgICAgICANCiANCiAgICAgIC8vSElFUiBXRVJERU4gRElFIERBVEVOIERFUiBTQ0hMRUlGRSBaVVNBTU1FTkdFU0VUWlQgLSBoYXQgbWFuIG9iZW4gMiBGZWxkZXIgZGVmaW5pZXJ0LCBicmF1Y2h0IG1hbiBoaWVyIDIgV2VydGUNCiAgICANCiAgICAgICAgc3dpdGNoIChtZWhyZmFjaFRhYmVsbGUpIHsgIA0KICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgIGh0bWxPdXQ9aHRtbE91dCsiPHRyPjx0ZD4mZW5zcDsiK3ZhbDArIiZlbnNwOzwvdGQ+PHRkIGFsaWduPWNlbnRlcj4mZW5zcDsiK3ZhbDErIiZlbnNwOzwvdGQ+PC90cj4iOyBicmVhazsNCiAgICAgICAgICBjYXNlIDI6ICBpZihjb3VudGVyJTI9PTApICB7aHRtbE91dCA9IGh0bWxPdXQrIjx0cj48dGQ+JmVuc3A7Iit2YWwwKyImZW5zcDs8L3RkPjx0ZCBhbGlnbj1jZW50ZXI+JmVuc3A7Iit2YWwxKyImZW5zcDs8L3RkPiI7IH0gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge2h0bWxPdXQgPSBodG1sT3V0KyI8dGQgc3R5bGU9XCJjb2xvcjoiK2h0bWxGYXJiRmVsZGVyc2NocmlmdDIrIlwiPiZlbnNwOyIrdmFsMCsiJmVuc3A7PC90ZD48dGQgIGFsaWduPWNlbnRlciBzdHlsZT1cImNvbG9yOiIraHRtbEZhcmJGZWxkZXJzY2hyaWZ0MisiXCI+JmVuc3A7Iit2YWwxKyImZW5zcDs8L3RkPjwvdHI+Ijt9IGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgIGNhc2UgMzogaWYoY291bnRlciUzPT0wICkgIHtodG1sT3V0ID0gaHRtbE91dCsiPHRyPjx0ZD4mZW5zcDsiK3ZhbDArIiZlbnNwOzwvdGQ+PHRkIGFsaWduPWNlbnRlcj4mZW5zcDsiK3ZhbDErIiZlbnNwOzwvdGQ+IjsgfSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7IGlmKGNvdW50ZXIlMz09MSApICB7IGh0bWxPdXQgPSBodG1sT3V0KyI8dGQgc3R5bGU9XCJjb2xvcjoiK2h0bWxGYXJiRmVsZGVyc2NocmlmdDIrIlwiPiZlbnNwOyIrdmFsMCsiJmVuc3A7PC90ZD48dGQgIGFsaWduPWNlbnRlciBzdHlsZT1cImNvbG9yOiIraHRtbEZhcmJGZWxkZXJzY2hyaWZ0MisiXCI+JmVuc3A7Iit2YWwxKyImZW5zcDs8L3RkPiI7fSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlICAgIHtodG1sT3V0ID0gaHRtbE91dCsiPHRkPiZlbnNwOyIrdmFsMCsiJmVuc3A7PC90ZD48dGQgYWxpZ249Y2VudGVyPiZlbnNwOyIrdmFsMSsiJmVuc3A7PC90ZD48L3RyPiI7fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gYnJlYWs7DQoNCg0KICAgICAgICAgIGNhc2UgNDogaWYoY291bnRlciU0PT0wKSAge2h0bWxPdXQgPSBodG1sT3V0KyI8dHI+PHRkPiZlbnNwOyIrdmFsMCsiJmVuc3A7PC90ZD48dGQgYWxpZ249Y2VudGVyPiZlbnNwOyIrdmFsMSsiJmVuc3A7PC90ZD4iOyB9IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7aWYoY291bnRlciUyPT0xICkgIHsgaHRtbE91dCA9IGh0bWxPdXQrIjx0ZCBzdHlsZT1cImNvbG9yOiIraHRtbEZhcmJGZWxkZXJzY2hyaWZ0MisiXCI+JmVuc3A7Iit2YWwwKyImZW5zcDs8L3RkPjx0ZCAgYWxpZ249Y2VudGVyIHN0eWxlPVwiY29sb3I6IitodG1sRmFyYkZlbGRlcnNjaHJpZnQyKyJcIj4mZW5zcDsiK3ZhbDErIiZlbnNwOzwvdGQ+Ijt9IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgICAge2lmKGNvdW50ZXIlMj09MSAmJiBjb3VudGVyJTQ9PTMpICB7IGh0bWxPdXQ9IGh0bWxPdXQrIjx0ZCBzdHlsZT1cImNvbG9yOiIraHRtbEZhcmJGZWxkZXJzY2hyaWZ0MisiXCI+JmVuc3A7Iit2YWwwKyImZW5zcDs8L3RkPjx0ZCAgYWxpZ249Y2VudGVyIHN0eWxlPVwiY29sb3I6IitodG1sRmFyYkZlbGRlcnNjaHJpZnQyKyJcIj4mZW5zcDsiK3ZhbDErIiZlbnNwOzwvdGQ+PC90cj4iO30gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAgICB7aHRtbE91dCA9IGh0bWxPdXQgPSBodG1sT3V0KyI8dGQ+JmVuc3A7Iit2YWwwKyImZW5zcDs8L3RkPjx0ZD4mZW5zcDsiK3ZhbDErIiZlbnNwOzwvdGQ+Ijt9fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gYnJlYWs7DQoNCiAgICAgIH0gLy9zd2l0Y2ggZW5kZQ0KDQogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgfTsgLy9TY2hsZWlmZW4gZW5kZQ0KICAgICAgDQogICAgICAgICAgIC8vQXVzZ2FiZSDDvGJlciBWSVMgaHRtbCB3aWRnZXQgLSB0YWJlbGxlIGluIGRhdGVucHVua3Qgc2NocmVpYmVuIC0gaHRtbCB0YWJlbGxlIG9obmUgaHRtbCBoZWFkZXIgdW5kIGJvZHkNCiAgICAgICAgICAgIHZhciBodG1sT3V0VklTPSIiOw0KICAgICAgICAgICAgaHRtbFViZXJzY2hyaWZ0ID8gaHRtbE91dFZJUz1odG1sVWViZXIraHRtbFRhYlN0eWxlK2h0bWxUYWJVZWJlcitodG1sT3V0KyI8L3RhYmxlPiIgOiBodG1sT3V0VklTPWh0bWxUYWJTdHlsZStodG1sVGFiVWViZXIraHRtbE91dCsiPC90YWJsZT4iOw0KICAgICAgICAgICAgLy9sb2coaHRtbE91dFZJUyk7DQogICAgICAgICAgICBpZiAoYnJhdWNoZUVpblZJU1dpZGdldCkgc2V0U3RhdGUoZHBWSVMsIGh0bWxPdXRWSVMgKTsNCiANCiAgLy9taXQgb2RlciBvaG5lIMO8YmVyc2NocmlmdA0KICBodG1sVWJlcnNjaHJpZnQgPyBodG1sT3V0PWh0bWxTdGFydCtodG1sVWViZXIraHRtbFRhYlN0eWxlK2h0bWxUYWJVZWJlcitodG1sT3V0K2h0bWxFbmQgOiBodG1sT3V0PWh0bWxTdGFydCtodG1sVGFiU3R5bGUraHRtbFRhYlVlYmVyK2h0bWxPdXQraHRtbEVuZDsNCiAgLy9sb2coaHRtbE91dCk7DQp9IC8vIGZ1bmN0aW9uIGVuZGUNCiANCiAvL2hpZXIgd2lyZCBzY2hsZWlmZSBnZXN0YXJ0ZXQgdW5kIGRhcyBmaWxlIGdlc2NocmllYmVuDQogIA0KIC8vc2NoZWR1bGUoIiovMjAgKiAqICogKiAqIiwgIGZ1bmN0aW9uICgpIHsgIA0KICB3cml0ZUhUTUwoKTsNCiAgaWYgKGJyYXVjaGVFaW5GaWxlKSB7d3JpdGVGaWxlKGhvbWUsIHBhdGggLGh0bWxPdXQsIGZ1bmN0aW9uIChlcnJvcikgeyAvKiBsb2coJ2ZpbGUgd3JpdHRlbicpOyovICB9KTt9DQogLy99KTsgDQogDQoNCg0KDQo=&lt;/field&gt;
   &lt;comment pinned="false" h="80" w="160"&gt;Beschreibe diese Funktion …&lt;/comment&gt;
 &lt;/block&gt;
&lt;/xml&gt;
</code></pre>
<p dir="auto"></p></section></section><p></p>
<p dir="auto">was muss in der javascript-funtion noch  getan werden?</p>
<ul>
<li>roter pfeil: der counter ist wichtig und muss in der schleife sein ! zuständig für die anzahl der tabellen nebeneinander</li>
<li>grüner pfeil: das schedule auskommentieren<br />
oranger pfeil: liest die daten aus dem array, welches übergeben worden ist und setzt die val0 und val1 , welche dann angezeigt werden</li>
</ul>
<p dir="auto"><img src="/assets/uploads/files/1577384785430-image-13.png" alt="Image 13.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">das ganze sieht dann genauso aus wie ohne blockly: die tabellen sind verschieden zu formatieren</p>
<p dir="auto"><img src="/assets/uploads/files/1577385380630-image-16.png" alt="Image 16.png" class=" img-fluid img-markdown" /> <img src="/assets/uploads/files/1577385380565-image-15.png" alt="Image 15.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"><span style="color:#d000ff">hier gibt es eine <strong>bessere version</strong> der einkaufs- und todo-liste:</span>  <a href="https://forum.iobroker.net/post/347479">https://forum.iobroker.net/post/347479</a></p>
<p dir="auto">alexa todo-liste anzeigen lassen</p>
<p dir="auto"><img src="/assets/uploads/files/1577449403698-image-3.png" alt="Image 3.png" class=" img-fluid img-markdown" /><br />
alexa einkaufsliste<br />
alexa todo-liste <a href="https://forum.iobroker.net/topic/28254/script-alexa-listen-pflegen-und-anzeigen">https://forum.iobroker.net/topic/28254/script-alexa-listen-pflegen-und-anzeigen</a></p>
<p dir="auto">man kann sich dadurch schöne html-emails zusenden mit den infos, die in der tabelle sind</p>
<p dir="auto">z.b die todoliste als html-email</p>
<p dir="auto"><img src="/assets/uploads/files/1577465498113-image-13.png" alt="Image 13.png" class=" img-fluid img-markdown" /> <img src="/assets/uploads/files/1577465507250-image-12.png" alt="Image 12.png" class=" img-fluid img-markdown" /></p>
]]></description><link>https://forum.iobroker.net/topic/28021/html-table-für-vis-oder-iqontrol-js-und-blockly</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Jul 2026 10:22:25 GMT</lastBuildDate><atom:link href="https://forum.iobroker.net/topic/28021.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Dec 2019 18:54:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Tue, 07 Feb 2023 17:49:16 GMT]]></title><description><![CDATA[<p dir="auto">hier geht es weiter mit fuelpricemonitor</p>
<p dir="auto"><a href="https://forum.iobroker.net/post/942817">https://forum.iobroker.net/post/942817</a></p>
]]></description><link>https://forum.iobroker.net/post/942819</link><guid isPermaLink="true">https://forum.iobroker.net/post/942819</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Tue, 07 Feb 2023 17:49:16 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sun, 05 Feb 2023 15:30:28 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/mrfloppy" aria-label="Profile: mrfloppy">@<bdi>mrfloppy</bdi></a> sagte in <a href="/post/941461">HTML-Table für VIS oder Iqontrol (js und blockly)</a>:</p>
<blockquote>
<p dir="auto">Bezüglich Telegram. Instanz habe ich ja, aber ich möchte ja nicht bei jedem Update eine Nachricht bekommen</p>
</blockquote>
<p dir="auto">dann musst du dir ein script machen -gibt einiges im forum - telegram im script deaktivieren geht durch einen leerstring im setting ganz oben.</p>
<p dir="auto">ich werde noch einen datenpunkt einführen und speichere den text für telegram da rein - dann hast du von deinem script aus den zugang - das mit weiteren listen anderer arten werde ich noch integrieren</p>
<p dir="auto">ich werde dann einen neuen post mit diesem neuen script aufmachen und dich in die benachrichtigung setzen - dann können das andere besser finden</p>
]]></description><link>https://forum.iobroker.net/post/941500</link><guid isPermaLink="true">https://forum.iobroker.net/post/941500</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Sun, 05 Feb 2023 15:30:28 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sun, 05 Feb 2023 15:01:07 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/liv-in-sky" aria-label="Profile: liv-in-sky">@<bdi>liv-in-sky</bdi></a> said in <a href="/post/941451">HTML-Table für VIS oder Iqontrol (js und blockly)</a>:</p>
<blockquote>
<p dir="auto">werde das vorbereiten - braucht ein paar änderungen</p>
</blockquote>
<p dir="auto">Wie gesagt kein Stress, aber das wäre toll wenn man eben beide Abfragen könnte. Wir haben je einen DIE und einen Benziner.</p>
<p dir="auto">Bezüglich Telegram. Instanz habe ich ja, aber ich möchte ja nicht bei jedem Update eine Nachricht bekommen, sonder nur wen ich in den nächsten Tagen danken muss und dan schauen mag wo am günstigsten</p>
]]></description><link>https://forum.iobroker.net/post/941461</link><guid isPermaLink="true">https://forum.iobroker.net/post/941461</guid><dc:creator><![CDATA[mrfloppy]]></dc:creator><pubDate>Sun, 05 Feb 2023 15:01:07 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sun, 05 Feb 2023 14:49:35 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/mrfloppy" aria-label="Profile: mrfloppy">@<bdi>mrfloppy</bdi></a> sagte in <a href="/post/941442">HTML-Table für VIS oder Iqontrol (js und blockly)</a>:</p>
<blockquote>
<p dir="auto">Wie kann ich die Abfrage per Telegram mir schicken lassen?</p>
</blockquote>
<p dir="auto">hast du schon ein menu vom iobroker in telegram - ansonsten muss das script einen button (menu) senden und dann kannst du in telegram draufdrücken und dir senden lassen - wenn du noch kein menu für iob in telegram hast, nutze es doch so, wie jetzt - du bekommst automatisch ein update der preise/unserer liste geupdatet - mach dir einen eigenen bot dafür, dann hast du das immer in telegram</p>
<p dir="auto">oder verstehe ich dich falsch ?</p>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/mrfloppy" aria-label="Profile: mrfloppy">@<bdi>mrfloppy</bdi></a> sagte in <a href="/post/941442">HTML-Table für VIS oder Iqontrol (js und blockly)</a>:</p>
<blockquote>
<p dir="auto">Wie mach ma das mit je einer LiSte für DIE und SUP?</p>
</blockquote>
<p dir="auto">das habe ich vergessen/verdrängt: wenn wir eine eigene liste für den anderen treibstoff haben wollen, müssen wir ein zweites script installieren - das geht aber im moment noch nicht, da die sich die dp gegenseitig überschreiben würden - werde das vorbereiten - braucht ein paar änderungen</p>
]]></description><link>https://forum.iobroker.net/post/941451</link><guid isPermaLink="true">https://forum.iobroker.net/post/941451</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Sun, 05 Feb 2023 14:49:35 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sun, 05 Feb 2023 14:46:00 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/liv-in-sky" aria-label="Profile: liv-in-sky">@<bdi>liv-in-sky</bdi></a><br />
Wie kann ich die Abfrage per Telegram mir schicken lassen?<br />
Name der Tanke wär noch nice in Telegram.<br />
Wie mach ma das mit je einer LiSte für DIE und SUP?</p>
]]></description><link>https://forum.iobroker.net/post/941442</link><guid isPermaLink="true">https://forum.iobroker.net/post/941442</guid><dc:creator><![CDATA[mrfloppy]]></dc:creator><pubDate>Sun, 05 Feb 2023 14:46:00 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sun, 05 Feb 2023 14:00:07 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/mrfloppy" aria-label="Profile: mrfloppy">@<bdi>mrfloppy</bdi></a> sagte in <a href="/post/941338">HTML-Table für VIS oder Iqontrol (js und blockly)</a>:</p>
<blockquote>
<p dir="auto">MIr würde wie gesagt ne Liste von 5-10 Tanekn reichen die ihcmir als Liste anzeigen lasse. Und wenn Bedarf und ich unterwefgs ich es mir per Telegram schicken lassen kann</p>
</blockquote>
<p dir="auto">das kann das script ja - die karte mußt du nicht nutzen - dann wäre es eigentlich soweit fertig ?</p>
<p dir="auto"><img src="/assets/uploads/files/1675605579195-image-177.png" alt="Image 177.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">die nachricht wird immer upgedatet und kein neuer block geschrieben</p>
]]></description><link>https://forum.iobroker.net/post/941363</link><guid isPermaLink="true">https://forum.iobroker.net/post/941363</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Sun, 05 Feb 2023 14:00:07 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sun, 05 Feb 2023 12:47:12 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/liv-in-sky" aria-label="Profile: liv-in-sky">@<bdi>liv-in-sky</bdi></a><br />
anydesk können wir gerne mal machen, ev mal abends.<br />
Ah das war ne Frage mit den Koordinaten vom Handy in Iobroker. Musste mehrmals lesen.<br />
Ja das ginge , habe Life360 und Geofancy laufen.<br />
Bei mir sind die Tanken alle so im Umkreis oder am weg nach Wien. Ich fahre meist Tanken am weg von oder zur Arbeit.<br />
Da kann dann ich eben versch. Wege nehmen die allesamt max 1-2 km Umweg zur direkten Heimfahrt wären.<br />
Das Gimmick mit der Karte das du eingebaut ist wäre nicht unbedingt nötig.<br />
MIr würde wie gesagt ne Liste von 5-10 Tanekn reichen die ihcmir als Liste anzeigen lasse. Und wenn Bedarf und ich unterwefgs ich es mir per Telegram schicken lassen kann.<br />
Für so Spielereien wie dein RadarScript usw. da habe ich ganz eherlich zu wenig Programmierkenntins und auch allgemein kenntnis Iobroker usw.<br />
Bei mir sind so kleine Projekte schon Tagesprojekte, wo sag mal du wahrscheinlich 1-2 Std sitzen würdest.</p>
]]></description><link>https://forum.iobroker.net/post/941338</link><guid isPermaLink="true">https://forum.iobroker.net/post/941338</guid><dc:creator><![CDATA[mrfloppy]]></dc:creator><pubDate>Sun, 05 Feb 2023 12:47:12 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sun, 05 Feb 2023 11:18:58 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/mrfloppy" aria-label="Profile: mrfloppy">@<bdi>mrfloppy</bdi></a></p>
<p dir="auto">du hast keine möglichkeit die koordinaten vom handy in den iobroker zu bekommen - ich mache das und kann bei meinem radar script durch den entfernungswert die radarfallen ausblenden, die zu weit weg vom auto sind</p>
<p dir="auto">auch bei diesem script würde es sinn machen, nur tankstellen anzuzeigen, die in einem bestimmten radius sind - ich fahre eigentlich keine zu vielen extra  kilometer um zu tanken - dabei könnte es aber ein problem geben, wenn ich mir 5 anzeigen lasse (die 5 günstigten) und keine ist im radius, wird nix angezeigt - dadurch wird die karte auch immer klein gehalten und man erkennt besser, wo die tanke ist<br />
beispiel - von mir daheim ist wien ewig weg - die karte sieht dann so aus. man  muss schon sehr nah sein, damit man wirklich was erkennt</p>
<p dir="auto"><img src="/assets/uploads/files/1675595305077-image-175.png" alt="Image 175.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">z.b. hier:<br />
der rote punkt ist mein auto, der blaue punkt daheim - die bl. dreiecke sind städte, die bei mir wichtig sind - die koordinaten im zentrum der karte habe ich rausgesucht - kommt nun ein blitzer (lila kreis) kann der die karte nicht auseinanderziehen, da er nur in einem bestimmten raduis zum mittelpunkt der karte sein kann - die <a href="http://blitzer.de" rel="nofollow ugc">blitzer.de</a> api liefert auch alle möglichen blitzer, auch ewig weit weg</p>
<p dir="auto"><img src="/assets/uploads/files/1675595684739-image-176.png" alt="Image 176.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">was mir gerade einfällt - ich könnte auch noch die gpünstigste tanke vom tankerkönig bei mir einbauen - mal kucken :-)</p>
]]></description><link>https://forum.iobroker.net/post/941261</link><guid isPermaLink="true">https://forum.iobroker.net/post/941261</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Sun, 05 Feb 2023 11:18:58 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sun, 05 Feb 2023 10:57:52 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/mrfloppy" aria-label="Profile: mrfloppy">@<bdi>mrfloppy</bdi></a></p>
<p dir="auto">könnten wir eine anydesk session machen, dann schau ich mir das bei dir an</p>
]]></description><link>https://forum.iobroker.net/post/941241</link><guid isPermaLink="true">https://forum.iobroker.net/post/941241</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Sun, 05 Feb 2023 10:57:52 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sun, 05 Feb 2023 10:55:10 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/liv-in-sky" aria-label="Profile: liv-in-sky">@<bdi>liv-in-sky</bdi></a><br />
Karte funktioniert nun auch bei mir.<br />
Manche Koordinaten werden nicht angezeigt, Obwohl sie in den DP drinnen stehen im FUELPRICE.<br />
Habe noch paar Tankstellen dazu gefügt und dadurch haben sich auch andere Tankstellen Koordinaten gefüllt.<br />
Aber dadurch kommen immer mehr dazu die ich gar ncht anfahre normalerweise.<br />
Keine Ahnung woran das liegt, weil über die API gibt er bei allen 10 Ergebnissen die Long/Lati aus.<br />
Den Preis gibt er nur die ersten 5 aus.</p>
<p dir="auto"><a href="https://api.e-control.at/sprit/1.0/doc/index.html?url=https://api.e-control.at/sprit/1.0/api-docs%3Fgroup%3Dpublic-api#/search/searchGasStationsByAddressUsingGET" rel="nofollow ugc">Spritpreisrechern API test</a></p>
]]></description><link>https://forum.iobroker.net/post/941238</link><guid isPermaLink="true">https://forum.iobroker.net/post/941238</guid><dc:creator><![CDATA[mrfloppy]]></dc:creator><pubDate>Sun, 05 Feb 2023 10:55:10 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sun, 05 Feb 2023 10:34:54 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/liv-in-sky" aria-label="Profile: liv-in-sky">@<bdi>liv-in-sky</bdi></a> Kein Problem. Abendessen reicht mir auch.<br />
Danke dass du trotzdem die Zeit findest hier noch ein bisschen zu schreiben.</p>
]]></description><link>https://forum.iobroker.net/post/941220</link><guid isPermaLink="true">https://forum.iobroker.net/post/941220</guid><dc:creator><![CDATA[Chaot]]></dc:creator><pubDate>Sun, 05 Feb 2023 10:34:54 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sun, 05 Feb 2023 10:16:28 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/chaot" aria-label="Profile: chaot">@<bdi>chaot</bdi></a> bin kein handwerker - kann dauern, bis das alles wieder steht :-) küchenscränke lassen sich nicht programmieren - die brauchen anscheinend schrauben</p>
<p dir="auto">danke</p>
]]></description><link>https://forum.iobroker.net/post/941204</link><guid isPermaLink="true">https://forum.iobroker.net/post/941204</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Sun, 05 Feb 2023 10:16:28 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sun, 05 Feb 2023 10:01:53 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/liv-in-sky" aria-label="Profile: liv-in-sky">@<bdi>liv-in-sky</bdi></a><br />
Im Tankerkönig steht "bft" zusammen mit einem Namen.<br />
z.B. bft - Walther<br />
Das neue Logo der Tankstellen ist Quadratisch:<br />
<img src="/assets/uploads/files/1675591183674-bft.png" alt="bft.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Sag Bescheid wenn's was zu Essen gibt. Wir kommen dann.....</p>
]]></description><link>https://forum.iobroker.net/post/941189</link><guid isPermaLink="true">https://forum.iobroker.net/post/941189</guid><dc:creator><![CDATA[Chaot]]></dc:creator><pubDate>Sun, 05 Feb 2023 10:01:53 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sun, 05 Feb 2023 09:48:51 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/chaot" aria-label="Profile: chaot">@<bdi>chaot</bdi></a> machst du es bitte quadratisch und was muss im namen sein, damit ich das finde und zuteilen kann - BFT oder bft oder was anderes</p>
<p dir="auto">sorry- bin gerade am küchenumbau und programmiere in den pausen :-)</p>
]]></description><link>https://forum.iobroker.net/post/941178</link><guid isPermaLink="true">https://forum.iobroker.net/post/941178</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Sun, 05 Feb 2023 09:48:51 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sun, 05 Feb 2023 09:46:14 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/liv-in-sky" aria-label="Profile: liv-in-sky">@<bdi>liv-in-sky</bdi></a><br />
Ich habe noch ein Bild für das Betreiberarchiv:<br />
<img src="/assets/uploads/files/1675590369355-bft.png" alt="bft.png" class=" img-fluid img-markdown" /></p>
]]></description><link>https://forum.iobroker.net/post/941176</link><guid isPermaLink="true">https://forum.iobroker.net/post/941176</guid><dc:creator><![CDATA[Chaot]]></dc:creator><pubDate>Sun, 05 Feb 2023 09:46:14 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sun, 05 Feb 2023 09:46:43 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/mrfloppy" aria-label="Profile: mrfloppy">@<bdi>mrfloppy</bdi></a></p>
<p dir="auto">es werden alle anderen ordner auch geprüft, ob dort koordinaten sind - bei mir kommt es auch ab und zu vor</p>
<p dir="auto">habe ein neues script - kannst'e mal testen - mit telegram und distanz (luftlinie) - auch die null koordinaten werden behandelt - script läuft einmal beim starten - also kein warten mehr</p>
<p dir="auto"><strong>script:</strong></p>
<p dir="auto"></p><section class="spoiler-wrapper"><button class="spoiler-control btn btn-default">Spoiler</button><section style="display:none" class="spoiler-content"><p></p>
<pre><code>
let anzahlAnzeige=5;
let mySprit="SUP"; //oder GAS, oder DIE
let telegramInstanz="telegram.0"  //"" wenn nicht genutzt

const config = getObject('system.config');
const mylat =  (config.common.latitude).replace(/(.*\..+?.+?.+?.+?.+?.+?).+/,"$1"); //*/"48.427656" //
const mylong = config.common.longitude.replace(/(.*\..+?.+?.+?.+?.+?.+?).+/,"$1");
const defaultPic="/vis.0/Tankstellen/default.png"
const pictures=[{"firma":"BP","pic":"/vis.0/Tankstellen/bp.png"},
               {"firma":"Genol","pic":"/vis.0/Tankstellen/genol.png"},
               {"firma":"eni","pic":"/vis.0/Tankstellen/bp.png"},
               {"firma":"Diskont","pic":"/vis.0/Tankstellen/diskont.png"},
               {"firma":"Turmöl","pic":"/vis.0/Tankstellen/turmoel.png"},
               {"firma":"paradies","pic":"/vis.0/Tankstellen/treibstoffparadies.png"},
               {"firma":"Lohberger","pic":"/vis.0/Tankstellen/lohberger.png"},
               {"firma":"SB-Tankstelle","pic":"/vis.0/Tankstellen/sb.jpg"},
               {"firma":"Hofer","pic":"/vis.0/Tankstellen/hofer.png"},
               {"firma":"AVIA","pic":"/vis.0/Tankstellen/avia.png"},
               {"firma":"avanti","pic":"/vis.0/Tankstellen/avanti.png"},
               {"firma":"Shell","pic":"/vis.0/Tankstellen/shell.png"},
               {"firma":"Aral","pic":"/vis.0/Tankstellen/Aral.png"},
               {"firma":"JET","pic":"/vis.0/Tankstellen/jet.png"},
               {"firma":"Ultsch","pic":"/vis.0/Tankstellen/ultsch.png"},
              ]

let myTelegramTextOld="";   
let telegramIsSent=false;           

if(!existsState('0_userdata.0.FUELPRICEMONITOR.JsonAnzeige')) createState('0_userdata.0.FUELPRICEMONITOR.JsonAnzeige', "", { name: "JsonAnzeige", type:'string' });
if(!existsState('0_userdata.0.FUELPRICEMONITOR.telegram_messageid')) createState('0_userdata.0.FUELPRICEMONITOR.telegram_messageid', "", { name: "telegram_messageid", type:'string' });
if(!existsState('0_userdata.0.FUELPRICEMONITOR.telegram_chatid')) createState('0_userdata.0.FUELPRICEMONITOR.telegram_chatid', "", { name: "telegram_chatid", type:'string' }); 
if ( existsState("javascript." + instance + ".FUELPRICEMONITOR.Targets.home"))  setState("javascript." + instance + ".FUELPRICEMONITOR.Targets.home",mylat+','+mylong);
      else  createState("javascript." + instance + ".FUELPRICEMONITOR.Targets.home", mylat+','+mylong, {type: "string", name: "Koordinaten FPM HOME", role: "value", read: true, write: true, } ); 


on({id: "fuelpricemonitor.0.cheapestOverAll_"+mySprit+".0.amount", change: "any"}, async function (obj) {
   mainFunc();
 });

async function mainFunc() {  
let myTelegramText="";

let unserJsonArray=[];
$('fuelpricemonitor.*.cheapestOverAll_'+mySprit+'.*.address').each(function(id, i) {   
        let indexArr=id.split('.');
        let index=Number(indexArr[3]);
        let val0=getState(id).val; if(val0==null) val0="nicht angegeben"
        let val1=getState(id.replace("address","amount")).val;
        let val2=getState(id.replace("address","name")).val; if(val2==null) val2="nicht angegeben"
        let val3=getState(id.replace("address","id")).val;               
        let val4=searchLoc(val3);
        let val5=getDistanceFromLatLonInKm(mylat, mylong, val4.split(',')[0], val4.split(',')[1])
   

if(val1!=null &amp;&amp; index&lt;anzahlAnzeige){
unserJsonArray.push({ "Index":    index,
                     "Logo":     getPic(val2),
                     "Adresse":  val0,
                     "Preis":    val1,
                     "Name":     val2,
                     "ID":       val3,
                     "Koordinaten": val4,
                     "Dis(km)":  val5 })


if (  existsState("javascript." + instance + ".FUELPRICEMONITOR.Targets."+index+"er"))   setState("javascript." + instance + ".FUELPRICEMONITOR.Targets."+index+"er",val4.toString());
      else     createState("javascript." + instance + ".FUELPRICEMONITOR.Targets."+index+"er", val4.toString(), {type: "string", name: "Koordinaten FPM "+ index, role: "value", read: true, write: true, } ); }



})

//log(JSON.stringify(unserJsonArray));

// in eigenen dp speichern - type zeichenkette
setState("0_userdata.0.FUELPRICEMONITOR.JsonAnzeige",JSON.stringify(unserJsonArray));
if(telegramInstanz!=""){
for(let i=0;i&lt;unserJsonArray.length;i++){
   myTelegramText=myTelegramText+unserJsonArray[i].Adresse+"\nPreis: "+unserJsonArray[i].Preis+"\nDistanz: "+unserJsonArray[i]["Dis(km)"]+"\n\n"
}
if(myTelegramTextOld!=myTelegramText&amp;&amp;!telegramIsSent)  {sendtext(myTelegramText);telegramIsSent=true} else{if(myTelegramTextOld!=myTelegramText) updatetext(myTelegramText)}
myTelegramTextOld=myTelegramText;
}
}



function searchLoc(theId){
let  ergebnis="";
$('fuelpricemonitor.0.*.*.location.latitude').each(function(id, i) {
   let indexArr=id.split('.');
   let indexId=indexArr[3];
   
  // log(theId +"  "+indexId )
   if(indexId==theId ){
                                                    //log(getState(id).val+","+getState(id.replace("latitude","longitude")).val)
                                                    if(getState(id).val!=null){
                                                    ergebnis= (getState(id).val+","+getState(id.replace("latitude","longitude")).val).toString()}
                                                    else {ergebnis=mylat+','+mylong}
                                                    }
                                                    
})
//log (ergebnis)
return ergebnis;

}

function getPic(nameTanke){
let defaultTanke=defaultPic

for(let i=0;i&lt;pictures.length;i++){//log(nameTanke+"   -  "+pictures[i].firma+"  -  "+nameTanke.indexOf(pictures[i].firma))
 // if(pictures[i].firma.includes(nameTanke)) {defaultTanke=pictures[i].pic }
  if(nameTanke.indexOf(pictures[i].firma)&gt;-1) {defaultTanke=pictures[i].pic; break }
}
//log(defaultTanke)
return defaultTanke

}

function getDistanceFromLatLonInKm(lat1, lon1, lat2, lon2) {
 var R = 6371; // Radius of the earth in km
 var dLat = deg2rad(lat2-lat1);  // deg2rad below
 var dLon = deg2rad(lon2-lon1); 
 var a = 
   Math.sin(dLat/2) * Math.sin(dLat/2) +
   Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 
   Math.sin(dLon/2) * Math.sin(dLon/2)
   ; 
 var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
 var d = R * c; // Distance in km
 return Math.round(d);
}

function deg2rad(deg) {
 return deg * (Math.PI/180)
}

async function sendtext(myText) {

   sendTo(telegramInstanz, {

       text: myText

       });
   await wait(1000);
   var messageid=getState(telegramInstanz+".communicate.botSendMessageId").val;

   var chatid=getState(telegramInstanz+".communicate.botSendChatId").val;
   await wait(2000);log("sendtext")
   setState('0_userdata.0.FUELPRICEMONITOR.telegram_messageid', String(messageid));
   setState('0_userdata.0.FUELPRICEMONITOR.telegram_chatid', String(chatid));

}

async function updatetext(myText) {

   let mid=getState("0_userdata.0.FUELPRICEMONITOR.telegram_messageid").val
   let mch=getState("0_userdata.0.FUELPRICEMONITOR.telegram_chatid").val
   log(mid+'  -  '+mch+"  -  update")
   

   sendTo(telegramInstanz, {
      text: myText,
       editMessageText: {
           options: {
               chat_id: mch,
               message_id: mid,
                     }
       }
   });

}

mainFunc();



</code></pre>
<p dir="auto"></p></section></section><p></p>
<p dir="auto"><strong>widget</strong></p>
<p dir="auto"></p><section class="spoiler-wrapper"><button class="spoiler-control btn btn-default">Spoiler</button><section style="display:none" class="spoiler-content"><p></p>
<pre><code>[{"tpl":"tplOsm","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","mCount":"6","maxZoom":"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,"hideControls":true,"markersSwap1":true,"markersLon-oid1":"javascript.0.FUELPRICEMONITOR.Targets.0er","markersLat-oid1":"","markersWidth1":"13","markersHeight1":"13","markersOffsetX1":"","markersOffsetY1":"","markersImage1":"/vis.0/armin/img/zahl/1-green.png","markersLon-oid2":"javascript.0.FUELPRICEMONITOR.Targets.1er","markersSwap2":true,"markersLon-oid3":"javascript.0.FUELPRICEMONITOR.Targets.2er","markersSwap3":true,"markersLon-oid4":"javascript.0.FUELPRICEMONITOR.Targets.3er","markersSwap4":true,"markersImage4":"/vis.0/armin/img/zahl/4-green.png","markersImage3":"/vis.0/armin/img/zahl/3-green.png","markersImage2":"/vis.0/armin/img/zahl/2-green.png","markersLon-oid6":"javascript.0.FUELPRICEMONITOR.Targets.home","markersSwap6":true,"markersImage6":"/vis.0/armin/img/haus2.png","g_markers_§4":true,"markersWidth2":"13","markersHeight2":"13","markersWidth3":"13","markersHeight3":"13","markersWidth4":"13","markersHeight4":"13","markersWidth6":"17","markersHeight6":"17","markersLon-oid5":"javascript.0.FUELPRICEMONITOR.Targets.4er","markersSwap5":true,"markersImage5":"/vis.0/armin/img/zahl/5-green.png","markersWidth5":"13","markersHeight5":"13"},"style":{"left":"907px","top":"856px","width":"380px","height":"273px"},"widgetSet":"map"},{"tpl":"i-vis-jsontable","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":true,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","iTblRowLimit":"20","iTableRefreshRate":"0","iTblSortOrder":"asc","iColCount":"8","iColShow1":false,"iTblHeadTextAlign1":"center","iTblTextAlign1":"center","iTblCellFormat1":"normal","iTblCellImageSize1":"200","iTblCellBooleanCheckbox1":"false","iTblCellBooleanColorFalse1":"#ff0000","iTblCellBooleanColorTrue1":"#00ff00","iTblCellNumberDecimals1":"2","iTblCellNumberDecimalSeperator1":".","iTblCellNumberThousandSeperator1":",","iTblCellThresholdsDp1":"","iTblCellThresholdsText1":"","iOpacityAll":"1","iTblRowEvenColor":"#060d14","iTblRowUnevenColor":"#1d1f20","iTblHeaderColor":"#204565","iRowSpacing":"3.4","iTblRowEvenTextColor":"#ffffff","iTblRowUnevenTextColor":"#ffffff","iTblHeaderTextColor":"#ffffff","iBorderSize":"0","iBorderStyleLeft":"none","iBorderStyleRight":"none","iBorderStyleUp":"none","iBorderStyleDown":"none","iBorderColor":"#ffffff","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,"oid":"0_userdata.0.FUELPRICEMONITOR.JsonAnzeige","iTblShowHead":true,"iColShow2":"true","iTblHeadTextAlign2":"left","iTblTextAlign2":"left","iTblCellFormat2":"image","iTblCellImageSize2":"35","iTblCellBooleanCheckbox2":"false","iTblCellBooleanColorFalse2":"#ff0000","iTblCellBooleanColorTrue2":"#00ff00","iTblCellNumberDecimals2":"2","iTblCellNumberDecimalSeperator2":".","iTblCellNumberThousandSeperator2":",","iTblCellThresholdsDp2":"","iTblCellThresholdsText2":"","iColShow3":"true","iTblHeadTextAlign3":"center","iTblTextAlign3":"center","iTblCellFormat3":"normal","iTblCellImageSize3":"200","iTblCellBooleanCheckbox3":false,"iTblCellBooleanColorFalse3":"#ff0000","iTblCellBooleanColorTrue3":"#00ff00","iTblCellNumberDecimals3":"2","iTblCellNumberDecimalSeperator3":".","iTblCellNumberThousandSeperator3":",","iTblCellThresholdsDp3":"","iTblCellThresholdsText3":"","iColShow4":"true","iTblHeadTextAlign4":"left","iTblTextAlign4":"left","iTblCellFormat4":"normal","iTblCellImageSize4":"200","iTblCellBooleanCheckbox4":"false","iTblCellBooleanColorFalse4":"#ff0000","iTblCellBooleanColorTrue4":"#00ff00","iTblCellNumberDecimals4":"2","iTblCellNumberDecimalSeperator4":".","iTblCellNumberThousandSeperator4":",","iTblCellThresholdsDp4":"","iTblCellThresholdsText4":"","iColShow5":true,"iTblHeadTextAlign5":"center","iTblTextAlign5":"center","iTblCellFormat5":"normal","iTblCellImageSize5":"200","iTblCellBooleanCheckbox5":"false","iTblCellBooleanColorFalse5":"#ff0000","iTblCellBooleanColorTrue5":"#00ff00","iTblCellNumberDecimals5":"2","iTblCellNumberDecimalSeperator5":".","iTblCellNumberThousandSeperator5":",","iTblCellThresholdsDp5":"","iTblCellThresholdsText5":"","iColShow6":false,"iTblHeadTextAlign6":"center","iTblTextAlign6":"center","iTblCellFormat6":"normal","iTblCellImageSize6":"200","iTblCellBooleanCheckbox6":"false","iTblCellBooleanColorFalse6":"#ff0000","iTblCellBooleanColorTrue6":"#00ff00","iTblCellNumberDecimals6":"2","iTblCellNumberDecimalSeperator6":".","iTblCellNumberThousandSeperator6":",","iTblCellThresholdsDp6":"","iTblCellThresholdsText6":"","iColShow7":false,"iTblHeadTextAlign7":"center","iTblTextAlign7":"center","iTblCellFormat7":"normal","iTblCellImageSize7":"200","iTblCellBooleanCheckbox7":"false","iTblCellBooleanColorFalse7":"#ff0000","iTblCellBooleanColorTrue7":"#00ff00","iTblCellNumberDecimals7":"2","iTblCellNumberDecimalSeperator7":".","iTblCellNumberThousandSeperator7":",","iTblCellThresholdsDp7":"","iTblCellThresholdsText7":"","iColShow8":"true","iTblHeadTextAlign8":"center","iTblTextAlign8":"center","iTblCellFormat8":"normal","iTblCellImageSize8":"200","iTblCellBooleanCheckbox8":"false","iTblCellBooleanColorFalse8":"#ff0000","iTblCellBooleanColorTrue8":"#00ff00","iTblCellNumberDecimals8":"2","iTblCellNumberDecimalSeperator8":".","iTblCellNumberThousandSeperator8":",","iTblCellThresholdsDp8":"","iTblCellThresholdsText8":"","iColShow9":"true","iTblHeadTextAlign9":"center","iTblTextAlign9":"center","iTblCellFormat9":"normal","iTblCellImageSize9":"200","iTblCellBooleanCheckbox9":"false","iTblCellBooleanColorFalse9":"#ff0000","iTblCellBooleanColorTrue9":"#00ff00","iTblCellNumberDecimals9":"2","iTblCellNumberDecimalSeperator9":".","iTblCellNumberThousandSeperator9":",","iTblCellThresholdsDp9":"","iTblCellThresholdsText9":"","iTblFixedHead":true,"iTblSortAttr":"","iColName1":"","iColName2":"","iColWidth2":"","iVertScroll":true,"iColPreText1":"","iColPreText2":"","iColPreText4":"","iTblDummyRow":"keine Daten"},"style":{"left":"226px","top":"815px","width":"641px","height":"293px","font-size":"medium","overflow-y":"scroll","z-index":"100"},"widgetSet":"vis-inventwo"}]
</code></pre>
<p dir="auto"></p></section></section><p></p>
<p dir="auto"><img src="/assets/uploads/files/1675590247015-image-174.png" alt="Image 174.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"><strong>bilder:</strong></p>
<p dir="auto"><a href="/assets/uploads/files/1675590401504-bilder.7z">bilder.7z</a></p>
]]></description><link>https://forum.iobroker.net/post/941169</link><guid isPermaLink="true">https://forum.iobroker.net/post/941169</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Sun, 05 Feb 2023 09:46:43 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sun, 05 Feb 2023 09:35:51 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/liv-in-sky" aria-label="Profile: liv-in-sky">@<bdi>liv-in-sky</bdi></a> said in <a href="/post/941133">HTML-Table für VIS oder Iqontrol (js und blockly)</a>:</p>
<blockquote>
<p dir="auto">zwei scripte definieren oder zwei tabellen erstellen oder alles in eine</p>
</blockquote>
<p dir="auto">ich würde je ein eigenes Script für DIE und SUP machen.<br />
Habe gestern kurz ins Script geschaut da müsste man halt einige Punkte darin ändern.</p>
<p dir="auto">Ja aber nicht im 0_Home_....  sondern in einem der anderen Ordner<br />
<img src="/assets/uploads/files/1675589718553-screenshot-2023-02-05-103439.jpg" alt="Screenshot 2023-02-05 103439.jpg" class=" img-fluid img-markdown" /></p>
]]></description><link>https://forum.iobroker.net/post/941162</link><guid isPermaLink="true">https://forum.iobroker.net/post/941162</guid><dc:creator><![CDATA[mrfloppy]]></dc:creator><pubDate>Sun, 05 Feb 2023 09:35:51 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sun, 05 Feb 2023 08:34:34 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/mrfloppy" aria-label="Profile: mrfloppy">@<bdi>mrfloppy</bdi></a></p>
<p dir="auto">wie sollen wir eigentlich zwei verschiedene kraftstoffe anzeigen ? wenn man DIe und SUP hat - <strong>zwei scripte definieren</strong> oder <strong>zwei tabellen erstellen</strong> oder <strong>alles in eine tabelle</strong> ?</p>
]]></description><link>https://forum.iobroker.net/post/941133</link><guid isPermaLink="true">https://forum.iobroker.net/post/941133</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Sun, 05 Feb 2023 08:34:34 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sun, 05 Feb 2023 06:25:17 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/mrfloppy" aria-label="Profile: mrfloppy">@<bdi>mrfloppy</bdi></a></p>
<p dir="auto">die zahlen</p>
<p dir="auto"><a href="/assets/uploads/files/1675578121399-zahl.7z">zahl.7z</a></p>
]]></description><link>https://forum.iobroker.net/post/941116</link><guid isPermaLink="true">https://forum.iobroker.net/post/941116</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Sun, 05 Feb 2023 06:25:17 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sun, 05 Feb 2023 05:51:22 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/mrfloppy" aria-label="Profile: mrfloppy">@<bdi>mrfloppy</bdi></a></p>
<p dir="auto">überprüfe bitte mal die orginal datenpunkte, ob die in den cheapest dp angegebenen id's auch koordinaten haben</p>
<p dir="auto">wie  hier im bild die id unter cheapest hat weiter oben dann einen id-ordner mit den koordinaten - hast du da was drinstehen ?</p>
<p dir="auto"><img src="/assets/uploads/files/1675576257285-image-172.png" alt="Image 172.png" class=" img-fluid img-markdown" /></p>
]]></description><link>https://forum.iobroker.net/post/941113</link><guid isPermaLink="true">https://forum.iobroker.net/post/941113</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Sun, 05 Feb 2023 05:51:22 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sat, 04 Feb 2023 22:41:50 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/mrfloppy" aria-label="Profile: mrfloppy">@<bdi>mrfloppy</bdi></a></p>
<p dir="auto">Lösche das Bild raus - die Koordinaten sollte keiner wissen oder mache die letzten Koordinaten unleserlich</p>
]]></description><link>https://forum.iobroker.net/post/940977</link><guid isPermaLink="true">https://forum.iobroker.net/post/940977</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Sat, 04 Feb 2023 22:41:50 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sun, 05 Feb 2023 09:28:34 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/liv-in-sky" aria-label="Profile: liv-in-sky">@<bdi>liv-in-sky</bdi></a></p>
<p dir="auto">sind tlw leer.<br />
Hängt `vielleicht damit zusammen das ich mehr Tankstellenkoordinaten beim der Instanz definiert habe?<br />
Keine Eile mit den Bildchen</p>
]]></description><link>https://forum.iobroker.net/post/940907</link><guid isPermaLink="true">https://forum.iobroker.net/post/940907</guid><dc:creator><![CDATA[mrfloppy]]></dc:creator><pubDate>Sun, 05 Feb 2023 09:28:34 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sat, 04 Feb 2023 20:19:17 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/mrfloppy" aria-label="Profile: mrfloppy">@<bdi>mrfloppy</bdi></a></p>
<p dir="auto">evtl mußt du weitere  20 min warten und dann kommt die karte - sind den die dp unter javascript.0.FUELPRICEMONITOR.target gesetzt/gefüllt worden ?</p>
<p dir="auto">wenn ja und dort null,null drinsteht, kopiere einfach von anderen koordinaten in den dp - ich werde morgen mal sehen, wie ich das verhindern kann - bisher hatte ich immer koordinaten</p>
<p dir="auto">dienummern  bildchen kann ich erst morgen liefern</p>
]]></description><link>https://forum.iobroker.net/post/940871</link><guid isPermaLink="true">https://forum.iobroker.net/post/940871</guid><dc:creator><![CDATA[liv-in-sky]]></dc:creator><pubDate>Sat, 04 Feb 2023 20:19:17 GMT</pubDate></item><item><title><![CDATA[Reply to HTML-Table für VIS oder Iqontrol (js und blockly) on Sat, 04 Feb 2023 20:04:02 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/liv-in-sky" aria-label="Profile: liv-in-sky">@<bdi>liv-in-sky</bdi></a><br />
Also die Liste haut mal hin. Sehr cool.<br />
Aber das Map Widget funkt nicht bei mir.<br />
Vis-map ist installiert. die Inventwo widgets auch.<br />
Möglich weil im Json keine Koordinaten sind bei manchen Tankstellen?</p>
<pre><code>[{"Index":0,"Logo":"/vis.0/Tankstellen/sefa.png","Adresse":"1210 WIEN, Donaufelder Strasse 128","Preis":1.528,"Name":"SE &amp; FA Energy","ID":1474648,"Koordinaten":"null,null"},{"Index":1,"Logo":"/vis.0/Tankstellen/avanti.png","Adresse":"1210 WIEN, Wagramer Strasse 179","Preis":1.534,"Name":"avanti - Wien Wagramer Straße 179","ID":234,"Koordinaten":"48.25964,16.45031"},{"Index":2,"Logo":"/vis.0/Tankstellen/avanti.png","Adresse":"1210 WIEN, Julius Ficker Strasse 77","Preis":1.534,"Name":"avanti - Wien Julius Ficker Straße 77","ID":38026,"Koordinaten":"null,null"},{"Index":3,"Logo":"/vis.0/Tankstellen/jet.png","Adresse":"1210 WIEN, PRAGERSTRASSE 138","Preis":1.534,"Name":"JET TANKSTELLE","ID":1469406,"Koordinaten":"null,null"},{"Index":4,"Logo":"/vis.0/Tankstellen/diskont.png","Adresse":"1210 WIEN, Donaufelderstraße 137 (\"Hofer-Parkplatz\")","Preis":1.534,"Name":"Diskont Tankstelle","ID":1474472,"Koordinaten":"null,null"},{"Index":5,"Logo":"/vis.0/Tankstellen/turmoel.png","Adresse":"1210 WIEN, Pragerstraße 155","Preis":1.535,"Name":"Turmöl","ID":1473491,"Koordinaten":"48.27658,16.3881"},{"Index":6,"Logo":"/vis.0/Tankstellen/jet.png","Adresse":"1220 WIEN, RAUTENWEG 9","Preis":1.539,"Name":"JET TANKSTELLE","ID":1354660,"Koordinaten":"48.26365,16.4597"}]
</code></pre>
<p dir="auto">Könntest du bitte deine Nummern Bilder anhängen.</p>
]]></description><link>https://forum.iobroker.net/post/940865</link><guid isPermaLink="true">https://forum.iobroker.net/post/940865</guid><dc:creator><![CDATA[mrfloppy]]></dc:creator><pubDate>Sat, 04 Feb 2023 20:04:02 GMT</pubDate></item></channel></rss>