Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Visualisierung
    4. HTML Tabelle für Shelly Device Übersicht

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    HTML Tabelle für Shelly Device Übersicht

    This topic has been deleted. Only users with topic management privileges can see it.
    • liv-in-sky
      liv-in-sky @da_Woody last edited by liv-in-sky

      @da_woody

      ich hoffe mal, du hast das letzte update - scheint so, da du ja die anzahl mit drin hast

      das musst du einsetzen:

      Image 9.png

      let htmlTabUeber2="" sollte ungefähr mit der zeilennummer bei 290 sein - dann sollte es funktionieren - ich werd das auch im ersten post updaten - aber so brauchst du deine settings nicht wieder kopieren oder angleichen

      der code:

      let langeSpalten=htmlSpalte1Weite.length;
      for (let ue=0;ue<htmlSpalte1Weite.length;ue++) { if (!schalterInSpaltenUeberschrift[ue] ) { 
                         htmlTabUeber2=htmlTabUeber2.concat("<td width="+htmlSpalte1Weite[ue]+" align="+Feld1lAlign[ue]+" style=\"color:"+htmlFarbTableColorUber+"\">"+htmlFeld[ue]+"</td>")} 
                         else {let valButton="javascript." + instance + ".Tabellen@Liv."+dpVIS+".Spalte"+ue;
                          if(ue==htmlSpalte1Weite.length-1) {htmlTabUeber2=htmlTabUeber2.concat("<th width="+htmlSpalte1Weite[ue]+" align="+Feld1lAlign[ue]+">"+""+
                                                                        "<button class=\"myButt"+dpVIS+"\" style=\" border-radius: 4px; border:"+schalterUmrahmung+"px solid; background-color\: "+htmlBackgroundFarbeSeitenliste+"\; color: "
                                                                        +htmlFarbTableColorUber+"; font-family: "+htmlSchriftart+"; font-size :"+groesseUeberschrift+"px; text\-align:left\" value=\"toggle\" onclick=\"setOnOtherValue\(\'"+valButton+"\')\">"
                                                                        +htmlFeld[ue]+"</button>"+" <font style=\"; font-weight: normal; font-size :"+groesseUeberschrift+"; color: "+htmlFarbTableColorUber+"; font-family: "+htmlSchriftart+";\" > &ensp;&ensp;&ensp;&ensp;("+aktiv+"\/"+(aktiv+inaktiv)+")</th>")} else{
                                             htmlTabUeber2=htmlTabUeber2.concat("<th width="+htmlSpalte1Weite[ue]+" align="+Feld1lAlign[ue]+">"+""
                                                                         +"<button class=\"myButt"+dpVIS+"\" style\=\" border-radius: 4px; border:"+schalterUmrahmung+"px solid; background-color\: "+htmlBackgroundFarbeSeitenliste+"\; color: "
                                                                         +htmlFarbTableColorUber+"; font-family: "+htmlSchriftart+"; font-size :"+groesseUeberschrift+"px; text-align:left\" value=\"toggle\" onclick=\"setOnOtherValue\(\'"+valButton+"\')\">"
                                                                         +htmlFeld[ue]+"</button></th>")} } //symbolSchalter[ue]   
                            }
      let testing="<td  style=\" background-color: "+htmlBackgroundFarbeSeitenliste+"; margin-top: 200px; color: "+htmlFarbSeiteSchrift+ ";font-size:"+schriftGroesseSeitenleiste+"px; vertical-align:top; text-align:center \" width=\""+breiteSeitenleiste+"\" rowspan=\""+(langeGesamt+1)+"\">"+seitenLeistenTest+"</td>"
      let testing2="<td  style=\" background-color: "+htmlBackgroundFarbeSeitenliste+"; margin-top: 200px; color: "+htmlFarbSeiteSchrift+ ";font-size:"+schriftGroesseSeitenleiste+"px; vertical-align:top; text-align:center \" width=\""+((((Number(breiteSeitenleiste))/8).toFixed(0)))+"\" rowspan=\""+(langeGesamt+1)+"\">"+seitenLeistenTest+"</td>"
      let  htmlTabUeber2_1=""
      for (let ue=0;ue<htmlSpalte1Weite.length;ue++) { let valButton="javascript." + instance + ".Tabellen@Liv."+dpVIS+".Spalte"+ue;
         if(ue==htmlSpalte1Weite.length-1) {htmlTabUeber2_1=htmlTabUeber2_1.concat("<td width="+htmlSpalte1Weite[ue]+" align="+Feld1lAlign[ue]+">"+""
                                                                         +"<button class=\"myButt"+dpVIS+"\" style\=\" border-radius: 4px; border:"+schalterUmrahmung+"px solid; background-color\: "+htmlBackgroundFarbeSeitenliste+"\; color: "
                                                                         +htmlFarbTableColorUber+"; font-family: "+htmlSchriftart+"; font-size :"+groesseUeberschrift+"px; text-align:left\" value=\"toggle\" onclick=\"setOnOtherValue\(\'"+valButton+"\')\">"
                                                                         +htmlFeld[ue]+"</button></td>"+testing)}
         else{ if(ue==0){htmlTabUeber2_1=htmlTabUeber2_1.concat(testing2+"<td width="+htmlSpalte1Weite[ue]+" align="+Feld1lAlign[ue]+">"+""
                                                                         +"<button class=\"myButt"+dpVIS+"\" style\=\" border-radius: 4px; border:"+schalterUmrahmung+"px solid; background-color\: "+htmlBackgroundFarbeSeitenliste+"\; color: "
                                                                         +htmlFarbTableColorUber+"; font-family: "+htmlSchriftart+"; font-size :"+groesseUeberschrift+"px; text-align:left\" value=\"toggle\" onclick=\"setOnOtherValue\(\'"+valButton+"\')\">"
                                                                         +htmlFeld[ue]+"</button></td>")
      
      
         } else{
          htmlTabUeber2_1=htmlTabUeber2_1.concat("<td width="+htmlSpalte1Weite[ue]+" align="+Feld1lAlign[ue]+">"+""
                                                                         +"<button class=\"myButt"+dpVIS+"\" style\=\" border-radius: 4px; border:"+schalterUmrahmung+"px solid; background-color\: "+htmlBackgroundFarbeSeitenliste+"\; color: "
                                                                         +htmlFarbTableColorUber+"; font-family: "+htmlSchriftart+"; font-size :"+groesseUeberschrift+"px; text-align:left\" value=\"toggle\" onclick=\"setOnOtherValue\(\'"+valButton+"\')\">"
                                                                         +htmlFeld[ue]+"</button></td>")}}  }
      

      da_Woody 1 Reply Last reply Reply Quote 0
      • da_Woody
        da_Woody @liv-in-sky last edited by

        @liv-in-sky laola.gif funzt!
        zeile 53 muss dann noch auf

        const trennungsLinie="0";
        

        umgefummelt werden. gibt sonst seltsamen strich... klugscheiss.gif

        liv-in-sky 1 Reply Last reply Reply Quote 0
        • liv-in-sky
          liv-in-sky @da_Woody last edited by

          @da_woody

          dnke - habe es im mainscript abgefragt und damit automatisch bei "0" wenn seitenleiste ist ein

          da_Woody 1 Reply Last reply Reply Quote 0
          • da_Woody
            da_Woody @liv-in-sky last edited by

            @liv-in-sky highfive.gif bin ja auch nur draufgekommen weil ich da ja schon von 1px auf 2px geändert hab...

            1 Reply Last reply Reply Quote 0
            • liv-in-sky
              liv-in-sky @dos1973 last edited by liv-in-sky

              @dos1973
              @ ALL

              suche tester

              • erste zeile ist fest
              • suchleiste

              AApossis (22).gif

               //@liv-in-sky 2021  14.3.-10:11
              
              // DAS WIDGET IN DER VIS
              // das Standard html-Widget wird genutzt in der VIS - dazu den DP javascript.x.Tabellen@Liv.TestTabelleVIS.HTMLTableVis als binding angeben d.h.
              // im html-teil des widgets wird dier daten punkt in geschweiften klammern angegeben z.B. {javascript.0.Tabellen@Liv.TestTabelleVIS.HTMLTableVis}
              
              // @ts-ignore
              let braucheEinVISWidget=true;                          // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
              let  dpVIS="ShellyTabelleVIS"                            // WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  Ist der Name zum datenpunkt anlegen
              let braucheEinJSON=false;                               // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
              let  dpJSON="ShellyTabelleJSON"                          // WICHTIG wenn braucheEinJSON auf true gesetzt !!   Ist der Name zum datenpunkt anlegen
              let mySchedule="  */15 * * * * ";                         // jede minute  
              
              //ZUSÄTZLICH VARIABLEN
              
              let sortierenEIN=true;
              let farbeInaktiverShelly="#5590CA"
              let welcheSortierung=2;          // je nach spalte von 0 bis 6
              let geteiteVersionsAnzeige=true; // version in spalte 7 wird 2-zeilig
              const schalterUmrahmung="0"                              //wenn überschriften buttons sind , den rahmen mit 0 wegmachen 
              let mitSerch=true;
              
              
              //---------------------------------------
              
              //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3 - es MÜSSEN in allen Arrays die GLEICHE Anzahl für die Werte sein
              let htmlFeld=        ["NAME","IP","ONLINE","UPTIME","RSSI","ID","VERSION"];              // GLEICHE ANZAHL !! NAME/ÜBERSCHRIFT DER SPALTE
              let val=             ["true","true","true","true","true","true","true"];                 // GLEICHE ANZAHL !! SPALTE ANZEIGEN/AUSBLENDEN UND HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WERDEN -  jeder val[x] muss unten in der schleife gesetzt werden !!
              let Feld1lAlign=     ["left","center","center","center","center","left","left"];         // GLEICHE ANZAHL !! AUSRICHTUNG IN DER SPALTE
              let htmlSpalte1Weite=["0px","0px","0px","0px","0px","0px","0px"];                        // GLEICHE ANZAHL !! BREITE DER SPALTE, wenn "0px" auto
              let schalterInSpaltenUeberschrift=[true,true,true,true,true,true,true];                  // WENN BUTTONS INSTALLIERT WERDEN - sonst false
              let symbolSchalter=              ["na","&check;","&cross;"];        //ONLINE SYMBOLE         // SYMBOLE DER BUTTONS - standardmäßig sind die spaltennamen (htmlFeld) genutzt - werden im standard nicht genutzt
              //-----------------------------------
              
              //Symbole für Tabelle z.b.: ⚪  ⚫ ⭕  🔴 🔵 ⏱ 💀 👍 👎 📑 💲 👀 🔹 ✅ ❌ ⚠️ mehr: https://emojiterra.com/de/ oder https://unicode-table.com/de/html-entities/
              
              //hier werden die styles für die tabelle definiert
              //ÜBERSCHRIFT ÜBER TABELLE
              const htmlUberschrift=true;                             // mit Überschrift über der tabelle
              const htmlSignature=true;                               // anstatt der Überscghrift eine signature: - kleiner - anliegend
              const htmlFeldUeber='Shelly Übersicht';                // für Überschrift und Signature falls htmlUberschrift und htmlSignature ist true
              const htmlFarbUber="white";                              // Farbe der Überschrift
              const htmlSchriftWeite="normal";                         // bold, normal - Fettschrift für Überschrift
              const htmlUEberFontGroesse="18px";                       // schriftgröße überschrift
              //SEITENLEISTE
              const ichWillSeitenLeiste=true;                          // links einblenden einer Seitenleiste
              const nameSeitenLeiste="SHELLY"
              const breiteSeitenleiste=35;
              const schriftGroesseSeitenleiste=18;
              const abstandSeitentextVonOben=4;
              const htmlFarbSeiteSchrift="white";
              const htmlBackgroundFarbeSeitenliste="blue";
              //BUTTON ÜBERSCHRIFT
              const htmlBackgroundButtonUeberschrift="transparent";
              //SUCHE
              const sucheEin=true;
              const sucheHoehe=30;
              //MEHRERE TABELLEN NEBENEINANDER
              let mehrfachTabelle=1;                                   // bis zu 3 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3 !!!
              const trennungsLinie=1;                                // extra trennungslinie bei mehrfachtabellen - evtl auf 0 stellen, wnn htmlRahmenLinien auf none sind
              const farbetrennungsLinie="#5590CA";                     // bei mehreren Tabellen nebeneinander wird ein Strich zw. den Tabellen gezogen
              const htmlFarbTableColorUber="white"                     // Spalten-Überschrift in der tabelle - für die einzelnen Spalten //"#BDBDBD"; 
              const htmlFarbZweiteTabelle="white";                     // Farbe der Spalten-Überschrift bei jeder 2.ten Tabelle        
              //ÜBERSCHRIFT SPALTEN - OBERSTE ZEILE IN TAB
              const UeberSchriftHoehe=40;                            // Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe
              const LinieUnterUeberschrift="1";                        // Liniehoehe nur unter Spaltenüberschrift  
              const farbeLinieUnterUeberschrift="blue";               // LinienFarbe unter Spaltenüberschrift
              const groesseUeberschrift=16; 
              const UeberschriftStyle="normal"                         // möglich "bold"
              const UeberschriftSpalten=true;                          // ein- oder ausblenden der spatlen-überschriften
              //GANZE TABELLE
              const abstandZelle="7";                                  // legt den abstand in den zellen zum rahmen fest
              const zeilenAbstand=40;                                   // legt den abstand zwischen den zeilen fest
              const farbeUngeradeZeilen="#2F2F2F";                     // Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2 - bei "transparent" gewinnt htmlFarbTableColorGradient1
              const farbeGeradeZeilen="#3c3c3c"//"#151515";            // Farbe für gerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2   - bei "transparent" gewinnt htmlFarbTableColorGradient2
              let weite="1000";                                        // Weite der Tabelle - verhindert das dynamische breiter werden, wenn werte unterschiedliche werte haben
              let hoeheTabelle=387;
              const zentriert=true;                                    // ganze tabelle zentriert im html Widget - muss in pixel angegeben werden oder "auto"
              const backgroundAll="#000000";                           // Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
              const htmlSchriftart="Ubuntu-Regular"                    // "Jura-DemiBold"   //"RobotoCondensed-Bold"   //"Helvetica"; .....
              const htmlSchriftgroesse="16px";                         // schriftgröße in den zellen
              const rahmenBreite="1px";                                //mit 0 ist äußerer rahmen weg
              //FELDER UND RAHMEN
              const htmlFarbFelderschrift="#CBCBCA";                   // SchriftFarbe der Felder
              const htmlFarbFelderschrift2="#CBCBCA";                  // SchriftFarbe der Felder für jede 2te Tabelle
              const htmlGragient=[150,30,70];                          // einstellung des gradienten
              const htmlFarbTableColorGradient1="#265686";             // Gradient - Hintergrund der Tabelle - Verlauffarbe
              const htmlFarbTableColorGradient2="#5590CA";              // Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
              const htmlFarbTableBorderColor="grey";                   // Farbe des Rahmen - ist dieser gleich den gradienten, sind die rahmen unsichtbar
              let htmlRahmenLinien="none";                             // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
              
              // falls eine extra html datei gebraucht wird
              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
              
              // AB HIER NICHTS  ÄNDERN -------------------------------------------------------------------------------------------------
              // AB HIER NICHTS  ÄNDERN -------------------------------------------------------------------------------------------------
              // AB HIER NICHTS  ÄNDERN ---------------------------------erst wieder ab Zeile 134----------------------------------------
              
              let borderHelpBottum;
              let borderHelpRight;
              let htmlcenterHelp;
              let htmlcenterHelp2;
              
              if(String(htmlRahmenLinien)=="rows") {borderHelpBottum=1;borderHelpRight=0;}
              if(String(htmlRahmenLinien)=="cols") {borderHelpBottum=0;borderHelpRight=1;}
              if(String(htmlRahmenLinien)=="none") {borderHelpBottum=0;borderHelpRight=0;}
              if(String(htmlRahmenLinien)=="all")  {borderHelpBottum=1;borderHelpRight=1;}
              zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
              zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";
              //px   
              let last
              let adad=0
              if(weite=="auto") {weite="100%"} // else{for (let i=0;i<htmlSpalte1Weite.length-1;i++){ adad=adad+Number(htmlSpalte1Weite[i].replace("px","")) ;log(" ### "+adad.toString())} 
                                   //last= Number(weite) -adad  ; log(last.toString())          }  
              
              
              //let hoeheTabelle2=hoeheTabelle-Number(UeberSchriftHoehe)-Number(trennungsLinie)
              let hoeheTabelleKorrigiert=hoeheTabelle+22                                               //border-spacing:"+abstandZelle+"px; padding:"+zeilenAbstand+"px;
              
                                            let trHelperClass=" ";
              for (let jj=0;jj<Feld1lAlign.length;jj++) {  //"td:nth-child(1) {width: "+htmlSpalte1Weite[0]+"}"+"td:nth-child(2) {width:"+htmlSpalte1Weite[1]+"}"+
                     trHelperClass= trHelperClass+ " .scrollContent"+dpVIS+" td"+":nth-of-type("+(jj+1)+") {width: "+htmlSpalte1Weite[jj]+"; text-align: "+Feld1lAlign[jj]+" }"
               }
               //log(trHelperClass)
              
              let bkgDiv=`background:
              radial-gradient(black 15%, transparent 16%) 0 0,
              radial-gradient(black 15%, transparent 16%) 8px 8px,
              radial-gradient(rgba(255,255,255,.1) 15%, transparent 20%) 0 1px,
              radial-gradient(rgba(255,255,255,.1) 15%, transparent 20%) 8px 9px;
              background-color:#282828;
              background-size:16px 16px;`;
              
              let scrollBar=` .thescroller${dpVIS}::-webkit-scrollbar { width: 5px;}
              .thescroller${dpVIS}::-webkit-scrollbar-track {background: transparent; width: 5px;}
              .thescroller${dpVIS}::-webkit-scrollbar-thumb {border-radius: 40px; border: transparent ; background: ${htmlFarbTableColorGradient1}; }`
              
              let htmlZentriert=   "<style>"+
                         /*weite*/          " .divWeiten"+dpVIS+" {  width: "+weite+"px }"+
                         /*thead*/          " .fixedHeader"+dpVIS+" { position: sticky; top: 0px ; overflow-y:auto; overflow-x: hidden; width: 100%;  height: "+UeberSchriftHoehe+"px; border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+";"+
                                                            " font-family:"+htmlSchriftart+"\;  color:"+htmlFarbTableColorUber+"; "+  //  border-spacing:"+abstandZelle+"px;
                                                            " font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+";  background-image: linear-gradient("+htmlGragient[0]+"deg,"+htmlFarbTableColorGradient2+" "+htmlGragient[1]+"%,"+htmlFarbTableColorGradient1+" "+htmlGragient[2]+"%); }"+ //
                         /*tbody */         " .scrollContent"+dpVIS+" { width: 100%;  overflow-y: scroll;   }"+ // height: "+hoeheTabelle2+"px; 
                         /*div*/            " .tableContainer"+dpVIS+" {  display: flex;  height: "+hoeheTabelle+"px; width: "+weite+"px; overflow-y:auto; overflow-x: hidden ; "
                                                                       +bkgDiv+" }"+  // position: sticky; top: 0; background-color: black;
                         /*seitenl*/        " .seitenleiste"+dpVIS+" { background-image: linear-gradient("+htmlGragient[0]+"deg,"+htmlFarbTableColorGradient2+" "+htmlGragient[1]+"%,"+htmlFarbTableColorGradient1+" "+htmlGragient[2]+"%); color: " //background-color: "+htmlBackgroundFarbeSeitenliste+";
                                                                       +htmlFarbSeiteSchrift+ ";font-size:"+schriftGroesseSeitenleiste+"px; vertical-align:top; text-align:center; width: "+breiteSeitenleiste+"px}"+  //margin-top: 30px;
                                            " .flexContainer"+dpJSON+" {display: flex; width: "+weite+"px}"+                        
                         /*table*/          " .tablezusatz"+dpVIS+" {  border:"+rahmenBreite+";  "+  //table-layout: fixed;
                                                           "width:100%; color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+";"+
                                                           "font-family:"+htmlSchriftart+"; background-image: linear-gradient("+htmlGragient[0]+"deg,"+htmlFarbTableColorGradient2+" "+htmlGragient[1]+"%,"+htmlFarbTableColorGradient1+" "+htmlGragient[2]+"%); }"+
                                            " .mythclass0"+dpVIS+" {    }"+  //text-align:"+Feld1lAlign[0]+"
                                            " .mythclass1"+dpVIS+" {   }"+
                                            " .mythclass2"+dpVIS+" {   }"+
                                            " .mythclass3"+dpVIS+" {  }"+
                                            " .mythclass4"+dpVIS+" {  }"+
                                            " .mythclass5"+dpVIS+" {  }"+
                                            " .mythclass6"+dpVIS+" {   }"+ //
                                          //  " table head tr {  position: sticky; top: 0px ;  }"+ // 
                                          //  " th {position: sticky; top: 0px ; height: "+UeberSchriftHoehe+"px; background-image: linear-gradient("+htmlGragient[0]+"deg,"+htmlFarbTableColorGradient2+" "+htmlGragient[1]+"%,"+htmlFarbTableColorGradient1+" "+htmlGragient[2]+"%); }"+  //position: sticky; top: 0px ;
                                            " .myclassueber_spalte_button     {color:"+htmlFarbTableColorUber+"}"+
                                            " .myclassueber_spalte_ohne_button{color:"+htmlFarbTableColorUber+"}"+
                                            " .scrollContent"+dpVIS+" td {padding: "+abstandZelle+"px;}"+
                                            " .myTHclass"+dpVIS+" {position: sticky; top: 0px ; height: "+UeberSchriftHoehe+"px; background-image: linear-gradient("+htmlGragient[0]+"deg,"+htmlFarbTableColorGradient2+" "+htmlGragient[1]+"%,"+htmlFarbTableColorGradient1+" "+htmlGragient[2]+"%);}"+
                                            " .myTRclass"+dpVIS+" {}"+
                                            " .myclasstr_gerade"+dpVIS+" { height:"+zeilenAbstand+"px; background-color:"+farbeGeradeZeilen+"}"+  //border-spacing:"+abstandZelle+"px; 
                                            " .myclasstr_ungerade"+dpVIS+" {  height:"+zeilenAbstand+"px;  background-color:"+farbeUngeradeZeilen+"}"+ //border-spacing:"+abstandZelle+"px;
                                            " .myclasstd_normal"+dpVIS+" {}"+
                                            " .myclasstd_trennungslinie"+dpVIS+" {}"+
                                            " .myinputclass"+dpVIS+" {width: "+weite+"px; border: 1px solid; border-color: "+htmlFarbTableColorGradient2+"; margin-bottom: 15px;  color: "+htmlFarbTableColorUber+
                                                                     "; height: "+sucheHoehe+"px; background-image: linear-gradient("+htmlGragient[0]+"deg,"+htmlFarbTableColorGradient2+" "+htmlGragient[1]+"%,"+htmlFarbTableColorGradient1+" "+
                                                                     htmlGragient[2]+"%); font-family:"+htmlSchriftart+"\; font-size: 110%; color: "+htmlFarbTableColorUber+"}"+
                                         trHelperClass+scrollBar+
                                       //     " .thescroller"+dpVIS+"::-webkit-scrollbar {width: 0px; }"+
                                            "</style>"+'<center>'
              
              
              
              
              
              const htmlStart=    "<!DOCTYPE html><html lang=\"de\"><head><title>Vorlage</title><meta http-equiv=\"content-type\" content=\"text/html;  http-equiv=\"refresh\" content=\"30\"; charset=utf-8\">"+
                                 "<style> * {  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[0]+"}"+"td:nth-child(2) {width:"+htmlSpalte1Weite[1]+"}"+
                                 " </style></head><body> <div>";
              //const htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\">"+htmlFeldUeber+"</p>";   
              
                let einmalAbstand=`</br>
              `
               let seitenLeistenTest="";
               for (let f=0;f<abstandSeitentextVonOben;f++){ 
                   seitenLeistenTest=seitenLeistenTest+`<br>
              `}
               for (let i=0;i<nameSeitenLeiste.length;i++){
                   seitenLeistenTest=seitenLeistenTest+nameSeitenLeiste[i]+`<br>
              `
              }
              
               let htmlSeitenleiste="";
               if (ichWillSeitenLeiste) htmlSeitenleiste= "<div class=\"flexContainer"+dpJSON+"\"> <div class=\"seitenleiste"+dpVIS+"\">"+seitenLeistenTest+"</div>" ;// htmlTabUeber1=htmlTabUeber1+
              let searchMe="";
              sucheEin ? searchMe="<div class=\"divWeiten"+dpVIS+"\"><input class=\"myinputclass"+dpVIS+"\" type=\"search\" id=\"search"+dpVIS+"\" placeholder=\"Filter by Title\""+">"+"</div>" :
                         searchMe=""     
              searchMe=searchMe+htmlSeitenleiste
              let htmlTabStyle= "<div class=\"tableContainer"+dpVIS+" thescroller"+dpVIS+"\" >"+
                                 "<table class=\"tablezusatz"+dpVIS+"\" rules=\""+htmlRahmenLinien+"\">"+
                                 "<thead class=\"fixedHeader"+dpVIS+"\">"
                               //  "<table class=\"tablezusatz"+dpVIS+"\" bordercolor=\""+htmlFarbTableBorderColor+"\" border=\""+rahmenBreite+"\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+zeilenAbstand+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+
                               //     "; font-family:"+htmlSchriftart+";background-image: linear-gradient("+htmlGragient[0]+"deg,"+htmlFarbTableColorGradient2+" "+htmlGragient[1]+"%,"+htmlFarbTableColorGradient1+" "+htmlGragient[2]+"%);\"><thead class=\"fixedHeader"+dpVIS+"\">";
              
              let htmlTabUeber4="<tr class=\"myTRclass"+dpVIS+"\">";
              //let htmlTabUeber4="<tr cellspacing=\""+abstandZelle+"\" font-family:\""+htmlSchriftart+"\"  height:"+UeberSchriftHoehe+"px; color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \">";
              const htmlTabUeber3="</tr></thead><tbody class=\"scrollContent"+dpVIS+"\" > ";
              
                 let valSpalte=[] ;
                 for(let kk=0;kk<val.length;kk++){
                   valSpalte.push(val[kk])
                 }
              
                 let spaltenAnzeigeScript=`$(document).ready(function() { `
                 let spaltenAnzeigeScriptEnd=` });` ;
              for (let ff=0;ff<valSpalte.length;ff++){
                                                     // log(valSpalte[ff]); 
                                                      if (valSpalte[ff]=="false") { 
                                                       ichWillSeitenLeiste?   spaltenAnzeigeScript=spaltenAnzeigeScript.concat(`$('td:nth-child(${(ff)+1}).toDel${dpVIS},th:nth-child(${(ff)+2}).toDel${dpVIS}').hide();`) :
                                                                              spaltenAnzeigeScript=spaltenAnzeigeScript.concat(`$('td:nth-child(${(ff)+1}).toDel${dpVIS},th:nth-child(${(ff)+1}).toDel${dpVIS}').hide();`) }
                                                      }
              
              const buttonScript =   '<script> function setOnOtherValue(myval) {	var Self = this;	Self.servConn.getStates(myval, (error, states) => {  console.log(states); self.servConn.setState(myval, !states[myval].val);}  )}; '
                                   +'$( "button" ).click(function() {  $( this ).slideUp() });' //'[class*="test"]' [class~="value"]   "[class~='gerade']"
                                   + `var allRows = $("[class*='gerade${dpVIS}']");  $("input#search${dpVIS}").on("keydown keyup", function() {  allRows.hide();  $("tr:contains('" + $(this).val() + "')").show();});`
                                   +   spaltenAnzeigeScript  +  spaltenAnzeigeScriptEnd  
                                   +'</script>'
              
              let aktiv=0; let inaktiv=0;
              
              
              let  htmlTabUeber2_1=""
              for (let ue=0;ue<htmlSpalte1Weite.length;ue++) { htmlTabUeber2_1=htmlTabUeber2_1.concat("<td style=\"color:"+htmlFarbZweiteTabelle+"\">"+htmlFeld[ue]+"</td>")}
              
              //------------------------------------------------------
              if ( !(val.length == Feld1lAlign.length && htmlSpalte1Weite.length == htmlFeld.length && val.length == htmlFeld.length) || (mehrfachTabelle<1 || mehrfachTabelle>3) ) 
                   { log("Anzahle der Definitions Arrays sind ungleich ODER mehrfachTabelle ist falsch - Script wurde gestoppt !!!","error");
                       // @ts-ignore
                       stopScript();}
              
              let langeGesamt=0; 
              let htmlTabUeber="";
              let htmlOut="";
              let mix;
              let counter;
              let makeJsonWidget;
              let myObject=[];
              
              let mitAlphabet=false;
              
              needDP();
              
              function writeHTML(){
                  aktiv=0;  inaktiv=0;
              let seitenLeistenTest="";
              let htmlTabUeber1=htmlTabUeber4
              myObject=[]
              let helperLeerzeile=""
              let makeJsonWidget=[];
              htmlOut="";
              counter=-1;
              
              //--------------------------------------------------------------------------------------------------------------------------------------------------
              //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
              //---------alle val[x] werte müssen von euch bestimmt werden - val[0],val[1],val[2] !!!-------------------------------------------------------------
              //--------------------------------------------------------------------------------------------------------------------------------------------------
              
              let valueuptime
              
              $('shelly.*.*.name').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                   
              
              
                        var ida = id.split('.');
                   
                     //   if(existsState(id) && existsState(id.replace("alive","uptime"))) {
              
                        getState(id).val!=null &&  getState(id).val!="" && getState(id).val!=undefined ?val[0]=getState(id).val : val[0]=" --- ";
                       
                       if (existsState(id.replace("name","hostname"))) val[1]=getState(id.replace("name","hostname")).val;
                       if (existsState(id.replace("name","online"))) val[2]=getState(id.replace("name","online")).val;
                       if (existsState(id.replace("name","uptime"))) val[3]=getState(id.replace("name","uptime")).val;
                       valueuptime=(Number(val[3].replace(/.*?([0-9][0-9]?)\:.*/,"$1"))*60*60)+
                                        (Number(val[3].replace(/.*?[0-9][0-9]?\:([0-9][0-9]?)\:.*/,"$1"))*60)+
                                        (Number(val[3].replace(/.*?[0-9][0-9]?\:[0-9][0-9]?\:([0-9][0-9]?).*/,"$1")))
                                     //   log(typeof val[3].replace(/^(.+)D.+/,"$1"))
                                        if( !val[3].replace(/^(.+)D.+/,"$1").includes(":")) valueuptime=valueuptime+Number(val[3].replace(/^(.+)D.+/,"$1"))*24*60*60
                                       // log(valueuptime.toString()+"  ----" +val[3].replace(/^(.+)D.+/,"$1"))
              
                       if (existsState(id.replace("name","rssi"))) val[4]=getState(id.replace("name","rssi")).val;
                       if (existsState(id.replace("name","id"))) val[5]=getState(id.replace("name","id")).val;
              
                       if (existsState(id.replace("name","version"))) val[6]=getState(id.replace("name","version")).val;                   
                   
              
                      myObject.push({                "value0" : val[0],            //  "INSTANCE"
                                                     "value1" : val[1],            //  "SINCE"
                                                     "value2" : val[2],            //  "STATUS"
                                                     "value3" : val[3],            //  "INSTANCE"
                                                     "value4" : val[4],            //  "SINCE"
                                                     "value5" : val[5],
                                                     "value6":  val[6],
                                                     "valueuptime": valueuptime
                                                        //   ID
                                                                     })
                             
                        makeJsonWidget.push({        [htmlFeld[0]] : val[0],  //  "INSTANCE"
                                                     [htmlFeld[1]] : val[1],  //  "SINCE"
                                                     [htmlFeld[2]] : val[2],   //  "STATUS"
                                                     "vallly"      : getState(id).val
                                                                     })  
                      
                        
                       
                                                               // diese function muss als letztes in der eigenen schleife aufgerufen werden
                 });                                            // Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!
              
                // Sortierungen---------------------------------------------------------
                //welcheSortierung=3
                
               
                if( sortierenEIN && (welcheSortierung==3 || welcheSortierung==4 || welcheSortierung==1)    ) {
                           if(welcheSortierung==3) myObject.sort(function (alpha, beta) { return  Number(beta["value4"]) -Number(alpha["value4"]);   }); 
                           if(welcheSortierung==4) myObject.sort(function (alpha, beta) { /*log(beta.valueuptime+" --" +alpha.valueuptime);*/ return  beta.valueuptime -alpha.valueuptime;   });
                           if(welcheSortierung==1)   myObject.sort( function( a, b )   {
                                                       	a = a["value1"].split( '.' );
                                                       	b = b["value1"].split( '.' );
                                                     	for( var i = 0; i < a.length; i++ )	{
                 	                                 	if( ( a[i] = parseInt( a[i] ) ) < ( b[i] = parseInt( b[i] ) ) )
                 	                         		return -1;	else if( a[i] > b[i] )
                 	                            	return 1;}  	return 0;} );                                      
              
                           } else {
                  switch (welcheSortierung) {
                     case 0: sortMe("alpha","value0");break;  
                     case 1: break;
                     case 2: sortMe("bool","value2");break;  
                     case 3: break;  
                     case 4: break;  
                     case 5: sortMe("alpha","value5");break; 
                     case 6: sortMe("alpha","value6");break;
                  }   }
              
                 for(let zz=0;zz<myObject.length;zz++){
              
               // Unterüberschften ------------------------------------------------------       
                      if (mitAlphabet){
                        if( myObject[zz].value0[0]!=helperLeerzeile){ tabelleAusbessern();
                                                                      counter=-1;  for(let ic=0;ic<mehrfachTabelle;ic++ ) { for (let tt=0 ;tt<val.length;tt++) 
                                                                                                                                { tt==0 && ic==0 ? val[tt]=(myObject[zz].value0[0]).toUpperCase() : val[tt]="&ensp;"
                                                                                                                                }   
                                                                                                                            counter++;tabelleBind();langeGesamt++; }
                        helperLeerzeile=myObject[zz].value0[0] } ; sortierenEIN=false;}
              
               // Zuteilung der Tabellenspalten-------------------------------------------
              
                  val[0]=myObject[zz].value0;
                  val[1]=myObject[zz].value1;
                  val[2]=myObject[zz].value2;
                  let regH=myObject[zz].value3.trim().replace(/^(.+)[C-E].+?$/,"$1 d")
                  if(regH.includes(":")) regH="";
                  //log(myObject[zz].value3.replace(reg,"$1 d"))
                  geteiteVersionsAnzeige ? val[3]=( (myObject[zz].value3.replace(/.+D(.+)/,"$1"))+"</br>"+regH)  :  val[3]=myObject[zz].value3.replace(/(.+D)(.*)/,"$2 +$1");
                  val[4]=myObject[zz].value4+" dB";
                  val[5]=myObject[zz].value5;
                  geteiteVersionsAnzeige ? val[6]=myObject[zz].value6.replace(/^(.+?)\/(.+)/,"$1</br>$2")  : val[6]=myObject[zz].value6;  
                  
              
                  
                 if (!myObject[zz].value2) {val[2]=symbolSchalter[2];inaktiv++}
                  if (myObject[zz].value2)  {val[2]=symbolSchalter[1];aktiv++}
                 //  if(getState("javascript." + instance +".Tabellen@Liv."+dpVIS+".Spalte2").val) { val[2]=myObject[zz].value2} 
                  if (!myObject[zz].value2) {     val[0]="<font color=\""+farbeInaktiverShelly +"\">"+val[0]+"</font>";
                                                 val[1]="<font color=\""+farbeInaktiverShelly +"\">"+val[1]+"</font>";
                                                 val[2]="<font color=\""+farbeInaktiverShelly +"\">"+val[2]+"</font>";
                                                 val[3]="<font color=\""+farbeInaktiverShelly +"\">"+val[3]+"</font>";
                                                 val[4]="<font color=\""+farbeInaktiverShelly +"\">"+val[4]+"</font>";
                                                 val[5]="<font color=\""+farbeInaktiverShelly +"\">"+val[5]+"</font>";
                                                 val[6]="<font color=\""+farbeInaktiverShelly +"\">"+val[6]+"</font>";
              
                                            }  
                   counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                   tabelleBind();                                   // HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  
                   langeGesamt++;                                   // WICHTIG Seitenleiste
                 }
              
              //-------------------------------------------------------------------------------------------------------------------------------------------------
              //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
              //-------------------------------------------------------------------------------------------------------------------------------------------------
              
              // Seitenleiste------------------------------------------------------------   
                let htmlTabUeber2=""
                
              let langeSpalten=htmlSpalte1Weite.length;
              for (let ue=0;ue<htmlSpalte1Weite.length;ue++) { if (!schalterInSpaltenUeberschrift[ue] ) { 
                                 htmlTabUeber2=htmlTabUeber2.concat("<td  style=\"color:"+htmlFarbTableColorUber+"\">"+htmlFeld[ue]+"</td>")} 
                                 else {let valButton="javascript." + instance + ".Tabellen@Liv."+dpVIS+".Spalte"+ue;
                                  if(ue==htmlSpalte1Weite.length-1) {htmlTabUeber2=htmlTabUeber2.concat("<th class=\"myTHclass"+dpVIS+" toDel"+dpVIS+"\" >"+
                                                                                "<button class=\"myButt"+dpVIS+"\" style=\" border-radius: 4px; border:"+schalterUmrahmung+"px solid; background-color\: "+htmlBackgroundButtonUeberschrift+"\; color: "
                                                                                +htmlFarbTableColorUber+"; font-family: "+htmlSchriftart+"; font-size :"+groesseUeberschrift+"px; text\-align:left\" value=\"toggle\" onclick=\"setOnOtherValue\(\'"+valButton+"\')\">"
                                                                                +htmlFeld[ue]+"</button>"+" <font style=\"; font-weight: normal; font-size :"+groesseUeberschrift+"; color: "+htmlFarbTableColorUber+"; font-family: "+htmlSchriftart+";\" > &ensp;&ensp;&ensp;&ensp;("+aktiv+"\/"+(aktiv+inaktiv)+")</th>")} else{
                                                     htmlTabUeber2=htmlTabUeber2.concat("<th class=\"myTHclass"+dpVIS+" toDel"+dpVIS+"\">"+""
                                                                                 +"<button class=\"myButt"+dpVIS+"\" style\=\" border-radius: 4px; border:"+schalterUmrahmung+"px solid; background-color\: "+htmlBackgroundButtonUeberschrift+"\; color: "
                                                                                 +htmlFarbTableColorUber+"; font-family: "+htmlSchriftart+"; font-size :"+groesseUeberschrift+"px; text-align:left\" value=\"toggle\" onclick=\"setOnOtherValue\(\'"+valButton+"\')\">"
                                                                                 +htmlFeld[ue]+"</button></th>")} } //symbolSchalter[ue]   
                                    }
              let testing="<td  style=\" background-color: "+htmlBackgroundButtonUeberschrift+"; margin-top: 200px; color: "+htmlFarbSeiteSchrift+ ";font-size:"+schriftGroesseSeitenleiste+"px; vertical-align:top; text-align:center \" width=\""+breiteSeitenleiste+"\" rowspan=\""+(langeGesamt+1)+"\">"+seitenLeistenTest+"</td>"
              let testing2="<td  style=\" background-color: "+htmlBackgroundButtonUeberschrift+"; margin-top: 200px; color: "+htmlFarbSeiteSchrift+ ";font-size:"+schriftGroesseSeitenleiste+"px; vertical-align:top; text-align:center \" width=\""+((((Number(breiteSeitenleiste))/8).toFixed(0)))+"\" rowspan=\""+(langeGesamt+1)+"\">"+seitenLeistenTest+"</td>"
              let  htmlTabUeber2_1=""
              for (let ue=0;ue<htmlSpalte1Weite.length;ue++) { let valButton="javascript." + instance + ".Tabellen@Liv."+dpVIS+".Spalte"+ue;
                 if(ue==htmlSpalte1Weite.length-1) {htmlTabUeber2_1=htmlTabUeber2_1.concat("<td class=\""+"toDel"+dpVIS+"\">"+""
                                                                                 +"<button class=\"myButt"+dpVIS+"\" style\=\" border-radius: 4px; border:"+schalterUmrahmung+"px solid; background-color\: "+htmlBackgroundButtonUeberschrift+"\; color: "
                                                                                 +htmlFarbTableColorUber+"; font-family: "+htmlSchriftart+"; font-size :"+groesseUeberschrift+"px; text-align:left\" value=\"toggle\" onclick=\"setOnOtherValue\(\'"+valButton+"\')\">"
                                                                                 +htmlFeld[ue]+"</button></td>"+testing)}
                 else{ if(ue==0){htmlTabUeber2_1=htmlTabUeber2_1.concat(testing2+"<td class=\""+"toDel"+dpVIS+"\">"+""
                                                                                 +"<button class=\"myButt"+dpVIS+"\" style\=\" border-radius: 4px; border:"+schalterUmrahmung+"px solid; background-color\: "+htmlBackgroundButtonUeberschrift+"\; color: "
                                                                                 +htmlFarbTableColorUber+"; font-family: "+htmlSchriftart+"; font-size :"+groesseUeberschrift+"px; text-align:left\" value=\"toggle\" onclick=\"setOnOtherValue\(\'"+valButton+"\')\">"
                                                                                 +htmlFeld[ue]+"</button></td>")
              
              
                 } else{
                  htmlTabUeber2_1=htmlTabUeber2_1.concat("<td class=\"myButt"+dpVIS+"\">"+""
                                                                                 +"<button class=\"myButt"+dpVIS+"\" style\=\" border-radius: 4px; border:"+schalterUmrahmung+"px solid; background-color\: "+htmlBackgroundFarbeSeitenliste+"\; color: "
                                                                                 +htmlFarbTableColorUber+"; font-family: "+htmlSchriftart+"; font-size :"+groesseUeberschrift+"px; text-align:left\" value=\"toggle\" onclick=\"setOnOtherValue\(\'"+valButton+"\')\">"
                                                                                 +htmlFeld[ue]+"</button></td>")}}  }
              
               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_1+htmlTabUeber3; break;
                 case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                };   
                if (!UeberschriftSpalten) {htmlTabUeber=""}
              
                    tabelleFinish(); 
                    if (braucheEinJSON ) {setStateDelayed("javascript." + instance + ".Tabellen@Liv."+dpVIS+".JSONVis",JSON.stringify(makeJsonWidget),1000 )}
                   
              } // function ende
              
              //MAIN:
               
              schedule(mySchedule,  function () { 
               writeHTML();
               if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
              }); 
              setTimeout(function () {writeHTML();  }, 2050);                                 
              
               function tabelleBind(){
                
                 switch (mehrfachTabelle) { 
              
                 case 1: if(counter%2==0)   {htmlOut=htmlOut+"<tr class=\"myclasstr_gerade"+dpVIS+" \">";
                                             for(let u=0;u<val.length;u++){ htmlOut=htmlOut.concat("<td class=\"myclasstd_normal"+dpVIS+" toDel"+dpVIS+"\">"+val[u]+"</td>"); // style=\"width:"+htmlSpalte1Weite[u]+"\" 
                                                                          }  htmlOut=htmlOut.concat("</tr>");   break;
              
                                             } else   {htmlOut=htmlOut+"<tr class=\"myclasstr_ungerade"+dpVIS+" \">";
                                                       for(let u=0;u<val.length;u++){ htmlOut=htmlOut.concat("<td class=\"myclasstd_normal"+dpVIS+" toDel"+dpVIS+"\">"+val[u]+"</td>"); //style=\"width:"+htmlSpalte1Weite[u]+"\" 
                                                                                    }  htmlOut=htmlOut.concat("</tr>");   break;
                                             }
                 
                 case 2: if(counter%4==0){  if(counter%2==0)  {htmlOut = htmlOut+"<tr class=\"myclasstr_gerade"+dpVIS+" \">";
                                                               for(let u=0;u<val.length;u++){ if(u<val.length-1) {htmlOut=htmlOut.concat("<td class=\"myclasstd_normal"+dpVIS+" toDel"+dpVIS+"\">"+val[u]+"</td>");} else
                                                                                            {htmlOut=htmlOut.concat("<td class=\"myclasstd_trennungslinie"+dpVIS+"\" style=\" border-right:"+trennungsLinie+"px solid "+farbetrennungsLinie+ ";\">"+val[u]+"</td>")}
                                                                                            }  
                                                                                         
                                              } else { for(let u=0;u<val.length;u++){ htmlOut=htmlOut.concat("<td class=\"myclasstd_normal"+dpVIS+" toDel"+dpVIS+" toDel"+dpVIS+"\" style=\"color:"+htmlFarbFelderschrift2+"\">"+val[u]+"</td>");
                                                                                    }  htmlOut=htmlOut.concat("</tr>");  } break;
                                         } else {
                                           if(counter%2==0)  {htmlOut=htmlOut+"<tr class=\"myclasstr_ungerade"+dpVIS+" \">";
                                                              for(let u=0;u<val.length;u++){  if(u<val.length-1) {htmlOut=htmlOut.concat("<td class=\"myclasstd_normal"+dpVIS+" toDel"+dpVIS+"\">"+val[u]+"</td>");} else
                                                                                           {htmlOut=htmlOut.concat("<td class=\"myclasstd_trennungslinie"+dpVIS+" toDel"+dpVIS+"\" style=\" border-right:"+trennungsLinie+"px solid "+farbetrennungsLinie+ ";\">"+val[u]+"</td>")}
                                                                                           }  
                                              } else {        for(let u=0;u<val.length;u++){ htmlOut=htmlOut.concat("<td class=\"myclasstd_normal"+dpVIS+" toDel"+dpVIS+"\" style=\"color:"+htmlFarbFelderschrift2+"\">"+val[u]+"</td>");
                                                                                           }  htmlOut=htmlOut.concat("</tr>");  }  break;}
              
                 case 3: if(counter%2==0)  {  if(counter%3==0 ) {htmlOut = htmlOut+"<tr class=\"myclasstr_gerade"+dpVIS+" \">";
                                                                 for(let u=0;u<val.length;u++){if(u<val.length-1) {htmlOut=htmlOut.concat("<td class=\"myclasstd_normal"+dpVIS+" toDel"+dpVIS+"\">"+val[u]+"</td>");} else
                                                                                              {htmlOut=htmlOut.concat("<td class=\"myclasstd_trennungslinie"+dpVIS+" toDel"+dpVIS+"\" style=\" border-right:"+trennungsLinie+"px solid "+farbetrennungsLinie+ ";\">"+val[u]+"</td>")}
                                                                                                                      }  
                                             } else { if(counter%3==1)  {for(let u=0;u<val.length;u++){  if(u<val.length-1) {htmlOut=htmlOut.concat("<td class=\"myclasstd_normal"+dpVIS+" toDel"+dpVIS+"\" style=\"color:"+htmlFarbFelderschrift2+"\">"+val[u]+"</td>");} else
                                                                                                                            {htmlOut=htmlOut.concat("<td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+ "; color:"+htmlFarbFelderschrift2+"\">"+val[u]+"</td>")}
                                                                                                                      }  
                                                                        } else  { for(let u=0;u<val.length;u++){  htmlOut=htmlOut.concat("<td class=\"myclasstd_normal"+dpVIS+" toDel"+dpVIS+"\">"+val[u]+"</td>");
                                                                                                               }  htmlOut=htmlOut.concat("</tr>");  } }  break;
                                           } 
                                           else {
                                              if(counter%3==0 )  {htmlOut = htmlOut+"<tr class=\"myclasstr_ungerade"+dpVIS+" \">";
                                                                 for(let u=0;u<val.length;u++){ if(u<val.length-1) {htmlOut=htmlOut.concat("<td class=\"myclasstd_normal"+dpVIS+" toDel"+dpVIS+" toDel"+dpVIS+"\">"+val[u]+"</td>");} else
                                                                                                                   {htmlOut=htmlOut.concat("<td class=\"myclasstd_trennungslinie"+dpVIS+" toDel"+dpVIS+" toDel"+dpVIS+"\" style=\" border-right:"+trennungsLinie+"px solid "+farbetrennungsLinie+ ";\">"+val[u]+"</td>")}
                                                                                                                      }  
                                                                                                                      
                                           } else{ if(counter%3==1 )  { for(let u=0;u<val.length;u++){ if(u<val.length-1) {htmlOut=htmlOut.concat("<td class=\"myclasstd_normal"+dpVIS+" toDel"+dpVIS+"\" style=\"color:"+htmlFarbFelderschrift2+"\">"+val[u]+"</td>");} else
                                                                                                                          {htmlOut=htmlOut.concat("<td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+ "; color:"+htmlFarbFelderschrift2+"\">"+val[u]+"</td>")}
                                                                                                                      }  
                                                                       } else {        for(let u=0;u<val.length;u++){ htmlOut=htmlOut.concat("<td class=\"myclasstd_normal"+dpVIS+" toDel"+dpVIS+"\">"+val[u]+"</td>");
                                                                                                                    }  htmlOut=htmlOut.concat("</tr>"); } } break;
                                           }                                        
              
              
                                              
                      } //switch ende
              
              }
              
               function tabelleAusbessern() {         // bessert mei mehrfachtabellen die nicht vollen zeilenn aus - bevor die unterüberschriften kommen
              
              switch (mehrfachTabelle) {
                      
                     case 1:    break;
                     case 2:    let helpMehrfach="</td>";
                                for(let w=0;w<val.length;w++){helpMehrfach=helpMehrfach.concat("<td>&ensp;</td>")};helpMehrfach=helpMehrfach.concat("</tr>")
                                if(counter%2==0)  htmlOut = htmlOut.replace(/<\/td>$/, helpMehrfach);
                                break;
                     case 3:   let helpMehrfach2="</td>";
                               for(let w=0;w<val.length;w++){helpMehrfach2=helpMehrfach2.concat("<td>&ensp;</td>")};helpMehrfach2=helpMehrfach2.concat("</tr>")
                               if(counter%3==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                               if(counter%3==1)  htmlOut = htmlOut.replace(/<\/td>$/, helpMehrfach2);
                               let helpMehrfach3="</td>";
                               let helpMehrfach31="";for(let w=0;w<val.length;w++){helpMehrfach31=helpMehrfach31.concat("<td>&ensp;</td>")}
                               for(let w=0;w<val.length;w++){if(w<val.length-1) {helpMehrfach3=helpMehrfach3.concat("<td>&ensp;</td>")} else
                                                                       {helpMehrfach3=helpMehrfach3.concat("<td class=\"myclasstd_trennungslinie"+dpVIS+"\" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td>"+helpMehrfach31)}
                                                                 };helpMehrfach3=helpMehrfach3.concat("</tr>")        
                               if(counter%3==0)  htmlOut = htmlOut.replace(/<\/td>$/, helpMehrfach3);  break; }}
              
               function tabelleFinish() {
              
              switch (mehrfachTabelle) {
                      
                     case 1:    break;
                     case 2:    let helpMehrfach="</td>";
                                for(let w=0;w<val.length;w++){helpMehrfach=helpMehrfach.concat("<td>&ensp;</td>")};helpMehrfach=helpMehrfach.concat("</tr>")
                                if(counter%2==0)  htmlOut = htmlOut.replace(/<\/td>$/, helpMehrfach);
                                break;
                     case 3:   let helpMehrfach2="</td>";
                               for(let w=0;w<val.length;w++){helpMehrfach2=helpMehrfach2.concat("<td>&ensp;</td>")};helpMehrfach2=helpMehrfach2.concat("</tr>")
                               if(counter%3==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                               if(counter%3==1)  htmlOut = htmlOut.replace(/<\/td>$/, helpMehrfach2);
                               let helpMehrfach3="</td>";
                               let helpMehrfach31="";for(let w=0;w<val.length;w++){helpMehrfach31=helpMehrfach31.concat("<td>&ensp;</td>")}
                               for(let w=0;w<val.length;w++){if(w<val.length-1) {helpMehrfach3=helpMehrfach3.concat("<td>&ensp;</td>")} else
                                                                       {helpMehrfach3=helpMehrfach3.concat("<td class=\"myclasstd_trennungslinie"+dpVIS+"\" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td>"+helpMehrfach31)}
                                                                 };helpMehrfach3=helpMehrfach3.concat("</tr>")        
                               if(counter%3==0)  htmlOut = htmlOut.replace(/<\/td>$/, helpMehrfach3);  break; }
                   
                      var htmlUeber=    "<p  class=\"divWeiten"+dpVIS+"\" style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlUEberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((new Date().getTime())), 'SS:mm:ss')+"</p>"; 
                      if(mitSerch) htmlUeber=htmlUeber+searchMe
                      var htmlUnter= "<div class=\"divWeiten"+dpVIS+"\" style=\"margin-top: 10px; color:"+htmlFarbUber+"; height: 30px; font-family:"+htmlSchriftart+"; font-size: 85%; text-align: center;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((new Date().getTime())), "SS:mm:ss");"</div>";
                      
                      if (!htmlSignature) htmlUnter="";
                           var htmlOutVIS="";
                           if (htmlUberschrift) 
                              { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</tbody></table></div></div>"+htmlUnter+"</center>"+ buttonScript : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</tbody></table></div></div>"+htmlUnter+"</center>"+ buttonScript ;
                          } else {
                             zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</tbody></table></div></div>"+htmlUnter+"</center>"+ buttonScript :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</tbody></table></div></div>"+htmlUnter+"</center>"+ buttonScript;
                          }
                              
              
                // log("bin raus aus tabelleBind");
                         if (braucheEinVISWidget)  setStateDelayed("javascript." + instance + ".Tabellen@Liv."+dpVIS+".HTMLTableVis", htmlOutVIS ,1000);
              
               var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; height: 30px; font-size: 80%;  text-align: center; \" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((new Date().getTime())), "SS:mm:ss");+"</div>"
              
               if (!htmlSignature) htmlUnter="";
                var htmlEnd="</table>"+htmlUnter+"</div></body>";
               //mit oder ohne überschrift - zentriert oder links
              htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
               //log(htmlOut);
              
              
              }
              
              async function needDP(){
                 for(let s=0;s<schalterInSpaltenUeberschrift.length;s++){ if(schalterInSpaltenUeberschrift[s]){
                 if (!(await existsStateAsync("javascript." + instance + ".Tabellen@Liv."+dpVIS+".Spalte"+s))) {
                     await createStateAsync("Tabellen@Liv."+dpVIS+".Spalte"+s, false,{type: "boolean", name: "Schalter_Spalte"+s, role: "value", read: true, write: true, } ); } 
                   }}
              
                 if (!(await existsStateAsync("javascript." + instance + ".Tabellen@Liv."+dpVIS+".HTMLTableVis"))) {
                     await createStateAsync("Tabellen@Liv."+dpVIS+".HTMLTableVis", "empty",{type: "string", name: "HTML_Standard_Widget_mit_Binding", role: "value", read: true, write: true, } ); } 
                  if (!(await existsStateAsync("javascript." + instance + ".Tabellen@Liv."+dpVIS+".JSONVis"))) {
                     await createStateAsync("Tabellen@Liv."+dpVIS+".JSONVis", "",{type: "string", name: "JSON Format", role: "value", read: true, write: true, } ); }   
                 
              
              
              
              }
                setTimeout(function () { 
              
                 let arrTriggerSchalter=[]
                 $("javascript." + instance + ".Tabellen@Liv."+dpVIS+".Spalte*").each(function(id, i) {  
                        arrTriggerSchalter.push(id) 
                 });
               //  log(arrTriggerSchalter.toString())
                 on({id: arrTriggerSchalter, ack: false, change: "any"}, function (obj) { 
                   //  log(obj.id)
                   if (obj.id=="javascript." + instance + ".Tabellen@Liv."+dpVIS+".Spalte0") welcheSortierung=0;
                   if (obj.id=="javascript." + instance + ".Tabellen@Liv."+dpVIS+".Spalte1" )  welcheSortierung=1 ;
                   if (obj.id=="javascript." + instance + ".Tabellen@Liv."+dpVIS+".Spalte2" )  welcheSortierung=2; 
                   if (obj.id=="javascript." + instance + ".Tabellen@Liv."+dpVIS+".Spalte4")  welcheSortierung=3;
                   if (obj.id=="javascript." + instance + ".Tabellen@Liv."+dpVIS+".Spalte3" )  welcheSortierung=4;
                   if (obj.id=="javascript." + instance + ".Tabellen@Liv."+dpVIS+".Spalte5") welcheSortierung=5;
                   if (obj.id=="javascript." + instance + ".Tabellen@Liv."+dpVIS+".Spalte6" )  welcheSortierung=6; 
                   
                 //  log(String(mehrfachTabelle))
                setTimeout(function () {  
                     writeHTML();
                     if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
              }, 900);
                  
              
                   
                 });}, 5050);
              
              
              //SORTIEREN
              function sortMe(myType,value){
              
              if(myType=="alpha" ){ myObject.sort(function (alpha, beta) {
                          if ((alpha[value].toString().toUpperCase()).trim() > (beta[value].toString().toUpperCase()).trim())
                             return 1;
                          if ((beta[value].toString().toUpperCase()).trim()> (alpha[value].toUpperCase().toString()).trim())
                             return -1;
                          return 0;
                         });}
              if(myType=="bool" ) {
                   
                myObject .sort(function(x, y) { return x[value] - y[value] }); }       
              
              
                if(myType=="num" )   { myObject.sort(function (alpha, beta) {
                                   return  beta[value] -alpha[value];   });}
              
              }
              
              
              
              
              

              wenn ihr dieses script zusätlich laufen lassen wollt, muss dpVIS geändert werden - einfach eine "2" anfügen - oder das alte script stoppen
              ansonsten werden die datenpunkte überschrieben

              da_Woody 1 Reply Last reply Reply Quote 0
              • da_Woody
                da_Woody @liv-in-sky last edited by

                @liv-in-sky gilt das nur für vis, oder auch für iqontrol?

                liv-in-sky 1 Reply Last reply Reply Quote 0
                • liv-in-sky
                  liv-in-sky @da_Woody last edited by

                  @da_woody du hast doch ein eigenes 🙂

                  ich versuche gerade dieses script als template vorzubereiten - daher suche ich tester mit vis.

                  aber du kannst ja mal versuchen, ob es funktioniert - du musst aber wieder das script mit dem sortieren ändern - ist nicht drin

                  da_Woody 1 Reply Last reply Reply Quote 0
                  • da_Woody
                    da_Woody @liv-in-sky last edited by

                    @liv-in-sky noe.png genug zu tun! lolo.gif
                    bin grad am testen für @Stuebi die 1.10.0-rc5 von shelly

                    liv-in-sky Stuebi 2 Replies Last reply Reply Quote 1
                    • liv-in-sky
                      liv-in-sky @da_Woody last edited by

                      @da_woody

                      kein problem - ich hoffe, da werden die datenpunkte nicht unbenannt oder anders ausgegeben

                      da_Woody 1 Reply Last reply Reply Quote 0
                      • da_Woody
                        da_Woody @liv-in-sky last edited by da_Woody

                        @liv-in-sky nope, bis jetzt nichts auffälliges...
                        bis jetzt mal test mit 1PM, dimmer1, 2.5. morgen werd ich mal produktiv die werksatt umstellen...

                        liv-in-sky 1 Reply Last reply Reply Quote 0
                        • liv-in-sky
                          liv-in-sky @da_Woody last edited by

                          @da_woody

                          bin gerade am spielen

                          AApossis (22).gif

                          da_Woody 1 Reply Last reply Reply Quote 0
                          • da_Woody
                            da_Woody @liv-in-sky last edited by

                            @liv-in-sky 👍 sieht ja legger aus!

                            liv-in-sky 1 Reply Last reply Reply Quote 0
                            • liv-in-sky
                              liv-in-sky @da_Woody last edited by liv-in-sky

                              @da_woody man muss ja was machen - scrounger schläft nicht mit seinen material design sachen 🙂

                              da_Woody 1 Reply Last reply Reply Quote 1
                              • da_Woody
                                da_Woody @liv-in-sky last edited by

                                @liv-in-sky was mich irgendwie stört, daß bei der laufzeit die tage eine eigene zeile und erst danach kommen

                                liv-in-sky 1 Reply Last reply Reply Quote 0
                                • liv-in-sky
                                  liv-in-sky @da_Woody last edited by

                                  @da_woody du siehst ja den "erl-könig" der tabelle - bin froh , dass die struktur soweit funktioniert - will ja auch noch bildchen integrieren usw...

                                  da_Woody 1 Reply Last reply Reply Quote 0
                                  • da_Woody
                                    da_Woody @liv-in-sky last edited by

                                    @liv-in-sky schon klar, das ist mir aber schon bei meiner version aufgefallen...
                                    45317998-301e-4df6-8c1d-eacf0ca0f99b-grafik.png

                                    liv-in-sky 1 Reply Last reply Reply Quote 0
                                    • liv-in-sky
                                      liv-in-sky @da_Woody last edited by liv-in-sky

                                      @da_woody das kommt daher, dass man, wenn man die version auf 2 zeilen macht , an dieser stelle dann etwas platz sparen kann

                                      2 zeilen sind es dann ja eh - bei "geteiteVersionsAnzeige=false" ist das nicht so

                                      Image 3.png

                                      da_Woody 1 Reply Last reply Reply Quote 0
                                      • Stuebi
                                        Stuebi @da_Woody last edited by

                                        @da_woody , super Danke fürs Testen der 1.10 Firmware! Das hilft mir extrem!!!

                                        da_Woody 1 Reply Last reply Reply Quote 1
                                        • da_Woody
                                          da_Woody @Stuebi last edited by

                                          @stuebi klar doch @Stuebi !

                                          1 Reply Last reply Reply Quote 0
                                          • da_Woody
                                            da_Woody @liv-in-sky last edited by

                                            @liv-in-sky brauchst dich nicht rechtfertigen! sind meine befindlichkeiten...
                                            für mein auge wäre das einzig logische 2D+01:13:59 oder statt + halt -

                                            liv-in-sky 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            473
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            13
                                            261
                                            30909
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo