Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Script fürTabelle der Batterie Zustände

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Script fürTabelle der Batterie Zustände

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

      @sigi234

      lieber das hier - da sollten auch andere namen sein

      
      
      
      //HIER WIRD PFAD UND FILENAME DEFINIERT
      const path = "/htmlakku.html";                   //FIlenamen definieren
      const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
      let   braucheEinFile=true;                          // bei true wird ein file geschrieben
      let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
      let dpVIS="controll-own.0.TABELLEN.AKKU"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
      var battAlarm=30;
      var battAlarmWarning=50;
      let mySchedule="  0 */2 * * * ";                       //jede stunde  
      //---------------------------------------
      
      //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
      var htmlFeld1='Device';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
      var htmlFeld2='Percent';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
      var htmlFeld3='Status';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
      //-----------------------------------
      
      
      //hier werden die styles für die tabelle definiert
      //ÜBERSCHRIFT ÜBER TABELLE
      let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
      let   htmlSignature=true;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
      const htmlFeldUeber='Batterie Zustand Sensoren';              // Überschrift und Signature
      const htmlFarbUber="white";                         // Farbe der Überschrift
      const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
      const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
      //MEHRERE TABELLEN NEBENEINANDER
      let   mehrfachTabelle=4;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
      const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
      const htmlFarbTableColorUber="black";               // Überschrift in der tabelle - der einzelnen Spalten
      //GANZE TABELLE
      let abstandZelle="1";
      let weite="auto";                                     //Weite der Tabelle
      let zentriert=true;                                   //ganze tabelle zentriert
      const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
      const htmlSchriftart="Helvetica";
      const htmlSchriftgroesse="12px";
      //FELDER UND RAHMEN
      let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
      const htmlFarbFelderschrift="#000000";                  // SchriftFarbe der Felder
      const htmlFarbFelderschrift2="#000000";                 // SchriftFarbe der Felder für jede 2te Tabelle
      const htmlFarbTableColorGradient1="grey";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
      const htmlFarbTableColorGradient2="white";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
      const htmlFarbTableBorderColor="blue";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
      let htmlRahmenLinien="rows";                            // 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 style=\"color:"+htmlFarbTableColorUber+"; font-weight: bold\">";
      const htmlTabUeber3="</tr>";
      /*
      table td:first-child {}  //1
      table td:nth-child(2) {} //2
      table td:nth-child(3) {} //3
      table td:last-child {}   //4
      */
      
      //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 3
      
         	var htmlTabUeber2="<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>";
      var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                         "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
      //------------------------------------------------------
      
      
      var htmlTabUeber="";
      var htmlOut="";
      var mix;
      var counter;
      //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
      var val1; var val0; var val2;
      
      function writeHTML(){
      
      
      htmlOut="";
      
      counter=-1;
      htmlTabUeber="";
      switch (mehrfachTabelle) { 
         case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
         case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
         case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
         case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
      };   
      if (!UeberschriftSpalten) {htmlTabUeber=""}
      
      
      //--------------------------------------------------------------------------------------------------------------------------------------------------
      //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
      //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
      //--------------------------------------------------------------------------------------------------------------------------------------------------
      var myColl=[];
      var val1help;
      
            // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
            counter=0;
            val0="<font color=\"blue\"><b>HUE Devices</b>"; val1=""; val2="";
            tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
            tabelleAusbessern();
            counter=-1
      
      
      $('hue.0.*.LOWBAT').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
              var ida = id.split('.');
             
              
                counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                 val0=getObject(id).common.name ; //ida[2]+"."+ida[3];
               // log(val0+"   "+id);
                val1help=getState(id).val;
                if (val1help) {val1=(" <font color=\"red\"> ")+"bat low"} else{val1=(" <font color=\"green\"> ")+"bat ok"} 
               // if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
               // if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                if (val1help) {val2="❌"} else{val2="✅"}         
               // if (val1help>battAlarm && val1help<=battAlarmWarning) val2="⚠️"
               
           
         
           tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
       
         }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!
      
                      // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                     tabelleAusbessern();
                     counter=0;
                     val0="<font color=\"blue\"><b>HOMATIC</b>"; val1=""; val2="";
                     tabelleBind(); 
                     tabelleAusbessern();
                     counter=-1;
      
      
       $('hm-rpc.1.*.0.LOWBAT').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
              var ida = id.split('.');
             
                counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                 val0=getObject(id).common.name ; //ida[2]+"."+ida[3];
               // log(val0+"   "+id);
                val1help=getState(id).val;
                if (val1help) {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                if (val1help) {val2="❌"} else{val2="✅"}         
               // if (val1help>battAlarm && val1help<=battAlarmWarning) val2="⚠️"
           
         
           tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
          
         }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
           
           $('fritzdect.0.*.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
              var ida = id.split('.');
              
                counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                val0=ida[2]+"."+ida[3];
                log(val0+"   "+id);
                val1help=parseFloat((getState(id).val));
                if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()} else{val1=(" <font color=\"green\"> ")+val1help.toString()} 
                if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                if (val1help<=battAlarm) {val2="❌"} else{val2="✅"}         
                if (val1help>battAlarm && val1help<=battAlarmWarning) val2="⚠️"
           
         
           tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
          
         }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!    controll-own.0.HANDY.trekstorebatt2
                  tabelleAusbessern();
                   // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                  counter=0;
                  val0="<font color=\"blue\"><b>HANDYs</b>"; val1=""; val2="";
                  tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                  tabelleAusbessern();
                  counter=-1
        
            
            
               $('controll-own.0.HANDY.*batt*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
              var ida = id.split('.');
              
                counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                val0=ida[3];
                log(val0+"   "+id);
                val1help=parseFloat((getState(id).val));
                if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()} else{val1=(" <font color=\"green\"> ")+val1help.toString()} 
                if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                if (val1help<=battAlarm) {val2="❌"} else{val2="✅"}         
                if (val1help>battAlarm && val1help<=battAlarmWarning) val2="⚠️"
           
         
           tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
          
         }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
      
                   $('controll-own.0.HANDY.*Batt*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
              var ida = id.split('.');
              
                counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                val0=ida[3];
                log(val0+"   "+id);
                val1help=parseFloat((getState(id).val));
                if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()} else{val1=(" <font color=\"green\"> ")+val1help.toString()} 
                if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                if (val1help<=battAlarm) {val2="❌"} else{val2="✅"}         
                if (val1help>battAlarm && val1help<=battAlarmWarning) val2="⚠️"
           
         
           tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
          
         }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
      
      //-------------------------------------------------------------------------------------------------------------------------------------------------
      //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
      //-------------------------------------------------------------------------------------------------------------------------------------------------
      
            tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
           
      } // function ende
      
      //MAIN:
       
      schedule(mySchedule,  function () { 
       writeHTML();
       if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
      }); 
      writeHTML();  
      if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}                                 //     <tdalign
      function tabelleBind(){
             switch (mehrfachTabelle) {  
               case 1:                    htmlOut=htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;
               case 2:  if(counter%2==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&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></tr>";} break;
                                          
               case 3: if(counter%3==0 )  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&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>";} 
                                                      else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                } break;
      
      
               case 4: if(counter%4==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                         else {if(counter%2==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>";} 
                                                      else    {if(counter%2==1 && 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></tr>";} 
                                                                        else    {htmlOut = htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}}
                                                } break; } //switch ende
      
      }
      
       function tabelleAusbessern() {
      
       switch (mehrfachTabelle) {  
               case 1:    break;
               case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                          if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                          break;
               case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                          if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                          if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                          break;
               case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                          if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                          if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                          if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                          break; }
       }
      
      function tabelleFinish() {
      
       switch (mehrfachTabelle) {  
               case 1:    break;
               case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                          if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                          break;
               case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                          if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                          if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                          break;
               case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                          if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                          if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                          if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&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 : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter ;
      
                    } else {
                     zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter;
      
                       }
                       
      
        // 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>"
       var htmlEnd="</table>"+htmlUnter+"</div></body>";
       if (!htmlSignature) htmlUnter="";
      
       //mit oder ohne überschrift - zentriert oder links
      htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
       //log(htmlOut);
      
      
      }
      
      
      
      
      

      sigi234 1 Reply Last reply Reply Quote 0
      • sigi234
        sigi234 Forum Testing Most Active @liv-in-sky last edited by

        @liv-in-sky

        Screenshot (1262).png

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

          @sigi234 next

          zeig mir mal bei den hue-devices die namen - also die id und den namen (2.spalte) oder einfach den raw eintrag

          
          
          
          //HIER WIRD PFAD UND FILENAME DEFINIERT
          const path = "/htmlakku.html";                   //FIlenamen definieren
          const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
          let   braucheEinFile=true;                          // bei true wird ein file geschrieben
          let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
          let dpVIS="controll-own.0.TABELLEN.AKKU"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
          var battAlarm=30;
          var battAlarmWarning=50;
          let mySchedule="  0 */2 * * * ";                       //jede stunde  
          //---------------------------------------
          
          //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
          var htmlFeld1='Device';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
          var htmlFeld2='Percent';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
          var htmlFeld3='Status';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
          //-----------------------------------
          
          
          //hier werden die styles für die tabelle definiert
          //ÜBERSCHRIFT ÜBER TABELLE
          let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
          let   htmlSignature=true;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
          const htmlFeldUeber='Batterie Zustand Sensoren';              // Überschrift und Signature
          const htmlFarbUber="white";                         // Farbe der Überschrift
          const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
          const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
          //MEHRERE TABELLEN NEBENEINANDER
          let   mehrfachTabelle=4;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
          const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
          const htmlFarbTableColorUber="black";               // Überschrift in der tabelle - der einzelnen Spalten
          //GANZE TABELLE
          let abstandZelle="1";
          let weite="auto";                                     //Weite der Tabelle
          let zentriert=true;                                   //ganze tabelle zentriert
          const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
          const htmlSchriftart="Helvetica";
          const htmlSchriftgroesse="12px";
          //FELDER UND RAHMEN
          let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
          const htmlFarbFelderschrift="#000000";                  // SchriftFarbe der Felder
          const htmlFarbFelderschrift2="#000000";                 // SchriftFarbe der Felder für jede 2te Tabelle
          const htmlFarbTableColorGradient1="grey";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
          const htmlFarbTableColorGradient2="white";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
          const htmlFarbTableBorderColor="blue";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
          let htmlRahmenLinien="rows";                            // 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 style=\"color:"+htmlFarbTableColorUber+"; font-weight: bold\">";
          const htmlTabUeber3="</tr>";
          /*
          table td:first-child {}  //1
          table td:nth-child(2) {} //2
          table td:nth-child(3) {} //3
          table td:last-child {}   //4
          */
          
          //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 3
          
             	var htmlTabUeber2="<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>";
          var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                             "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
          //------------------------------------------------------
          
          
          var htmlTabUeber="";
          var htmlOut="";
          var mix;
          var counter;
          //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
          var val1; var val0; var val2;
          
          function writeHTML(){
          
          
          htmlOut="";
          
          counter=-1;
          htmlTabUeber="";
          switch (mehrfachTabelle) { 
             case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
             case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
             case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
             case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
          };   
          if (!UeberschriftSpalten) {htmlTabUeber=""}
          
          
          //--------------------------------------------------------------------------------------------------------------------------------------------------
          //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
          //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
          //--------------------------------------------------------------------------------------------------------------------------------------------------
          var myColl=[];
          var val1help;
          
                // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                counter=0;
                val0="<font color=\"blue\"><b>HUE Devices</b>"; val1=""; val2="";
                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                tabelleAusbessern();
                counter=-1
          
          
          $('hue.0.*.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                  var ida = id.split('.');
                 
                  
                    counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                     val0=getObject(id).common.name ; //ida[2]+"."+ida[3];
                   // log(val0+"   "+id);
                    val1help=getState(id).val;
                    if (val1help) {val1=(" <font color=\"red\"> ")+"bat low"} else{val1=(" <font color=\"green\"> ")+"bat ok"} 
                   // if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                   // if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                    if (val1help) {val2="❌"} else{val2="✅"}         
                   // if (val1help>battAlarm && val1help<=battAlarmWarning) val2="⚠️"
                   
               
             
               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
           
             }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!
          
                          // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                         tabelleAusbessern();
                         counter=0;
                         val0="<font color=\"blue\"><b>HOMATIC</b>"; val1=""; val2="";
                         tabelleBind(); 
                         tabelleAusbessern();
                         counter=-1;
          
          
           $('hm-rpc.1.*.0.LOWBAT').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                  //var ida = id.split('.');
                 
                    counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                     val0=getObject(id).common.name ; //ida[2]+"."+ida[3];
                     var ida = id.split('.');
                     val0=ida[0];
                   // log(val0+"   "+id);
                    val1help=getState(id).val;
                    if (val1help) {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                 //   if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                  //  if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                    if (val1help) {val2="❌"} else{val2="✅"}         
                   // if (val1help>battAlarm && val1help<=battAlarmWarning) val2="⚠️"
               
             
               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
              
             }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
               
          
                      tabelleAusbessern();
                       // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                      counter=0;
                      val0="<font color=\"blue\"><b>HANDYs</b>"; val1=""; val2="";
                      tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                      tabelleAusbessern();
                      counter=-1
            
                
                
                   $('controll-own.0.HANDY.*batt*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                  var ida = id.split('.');
                  
                    counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                    val0=ida[3];
                    log(val0+"   "+id);
                    val1help=parseFloat((getState(id).val));
                    if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()} else{val1=(" <font color=\"green\"> ")+val1help.toString()} 
                    if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                    if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                    if (val1help<=battAlarm) {val2="❌"} else{val2="✅"}         
                    if (val1help>battAlarm && val1help<=battAlarmWarning) val2="⚠️"
               
             
               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
              
             }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
          
                       $('controll-own.0.HANDY.*Batt*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                  var ida = id.split('.');
                  
                    counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                    val0=ida[3];
                    log(val0+"   "+id);
                    val1help=parseFloat((getState(id).val));
                    if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                    if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()} else{val1=(" <font color=\"green\"> ")+val1help.toString()} 
                    if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                    if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                    if (val1help<=battAlarm) {val2="❌"} else{val2="✅"}         
                    if (val1help>battAlarm && val1help<=battAlarmWarning) val2="⚠️"
               
             
               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
              
             }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
          
          //-------------------------------------------------------------------------------------------------------------------------------------------------
          //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
          //-------------------------------------------------------------------------------------------------------------------------------------------------
          
                tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
               
          } // function ende
          
          //MAIN:
           
          schedule(mySchedule,  function () { 
           writeHTML();
           if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
          }); 
          writeHTML();  
          if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}                                 //     <tdalign
          function tabelleBind(){
                 switch (mehrfachTabelle) {  
                   case 1:                    htmlOut=htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;
                   case 2:  if(counter%2==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&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></tr>";} break;
                                              
                   case 3: if(counter%3==0 )  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&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>";} 
                                                          else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                    } break;
          
          
                   case 4: if(counter%4==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                             else {if(counter%2==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>";} 
                                                          else    {if(counter%2==1 && 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></tr>";} 
                                                                            else    {htmlOut = htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}}
                                                    } break; } //switch ende
          
          }
          
           function tabelleAusbessern() {
          
           switch (mehrfachTabelle) {  
                   case 1:    break;
                   case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                              break;
                   case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                              if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                              break;
                   case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                              if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                              if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                              break; }
           }
          
          function tabelleFinish() {
          
           switch (mehrfachTabelle) {  
                   case 1:    break;
                   case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                              break;
                   case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                              if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                              break;
                   case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                              if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                              if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&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 : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter ;
          
                        } else {
                         zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter;
          
                           }
                           
          
            // 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>"
           var htmlEnd="</table>"+htmlUnter+"</div></body>";
           if (!htmlSignature) htmlUnter="";
          
           //mit oder ohne überschrift - zentriert oder links
          htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
           //log(htmlOut);
          
          
          }
          
          
          
          
          

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

            @sigi234

            ich frage bei den homatic das hier ab : hm-rpc.1.*.0.LOWBAT

            manche haben auch noch : 'hm-rpc.1.*.1.LOWBAT - also mit einer 1 vor LOWBAT - ich hoffe, dass ist richtig so - diese hier werden nicht mit aufgenommen

            1 Reply Last reply Reply Quote 0
            • sigi234
              sigi234 Forum Testing Most Active @liv-in-sky last edited by

              @liv-in-sky

              Screenshot (1266).png

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

                @sigi234 warte kommt gleich noch was

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

                  @sigi234

                  
                  
                  
                  //HIER WIRD PFAD UND FILENAME DEFINIERT
                  const path = "/htmlakku.html";                   //FIlenamen definieren
                  const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
                  let   braucheEinFile=true;                          // bei true wird ein file geschrieben
                  let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
                  let dpVIS="controll-own.0.TABELLEN.AKKU"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                  var battAlarm=30;
                  var battAlarmWarning=50;
                  let mySchedule="  0 */2 * * * ";                       //jede stunde  
                  //---------------------------------------
                  
                  //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
                  var htmlFeld1='Device';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                  var htmlFeld2='Percent';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                  var htmlFeld3='Status';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                  //-----------------------------------
                  
                  
                  //hier werden die styles für die tabelle definiert
                  //ÜBERSCHRIFT ÜBER TABELLE
                  let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
                  let   htmlSignature=true;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
                  const htmlFeldUeber='Batterie Zustand Sensoren';              // Überschrift und Signature
                  const htmlFarbUber="white";                         // Farbe der Überschrift
                  const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
                  const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
                  //MEHRERE TABELLEN NEBENEINANDER
                  let   mehrfachTabelle=4;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                  const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                  const htmlFarbTableColorUber="black";               // Überschrift in der tabelle - der einzelnen Spalten
                  //GANZE TABELLE
                  let abstandZelle="1";
                  let weite="auto";                                     //Weite der Tabelle
                  let zentriert=true;                                   //ganze tabelle zentriert
                  const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
                  const htmlSchriftart="Helvetica";
                  const htmlSchriftgroesse="12px";
                  //FELDER UND RAHMEN
                  let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
                  const htmlFarbFelderschrift="#000000";                  // SchriftFarbe der Felder
                  const htmlFarbFelderschrift2="#000000";                 // SchriftFarbe der Felder für jede 2te Tabelle
                  const htmlFarbTableColorGradient1="grey";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
                  const htmlFarbTableColorGradient2="white";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
                  const htmlFarbTableBorderColor="blue";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
                  let htmlRahmenLinien="rows";                            // 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 style=\"color:"+htmlFarbTableColorUber+"; font-weight: bold\">";
                  const htmlTabUeber3="</tr>";
                  /*
                  table td:first-child {}  //1
                  table td:nth-child(2) {} //2
                  table td:nth-child(3) {} //3
                  table td:last-child {}   //4
                  */
                  
                  //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 3
                  
                     	var htmlTabUeber2="<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>";
                  var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                                     "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
                  //------------------------------------------------------
                  
                  
                  var htmlTabUeber="";
                  var htmlOut="";
                  var mix;
                  var counter;
                  //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
                  var val1; var val0; var val2;
                  
                  function writeHTML(){
                  
                  
                  htmlOut="";
                  
                  counter=-1;
                  htmlTabUeber="";
                  switch (mehrfachTabelle) { 
                     case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
                     case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                     case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
                     case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                  };   
                  if (!UeberschriftSpalten) {htmlTabUeber=""}
                  
                  
                  //--------------------------------------------------------------------------------------------------------------------------------------------------
                  //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
                  //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
                  //--------------------------------------------------------------------------------------------------------------------------------------------------
                  var myColl=[];
                  var val1help;
                  
                        // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                        counter=0;
                        val0="<font color=\"blue\"><b>HUE Devices</b>"; val1=""; val2="";
                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                        tabelleAusbessern();
                        counter=-1
                  
                  
                  $('hue.0.*.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                          var ida = id.split('.');
                         
                          
                            counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                           
                           val0=getObject(id).common.name ; //ida[2]+"."+ida[3];
                             var ida = id.split('.');
                             val0=ida[0];
                            val1help=getState(id).val;
                            if (val1help) {val1=(" <font color=\"red\"> ")+"bat low"} else{val1=(" <font color=\"green\"> ")+"bat ok"} 
                           // if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                           // if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                            if (val1help) {val2="❌"} else{val2="✅"}         
                           // if (val1help>battAlarm && val1help<=battAlarmWarning) val2="⚠️"
                           
                       
                     
                       tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                   
                     }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!
                  
                                  // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                 tabelleAusbessern();
                                 counter=0;
                                 val0="<font color=\"blue\"><b>HOMATIC</b>"; val1=""; val2="";
                                 tabelleBind(); 
                                 tabelleAusbessern();
                                 counter=-1;
                  
                  
                   $('hm-rpc.1.*.0.LOWBAT').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                          //var ida = id.split('.');
                         
                            counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                             val0=getObject(id).common.name ; //ida[2]+"."+ida[3];
                             var ida = id.split('.');
                             val0=ida[0];
                           // log(val0+"   "+id);
                            val1help=getState(id).val;
                            if (val1help) {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                         //   if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                          //  if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                            if (val1help) {val2="❌"} else{val2="✅"}         
                           // if (val1help>battAlarm && val1help<=battAlarmWarning) val2="⚠️"
                       
                     
                       tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                      
                     }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
                       
                  
                              tabelleAusbessern();
                               // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                              counter=0;
                              val0="<font color=\"blue\"><b>HANDYs</b>"; val1=""; val2="";
                              tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                              tabelleAusbessern();
                              counter=-1
                    
                        
                        
                           $('controll-own.0.HANDY.*batt*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                          var ida = id.split('.');
                          
                            counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                            val0=ida[3];
                            log(val0+"   "+id);
                            val1help=parseFloat((getState(id).val));
                            if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()} else{val1=(" <font color=\"green\"> ")+val1help.toString()} 
                            if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                            if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                            if (val1help<=battAlarm) {val2="❌"} else{val2="✅"}         
                            if (val1help>battAlarm && val1help<=battAlarmWarning) val2="⚠️"
                       
                     
                       tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                      
                     }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
                  
                               $('controll-own.0.HANDY.*Batt*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                          var ida = id.split('.');
                          
                            counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                            val0=ida[3];
                            log(val0+"   "+id);
                            val1help=parseFloat((getState(id).val));
                            if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                            if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()} else{val1=(" <font color=\"green\"> ")+val1help.toString()} 
                            if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                            if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                            if (val1help<=battAlarm) {val2="❌"} else{val2="✅"}         
                            if (val1help>battAlarm && val1help<=battAlarmWarning) val2="⚠️"
                       
                     
                       tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                      
                     }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
                  
                  //-------------------------------------------------------------------------------------------------------------------------------------------------
                  //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                  //-------------------------------------------------------------------------------------------------------------------------------------------------
                  
                        tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                       
                  } // function ende
                  
                  //MAIN:
                   
                  schedule(mySchedule,  function () { 
                   writeHTML();
                   if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                  }); 
                  writeHTML();  
                  if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}                                 //     <tdalign
                  function tabelleBind(){
                         switch (mehrfachTabelle) {  
                           case 1:                    htmlOut=htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;
                           case 2:  if(counter%2==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&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></tr>";} break;
                                                      
                           case 3: if(counter%3==0 )  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&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>";} 
                                                                  else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                            } break;
                  
                  
                           case 4: if(counter%4==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                     else {if(counter%2==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>";} 
                                                                  else    {if(counter%2==1 && 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></tr>";} 
                                                                                    else    {htmlOut = htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}}
                                                            } break; } //switch ende
                  
                  }
                  
                   function tabelleAusbessern() {
                  
                   switch (mehrfachTabelle) {  
                           case 1:    break;
                           case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                      if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                      break;
                           case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                      if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                      if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                      break;
                           case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                      if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                      if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                      if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                                      break; }
                   }
                  
                  function tabelleFinish() {
                  
                   switch (mehrfachTabelle) {  
                           case 1:    break;
                           case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                      if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                      break;
                           case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                      if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                      if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                      break;
                           case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                      if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                      if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                      if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&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 : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter ;
                  
                                } else {
                                 zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter;
                  
                                   }
                                   
                  
                    // 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>"
                   var htmlEnd="</table>"+htmlUnter+"</div></body>";
                   if (!htmlSignature) htmlUnter="";
                  
                   //mit oder ohne überschrift - zentriert oder links
                  htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
                   //log(htmlOut);
                  
                  
                  }
                  
                  
                  
                  
                  

                  1 Reply Last reply Reply Quote 0
                  • A
                    Adnim last edited by Adnim

                    Hi,
                    habe hier das Device Counter Skript. Das gabs mal hier im Forum. Die beiden ersten finden alle meine HM Devices. Evtl hilft euch das ; an so einer schönen Tabelle hab ich auch Interesse, Danke dafür...

                    addDeviceCounter("lowbat",         $('channel[state.id=*LOWBAT]'),                     true);
                    addDeviceCounter("lowbat",         $('channel[state.id=*lowbat]'),                      true);
                    addDeviceCounter("sticky_unreach", $('channel[state.id=*.STICKY_UNREACH]'),              true);
                    addDeviceCounter("unreach",        $('channel[state.id=*.UNREACH]'),                     true);
                    addDeviceCounter("config_pending", $('channel[state.id=*.CONFIG_PENDING]'),              true);
                    addDeviceCounter("Motion",  $('channel[state.id=*.MOTION]'),               true);
                    addDeviceCounter("DutyCycle",  $('channel[state.id=*.DUTYCYCLE]'),               true);
                    addDeviceCounter("Spannungsüberwachung",  $('channel[state.id=*.VOLTAGE]'),           function(state){return state<200;});
                    addDeviceCounter("Auskühlschutz",  $('channel[state.id=*.ACTUAL_TEMPERATURE]'),           function(state){return state<15;});
                    //addDeviceCounter("ERROR",  $('channel[state.id=*.ERROR*]'),               function(state){return state>0;});
                    //addDeviceCounter("ERROR1", $('channel[state.id=*.ERROR*]').each(function(id, i) {
                     // log(id))};
                    addDeviceCounter("Heizbedarf",  $('channel[state.id=*.VALVE_STATE]'),           function(state){return state>15;});
                    //addDeviceCounter("Alive",         $('channel[state.id=*alive]'),                     false);
                    //addDeviceCounter("CONNECTED",         $('channel[state.id=*.connected]'),                     false);
                    addDeviceCounter("open_shutters",  $('channel{TYPE=BLIND}[state.id=*.LEVEL]'),           function(state){return state>0;});
                    addDeviceCounter("open_windows",   $('channel{TYPE=SHUTTER_CONTACT}[state.id=*.STATE]'), true);
                    
                    
                    
                    
                    
                    /******************************************
                     * Code - do not change anything bellow this line *
                     ******************************************/
                    
                    function addDeviceCounter(name, selector, val_to_count) {
                    
                        //Total amount of devices found by selector
                        var state_total = 'deviceCounter.' + name + '.total';
                        createState(state_total, 0);
                        //List of devices that match condition
                        var state_list = 'deviceCounter.' + name + '.list';
                        createState(state_list, "");
                        //Number of devices that match condition
                        var state_counter = 'deviceCounter.' + name + '.counter';
                    
                        createState(state_counter, 0);
                        function countDevs(obj) {
                            var d_count = 0;
                            var d_list  = [];
                    
                            selector.each(function (id, i) {
                                var status = getState(id).val;
                                var obj    = getObject(id);
                                if ((typeof val_to_count === 'function' && val_to_count(status)) ||
                                    (typeof val_to_count === 'boolean'  && val_to_count == status)) {
                                    //Get parent object
                                    var parentChannelId = id.slice(id.lastIndexOf("."));
                                    var parentDevicelId = id.split(".").slice(0,-2).join(".");
                                    var deviceObject = getObject(parentDevicelId);
                                    //remember device name
                                    d_list.push(deviceObject.common.name);
                                }                
                                ++d_count;                                                 // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status
                            }); 
                    
                    //if ("state_counter" > 0) {event(name + "(" + d_count + "): " + d_list);
                    //}
                    
                            setState(state_list,     d_list.join('<br>'));
                            setState(state_counter,  d_list.length);
                            setState(state_total,    d_count);
                        }
                    
                        //Re-evaluate when a device status changes
                        selector.on(function(obj) {    // bei Zustandänderung *. LOWBAT in allen Gewerken
                            countDevs(obj);
                        });
                    
                        //Re-evaluate each hour
                        schedule("*/60 * * * *", countDevs);
                        
                        //Evaluate for the first time
                        countDevs();
                    }
                    
                    sigi234 liv-in-sky 3 Replies Last reply Reply Quote 0
                    • sigi234
                      sigi234 Forum Testing Most Active @Adnim last edited by sigi234

                      @Adnim
                      Jupp, das meinte ich.

                      Da gab es Probleme mit der Schreibweise.

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

                        @Adnim danke dir - da arbeitet man mit diesen channels - wenn meine version nicht geht, werd ich mir das nochmal ansehen

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

                          @sigi234 hast du schon getestet - funktioniert es nicht ?

                          sigi234 1 Reply Last reply Reply Quote 0
                          • sigi234
                            sigi234 Forum Testing Most Active @liv-in-sky last edited by

                            @liv-in-sky sagte in Script mit Tabelle der Batterie Zustände:

                            @sigi234 hast du schon getestet - funktioniert es nicht ?

                            Screenshot (1268).png

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

                              @sigi234 oje - alle loww-bat - geh batterien kaufen 🙂

                              ich kuck nochmal

                              sigi234 D 2 Replies Last reply Reply Quote 0
                              • sigi234
                                sigi234 Forum Testing Most Active @liv-in-sky last edited by

                                @liv-in-sky sagte in Script mit Tabelle der Batterie Zustände:

                                @sigi234 oje - alle loww-bat - geh batterien kaufen 🙂

                                ich kuck nochmal

                                Devices ?

                                liv-in-sky 1 Reply Last reply Reply Quote 0
                                • D
                                  darkiop Most Active @liv-in-sky last edited by

                                  @liv-in-sky .lowbat = HomeMatic / .low_bat HomeMatic IP

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

                                    @sigi234 mist - da ist ja ein wert die stehen auf 100 kann das sein - die müßten alle neu sein

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

                                      @sigi234

                                      nochmal

                                      
                                      
                                      
                                      //HIER WIRD PFAD UND FILENAME DEFINIERT
                                      const path = "/htmlakku.html";                   //FIlenamen definieren
                                      const home ='vis.0'                                 //wo soll das file im iobroker-file-system liegen ? (oder z.b auch iqontrol.meta)
                                      let   braucheEinFile=false;                          // bei true wird ein file geschrieben
                                      let   braucheEinVISWidget=true;                     // bei true wird ein html-tabelle in einen dp geschrieben - siehe nächste zeile
                                      let dpVIS="controll-own.0.TABELLEN.AKKU"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                                      var battAlarm=30;
                                      var battAlarmWarning=50;
                                      let mySchedule="  0 */2 * * * ";                       //jede stunde  
                                      //---------------------------------------
                                      
                                      //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
                                      var htmlFeld1='Device';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                                      var htmlFeld2='Percent';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                                      var htmlFeld3='Status';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                                      //-----------------------------------
                                      
                                      
                                      //hier werden die styles für die tabelle definiert
                                      //ÜBERSCHRIFT ÜBER TABELLE
                                      let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
                                      let   htmlSignature=true;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
                                      const htmlFeldUeber='Batterie Zustand Sensoren';              // Überschrift und Signature
                                      const htmlFarbUber="white";                         // Farbe der Überschrift
                                      const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
                                      const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
                                      //MEHRERE TABELLEN NEBENEINANDER
                                      let   mehrfachTabelle=4;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                                      const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                                      const htmlFarbTableColorUber="black";               // Überschrift in der tabelle - der einzelnen Spalten
                                      //GANZE TABELLE
                                      let abstandZelle="1";
                                      let weite="auto";                                     //Weite der Tabelle
                                      let zentriert=true;                                   //ganze tabelle zentriert
                                      const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
                                      const htmlSchriftart="Helvetica";
                                      const htmlSchriftgroesse="12px";
                                      //FELDER UND RAHMEN
                                      let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
                                      const htmlFarbFelderschrift="#000000";                  // SchriftFarbe der Felder
                                      const htmlFarbFelderschrift2="#000000";                 // SchriftFarbe der Felder für jede 2te Tabelle
                                      const htmlFarbTableColorGradient1="grey";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
                                      const htmlFarbTableColorGradient2="white";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
                                      const htmlFarbTableBorderColor="blue";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
                                      let htmlRahmenLinien="rows";                            // 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 style=\"color:"+htmlFarbTableColorUber+"; font-weight: bold\">";
                                      const htmlTabUeber3="</tr>";
                                      /*
                                      table td:first-child {}  //1
                                      table td:nth-child(2) {} //2
                                      table td:nth-child(3) {} //3
                                      table td:last-child {}   //4
                                      */
                                      
                                      //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 3
                                      
                                         	var htmlTabUeber2="<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>";
                                      var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                                                         "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
                                      //------------------------------------------------------
                                      
                                      
                                      var htmlTabUeber="";
                                      var htmlOut="";
                                      var mix;
                                      var counter;
                                      //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
                                      var val1; var val0; var val2;
                                      
                                      function writeHTML(){
                                      
                                      
                                      htmlOut="";
                                      
                                      counter=-1;
                                      htmlTabUeber="";
                                      switch (mehrfachTabelle) { 
                                         case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
                                         case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                         case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
                                         case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                      };   
                                      if (!UeberschriftSpalten) {htmlTabUeber=""}
                                      
                                      
                                      //--------------------------------------------------------------------------------------------------------------------------------------------------
                                      //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
                                      //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
                                      //--------------------------------------------------------------------------------------------------------------------------------------------------
                                      var myColl=[];
                                      var val1help;
                                      
                                            // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                            counter=0;
                                            val0="<font color=\"blue\"><b>HUE Devices</b>"; val1=""; val2="";
                                            tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                            tabelleAusbessern();
                                            counter=-1
                                      
                                      
                                      $('hue.0.*.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                              var ida = id.split('.');
                                             
                                              
                                                counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                               
                                               val0=getObject(id).common.name ; //ida[2]+"."+ida[3];
                                                 var ida = val0.split('.');
                                                 val0=ida[0];
                                                val1help=getState(id).val;
                                                val1help=parseFloat((getState(id).val));
                                                if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()} else{val1=(" <font color=\"green\"> ")+val1help.toString()} 
                                                if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                                                if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                                if (val1help<=battAlarm) {val2="❌"} else{val2="✅"}         
                                                if (val1help>battAlarm && val1help<=battAlarmWarning) val2="⚠️"
                                      
                                      
                                      
                                                //if (val1help) {val1=(" <font color=\"red\"> ")+"bat low"} else{val1=(" <font color=\"green\"> ")+"bat ok"} 
                                               // if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                                               // if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                              //  if (val1help) {val2="❌"} else{val2="✅"}         
                                               // if (val1help>battAlarm && val1help<=battAlarmWarning) val2="⚠️"
                                               
                                           
                                         
                                           tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                       
                                         }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!
                                      
                                                      // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                                     tabelleAusbessern();
                                                     counter=0;
                                                     val0="<font color=\"blue\"><b>HOMATIC</b>"; val1=""; val2="";
                                                     tabelleBind(); 
                                                     tabelleAusbessern();
                                                     counter=-1;
                                      
                                      
                                       $('hm-rpc.1.*.0.LOWBAT').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                              //var ida = id.split('.');
                                             
                                                counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                                 val0=getObject(id).common.name ; //ida[2]+"."+ida[3];
                                                 var ida = val0.split('.');
                                                val0=ida[0].replace(/:.+/g,"");
                                               // log(val0+"   "+id);
                                                val1help=getState(id).val;
                                                if (val1help) {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                                             //   if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                                              //  if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                                if (val1help) {val2="❌"} else{val2="✅"}         
                                               // if (val1help>battAlarm && val1help<=battAlarmWarning) val2="⚠️"
                                           
                                         
                                           tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          
                                         }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
                                           
                                      
                                                  tabelleAusbessern();
                                                   // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                                  counter=0;
                                                  val0="<font color=\"blue\"><b>HANDYs</b>"; val1=""; val2="";
                                                  tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                  tabelleAusbessern();
                                                  counter=-1
                                        
                                            
                                            
                                               $('controll-own.0.HANDY.*batt*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                              var ida = id.split('.');
                                              
                                                counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                                val0=ida[3];
                                                log(val0+"   "+id);
                                                val1help=parseFloat((getState(id).val));
                                                if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()} else{val1=(" <font color=\"green\"> ")+val1help.toString()} 
                                                if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                                                if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                                if (val1help<=battAlarm) {val2="❌"} else{val2="✅"}         
                                                if (val1help>battAlarm && val1help<=battAlarmWarning) val2="⚠️"
                                           
                                         
                                           tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          
                                         }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
                                      
                                                   $('controll-own.0.HANDY.*Batt*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                              var ida = id.split('.');
                                              
                                                counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                                val0=ida[3];
                                                log(val0+"   "+id);
                                                val1help=parseFloat((getState(id).val));
                                                if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                                                if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()} else{val1=(" <font color=\"green\"> ")+val1help.toString()} 
                                                if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                                                if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                                if (val1help<=battAlarm) {val2="❌"} else{val2="✅"}         
                                                if (val1help>battAlarm && val1help<=battAlarmWarning) val2="⚠️"
                                           
                                         
                                           tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          
                                         }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
                                      
                                      //-------------------------------------------------------------------------------------------------------------------------------------------------
                                      //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                                      //-------------------------------------------------------------------------------------------------------------------------------------------------
                                      
                                            tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                                           
                                      } // function ende
                                      
                                      //MAIN:
                                       
                                      schedule(mySchedule,  function () { 
                                       writeHTML();
                                       if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                                      }); 
                                      writeHTML();  
                                      if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}                                 //     <tdalign
                                      function tabelleBind(){
                                             switch (mehrfachTabelle) {  
                                               case 1:                    htmlOut=htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;
                                               case 2:  if(counter%2==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&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></tr>";} break;
                                                                          
                                               case 3: if(counter%3==0 )  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&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>";} 
                                                                                      else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                                                } break;
                                      
                                      
                                               case 4: if(counter%4==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                                         else {if(counter%2==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>";} 
                                                                                      else    {if(counter%2==1 && 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></tr>";} 
                                                                                                        else    {htmlOut = htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}}
                                                                                } break; } //switch ende
                                      
                                      }
                                      
                                       function tabelleAusbessern() {
                                      
                                       switch (mehrfachTabelle) {  
                                               case 1:    break;
                                               case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                                          if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                          break;
                                               case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                                          if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                          if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                                          break;
                                               case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                                          if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                                          if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                                          if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                                                          break; }
                                       }
                                      
                                      function tabelleFinish() {
                                      
                                       switch (mehrfachTabelle) {  
                                               case 1:    break;
                                               case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                                          if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                          break;
                                               case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                                          if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                          if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                                          break;
                                               case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                                          if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                                          if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                                          if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&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 : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter ;
                                      
                                                    } else {
                                                     zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter;
                                      
                                                       }
                                                       
                                      
                                        // 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>"
                                       var htmlEnd="</table>"+htmlUnter+"</div></body>";
                                       if (!htmlSignature) htmlUnter="";
                                      
                                       //mit oder ohne überschrift - zentriert oder links
                                      htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
                                       //log(htmlOut);
                                      
                                      
                                      }
                                      
                                      
                                      
                                      
                                      

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

                                        wie könnten wir mal die tabelle testen, wenn lowbat gleich true ist - jmd eine idee

                                        1 Reply Last reply Reply Quote 0
                                        • sigi234
                                          sigi234 Forum Testing Most Active @liv-in-sky last edited by

                                          @liv-in-sky sagte in Script mit Tabelle der Batterie Zustände:

                                          @sigi234

                                          nochmal

                                          👍
                                          Screenshot (1271).png

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

                                            @sigi234 wie du die tabelle formatieren kannst, weißt du ja - isteh alles im script dokumentiert

                                            wegen den handys - schon eine idee, wie du die daten bekommst? tasker, paw adapter, fully browser (eher für tablets an der wand)

                                            sigi234 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            894
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript monitoring template
                                            67
                                            1379
                                            413296
                                            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