Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. HTML Tabelle Linux-Control Adapter

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    HTML Tabelle Linux-Control Adapter

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

      nachdem @Scrounger mal wieder einen coolen adapter "rausgelassen" hat , habe ich mal versucht, das ganze etwas vis-freundlicher zu gestallten

      edit: leider habe ich festgestellt, dass die html tabelle für mehrere server (bei mir 8 stück) eigentlich sehr unpraktisch ist (wird zu lang) - daher liegt der vorteil bei dem Material Design List Widget - siehe 2ten post

      • grundlage des scriptes ist: https://forum.iobroker.net/topic/28021/html-table-für-vis-oder-iqontrol-js-und-blockly

      • adapter thread:https://forum.iobroker.net/topic/35870/test-adapter-linux-control-v0-x-x/2

      • für übersicht in der vis (tabelle wird über html-widget mit binding angezeigt) oder in iqontrol

      • Material Design List Widget - siehe 2ten post !

      • wie üblich müssen datenpunkte selbst angelegt werden und im script eingegeben werden (z.b. let dpVIS="0_userdata.0.Tabellen.Linux-Control" oder dpMaterialWidget)

      • im setting bereich des scriptes können die html settings auf wunsch geändert werden (darstellung farbe, ...)
        die tabelle refresht jede minute

      • die bilder müssen unbedingt in der const=apName verewigt werden und natürlich auch in dr vis upgeloaded werden

      • Restart und Shutdown funktionieren in der html tabelle (sind schalter) !! - kann im setting deaktiviert werden

      • für mehrere server (proxmox) kann auch eine mehrfach-tabellen-anzeige genutzt werden

      • es gibt aber noch mehr settings, die im adapter selbst eingestellt werden müssen

      tab DATENPUNKTE setting
      datenpunkte unter control: alle MUSS
      datenpunkte unter distribution: alle optional
      datenpunkte unter updates: alle optional
      datenpunkte unter services: running optional
      datenpunkte unter info MUSS: alle
      tab BEFEHLE name des befehls MUSS befehle
      ------ ------ ------
      es müssen genau die namen des befehls eingegeben werden name des befehls
      MUSS-befehl für jeden server !!! cpu-temp die temp des servers (bei proxmox lxc,vm ausnahme)
      MUSS-befehl für jeden server !!! root das rootverzeichnis um die plattenkapazität zu prüfen

      befehle, die bei mir funktionieren
      cpu-temp (wird angepasst werden müssen):

      bei Debian: sensors | grep Package -m 1 | awk '{print $4}' | awk '{print substr($1, length($0)-6,2)}'
      bei raspi: vcgencmd measure_temp | awk '{print substr($1, length($0)-5,4)}'
      

      root-verzeichnis - prozent genutzt

      df / | grep / | awk '{ print $5}' | sed 's/%//g'
      

      ip adresse: (nicht mehr nötig - ist im adapter plaziert worden)

      hostname -I | cut -d' ' -f1
      
      tab BEFEHLE name des befehls optional
      alles was gewünscht kurz halten! die befehle müssen vor dem befehlnamen ein "befehle." stehen haben - siehe: https://forum.iobroker.net/post/475154
      Speicher mem ```free -m awk ' NR == 2 {print $2";"$3";"$4}'```
      Swap swap ```free -m awk ' NR == 3 {print $2";"$3";"$4}'```
      Top-Process top-process ```ps auxh --sort=-c awk 'NR<=1 {print $3";"$11}'```
      tab ORDNER name des ordners
      ------ ------ ------
      alles was gewünscht kurz halten! optional
      tab SERVICE service name
      service es sollte mindestens ein service ausgewählt werden (z.b. ssh) ansonsten werden alle angezeigt, was die tabelle "sprengt"
      alles was gewünscht ist vorgegeben! werden ausgewählt die namen werden gekürzt wenn zu lang, einstellbar im script

      bisher sieht die tabelle so aus:

      Image 4.png Image 1.png
      die temperatur sieht man hier nicht, da ich proxmox nutze und nur der die temp hat


      Image 9.png

      mehrfach:


      Image 3.png

      wer gerne testen möchte:

      //@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+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+htmlFeld4help+"&ensp;</td>";
      var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align=="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+""+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                         "&ensp;</td><td  align=="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld4+
                         "&ensp;</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]+"&ensp; <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!&emsp;"+"<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!&emsp;"+"<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]+"&ensp; <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!&emsp;</i> " : val2="<font color=\""+ColorLuminance(farbeOffline,mylum) +"\">-" ;
                             valButton=myArr[i][5]
                             myArr[i][5]!="" ? val3="<font color=\""+ColorLuminance(farbeOffline,mylum) +"\">"+"<i>Shutdown!&emsp;</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+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td></tr>"; break;} else
                                       {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td></tr>"; break;}
              case 2: if(counter%4==0){ 
                       if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                          ";\"align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td>"; } 
                                    else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td></tr>";} break;
                          }else{
                       if(counter%2==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                          ";\" align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td>"; } 
                                    else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td></tr>";} break;}                  
              case 3:  if(counter%2==0)   {
                        if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                              ";\" align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td>"; } 
                                    else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                              ";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td>";} 
                                                     else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td></tr>";}
                                               } break;}else{
                        if(counter%3==0 )  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                              ";\" align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td>"; } 
                                    else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+
                                                              ";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td>";} 
                                                     else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td></tr>";}
                                               } break;}
      
              case 4:  if(counter%8==0)   {
                       if(counter%4==0)  {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+ ";\" align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td>"; } 
                                        else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td>";} 
                                                     else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&ensp;>"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+ "color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td></tr>";} 
                                                                       else    {htmlOut  = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td>";}}
                                               } break;}else{
                       if(counter%4==0)   {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+ ";\" align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td>"; } 
                                        else {if(counter%4==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+ ";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td>";} 
                                                     else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\"&ensp;>"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+"  color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td></tr>";} 
                                                                       else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</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>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</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>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                       if(counter%3==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</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>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                       if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");    
                       if(counter%4==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");      
                       break; } 
      
      
               var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;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+"&ensp;&ensp;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+"&ensp;&ensp;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>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</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>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                       if(counter%3==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</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>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                       if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");    
                       if(counter%4==0)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</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\">&ensp;${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\">&ensp;${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\">&ensp;${vax4[i-1][1]}</td><td  align=\"left\">&ensp; <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\">&ensp;${vax4[i][1]}</td><td  align=\"left\">&ensp; <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\">&ensp;${vax4[i][1]}</td><td align=\"left\">&ensp; <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\">&ensp;${vax4[i][1]}</td><td align=\"left\">&ensp; <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\">&ensp;${vax4[i][1]}</td><td align=\"left\">&ensp;(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\">&ensp;${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);
           
         });
      
      
      
      
      
      
      
      
      
      

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

        meine versuche mit dem Material Widget List sieht so aus - evtl kommt auch noch MD table Widget zum einsatz

        bisher:

        Image 3.png

        Image 6.png

        dieses widget hat die möglichkeit, das ganze in 2 widgets aufzuteilen - ich habe festgestellt, das z.b der proxmox viel mehr daten zum anzeigen hat und dadurch das widget stark dominiert - im setting des scriptes kann dies eingestellt werden - es muss dafür auch ein datenpunkt angelegt sein - die server, die ein eigenes widget bekommen, können im hauptwidget bleiben oder eintfernt werden. somit ist es auch möglich die server auf verschiedene views aufzuteilen

        widget zum import

        [{"tpl":"tplVis-materialdesign-Icon-List","data":{"g_fixed":false,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","wrapItems":true,"listItemDataMethod":"jsonStringObject","countListItems":"1","vibrateOnMobilDevices":"50","listLayout":"cardOutlined","itemLayout":"vertical","listType1":"text","showValueLabel1":"true","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"json_string_oid":"0_userdata.0.Tabellen.Linux-Controll-List-Widget","maxItemsperRow":"4","iconItemMinWidth":"200","iconHeight":"35","buttonHeight":"","labelFontSize":"20","subLabelFontSize":"18","subLabelFontColor":"#e8e3e3","labelFontFamily":"Ubuntu-Regular","subLabelFontFamily":"Ubuntu-Regular","horizontalIconContainerWidth":"50","verticalIconContainerHeight":"50","buttonLayout":"round","titleLayout":"headline3","itemBackgroundColor":"#313126","labelFontColor":"#ffffff","valueFontSize":"18","g_rows_§0":false,"listType0":"text","showValueLabel0":"true","g_lock":false,"autoLockAfter":"10","lockIconTop":"5","lockIconLeft":"5","lockFilterGrayscale":"30","lockApplyOnlyOnImage":"true"},"style":{"left":"24px","top":"42px","width":"75.28%","height":"94.26%","overflow-x":"","overflow-y":"auto","z-index":"1"},"widgetSet":"materialdesign"}]
        

        bilder für server:


        Pi-Hole.png FileServer.png SQLTulla.png raspi.png PlexServer.png Proxmox.png MotionEye.png ax-hd60.png Samsung.png

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

          so sehen die datenpunkte aus, die durch den befehl-tab im setting des adapter vorkommen müssen !!!
          root und ip müssen vorkommen - cpu temp wird wird abgefragt, ob da, weil bei proxmox nur der proxmox server die temp hat und nicht die container oder vm's

          Image 12.png

          Homoran 1 Reply Last reply Reply Quote 0
          • Homoran
            Homoran Global Moderator Administrators @liv-in-sky last edited by Homoran

            @liv-in-sky Ich hab es mal wieder nicht lassen können und dein Liste "installiert"

            Leider muss ich sagen, nachdem ich lange nichts mehr gemacht hatte fiel es mir sehr schwer das Skript ans laufen zu bekommen.
            Jemand noch unbedarfteres könnte da noch mehr Probleme bekommen.
            Aber wie ich dich kenne wirst du die ersten Posts regelmäßig updaten und alle Unstimmigkeiten beheben 👍

            Das größte Problem saß mal wieder vor der Tastatur. Den Adapter von Scrounger hatte ich natürlich nicht installiert.
            Das ging ganz fix - aber es kommt immer noch nichts sinnvolles.

            Liv_in_sky_testview.png
            Was habe ich vergessen?

            Der Adapter läuft, ist mit einem RasPi4 verbunden und liefert auch Daten in die Objekte

            Ich habe nur die HTML-Tabelle erzeugt und die sieht so aus:

            <center><table bordercolor="grey" border="2px" cellspacing="2" cellpadding="2" width="auto" rules="all" style="color:#BDBDBD;  font-size:16px; font-family:Ubuntu-Regular;background-image: linear-gradient(42deg,#424242,#424242);"><tr height="35" style="color:#BDBDBD; font-size: 16px; font-weight: normal ;  border-bottom: 3px solid white "><td width=auto align=left>&ensp;Server&ensp;</td><td width=auto align=center>&ensp;&ensp;</td><td  align=center>&ensp;&ensp;</td><td align=right>&ensp;&ensp;</td></tr></table><script> function setOnDblClickCustom1( myvalue ) {var Self = this; objID = myvalue;  console.log(myvalue); Self.servConn.setState(objID, true); console.log(objID)} </script>
            
            liv-in-sky 1 Reply Last reply Reply Quote 0
            • liv-in-sky
              liv-in-sky @Homoran last edited by

              @Homoran sagte in HTML Tabelle Linux-Control Adapter:

              <center><table bordercolor="grey" border="2px" cellspacing="2" cellpadding="2" width="auto" rules="all" style="color:#BDBDBD; font-size:16px; font-family:Ubuntu-Regular;background-image: linear-gradient(42deg,#424242,#424242);"><tr height="35" style="color:#BDBDBD; font-size: 16px; font-weight: normal ; border-bottom: 3px solid white "><td width=auto align=left> Server </td><td width=auto align=center>  </td><td align=center>  </td><td align=right>  </td></tr></table><script> function setOnDblClickCustom1( myvalue ) {var Self = this; objID = myvalue; console.log(myvalue); Self.servConn.setState(objID, true); console.log(objID)} </script>

              in diesem fall wäre es besser, wenn du mir ein bild der datenpunkte machst mit offenen ordnern für einen server

              hast du im log fehler oder warnungen?

              ich weiß - die ganzen settings sind erstmal aufwendig -werden wir schon hinbekommen

              Homoran 1 Reply Last reply Reply Quote 0
              • Homoran
                Homoran Global Moderator Administrators @liv-in-sky last edited by

                @liv-in-sky sagte in HTML Tabelle Linux-Control Adapter:

                werden wir schon hinbekommen

                da habe ich überhaupt keine Bedenken!
                soll ja auch für andere von Nutzen sein

                @liv-in-sky sagte in HTML Tabelle Linux-Control Adapter:

                hast du im log fehler oder warnungen?

                hatte ich nicht gesehen, die log.xxx hatte ich aber deaktiviert
                Sind zwar viele Fehler, die kommen aber von anderen Skripten auf meinem Testsystem

                @liv-in-sky sagte in HTML Tabelle Linux-Control Adapter:

                ein bild der datenpunkte machst mit offenen ordnern für einen server

                linux_control_001.png

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

                  @Homoran habe gerade bemerkt, dass was im adapter geändert worden ist - es gibt nun einenordner command - den habe ich nicht - scrounger ist wieder fleißig - wir haben auf github über threahold werte gesprochen, damit man auch alarme bekommen kann, wenn werte überschritten worden sind - vielleicht macht er da was .ich mache ein update und werde das script anpassen - ich bin etwas früh dran mit dem script, aber ich find den adapter einfach gut

                  ich meld mich, wenn ich dsas script angepaßt habe

                  Homoran 1 Reply Last reply Reply Quote 1
                  • Homoran
                    Homoran Global Moderator Administrators @liv-in-sky last edited by

                    @liv-in-sky DANKE!

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

                      @Homoran

                      ich habe mich verschaut - bei deinem bild fehlen die befehle - hast du die im setting definiert und angeklickt ?

                      schaut das bei dir ungefähr so aus ? hier ein beispiel für den proxmox server - beim raspi ist cpu-temp anders defininiert

                      Image 14.png

                      Homoran 1 Reply Last reply Reply Quote 0
                      • Homoran
                        Homoran Global Moderator Administrators @liv-in-sky last edited by

                        @liv-in-sky sagte in HTML Tabelle Linux-Control Adapter:

                        hast du die im setting definiert und angeklickt ?

                        nein - ich dachte die Standardbefehle kommen von selber

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

                          @Homoran ne leider nicht - um flexibilität zu gewährleisten, wird das wohl über befehle gemacht - aber mal abwarten was noch kommt - scrounger hat nicht so viel zeit, daher bin ich froh um das, was wir jetzt haben

                          Homoran 1 Reply Last reply Reply Quote 0
                          • Homoran
                            Homoran Global Moderator Administrators @liv-in-sky last edited by

                            @liv-in-sky
                            OK!
                            Habe jetzt die Temp beim Raspi abgefragt, die ist jetzt in den Objekten auch da:
                            linux_control_002.png

                            aber an der Tabelle ändert sich nichts

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

                              @Homoran es müssen die exaten namen sein - so wie in meinem bild drüber
                              die namen der befehle (mit den grünen pfeilen):
                              cpu-temp
                              ip
                              root

                              Homoran 2 Replies Last reply Reply Quote 0
                              • Homoran
                                Homoran Global Moderator Administrators @liv-in-sky last edited by

                                @liv-in-sky sagte in HTML Tabelle Linux-Control Adapter:

                                es müssen die exaten namen sein

                                ok teste ich mal

                                Eben kam ganz kurz eine fragmentarische Tabelle, die beim nächsten refresh wieder verschwand.
                                mit einigen undefined und null drin

                                kurz vorher hatte ich im Adapter noch den reboot und shutdown freigegeben, der war dann auch drin

                                1 Reply Last reply Reply Quote 0
                                • Homoran
                                  Homoran Global Moderator Administrators @liv-in-sky last edited by

                                  @liv-in-sky sagte in HTML Tabelle Linux-Control Adapter:

                                  die namen der befehle (mit den grünen pfeilen):
                                  cpu-temp

                                  Cool - jetzt sind beide da 😂
                                  linux_control_003.png

                                  Habe Temperatur gelöscht

                                  Hat aber auch nix gebracht

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

                                    @Homoran ist nicht so wild - das script stört das nicht

                                    es fehlen nochdie datenpunkte : ip und root

                                    Homoran 1 Reply Last reply Reply Quote 0
                                    • Homoran
                                      Homoran Global Moderator Administrators @liv-in-sky last edited by

                                      @liv-in-sky sagte in HTML Tabelle Linux-Control Adapter:

                                      es fehlen nochdie datenpunkte : ip und root

                                      müssen die drin sein?
                                      also nicht optional?

                                      OK mache ich heute abend - muss jetzt weg

                                      liv-in-sky 2 Replies Last reply Reply Quote 0
                                      • liv-in-sky
                                        liv-in-sky @Homoran last edited by

                                        @Homoran

                                        scrounger hat evtl vor diese datenpunkte evtl auch automatisch zu holen - danke für die ersten tests - man lernt nie aus 🙂

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

                                          @Homoran sagte in HTML Tabelle Linux-Control Adapter:

                                          müssen die drin sein?
                                          also nicht optional?

                                          sollten schon drin sein

                                          Homoran 1 Reply Last reply Reply Quote 0
                                          • Homoran
                                            Homoran Global Moderator Administrators @liv-in-sky last edited by

                                            @liv-in-sky habe jetzt alle Daten eingegeben - nix

                                            Skript neu gestartet:
                                            linux_control_004.png

                                            beim nächsten refresh ist wieder alles weg

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            788
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript template
                                            7
                                            201
                                            17658
                                            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