//@liv-in-sky 2020  23.8.-17: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   braucheMaterialDesignWidget=false;             // bei true wird ein json in einen dp geschrieben - MUSS ANGELEGT WERDEN !!!
let dpMaterialWidget="0_userdata.0.Tabellen.Linux-Controll-List-Widget";            // WICHTIG wenn braucheMaterialDesignWidget auf true MATERIALDESIGN List Widget - datenpunkt anlegen : zeichenkette 
let dpVIS="0_userdata.0.Tabellen.Linux-Control"         //WICHTIG wenn "braucheEinVISWidget" auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
let dpMaterialWidgetExtra="0_userdata.0.Tabellen.Linux-Control-MDList-Extra"   // WICHTIG wenn braucheMaterialDesignWidget auf true MATERIALDESIGN List Widget - datenpunkt anlegen : zeichenkette 
let mySchedule=" * * * * * ";                       //jede minute  
let leerzeile=true;                   // leerzeile vor neuem server
let farbeUeber="#A0C2A0"              //"#4da6ff" (blau)             // farbe der servernamen
let styleUeber="span"                 // style der server namen:  möglich b fett; i kursiv; span normal
var mylum=0.0                         //farbveränderung im bezug zum servernamen von HD uns IP
var mylumFolder=0.0                   //farbveränderung im bezug zur Standarsschriftfarbe von Folder Anzeige
var mylumService=0.0                 //farbveränderung im bezug zur Standarsschriftfarbe von Serviceanzeige 
var mylumButtons=0.0                  //farbveränderung im bezug zur Standarsschriftfarbe von Buttonsanzeige 
var mylumBefehle=0.0                   //farbveränderung im bezug zur Standarsschriftfarbe von Befehleanzeige 
let mysonderFarbeHDundTEMP="#33ff33"   // farbe in MD List Widget von Temp und root-festplatte
var serviceTrue="🟢"                 //"🔵"       //⚪      //emoji für dienste die laufen
var serviceFalse="✖️"                //"🔴"  
var mitShutdownBotton=true;           // zeigt shutdown und restart button an
var symbolLinkRestart="☢️"
var symbolLinkShutdown="☢️"
var symbolLinkCommands="🔘" //"⚠️"
var farbeOffline="#466d46"            //farbe für server , die offline sind
var farbeMDbackgroundOffline= "#484837"          //farbe der kachel in MaterialDesign wenn offline
var farbeMDschriftOffline="#33ff33"//            //farbe der schrift in MaterialDesign wenn offline
var debug=false;                                  // für script debuggen
// zweites MD List Widget
var wantExtra=["Proxmox","IOBroker"]             //  server NAme für extra angezeigte Server - eigenes MD List Widget (dpMaterialWidgetExtra) // leer ist []
var removeOthers=true;                           // wenn true wird die wantExtra Server aus dem Haupt MD List Widget gelöscht
var thresholHD=80;
var thresholTemp=75;
var thresholPakete=0;
var braucheShellInaBox=false;          // SHELL IN A BOX einstellungen
var shellBox="🥟"
var laengeServiceNamen=11;            // dient zum kürzen von langen service namen
var bildergröße=17
const apName = { "FileServer"      : { aname: "https://forum.iobroker.net/assets/uploads/files/1597247720123-fileserver.png"},
                 "IOBroker"        : { aname: "https://upload.wikimedia.org/wikipedia/commons/8/82/IoBroker_Logo.png"},  
                 "MotionEye"       : { aname: "https://forum.iobroker.net/assets/uploads/files/1597247718354-motioneye.png"},
                 "Pi-Hole"         : { aname: "https://forum.iobroker.net/assets/uploads/files/1597247720225-pi-hole.png"},
                 "PlexServer"      : { aname: "https://forum.iobroker.net/assets/uploads/files/1597247718413-plexserver.png"},
                 "Proxmox"         : { aname: "https://forum.iobroker.net/assets/uploads/files/1597247718381-proxmox.png"},
                 "SQLTulla"        : { aname: "https://forum.iobroker.net/assets/uploads/files/1597247720017-sqltulla.png"},
                  "AX--HD-60"        : { aname: "https://forum.iobroker.net/assets/uploads/files/1597941596015-ax-hd60.png"},
                  "GalaxyTab2"        : { aname: "https://forum.iobroker.net/assets/uploads/files/1598105726154-samsung.png"},
                 "Raspi"           : { aname: "https://forum.iobroker.net/assets/uploads/files/1597247719882-raspi.png"}}    // oder lokal gespeichert: vis.0/armin/img//server/IOBroker.png
//---------------------------------------
//HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 4
var htmlFeld1='Server';       var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
var htmlFeld2='';             var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
var htmlFeld3='';             var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
var htmlFeld4='';             var Feld4lAlign="right";                    // ü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='Linux Server';              // Ü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="#BDBDBD";                // 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="2";
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="Ubuntu-Regular";
const htmlSchriftgroesse="16px";
//FELDER UND RAHMEN
let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
const htmlFarbFelderschrift="#BDBDBD";                  // SchriftFarbe der Felder
const htmlFarbFelderschrift2="#BDBDBD";                 // 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="all";                            // 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='<center>'
const htmlStart=    "<!DOCTYPE html><html lang=\"de\"><head><title>Vorlage</title><meta http-equiv=\"content-type\" content=\"text/html; 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+"}"+"td:nth-child(2) {width:"+htmlSpalte1Weite+"}"+
                 " </style></head><body> <div>";
//const htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\">"+htmlFeldUeber+"</p>";                    
const htmlTabStyle= "<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+");\">";
const htmlTabUeber1="<tr height=\""+UeberSchriftHöhe+"\" style=\"color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \">";
const htmlTabUeber3="</tr>";
//NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 4
//htmlFeld2="last Update"
//htmlFeld4=formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss")
const buttonScript =   '<script> function setOnDblClickCustom1( myvalue ) {var Self = this; objID = myvalue;  console.log(myvalue); Self.servConn.setState(objID, true); console.log(objID)} '+
                      '</script>'
//------------------------------------------------------
function dlog(message) {
  if(debug)
      console.log(message);
}
var htmlOut="";
var mix;
var counter;
var val1; var val2; var val0; var val3;
var htmlTabUeber="";
let myArr=[];
let myArrFolder=[];
let myArrService=[];
let myArrButtons=[];
let myArrBefehle=[];
let myArrRefresh=[];
let obj1=[]
 let obj2=[]
let   countMYWerte;
let idOld="";
let helpRestart; let helpShutdown;let helpVersion;let upgrade;let up_date;let up_pack;let helpBild;let helpMem;let helpSwap;let helpTopProcess;let helpLastRefresh;
let is_running=false
var myJsonWidget2=[];
function writeHTML(){
   is_running=true
let  htmlFeld4help=formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss")
var htmlTabUeber2="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+"> "+htmlFeld1+" </td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+"> "+htmlFeld2+" </td><td  align="+Feld3lAlign+"> "+htmlFeld3+" </td><td align="+Feld4lAlign+"> "+htmlFeld4help+" </td>";
var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align=="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"> "+""+" </td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"> "+htmlFeld2+
                   " </td><td  align=="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"> "+htmlFeld3+" </td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"> "+htmlFeld4+
                   " </td>";
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 !!!---------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------------------------
myArr=[]; myArrFolder=[]; myArrService=[]; myArrButtons=[]; myArrBefehle=[]; myArrRefresh=[];
$('linux-control.0.*.info.is_online').each(function(id, i) {         //YXJtaW4uc2xpdmluc2t5QGdtYWlsLm  // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
       
      var ida = id.split('.');
            //  linux-control.0.Pi-Hole.control.shutdown
              //linux-control.0.Pi-Hole.info.is_online
       
                val0= ida[2]
                existsState(ida[0]+"."+ida[1]+"."+ida[2]+".root") ? val1=getState(ida[0]+"."+ida[1]+"."+ida[2]+".root").val : val1="missing"
                existsState(ida[0]+"."+ida[1]+"."+ida[2]+".info.ip") ? val2=getState(ida[0]+"."+ida[1]+"."+ida[2]+".info.ip").val : val2="missing"
                existsState(ida[0]+"."+ida[1]+"."+ida[2]+".cpu-temp") ? val3=getState(ida[0]+"."+ida[1]+"."+ida[2]+".cpu-temp").val :val3=""
                //helpRestart;  
              //  if ( existsState(id.replace("info.is_online","control.restart")))  {mitShutdownBotton ?  helpRestart=id.replace("info.is_online","control.restart") : helpRestart=""} else{helpRestart=""}
                mitShutdownBotton ?  helpRestart=id.replace("info.is_online","control.restart") : helpRestart=""
                //helpShutdown; 
              //  log(id)
               // log ( existsState(id.replace("info.is_online","control.shutdown")).toString())
              //  if ( existsState(id.replace("info.is_online","control.shutdown"))) {mitShutdownBotton ? helpShutdown=id.replace("info.is_online","control.shutdown") : helpShutdown="";} else{helpShutdown=""}
                mitShutdownBotton ? helpShutdown=id.replace("info.is_online","control.shutdown") : helpShutdown="" 
             //  log(helpShutdown)
                //helpVersion
                existsState(ida[0]+"."+ida[1]+"."+ida[2]+".distribution.fullname") ? helpVersion=getState(ida[0]+"."+ida[1]+"."+ida[2]+".distribution.fullname").val.replace(/.+ (.+ )\((.+)\)/,"$2 ($1)") : helpVersion=" unknown "
                //upgrade
                existsState(ida[0]+"."+ida[1]+"."+ida[2]+".updates.upgradable") ? upgrade=(getState(ida[0]+"."+ida[1]+"."+ida[2]+".updates.upgradable").val) : up_pack="missing"
                upgrade ? upgrade="Ja" : upgrade="Nein"
                //up_date                                                                  
                existsState(ida[0]+"."+ida[1]+"."+ida[2]+".updates.lastUpdate") ? up_date=formatDate(getDateObject(((new Date(getState(ida[0]+"."+ida[1]+"."+ida[2]+".updates.lastUpdate").val).getTime()))), "TT.MM.YY") : up_date="missing"
                //up_pack;
                existsState(ida[0]+"."+ida[1]+"."+ida[2]+".updates.newPackages") ? up_pack=(getState(ida[0]+"."+ida[1]+"."+ida[2]+".updates.newPackages").val) : up_pack="missing"
                //helpMem
                existsState(ida[0]+"."+ida[1]+"."+ida[2]+".mem") ? helpMem=getState(ida[0]+"."+ida[1]+"."+ida[2]+".mem").val :helpMem=""
                
                //helpSwap
                existsState(ida[0]+"."+ida[1]+"."+ida[2]+".swap") ? helpSwap=getState(ida[0]+"."+ida[1]+"."+ida[2]+".swap").val :helpSwap=""
                //helpTopProcess
                existsState(ida[0]+"."+ida[1]+"."+ida[2]+".top-process") ? helpTopProcess=getState(ida[0]+"."+ida[1]+"."+ida[2]+".top-process").val :helpTopProcess=""
                //helpLastRefresh
                if ( existsState(id.replace("info.is_online","info.lastRefresh")))  {helpLastRefresh=getState(id.replace("info.is_online","info.lastRefresh")).val } else{helpLastRefresh=""}
                //helpBild;
                helpBild="<img src=https://upload.wikimedia.org/wikipedia/commons/8/82/IoBroker_Logo.png height=\""+bildergröße+"\" width=\""+bildergröße+"\">"
              for(let device_name in apName) { 
                     if (val0==device_name) {helpBild="<img src="+apName[device_name].aname+" height=\""+bildergröße+"\" width=\""+bildergröße+"\">"; }}
           
              let helpOnline=getState(ida[0]+"."+ida[1]+"."+ida[2]+".info.is_online").val
             
              let myhelp=[val0,val1,val2,val3,helpRestart,helpShutdown,helpVersion,helpBild,helpOnline,upgrade,up_date,up_pack,helpMem,helpSwap,helpTopProcess,helpLastRefresh]        ; 
              dlog(myhelp.toString())
              myArr.push(myhelp)
//--------------------------Folder               
              let mySelektor="linux-control.0."+ida[2]+".folders.*.size"
            //  let mymycount=0
              $(mySelektor).each(function(id2, i) { 
                   var ids = id2.split('.');
                    myArrFolder.push([ids[2],ids[4],getState(ids[0]+"."+ids[1]+"."+ids[2]+"."+ids[3]+"."+ids[4]+"."+ids[5]).val,i,getObject(ids[0]+"."+ids[1]+"."+ids[2]+"."+ids[3]+"."+ids[4]+"."+ids[5]).common.unit,id] )
                     }); 
//--------------------------Services                      
              mySelektor="linux-control.0."+ida[2]+".services.*.running"      
              $(mySelektor).each(function(id3, i) { 
                   var idx = id3.split('.');
                //   log(idx[4].replace(/(.+)server.+/g,"$1"))
                  //  myArrService.push([idx[2],idx[4].substring(0,laengeServiceNamen),getState(id3).val,i,id3] )
                    idx[4]=idx[4].replace(/(.+)service/g,"$1")
                    idx[4]=idx[4].replace(/(.+)server\*+/g,"$1")
                    idx[4]=idx[4].substring(0,laengeServiceNamen)
                    myArrService.push([idx[2],idx[4],getState(id3).val,i,id3] )
                     });  
//--------------------------Buttons            
              let mycounty=-1
              mySelektor="state[id=linux-control.0."+ida[2]+".*][role=button]"
                    $(mySelektor).each( function( id4, i){  
                      var idy = id4.split('.'); if  (idy.length==4)  mycounty++
                      if  (idy.length==4)  {myArrButtons.push([idy[2],idy[3],mycounty,id4] ); myArrRefresh.push(id4)}
                     });   
     /////-----------für refresh
                mycounty=-1
              mySelektor="state[id=linux-control.0."+ida[2]+".*][role=value]"
                    $(mySelektor).each( function( id4, i){  
                      var idy = id4.split('.'); if  (idy.length==4)  mycounty++
                      if  (idy.length==4)  {/*myArrButtons.push([idy[2],idy[3],mycounty,id4] );*/ myArrRefresh.push(id4)}
                     });        
//--------------------------Befehle            
              let mycounty2=-1
              mySelektor="linux-control.0."+ida[2]+".befehle.*"     
                    $(mySelektor).each( function( id5, i){  mycounty2++
                      var idz = id5.split('.');  // log(id);mycounty2++
                        myArrBefehle.push([idz[2],idz[4],mycounty2,getState(id5).val] ) ; myArrRefresh.push(id5)
                     });                                 
              
      // counter++; tabelleBind()
   }); 
  dlog("Länge Server: "+myArr.length.toString())         // ;log(myArr.toString())
  dlog("Länge Folder: "+myArrFolder.length.toString())    //dlog(myArrFolder.toString())
  dlog("Länge Service: "+myArrService.length.toString())   //dlog(myArrService.toString())
  dlog("Länge Buttons: "+myArrButtons.length.toString())   //dlog(myArrButtons.toString())
  dlog("Länge Buttons: "+myArrRefresh.length.toString())   //;log(myArrRefresh.toString())
  dlog("Länge Buttons: "+myArrBefehle.length.toString())   //;log(myArrBefehle.toString())
  
  
  
  countMYWerte=0;
   
                   for(var i=0;i<myArr.length;i++) {
                    dlog(myArr[i][0] +" und "+idOld)
               //  if(myArr[i][0]!=idOld){ dlog("erster Ablauf Durchlauf")
                      countMYWerte++
                      tabelleMachSchoen()
                      counter=-1
                      if(leerzeile){
                                    if(countMYWerte>1) for(var a=0;a<mehrfachTabelle;a++ ) { //leerzeile
                                          val0=""; val1=""; val2="";val3="";counter++;tabelleBind();
                                     } }
          if (myArr[i][8])     {  
// ----------------------------erste zeile Zeile                                   
             for(var ic=0;ic<mehrfachTabelle;ic++ ) { if (i==0 && ic==0)  dlog("Verarbeite erste Zeile");
                  if  (ic==0) { val0=myArr[i][7]+"  <span style=\"font-size:130%\"><font color=\""+farbeUeber +"\"><"+styleUeber+">"+myArr[i][0]+"<span>";
                                if(braucheShellInaBox) {val0=val0+" <a style=\" font-size:70% \" href=\"https:\/\/"+ myArr[i][2] + ":4200\" target=\"_blank\" onclick=\"window.open(this.href,this.target,\'width=760,height=640\'); return false;\">"+shellBox+"</a>"}
                    // val1="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">"+myArr[i][1];
                      myArr[i][1]!="" ? val1="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">HD: "+myArr[i][1]+" %" : val1="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">"+myArr[i][1];
                      myArr[i][2]!="" ? val2="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">"+myArr[i][2] : val2="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">"+myArr[i][2];
                      myArr[i][3]!="" ? val3="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">"+myArr[i][3]+" °C" : val3="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">"+myArr[i][3];
                      //Threshold
                     if( myArr[i][1]!="" && myArr[i][1]>thresholHD ) val1="<font color=\""+"red" +"\">HD: <b>"+myArr[i][1]+" %</b>";
                     if( myArr[i][3]!="" && myArr[i][1]>thresholTemp) val3="<font color=\""+"red" +"\"><b>"+myArr[i][3]+" °C</b>" ;
                     
                      } else {val0=""
                              val1="";
                              val2="";
                              val3=""} 
            counter++;
            tabelleBind();}
// ----------------------------zweite Zeile
for(var ic=0;ic<mehrfachTabelle;ic++ ) { if (i==0 && ic==0)  dlog("Verarbeite erste Zeile");
             if(myArr[i][12]!="")  { let myMemTab=myArr[i][12].split(";");
                if  (ic==0) { val0="<font color=\""+ColorLuminance(farbeUeber,mylumFolder) +"\">"+"Memory(MB)"; 
                      if (i==0 && ic==0 )  dlog("Verarbeite zweite Zeile");
             
                     val1="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">Total: "+myMemTab[0]
                     val2="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">Used: "+myMemTab[1]
                     val3="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">Free :"+myMemTab[2]
                    
                       } else {val0=""
                               val1="";
                               val2="";
                               val3=""} 
            counter++;
            tabelleBind();}}
// ----------------------------zweite Zeile
for(var ic=0;ic<mehrfachTabelle;ic++ ) { if (i==0 && ic==0)  dlog("Verarbeite erste Zeile");
             if(myArr[i][13]!="")  { let myMemTab=myArr[i][13].split(";");
                if  (ic==0) { val0="<font color=\""+ColorLuminance(farbeUeber,mylumFolder) +"\">"+"Swap(MB)"; 
                      if (i==0 && ic==0 )  dlog("Verarbeite zweite Zeile");
             
                     val1="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">Total: "+myMemTab[0]
                     val2="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">Used: "+myMemTab[1]
                     val3="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">Free :"+myMemTab[2]
                    
                       } else {val0=""
                               val1="";
                               val2="";
                               val3=""} 
            counter++;
            tabelleBind();}       }      
// ----------------------------zweite Zeile
for(var ic=0;ic<mehrfachTabelle;ic++ ) { if (i==0 && ic==0)  dlog("Verarbeite erste Zeile");
                if  (ic==0) { val0="<font color=\""+ColorLuminance(farbeUeber,mylumFolder) +"\">"+"Updates"; 
                      if (i==0 && ic==0 )  dlog("Verarbeite zweite Zeile");
             
                     val1="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">"+myArr[i][9]
                     val2="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">"+myArr[i][11]+" Paket(e)"
                     val3="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">"+" zuletzt: "+myArr[i][10]
                    
                       } else {val0=""
                               val1="";
                               val2="";
                               val3=""} 
            counter++;
            tabelleBind();
             }            
// ----------------------------dritte Zeile
for(var ic=0;ic<mehrfachTabelle;ic++ ) { if (i==0 && ic==0)  dlog("Verarbeite erste Zeile");
                if  (ic==0) { val0=""; if (i==0 && ic==0 )  dlog("Verarbeite dritte Zeile");
             
                      myArr[i][6]!="" ? val1="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">"+myArr[i][6]+"" : val1="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">"+myArr[i][6];
                      let valButton=myArr[i][4]; 
                      myArr[i][4]!="" ? val2="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">"+ "Restart! "+"<button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:left\" value=\"toggle\" onclick=\"setOnDblClickCustom1\(\'"+valButton+"\')\">"+symbolLinkRestart  + "</button>" : val2="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">-" ;
                      valButton=myArr[i][5]
                      myArr[i][5]!="" ? val3="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">"+"Shutdown! "+"<button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:left\" value=\"toggle\" onclick=\"setOnDblClickCustom1\(\'"+valButton+"\')\">"+symbolLinkShutdown + "</button>" : val3="<font color=\""+ColorLuminance(farbeUeber,mylum) +"\">-";
                    
                       } else {val0=""
                               val1="";
                               val2="";
                               val3=""} 
            counter++;
            tabelleBind();
          }
          
               } else{
            for(var ic=0;ic<mehrfachTabelle;ic++ ) {    
                   if  (ic==0) { val0=myArr[i][7]+"  <span style=\"font-size:130%\"><font color=\""+farbeMDschriftOffline +"\"><"+styleUeber+"><i>"+myArr[i][0]+"</i><span>";
                    
                       myArr[i][1]!="" ? val1="<font color=\""+ColorLuminance(farbeOffline,mylum) +"\"><i>HD: "+myArr[i][1]+" %</i>" : val1="<font color=\""+ColorLuminance(farbeOffline,mylum) +"\">"+myArr[i][1];
                       myArr[i][2]!="" ? val2="<font color=\""+ColorLuminance(farbeOffline,mylum) +"\"><i>"+myArr[i][2]+"</i>" : val2="<font color=\""+ColorLuminance(farbeOffline,mylum) +"\">"+myArr[i][2];
                       myArr[i][3]!="" ? val3="<font color=\""+ColorLuminance(farbeOffline,mylum) +"\"><i>"+myArr[i][3]+" °C</i>" : val3="<font color=\""+ColorLuminance(farbeOffline,mylum) +"\">"+myArr[i][3];
                      
                       } else {val0=""
                               val1="";
                               val2="";
                               val3=""} 
             counter++;
             tabelleBind();}
for(var ic=0;ic<mehrfachTabelle;ic++ ) {  
              if  (ic==0) { val0="<font color=\""+ColorLuminance(farbeOffline,mylum) +"\"><i>"+"Updates"+"</i>" ; 
                      if (i==0 && ic==0 )  dlog("Verarbeite zweite Zeile");
             
                     val1="<font color=\""+ColorLuminance(farbeOffline,mylum) +"\"><i>"+myArr[i][9]+"</i>" 
                     val2="<font color=\""+ColorLuminance(farbeOffline,mylum) +"\"><i>"+myArr[i][11]+"</i>" 
                     val3="<font color=\""+ColorLuminance(farbeOffline,mylum) +"\"><i>"+myArr[i][10]+"</i>" 
                    
                       } else {val0=""
                               val1="";
                               val2="";
                               val3=""} 
            counter++;
            tabelleBind();}
            
     for(var ic=0;ic<mehrfachTabelle;ic++ ) {        
             if  (ic==0) { val0="";
                       myArr[i][6]!="" ? val1="<font color=\""+ColorLuminance(farbeOffline,mylum) +"\"><i>"+myArr[i][6]+"</i>" : val1="<font color=\""+ColorLuminance(farbeOffline,mylum) +"\">"+myArr[i][6];
                       let valButton=myArr[i][4]; 
                       myArr[i][4]!="" ? val2="<font color=\""+ColorLuminance(farbeOffline,mylum) +"\">"+ "<i>Restart! </i> " : val2="<font color=\""+ColorLuminance(farbeOffline,mylum) +"\">-" ;
                       valButton=myArr[i][5]
                       myArr[i][5]!="" ? val3="<font color=\""+ColorLuminance(farbeOffline,mylum) +"\">"+"<i>Shutdown! </i> ": val3="<font color=\""+ColorLuminance(farbeOffline,mylum) +"\">-";
                     
                        } else {val0=""
                                val1="";
                                val2="";
                                val3=""} 
             counter++;
             tabelleBind(); }
               }      
               
            tabelleMachSchoen()
                      counter=-1
                   
      
//  --------------------------------------------(Folder)                      
         for(var ib=0;ib<myArrFolder.length;ib++) {  if (i==0 && ib==0) dlog("Verarbeite Folder");
                              
         if (myArrFolder[ib][0]==myArr[i][0]){  
                      
                if (myArr[i][8])     {  
                        myArrFolder[ib][3]==0? val0="<font color=\""+ColorLuminance(htmlFarbFelderschrift,mylumFolder) +"\">"+"Folder"  :val0="";
                        val1="";
                        val2="<font color=\""+ColorLuminance(htmlFarbFelderschrift,mylumFolder) +"\">"+myArrFolder[ib][1]
                        val3="<font color=\""+ColorLuminance(htmlFarbFelderschrift,mylumFolder) +"\">"+myArrFolder[ib][2] +" "+myArrFolder[ib][4]
                        counter++; tabelleBind();
                        } else{
                   /*     myArrFolder[ib][3]==0? val0="<font color=\""+ColorLuminance(farbeOffline,mylumFolder) +"\"><i>"+"Folder</i>"  :val0="";
                        val1="";
                        val2="<font color=\""+ColorLuminance(farbeOffline,mylumFolder) +"\"><i>"+myArrFolder[ib][1]+"</i>"
                        val3="<font color=\""+ColorLuminance(farbeOffline,mylumFolder) +"\"><i>"+myArrFolder[ib][2] +" "+myArrFolder[ib][4]+"</i>"   
                        counter++; tabelleBind();*/
                        }
                         }   }
//  --------------------------------------------(Service)                          
       tabelleMachSchoen()
       counter=-1
                     
         for(var ia=0;ia<myArrService.length;ia++) {  if (i==0&& ia==0) dlog("Verarbeite Service");
         if (myArrService[ia][0]==myArr[i][0]){  
               if (myArr[i][8])     {  
                        myArrService[ia][3]==0? val0="<font color=\""+ColorLuminance(htmlFarbFelderschrift,mylumService) +"\">"+"Service"  :val0="";
                        val1="";
                        val2="<font color=\""+ColorLuminance(htmlFarbFelderschrift,mylumService) +"\">"+myArrService[ia][1]
                        myArrService[ia][2] ? val3=serviceTrue :val3=serviceFalse 
                        counter++; tabelleBind();
                      } else {
                   /*     myArrService[ia][3]==0? val0="<font color=\""+ColorLuminance(farbeOffline,mylumService) +"\"><i>"+"Service</i>"  :val0="";
                        val1="";
                        val2="<font color=\""+ColorLuminance(farbeOffline,mylumService) +"\"><i>"+myArrService[ia][1]+"</i>"
                        val3=serviceFalse   
                        counter++; tabelleBind();   */
                      }    
                         } }
//  --------------------------------------------Buttons)
      tabelleMachSchoen()
      counter=-1
                     
          for(var ix=0;ix<myArrButtons.length;ix++) {  if (i==0 && ix==0) dlog("Verarbeite Buttons");
          if (myArrButtons[ix][0]==myArr[i][0]){ 
                if (myArr[i][8])     {  
                        myArrButtons[ix][2]==0? val0="<font color=\""+ColorLuminance(htmlFarbFelderschrift,mylumButtons) +"\">" +"Buttons"  :val0="";
                        val1="";
                        val2="<font color=\""+ColorLuminance(htmlFarbFelderschrift,mylumButtons) +"\">" +myArrButtons[ix][1]
                        let valButton=myArrButtons[ix][3];
                      val3="<font color=\""+ColorLuminance(htmlFarbFelderschrift,mylumButtons) +"\">" +"(press) <button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:right\" value=\"toggle\" onclick=\"setOnDblClickCustom1\(\'"+valButton+"\')\">"+symbolLinkCommands; //  myArrButtons[ia][2] ? val3=serviceTrue :val3=serviceFalse 
                      counter++; tabelleBind();
                      } else {
              /*    myArrButtons[ix][3]==0? val0="<font color=\""+ColorLuminance(farbeOffline,mylumFolder) +"\"><i>"+"Buttons</i>"  :val0="";
                        val1="";
                        val2="<font color=\""+ColorLuminance(farbeOffline,mylumButtons) +"\"><i>"+myArrButtons[ix][1]+"</i>"
                        val3=serviceFalse  
                        counter++; tabelleBind(); */
                      }    
                         }    } 
// --------------------------------------------ENDE Buttons
 //  --------------------------------------------Befehle)
      tabelleMachSchoen()
      counter=-1
                     
          for(var ix=0;ix<myArrBefehle.length;ix++) {  if (i==0 && ix==0) dlog("Verarbeite Befehle");
          if (myArrBefehle[ix][0]==myArr[i][0]){ 
                if (myArr[i][8])     {  
                        myArrBefehle[ix][2]==0? val0="<font color=\""+ColorLuminance(htmlFarbFelderschrift,mylumBefehle) +"\">"+"Sonstiges"  :val0="";
                        val1="";
                        val2="<font color=\""+ColorLuminance(htmlFarbFelderschrift,mylumBefehle) +"\">"+myArrBefehle[ix][1]
                        val3="<font color=\""+ColorLuminance(htmlFarbFelderschrift,mylumBefehle) +"\">"+myArrBefehle[ix][3]
                        counter++; tabelleBind();
                      } else {
                /*        myArrBefehle[ix][2]==0? val0="<font color=\""+ColorLuminance(farbeOffline,mylumService) +"\"><i>"+"Sonstiges</i>"  :val0="";
                        val1="";
                        val2="<font color=\""+ColorLuminance(farbeOffline,mylumService) +"\"><i>"+myArrBefehle[ix][1]+"</i>"
                        val3="<font color=\""+ColorLuminance(farbeOffline,mylumService) +"\">"+" - " 
                        counter++; tabelleBind();     */
                      }    
                         }    } 
// --------------------------------------------ENDE Befehle
             
            //  idOld=""//myArr[i][0];
     //  }
    }
//-------------------------------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------------------------------
      tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
    let  timeout22 = setTimeout(function () {
        is_running=false
}, 5000);
      
} // 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+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+"> "+val0+" </td><td align="+Feld2lAlign+"> "+val1+" </td><td align="+Feld3lAlign+"> "+val2+" </td><td align="+Feld4lAlign+"> "+val3+" </td></tr>"; break;} else
                                 {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+"> "+val0+" </td><td align="+Feld2lAlign+"> "+val1+" </td><td align="+Feld3lAlign+"> "+val2+" </td><td align="+Feld4lAlign+"> "+val3+" </td></tr>"; break;}
        case 2: if(counter%4==0){ 
                 if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+"> "+val0+" </td><td align="+Feld2lAlign+"> "+val1+" </td><td align="+Feld3lAlign+"> "+val2+" </td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                    ";\"align="+Feld4lAlign+"> "+val3+" </td>"; } 
                              else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val0+" </td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val1+" </td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val2+" </td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val3+" </td></tr>";} break;
                    }else{
                 if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+"> "+val0+" </td><td align="+Feld2lAlign+"> "+val1+" </td><td align="+Feld3lAlign+"> "+val2+" </td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                    ";\" align="+Feld4lAlign+"> "+val3+" </td>"; } 
                              else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val0+" </td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val1+" </td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val2+" </td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val3+" </td></tr>";} break;}                  
        case 3:  if(counter%2==0)   {
                  if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+"> "+val0+" </td><td align="+Feld2lAlign+"> "+val1+" </td><td align="+Feld3lAlign+"> "+val2+" </td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";\" align="+Feld4lAlign+"> "+val3+" </td>"; } 
                              else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val0+" </td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val1+" </td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val2+" </td><td  align="+Feld4lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";color:"+htmlFarbFelderschrift2+"\"> "+val3+" </td>";} 
                                               else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+"> "+val0+" </td><td align="+Feld2lAlign+">  "+val1+" </td><td align="+Feld3lAlign+"> "+val2+" </td><td align="+Feld4lAlign+"> "+val3+" </td></tr>";}
                                         } break;}else{
                  if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+"> "+val0+" </td><td align="+Feld2lAlign+"> "+val1+" </td><td align="+Feld3lAlign+"> "+val2+" </td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";\" align="+Feld4lAlign+"> "+val3+" </td>"; } 
                              else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val0+" </td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val1+" </td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val2+" </td><td  align="+Feld4lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                        ";color:"+htmlFarbFelderschrift2+"\"> "+val3+" </td>";} 
                                               else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+"> "+val0+" </td><td align="+Feld2lAlign+">  "+val1+" </td><td align="+Feld3lAlign+"> "+val2+" </td><td align="+Feld4lAlign+"> "+val3+" </td></tr>";}
                                         } break;}
        case 4:  if(counter%8==0)   {
                 if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+"> "+val0+" </td><td align="+Feld2lAlign+"> "+val1+" </td><td align="+Feld3lAlign+"> "+val2+" </td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+ ";\" align="+Feld4lAlign+"> "+val3+" </td>"; } 
                                  else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val0+" </td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val1+" </td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val2+" </td><td  align="+Feld4lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\"> "+val3+" </td>";} 
                                               else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\" >"+val0+" </td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val1+" </td><td align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\"> "+val2+" </td><td  align="+Feld4lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+ "color:"+htmlFarbFelderschrift2+"\"> "+val3+" </td></tr>";} 
                                                                 else    {htmlOut  = htmlOut+"<td align="+Feld1lAlign+"> "+val0+" </td><td align="+Feld2lAlign+"> "+val1+" </td><td align="+Feld3lAlign+"> "+val2+" </td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld4lAlign+"> "+val3+" </td>";}}
                                         } break;}else{
                 if(counter%4==0)   {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+"> "+val0+" </td><td align="+Feld2lAlign+"> "+val1+" </td><td align="+Feld3lAlign+"> "+val2+" </td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+ ";\" align="+Feld4lAlign+"> "+val3+" </td>"; } 
                                  else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val0+" </td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val1+" </td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val2+" </td><td  align="+Feld4lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+ ";color:"+htmlFarbFelderschrift2+"\"> "+val3+" </td>";} 
                                               else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\" >"+val0+" </td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val1+" </td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"> "+val2+" </td><td  align="+Feld4lAlign+"  color:"+htmlFarbFelderschrift2+"\"> "+val3+" </td></tr>";} 
                                                                 else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+"> "+val0+" </td><td align="+Feld2lAlign+"> "+val1+" </td><td align="+Feld3lAlign+"> "+val2+" </td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld4lAlign+"> "+val3+" </td>";}}
                                         } break;     }                   
     } //switch ende
}
function tabelleFinish() {
     dlog("verbeite tableFinish")
     // tabelle fertigstellen
       switch (mehrfachTabelle) {  
       case 1:    break;
       case 2:    
                  if(counter%2==0)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td> </td><td> </td><td> </td><td> </td></tr>');   
                
                  break;
       case 3:   if(counter%3==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                 if(counter%3==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td> </td><td> </td><td> </td><td> </td></tr>');      
                 if(counter%3==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td> </td><td> </td><td> </td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"> </td><td> </td><td> </td><td> </td><td> </td></tr>");
               
                  break;
       case 4:   if(counter%4==3) {  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");}
                 if(counter%4==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td> </td><td> </td><td> </td><td> </td></tr>");
                 if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td> </td><td> </td><td> </td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"> </td><td> </td><td> </td><td> </td><td> </td></tr>");    
                 if(counter%4==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td> </td><td> </td><td> </td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"> </td><td> </td><td> </td><td> </td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"> </td><td> </td><td> </td><td> </td><td> </td></tr>");      
                 break; } 
         var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"  Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
       var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"  Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>";
        
        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+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
            if (htmlUberschrift) 
                { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+ buttonScript : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+ buttonScript ;
              } else {
               zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+ buttonScript :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+ buttonScript;
                 }
  // log("bin raus aus tabelleBind");
           if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
 var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" >"+htmlFeldUeber+"  Last Update: "+formatDate(getDateObject((parseFloat((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);
if (braucheMaterialDesignWidget) {
     
     makeJsonWidget(myArr,myArrFolder,myArrService,myArrButtons,myArrBefehle)
     if(wantExtra)    getProxmox()
     removeOthers  ?  setState(dpMaterialWidget,JSON.stringify(obj2)) : setState(dpMaterialWidget,JSON.stringify(myJsonWidget2));  ; 
      
 
       myJsonWidget2=[];
}
}
function tabelleMachSchoen(){
switch (mehrfachTabelle) {  
       case 1:    break;
       case 2:    
                  if(counter%2==0)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td> </td><td> </td><td> </td><td> </td></tr>');   
                
                  break;
       case 3:   if(counter%3==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                 if(counter%3==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td> </td><td> </td><td> </td><td> </td></tr>');      
                 if(counter%3==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td> </td><td> </td><td> </td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"> </td><td> </td><td> </td><td> </td><td> </td></tr>");
               
                  break;
       case 4:   if(counter%4==3) {  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");}
                 if(counter%4==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td> </td><td> </td><td> </td><td> </td></tr>");
                 if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td> </td><td> </td><td> </td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"> </td><td> </td><td> </td><td> </td><td> </td></tr>");    
                 if(counter%4==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td> </td><td> </td><td> </td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"> </td><td> </td><td> </td><td> </td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\"> </td><td> </td><td> </td><td> </td><td> </td></tr>");      
                 break; } 
}
function ColorLuminance(hex, lum) {
   // validate hex string
   hex = String(hex).replace(/[^0-9a-f]/gi, '');
   if (hex.length < 6) {
   	hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];
   }
   lum = lum || 0;
   // convert to decimal and change luminosity
   var rgb = "#", c, i;
   for (i = 0; i < 3; i++) {
   	c = parseInt(hex.substr(i*2,2), 16);
   	c = Math.round(Math.min(Math.max(0, c + (c * lum)), 255)).toString(16);
   	rgb += ("00"+c).substr(c.length);
   }
   return rgb;
}
function makeJsonWidget(vax1,vax2,vax3,vax4,vax5) {
//	log(myJsonWidget)
if (braucheMaterialDesignWidget) {
  //  log(vax1.toString())
    //log(vax2.toString())
    //log(vax3.toString())
    
    for (var iii=0;iii<vax1.length;iii++){      
let  mystatuscolorbar=""; 
   //  vax1[iii][8] ? mystatuscolorbar=farbeUeber : mystatuscolorbar=farbeOffline
let  myimage=""; 
let myschriftgroesse=(parseInt(htmlSchriftgroesse.replace("px",""))+10)+"px"
let mytext
let mybkgd;
//myshellIp= `<a href="https://${vax1[iii][2]}:4200"> target="_blank" onclick="window.open(this.href,this.target,width=760,height=640)> </a> ${shellBox} `
let   myshellIp= ""
 if(braucheShellInaBox) myshellIp= " <a href=\"https:\/\/"+ vax1[iii][2] + ":4200\" target=\"_blank\" onclick=\"window.open(this.href,this.target,\'width=800,height=640\'); return false;\">"+shellBox+"</a>"
  vax1[iii][8] ? mytext=`<span style="color:  ${farbeUeber}; font-size: ${(myschriftgroesse)}"> ${vax1[iii][0]}  </span>${myshellIp}<span style="color:  ${farbeUeber}; font-size: ${(htmlSchriftgroesse)}">${vax1[iii][6]}`  :
                 mytext=`<span style="color:  ${farbeMDschriftOffline}; font-size: ${(htmlSchriftgroesse)}"> ${vax1[iii][0]}  </span><span style="color:  ${farbeMDschriftOffline}; font-size: ${(myschriftgroesse)}">OFFLINE` ;
 vax1[iii][8] ? mybkgd="" : mybkgd=farbeMDbackgroundOffline
    myimage="https://upload.wikimedia.org/wikipedia/commons/8/82/IoBroker_Logo.png"
for(let device_name in apName) { //log(device_name)                           //Abfrage welches bild
                    for (var i=0;i<vax1.length;i++){
                     if (vax1[iii][0].trim()==device_name.trim()) myimage=apName[device_name].aname; }}//" height=\""+bildergröße+"\" width=\""+bildergröße+"\">"; } } // log(myimage)
 //ColorLuminance(farbeUeber,0.6); log(mysonderFarbe)
let mysubText
//let mytemp; vax1[iii][3]!="" ? mytemp="CPU Temp: "+vax1[iii][3] + "°C"  :  mytemp="";
let mysonderFarbeHDundTEMP2;
let mysonderFarbeHDundTEMP3;
let blinkklasse=""
let blinkklasse2=""
let arrMem;let arrSwap;let arrTProc; let myMem="";let mySwap="";let myTProc=""; let myMemTable="";let myProcess="";let mySwapRow;let myMemRow
if(vax1[iii][12]!=""){arrMem=vax1[iii][12].split(";");myMemRow="MEM"} else{arrMem=["","",""];myMemRow=""}
if(vax1[iii][13]!=""){arrSwap=vax1[iii][13].split(";");mySwapRow="SWAP"} else{arrSwap=["","",""];mySwapRow=""}
if(vax1[iii][14]!=""){arrTProc=vax1[iii][14].split(";")} else{arrTProc=["","",""]}
//if(vax1[iii][12]!="") log(arrMem[0]+"  " +arrSwap[0] +"  " +arrTProc[0])
if(arrMem[0]!="" || arrSwap[0]!="") {myMemTable=`</br>
                 <table  rules="cols" align="center" > <tr><td style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};">(in MB)</td><td style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};">Total</td><td style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};">Used</td><td style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};">Free</td></tr>
                <tr><td style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};">${myMemRow}</td><td style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};" align="center"> ${arrMem[0]} </td><td style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};" align="center"> ${arrMem[1]} </td><td style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};" align="center"> ${arrMem[2]}</td></tr>
                <tr><td style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};">${mySwapRow}</td><td style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};" align="center"> ${arrSwap[0]} </td><td style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};" align="center"> ${arrSwap[1]}  </td><td style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse}; align="center">${arrSwap[2]}</td></tr></table>`} else{myMemTable=""}
if( arrTProc[0]!="") {myProcess=`<div style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};"> Top-Proc: <span style="font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse+2}; color: ${mysonderFarbeHDundTEMP};" >${arrTProc[0]}%</span> ${arrTProc[1].substring(0,15)} </div>`} else {myProcess=""}
if(vax1[iii][3]>thresholTemp) { mysonderFarbeHDundTEMP2="yellow"; blinkklasse="blinkklasse" } else {mysonderFarbeHDundTEMP2=mysonderFarbeHDundTEMP;blinkklasse="nix"}
let mytemp; vax1[iii][3]!="" ? mytemp="CPU Temp: "+`<span class=${blinkklasse} style="font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse+2}; color: ${mysonderFarbeHDundTEMP2};" >${vax1[iii][3]} </span>` + `<span lass=${blinkklasse} style="color: ${mysonderFarbeHDundTEMP2};">°C</span> ` :  mytemp="";   
if(vax1[iii][1]>thresholHD) {mysonderFarbeHDundTEMP2="yellow"; blinkklasse="blinkklasse"} else {mysonderFarbeHDundTEMP2=mysonderFarbeHDundTEMP; blinkklasse="nix"}
if(vax1[iii][11]>thresholPakete) {mysonderFarbeHDundTEMP3="yellow";blinkklasse2="blinkklasse"} else {mysonderFarbeHDundTEMP3=mysonderFarbeHDundTEMP;blinkklasse2="nix"}
vax1[iii][8] ?  mysubText =    
                ` <div style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};"> ${vax1[iii][2]}</div>
                <div style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};"> ${mytemp}</div>
                <div  style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};">Festplatte: <span  class=${blinkklasse} style="font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse+2}; color: ${mysonderFarbeHDundTEMP2};" >${vax1[iii][1]}</span><span style="font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse+2}; color: ${mysonderFarbeHDundTEMP2};" > %</span></div>
                ${myProcess}
                 <div style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};">Update:  ${vax1[iii][9]} <span class=${blinkklasse2} style="font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse+2}; color: ${mysonderFarbeHDundTEMP3};" >${vax1[iii][11]}</span> Paket(e)</div>
                ${myMemTable}
                `  :
                 mysubText =   ` </br>
                 <div style="color: ${farbeMDschriftOffline}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};"> ${vax1[iii][2]}</div>
                 <div style="color: ${farbeMDschriftOffline}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};">Festplatte:  ${vax1[iii][1]}%</div>
                 <div style="color: ${farbeMDschriftOffline}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};">Update:  ${vax1[iii][9]} ${vax1[iii][11]} Paket(e)</div> 
                 `
if (vax1[iii][8]) {
              mysubText=mysubText.concat(`</br>
                                          <table align="center" ><tr><td valign="top"> <div style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};">Folder:</div>
                                           `)
              mysubText=mysubText.concat(`<span display: flex; flex-direction: row;> <table align="center" >`)
for (var i=0;i<vax2.length;i++){
             if (vax2[i][0]==vax1[iii][0]) {
               mysubText=mysubText.concat(`<tr><td style="color: ${htmlFarbFelderschrift}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};" align=\"left\">${vax2[i][1]}</td><td style="color: ${htmlFarbFelderschrift}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};" align=\"left\"> ${vax2[i][2]} ${vax2[i][4]}</td></tr>` ) 
                }  }
                mysubText=mysubText.concat(`</table></span></td>`) 
                
                mysubText=mysubText.concat(`<td valign="top"><div style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};">Service:</div>
                                           `)
                mysubText=mysubText.concat(`<span display: flex; flex-direction: row;> <table align="center" >`)
for (var i=0;i<vax3.length;i++){
             if (vax3[i][0]==vax1[iii][0]) {
                let helpextra; vax3[i][2] ? helpextra=serviceTrue :helpextra=serviceFalse  
               mysubText=mysubText.concat( `<tr><td style="color: ${htmlFarbFelderschrift}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};"  align=\"left\"> ${vax3[i][1]}</td><td style="color: ${htmlFarbFelderschrift}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};" align=\"left\">${helpextra}</td></tr>`)
                }  }   
                mysubText=mysubText.concat("</table></span></td></tr></table>"  )   
//---------------------BUTTONS                 
let arrcounter=0
for (var i=0;i<vax4.length;i++){
             if (vax4[i][0]==vax1[iii][0]) {arrcounter++;
             }} //log(vax1[iii][0]+ "   "+ arrcounter.toString())                 
if (arrcounter>0) {mysubText=mysubText.concat(`</br>
                                             <div style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};">Buttons:</div>
                                           `)
                mysubText=mysubText.concat(`<span display: flex; flex-direction: row;> <table align="center"  >`)
arrcounter=arrcounter-1;
//
let mynewi=-1
for (var i=0;i<vax4.length;i++){
        
             if (vax4[i][0]==vax1[iii][0]) { 
                 mynewi++
   			//  log(mynewi+"  "+ arrcounter)
   			 if (arrcounter>=1){
   			    if(mynewi%2==1 && mynewi<=arrcounter) mysubText=mysubText.concat( `<tr ><td style="color: ${htmlFarbFelderschrift}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};"  align=\"left\"> ${vax4[i-1][1]}</td><td  align=\"left\">  <button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:${htmlSchriftgroesse}\; text\-align:left\" value=\"toggle\" onclick=\"setOnDblClickCustom1\(\'${vax4[i-1][3]}')\">${symbolLinkCommands} </td><td style="color: ${htmlFarbFelderschrift}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};" align=\"left\"> ${vax4[i][1]}</td><td  align=\"left\">  <button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:${htmlSchriftgroesse}\; text\-align:left\" value=\"toggle\" onclick=\"setOnDblClickCustom1\(\'${vax4[i][3]}')\">${symbolLinkCommands} </td></tr>`)
   				if(mynewi%2==0 && mynewi==arrcounter) mysubText=mysubText.concat( `<tr><td style="color: ${htmlFarbFelderschrift}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};" align=\"left\"> ${vax4[i][1]}</td><td align=\"left\">  <button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:${htmlSchriftgroesse}\; text\-align:left\" value=\"toggle\" onclick=\"setOnDblClickCustom1\(\'${vax4[i][3]}')\">${symbolLinkCommands} </td><td></td><td></td></tr>`)
   			 
   			 } else {
   			 mysubText=mysubText.concat( `<tr><td style="color: ${htmlFarbFelderschrift}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};" align=\"left\"> ${vax4[i][1]}</td><td align=\"left\">  <button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:${htmlSchriftgroesse}\; text\-align:left\" value=\"toggle\" onclick=\"setOnDblClickCustom1\(\'${vax4[i][3]}')\">${symbolLinkCommands} </td></tr>`)
   			 }
   			 
   			 
             //  mysubText=mysubText.concat( `<tr><td align=\"left\"> ${vax4[i][1]}</td><td align=\"left\"> (press) <button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:left\" value=\"toggle\" onclick=\"setOnDblClickCustom1\(\'${helpextra}')\">${symbolLinkCommands} </td></tr>`)
                }  // wenn servername stimmt 
                }  // durch button array
                mysubText=mysubText.concat("</table></span>")  
//				 
    } //buttons größer 0	
//---------------------Ssonstiges                 
arrcounter=0
for (var i=0;i<vax5.length;i++){
             if (vax5[i][0]==vax1[iii][0]) {arrcounter++;
             }} //log(vax1[iii][0]+ "   "+ arrcounter.toString())                 
if (arrcounter>0) {
mysubText=mysubText.concat(`</br>
                                          <div style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};">Sonstige:</div>
                                           `)
              mysubText=mysubText.concat(`<span display: flex; flex-direction: row;> <table align="center" >`)
for (var i=0;i<vax5.length;i++){
             if (vax5[i][0]==vax1[iii][0]) { let mybool = vax5[i][3] ;  if(mybool=="true") mybool= serviceTrue  ;
               mysubText=mysubText.concat(`<tr><td style="color: ${htmlFarbFelderschrift}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};" align=\"left\">${vax5[i][1]}</td><td style="color: ${htmlFarbFelderschrift}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};" align=\"left\"> ${vax5[i][3]} </td></tr>` ) 
                }  }
                mysubText=mysubText.concat(`</table></span>`) 
}
 }  //ist online - alle arrays
//  log(vax1[iii][15])                  //+formatDate(getDateObject(((new Date(vax1[iii][15]).getTime()))), "SS:mm:ss")
  vax1[iii][8] ?  mysubText = mysubText+    
                ` <div style="color: ${farbeUeber}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};">last refresh: ${formatDate(getDateObject(((new Date(vax1[iii][15]).getTime()))), "SS:mm:ss")}</div>
               
                `  :
                 mysubText = mysubText + ` </br>
                 <div style="color: ${farbeMDschriftOffline}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};">last refresh: ${formatDate(getDateObject(((new Date(vax1[iii][15]).getTime()))), "SS:mm:ss")}</div>
                 <div style="color: ${farbeMDschriftOffline}; font-family: ${htmlSchriftart}; font-size: ${htmlSchriftgroesse};">         am:     ${formatDate(getDateObject(((new Date(vax1[iii][15]).getTime()))), "TT.MM.JJJJ")}</div>
                 `
//log(mytext)
   //    if(vax3<=1)   vax5=farbeNurEinTag               
    
     myJsonWidget2.push({
               text: mytext,
               subText: mysubText,
               statusBarColor: mystatuscolorbar,
               image: myimage,
               background: mybkgd,
               imageColor: "",
               listType: "text",
               showValueLabel: false,
               name: "",
               status: "",
               Wert : "",
               Hersteller : ""
           });
}
 }}
// struktur der array
// server:     servername,   Hd  ,   ip  , temp,     restart-pfad,     shutdown-pfad.,  version    ,bild mit style,   isOnline,     upgrade,   last update,   anzahl update, mem,  swap , top-process
// folder:     servername,ordnername,ordnergröße,lauf. zähler ordner,einheit,id
// service:    servername,servicename,lauf. anzahl service, id
// buttons:    servername,buttonname,lauf. anzahl button,id
// befehle:    servername,befehlnname,lauf. anzahl befehl, Wert vin id
function getProxmox () {
let merker=0;
let mynewObj
 let mynewObj2
 obj1=[]
  obj2=[]
for(var index in myJsonWidget2 ) {
      merker=0;
   for(var me in wantExtra){
     
   if(myJsonWidget2[index].text.replace(/.+px\"\> (.+) \<\/span\>.+/g,"$1").trim()== wantExtra[me]) { //log(me)
          mynewObj=JSON.parse(JSON.stringify(myJsonWidget2[index]));
          obj1.push(mynewObj)
          merker=1
          } //proxarr
       /*   else { log("jetzt  "+ myJsonWidget2[index].text.replace(/.+px\"\> (.+) \<\/span\>.+/g,"$1")+ "  "+ wantExtra[me] )
           if(parseInt(me)==0){    mynewObj2=JSON.parse(JSON.stringify(myJsonWidget2[index]));
               obj2.push(mynewObj2)}
          } */
   
  
   }
    if(merker==0) {mynewObj2=JSON.parse(JSON.stringify(myJsonWidget2[index])); 
                  obj2.push(mynewObj2) ;
                  merker=0;}
} setState(dpMaterialWidgetExtra,JSON.stringify(obj1)) ;}
    on({id: myArrRefresh ,  change: "ne"}, function (obj) { 
  
  let timeout = setTimeout(function () {
 dlog("BIN DRIN in Refresh")
    if (!is_running) writeHTML();
    if (braucheEinFile && !is_running) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
}, 5000);
     
   });