Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Sonoff Geräte als HTML Tabelle - Vis

    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

    Sonoff Geräte als HTML Tabelle - Vis

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

      @liv-in-sky

      https://forum.iobroker.net/topic/29022/strom-geräte-als-html-tabelle-vis-iqontrol

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

        @liv-in-sky

        Sehr Cool …. Danke 👍

        1.JPG

        Meister Mopper 1 Reply Last reply Reply Quote 0
        • Meister Mopper
          Meister Mopper @Glasfaser last edited by

          @Glasfaser Hey, Du hast ja da die Werte von gestern. Wie hast Du die eingestellt? Bei mir sieht es so aus:

          2b22888a-f397-4d00-a1f6-4238ef83818d-grafik.png

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

            @Meister-Mopper

            Habe den " BlitzWolf SHP" und eine 10 Spalte dazu genommen ( vorhanden Gosund SP1 v23 )

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

              @Glasfaser respect - sich in dieses script-chaos so einzuarbeiten - kannst du mir die 10 spalten geben - dann muss ich sie nicht machen - ich bräuchte sie für meine sammlung der tabellen scripte - wäre echt nett von dir

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

                @liv-in-sky

                Logo …. habe es für mich angepasst 😉

                //@liv-in-sky Januar 2020 Gestern
                
                
                
                //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="javascript.0.Datenpunkt.DP1"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                
                let dpAnzahl="javascript.0.Datenpunkt.DP2";  //WICHTIG datenpunkt erstellen vom typ "number" - bei 0 kein alarm und größer 0 die anzahl der schlechten batterien
                
                let htmlColorDeviceUeberschrift="white"
                
                let triggerBySonoffPower=false;
                
                
                
                
                
                // ------------------------    hier einstellen, was man für ein device  hat - die nicht gebraucht werden auf false setzen !!!
                
                var pow=false;
                
                var generic=false;
                
                var basic=false;
                
                var externalMitInfo=false; //noch nicht integriert
                
                var externalOhneInfo=false;  //noch nicht integriert
                
                var schalter2ch=false; 
                
                var schalter3ch=false;
                
                var dual=false; 
                
                var schalter1ch=false;
                
                var channel4=false;             //Sonoff 4CH                                             
                
                var rfbridge=false;
                
                var stdoseS2X=false;
                
                var teckin=false;
                
                var sv=false;
                
                var blitzwolf_shp=true;
                
                var sonoffDev=false;
                
                var ohneInfo=false;             // bei manchen fehlt der INFO ordner - diese werden hier erfasst
                
                //Sonderfall  Status 
                
                var linganSteckdose =false;
                
                
                
                let mySchedule="  * * * * * "; 
                
                
                
                //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 5
                
                var htmlFeld1='Device';       var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                
                var htmlFeld2='Status';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                
                var htmlFeld3='Version';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                
                var htmlFeld4='WLAN';        var Feld4lAlign="right";                    // überschrift Tabellen Spalte4 und  Ausrichtung left,right or center
                
                var htmlFeld5='IP';        var Feld5lAlign="left";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                
                var htmlFeld6='';        var Feld6lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                
                var htmlFeld7='';        var Feld7lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                
                var htmlFeld8='';        var Feld8lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                
                var htmlFeld9='';        var Feld9lAlign="center";
                
                var htmlFeld10='';        var Feld10lAlign="center";
                
                
                //-----------------------------------
                
                
                
                
                
                
                
                //hier werden die styles für die tabelle definiert
                
                //ÜBERSCHRIFT ÜBER TABELLE
                
                let   htmlUberschrift=true;                           // mit Überschrift über der tabelle
                
                let   htmlSignature=true;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
                
                const htmlFeldUeber='Sonoff Devices';              // Überschrift und Signature
                
                const htmlFarbUber="white";                         // Farbe der Überschrift
                
                const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
                
                const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
                
                //MEHRERE TABELLEN NEBENEINANDER
                
                let   mehrfachTabelle=1;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                
                const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                
                const htmlFarbTableColorUber="#BDBDBD";               // Ü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="14px";
                
                //FELDER UND RAHMEN
                
                let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
                
                const htmlFarbFelderschrift="#BDBDBD";                  // SchriftFarbe der Felder
                
                const htmlFarbFelderschrift2="#D8D8D8";                 // SchriftFarbe der Felder für jede 2te Tabelle
                
                const htmlFarbTableColorGradient1="#424242";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
                
                const htmlFarbTableColorGradient2="#424242";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
                
                const htmlFarbTableBorderColor="gray";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
                
                let htmlRahmenLinien="cols";                            // 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>";
                
                
                
                
                
                //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 5
                
                
                
                
                
                var htmlTabUeber2="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+htmlFeld4+"&ensp;</td><td  align="+Feld5lAlign+">&ensp;"+htmlFeld5+"&ensp;</td><td  align="+Feld6lAlign+">&ensp;"+htmlFeld6+"&ensp;</td><td  align="+Feld7lAlign+">&ensp;"+htmlFeld7+"&ensp;</td><td  align="+Feld8lAlign+">&ensp;"+htmlFeld8+"&ensp;</td><td  align="+Feld9lAlign+">&ensp;"+htmlFeld9+"&ensp;</td></td><td  align="+Feld10lAlign+">&ensp;"+htmlFeld10+"&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;"+htmlFeld3+
                
                                  "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld4+
                
                                  "&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld5+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld6+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld7+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld8+"&ensp;</td><td align="+Feld9lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld9+"&ensp;</td>";
                
                                      //------------------------------------------------------
                
                let triggerBySonoffSwitch=false;
                
                var anzahl;
                
                var AkkuAlarm=[];
                
                var htmlOut="";
                
                var mix;
                
                var counter;
                
                var arrTrigger=[];
                
                var val1; var val2; var val0; var val3; var val4; var val5; var val6; var val7; var val8; var val9; var val10;
                
                var htmlTabUeber="";
                
                function writeHTML(){
                
                
                
                
                
                anzahl=0;
                
                htmlOut="";
                
                
                
                counter=-1;
                
                htmlTabUeber="";
                
                switch (mehrfachTabelle) { 
                
                  case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
                
                  case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                
                  case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2+htmlTabUeber2+htmlTabUeber3; break;
                
                  case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                
                }; 
                
                if (!UeberschriftSpalten) {htmlTabUeber=""}  
                
                
                
                //--------------------------------------------------------------------------------------------------------------------------------------------------
                
                //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
                
                //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2,val3,val4!!!------------------------------------------------------------
                
                //--------------------------------------------------------------------------------------------------------------------------------------------------
                
                
                
                
                
                if (triggerBySonoffPower) {
                
                   
                
                $('sonoff.*.*.POWER*').each(function(id, i) {           // trigger für power datenpunkte  !!!
                
                       //log(id)
                
                       arrTrigger.push(id) });}
                
                 if (triggerBySonoffSwitch) {      
                
                $('sonoff.*.*.Switch*').each(function(id, i) {           // trigger für power datenpunkte  !!!
                
                       //log(id)
                
                       arrTrigger.push(id) });}
                
                //log(arrTrigger.toString())
                
                var myColl=[];
                
                var val1help;
                
                
                
                 
                
                 if (pow){
                
                
                
                            // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";val9="";val8="";
                
                     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Pow (R2)</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Gesamt";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power"
                
                     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
                
                
                
                //sonoff.0.SonoffPow1.INFO.Module
                
                $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                
                  
                
                     if (getState(id).val=="Gosund SP1 v23" || getState(id).val=="RGB Smart Plug") {
                
                        // log (id)
                
                        anzahl++;
                
                       var ida = id.split('.');
                
                      
                
                         counter++; 
                
                           //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                
                         val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                
                         val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                
                         val4=getState(id.replace("Module","IPAddress")).val
                
                         val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                
                         val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                
                         let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                
                         val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                         val6=getState(id.replace("INFO.Module","ENERGY_Today")).val.toString();
                
                         val5=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                
                       
                
                         if (!getState(id.replace("INFO.Module","alive")).val) {
                
                             val1="❌";
                
                             val4=(" <font color=\"red\"> ")+val1;
                
                             val2=(" <font color=\"red\"> ")+val2;
                
                             val3=(" <font color=\"red\"> ")+" 0 %";
                
                             val5=(" <font color=\"red\"> ")+" --- ";
                
                             val6=(" <font color=\"red\"> ")+" --- ";
                
                             val7=(" <font color=\"red\"> ")+" --- ";
                
                             val0=(" <font color=\"red\"> ")+val0} 
                
                         else{
                
                             val1="✅";
                
                            // val1=(" <font color=\"lightgreen\"> ")+val1
                
                            // val2=(" <font color=\"green\"> ")+val2
                
                            // val3=(" <font color=\"green\"> ")+val3
                
                            // val0=(" <font color=\"green\"> ")+val0
                
                            }
                
                
                
                
                
                        
                
                  
                
                    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 fritzdect
                
                
                
                if (teckin){
                
                
                
                            // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                
                     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Teckin</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Gesamt";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";val8="<font color=\""+htmlColorDeviceUeberschrift+"\">Power"
                
                     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
                
                
                
                //sonoff.0.SonoffPow1.INFO.Module
                
                $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                
                  
                
                     if (getState(id).val=="Teckin") {
                
                        // log (id)
                
                        anzahl++;
                
                       var ida = id.split('.');
                
                      
                
                         counter++; 
                
                           //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                
                         val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                
                         val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                
                         val4=getState(id.replace("Module","IPAddress")).val
                
                         val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                
                         val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                
                         let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                
                         val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                         val6=getState(id.replace("INFO.Module","ENERGY_Today")).val.toString();
                
                         val5=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                
                       
                
                         if (!getState(id.replace("INFO.Module","alive")).val) {
                
                             val1="❌";
                
                             val4=(" <font color=\"red\"> ")+val1;
                
                             val2=(" <font color=\"red\"> ")+val2;
                
                             val3=(" <font color=\"red\"> ")+" 0 %";
                
                             val5=(" <font color=\"red\"> ")+" --- ";
                
                             val6=(" <font color=\"red\"> ")+" --- ";
                
                             val7=(" <font color=\"red\"> ")+" --- ";
                
                             val0=(" <font color=\"red\"> ")+val0} 
                
                         else{
                
                             val1="✅";
                
                            // val1=(" <font color=\"lightgreen\"> ")+val1
                
                            // val2=(" <font color=\"green\"> ")+val2
                
                            // val3=(" <font color=\"green\"> ")+val3
                
                            // val0=(" <font color=\"green\"> ")+val0
                
                            }
                
                
                
                
                
                        
                
                  
                
                    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 fritzdect
                
                
                
                   if (blitzwolf_shp){
                
                
                
                            // punkt 2497 tabelle dazu UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";val8="";val9="";
                
                     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>BlitzWolf SHP</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Gesamt";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Gestern";val8="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val9="<font color=\""+htmlColorDeviceUeberschrift+"\">Power"
                
                     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
                
                
                
                //sonoff.0.SonoffPow1.INFO.Module
                
                $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                
                  
                
                     if (getState(id).val=="RGB Smart Plug" || getState(id).val=="Gosund SP1 v23") {
                
                        // log (id)
                
                        anzahl++;
                
                       var ida = id.split('.');
                
                      
                
                         counter++; 
                
                           //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                
                         val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                
                         val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                
                         val4=getState(id.replace("Module","IPAddress")).val
                
                         val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                
                         val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                
                         val7=getState(id.replace("INFO.Module","ENERGY_Yesterday")).val.toString();        
                
                        // val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                         let val9_1=getState(id.replace("INFO.Module","POWER")).val;        
                
                         val9_1 ? val9=(" <font color=\"lightgreen\"> ")+"ON" : val9=(" <font color=\"red\"> ")+"OFF";
                
                         val6=getState(id.replace("INFO.Module","ENERGY_Today")).val.toString();
                
                         val5=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                         
                         val8=getState(id.replace("INFO.Module","Uptime")).val.toString()
                       
                
                         if (!getState(id.replace("INFO.Module","alive")).val) {
                
                             val1="❌";
                
                             val4=(" <font color=\"red\"> ")+val1;
                
                             val2=(" <font color=\"red\"> ")+val2;
                
                             val3=(" <font color=\"red\"> ")+" 0 %";
                
                             val5=(" <font color=\"red\"> ")+" --- ";
                
                             val6=(" <font color=\"red\"> ")+" --- ";
                
                             val7=(" <font color=\"red\"> ")+" --- ";
                             
                             val9=(" <font color=\"red\"> ")+" --- ";
                
                             val0=(" <font color=\"red\"> ")+val0} 
                
                         else{
                
                             val1="✅";
                
                            // val1=(" <font color=\"lightgreen\"> ")+val1
                
                            // val2=(" <font color=\"green\"> ")+val2
                
                            // val3=(" <font color=\"green\"> ")+val3
                
                            // val0=(" <font color=\"green\"> ")+val0
                
                            }
                
                
                
                
                
                        
                
                  
                
                    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 fritzdect
                
                
                
                if (generic){
                
                            // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";val8="";val9="";
                
                     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Generic</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">";val8="<font color=\""+htmlColorDeviceUeberschrift+"\">"
                
                     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
                
                
                
                //sonoff.0.SonoffPow1.INFO.Module
                
                $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                
                  
                
                     if (getState(id).val=="Gosund SP1 v23") {
                
                        //log (id)
                
                        anzahl++;
                
                       var ida = id.split('.');
                
                      
                
                         counter++; 
                
                           //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                
                         val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                
                         val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                
                         val4=getState(id.replace("Module","IPAddress")).val
                
                         val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                
                         val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                
                         val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                
                       //   let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                
                       //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                            val7="";
                
                       //  let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                
                       //  val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                
                         
                
                        // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                
                         //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                
                        // val6=""
                
                          val6="";
                
                       
                
                         if (!getState(id.replace("INFO.Module","alive")).val) {
                
                             val1="❌";
                
                             val4=(" <font color=\"red\"> ")+val4;
                
                             val2=(" <font color=\"red\"> ")+val2;
                
                             val3=(" <font color=\"red\"> ")+" 0 %";
                
                             val5=(" <font color=\"red\"> ")+" --- ";
                
                             val6=(" <font color=\"red\"> ")+" --- ";
                
                             val7=(" <font color=\"red\"> ")+" --- ";
                
                             val0=(" <font color=\"red\"> ")+val0} 
                
                         else{
                
                             val1="✅";
                
                            // val1=(" <font color=\"lightgreen\"> ")+val1
                
                            // val2=(" <font color=\"green\"> ")+val2
                
                            // val3=(" <font color=\"green\"> ")+val3
                
                            // val0=(" <font color=\"green\"> ")+val0
                
                            }
                
                        
                
                     
                
                  
                
                    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 xiaomi
                
                
                
                if (basic){
                
                               // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                
                     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Basic</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power"
                
                     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
                
                
                
                //sonoff.0.SonoffPow1.INFO.Module
                
                $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                
                  
                
                     if (getState(id).val=="Sonoff Basic") {
                
                      //  log (id)
                
                       var ida = id.split('.');
                
                      anzahl++;
                
                         counter++; 
                
                           //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                
                         val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                
                         val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                
                         val4=getState(id.replace("Module","IPAddress")).val
                
                         val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                
                         val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                
                         let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                
                         val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                      //   let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                
                      //   val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                
                      //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                
                      //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                        // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                
                         //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                
                         val6=""
                
                         val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                
                       
                
                         if (!getState(id.replace("INFO.Module","alive")).val) {
                
                             val1="❌";
                
                             val4=(" <font color=\"red\"> ")+val4;
                
                             val2=(" <font color=\"red\"> ")+val2;
                
                             val3=(" <font color=\"red\"> ")+" 0 %";
                
                             val5=(" <font color=\"red\"> ")+" --- ";
                
                             val6=(" <font color=\"red\"> ")+" --- ";
                
                             val7=(" <font color=\"red\"> ")+" --- ";
                
                             val0=(" <font color=\"red\"> ")+val0} 
                
                         else{
                
                             val1="✅";
                
                            // val1=(" <font color=\"lightgreen\"> ")+val1
                
                            // val2=(" <font color=\"green\"> ")+val2
                
                            // val3=(" <font color=\"green\"> ")+val3
                
                            // val0=(" <font color=\"green\"> ")+val0
                
                            }
                
                        
                
                     
                
                  
                
                    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 xiaomi
                
                
                
                 if (schalter1ch){
                
                               // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                
                     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Schalter T1 1CH</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Power";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">"
                
                     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
                
                
                
                //sonoff.0.SonoffPow1.INFO.Module
                
                $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                
                  
                
                     if (getState(id).val=="Sonoff T1 1CH") {
                
                      //  log (id)
                
                      anzahl++;
                
                       var ida = id.split('.');
                
                      
                
                         counter++; 
                
                           //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                
                         val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                
                         val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                
                         val4=getState(id.replace("Module","IPAddress")).val
                
                         val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                
                         val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                
                         val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                
                         let val6_1=getState(id.replace("INFO.Module","POWER")).val;        
                
                         val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                
                       //  let val7_1=getState(id.replace("INFO.Module","POWER2")).val;        
                
                       //  val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                       val7="";
                
                      //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                
                      //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                        // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                
                         //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                
                       //  val6=""
                
                         
                
                       
                
                         if (!getState(id.replace("INFO.Module","alive")).val) {
                
                             val1="❌";
                
                             val4=(" <font color=\"red\"> ")+val4;
                
                             val2=(" <font color=\"red\"> ")+val2;
                
                             val3=(" <font color=\"red\"> ")+" 0 %";
                
                             val5=(" <font color=\"red\"> ")+" --- ";
                
                             val6=(" <font color=\"red\"> ")+" --- ";
                
                             val7=(" <font color=\"red\"> ")+" --- ";
                
                             val0=(" <font color=\"red\"> ")+val0} 
                
                         else{
                
                             val1="✅";
                
                            // val1=(" <font color=\"lightgreen\"> ")+val1
                
                            // val2=(" <font color=\"green\"> ")+val2
                
                            // val3=(" <font color=\"green\"> ")+val3
                
                            // val0=(" <font color=\"green\"> ")+val0
                
                            }
                
                        
                
                     
                
                  
                
                    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 xiaomi
                
                
                
                if (schalter2ch){
                
                               // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                
                     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Schalter T1 2CH</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Power 1";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power 2"
                
                     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
                
                
                
                //sonoff.0.SonoffPow1.INFO.Module
                
                $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                
                  
                
                     if (getState(id).val=="Sonoff T1 2CH") {
                
                      //  log (id)
                
                      anzahl++;
                
                       var ida = id.split('.');
                
                      
                
                         counter++; 
                
                           //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                
                         val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                
                         val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                
                         val4=getState(id.replace("Module","IPAddress")).val
                
                         val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                
                         val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                
                         val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                
                         let val6_1=getState(id.replace("INFO.Module","POWER1")).val;        
                
                         val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                
                         let val7_1=getState(id.replace("INFO.Module","POWER2")).val;        
                
                         val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                      //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                
                      //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                        // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                
                         //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                
                       //  val6=""
                
                         
                
                       
                
                         if (!getState(id.replace("INFO.Module","alive")).val) {
                
                             val1="❌";
                
                             val4=(" <font color=\"red\"> ")+val4;
                
                             val2=(" <font color=\"red\"> ")+val2;
                
                             val3=(" <font color=\"red\"> ")+" 0 %";
                
                             val5=(" <font color=\"red\"> ")+" --- ";
                
                             val6=(" <font color=\"red\"> ")+" --- ";
                
                             val7=(" <font color=\"red\"> ")+" --- ";
                
                             val0=(" <font color=\"red\"> ")+val0} 
                
                         else{
                
                             val1="✅";
                
                            // val1=(" <font color=\"lightgreen\"> ")+val1
                
                            // val2=(" <font color=\"green\"> ")+val2
                
                            // val3=(" <font color=\"green\"> ")+val3
                
                            // val0=(" <font color=\"green\"> ")+val0
                
                            }
                
                        
                
                     
                
                  
                
                    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 xiaomi
                
                
                
                   if (schalter3ch){
                
                               // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                
                     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                
                     tabelleAusbessern();
                
                     counter=0;
                
                    // val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Schalter CH4 </b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Switch 1";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Switch 2"
                
                     val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Schalter T1 3CH </b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Power 1/2";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power 3";
                
                     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
                
                
                
                //sonoff.0.SonoffPow1.INFO.Module
                
                $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                
                  
                
                     if (getState(id).val=="Sonoff 3CH" ) {
                
                      //  log (id)
                
                      anzahl++;
                
                       var ida = id.split('.');
                
                      
                
                         counter++; 
                
                           //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                
                         val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                
                         val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                
                         val4=getState(id.replace("Module","IPAddress")).val
                
                         val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                
                         val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                
                         val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                
                         
                
                         let val50;
                
                         let val50_1=getState(id.replace("INFO.Module","POWER3")).val;        
                
                         val50_1 ? val50=(" <font color=\"lightgreen\"> ")+"ON" : val50=(" <font color=\"red\"> ")+"OFF";
                
                
                
                
                
                         let val6_1=getState(id.replace("INFO.Module","POWER2")).val;        
                
                         val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                
                         let val7_1=getState(id.replace("INFO.Module","POWER4")).val;        
                
                         val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                
                
                         val6= val50+"&ensp;"+val6;
                
                         
                
                         
                
                       
                
                         if (!getState(id.replace("INFO.Module","alive")).val) {
                
                             val1="❌";
                
                             val4=(" <font color=\"red\"> ")+val4;
                
                             val2=(" <font color=\"red\"> ")+val2;
                
                             val3=(" <font color=\"red\"> ")+" 0 %";
                
                             val5=(" <font color=\"red\"> ")+" --- ";
                
                             val6=(" <font color=\"red\"> ")+" --- ";
                
                             val7=(" <font color=\"red\"> ")+" --- ";
                
                             val0=(" <font color=\"red\"> ")+val0} 
                
                         else{
                
                             val1="✅";
                
                            // val1=(" <font color=\"lightgreen\"> ")+val1
                
                            // val2=(" <font color=\"green\"> ")+val2
                
                            // val3=(" <font color=\"green\"> ")+val3
                
                            // val0=(" <font color=\"green\"> ")+val0
                
                            }
                
                        
                
                     
                
                  
                
                    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 ch4
                
                
                
                   if (channel4){
                
                               // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                
                     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                
                     tabelleAusbessern();
                
                     counter=0;
                
                    // val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Schalter CH4 </b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Switch 1";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Switch 2"
                
                     val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Schalter 4CH </b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Power 1/2";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power 3/4";
                
                     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
                
                
                
                //sonoff.0.SonoffPow1.INFO.Module
                
                $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                
                  
                
                     if (getState(id).val=="Sonoff 4CH" ) {
                
                      //  log (id)
                
                      anzahl++;
                
                       var ida = id.split('.');
                
                      
                
                         counter++; 
                
                           //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                
                         val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                
                         val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                
                         val4=getState(id.replace("Module","IPAddress")).val
                
                         val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                
                         val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                
                         val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                
                         
                
                         let val40;let val50;
                
                         let val40_1=getState(id.replace("INFO.Module","POWER1")).val;        
                
                         val40_1 ? val40=(" <font color=\"lightgreen\"> ")+"ON" : val40=(" <font color=\"red\"> ")+"OFF";
                
                         let val50_1=getState(id.replace("INFO.Module","POWER3")).val;        
                
                         val50_1 ? val50=(" <font color=\"lightgreen\"> ")+"ON" : val50=(" <font color=\"red\"> ")+"OFF";
                
                
                
                
                
                         let val6_1=getState(id.replace("INFO.Module","POWER2")).val;        
                
                         val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                
                         let val7_1=getState(id.replace("INFO.Module","POWER4")).val;        
                
                         val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                
                
                         val6= val40+"&ensp;"+val6;
                
                         val7= val50+"&ensp;"+val7;
                
                         
                
                       
                
                         if (!getState(id.replace("INFO.Module","alive")).val) {
                
                             val1="❌";
                
                             val4=(" <font color=\"red\"> ")+val4;
                
                             val2=(" <font color=\"red\"> ")+val2;
                
                             val3=(" <font color=\"red\"> ")+" 0 %";
                
                             val5=(" <font color=\"red\"> ")+" --- ";
                
                             val6=(" <font color=\"red\"> ")+" --- ";
                
                             val7=(" <font color=\"red\"> ")+" --- ";
                
                             val0=(" <font color=\"red\"> ")+val0} 
                
                         else{
                
                             val1="✅";
                
                            // val1=(" <font color=\"lightgreen\"> ")+val1
                
                            // val2=(" <font color=\"green\"> ")+val2
                
                            // val3=(" <font color=\"green\"> ")+val3
                
                            // val0=(" <font color=\"green\"> ")+val0
                
                            }
                
                        
                
                     
                
                  
                
                    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 ch4
                
                
                
                 if (dual){
                
                               // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                
                     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Dual (R2) </b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Power 1";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power 2"
                
                     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
                
                
                
                //sonoff.0.SonoffPow1.INFO.Module
                
                $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                
                  
                
                     if (getState(id).val=="Sonoff Dual" || getState(id).val=="Sonoff Dual R2") {
                
                      //  log (id)
                
                      anzahl++;
                
                       var ida = id.split('.');
                
                      
                
                         counter++; 
                
                           //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                
                         val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                
                         val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                
                         val4=getState(id.replace("Module","IPAddress")).val
                
                         val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                
                         val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                
                         val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                
                         let val6_1=getState(id.replace("INFO.Module","POWER1")).val;        
                
                         val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                
                         let val7_1=getState(id.replace("INFO.Module","POWER2")).val;        
                
                         val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                      //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                
                      //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                        // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                
                         //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                
                       //  val6=""
                
                         
                
                       
                
                         if (!getState(id.replace("INFO.Module","alive")).val) {
                
                             val1="❌";
                
                             val4=(" <font color=\"red\"> ")+val4;
                
                             val2=(" <font color=\"red\"> ")+val2;
                
                             val3=(" <font color=\"red\"> ")+" 0 %";
                
                             val5=(" <font color=\"red\"> ")+" --- ";
                
                             val6=(" <font color=\"red\"> ")+" --- ";
                
                             val7=(" <font color=\"red\"> ")+" --- ";
                
                             val0=(" <font color=\"red\"> ")+val0} 
                
                         else{
                
                             val1="✅";
                
                            // val1=(" <font color=\"lightgreen\"> ")+val1
                
                            // val2=(" <font color=\"green\"> ")+val2
                
                            // val3=(" <font color=\"green\"> ")+val3
                
                            // val0=(" <font color=\"green\"> ")+val0
                
                            }
                
                        
                
                     
                
                  
                
                    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 xiaomi
                
                
                
                
                
                
                
                if (stdoseS2X){
                
                               // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                
                     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Steckdose S2X</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power"
                
                     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
                
                
                
                //sonoff.0.SonoffPow1.INFO.Module
                
                $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                
                  
                
                     if (getState(id).val=="Sonoff S2X"  ) {
                
                      //  log (id)
                
                      anzahl++;
                
                       var ida = id.split('.');
                
                      
                
                         counter++; 
                
                           //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                
                         val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                
                         val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                
                         val4=getState(id.replace("Module","IPAddress")).val
                
                         val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                
                         val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                
                         val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                
                         let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                
                         val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                         
                
                      //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                
                      //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                        // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                
                         //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                
                         val6=""
                
                         
                
                       
                
                         if (!getState(id.replace("INFO.Module","alive")).val) {
                
                             val1="❌";
                
                             val4=(" <font color=\"red\"> ")+val4;
                
                             val2=(" <font color=\"red\"> ")+val2;
                
                             val3=(" <font color=\"red\"> ")+" 0 %";
                
                             val5=(" <font color=\"red\"> ")+" --- ";
                
                             val6=(" <font color=\"red\"> ")+" --- ";
                
                             val7=(" <font color=\"red\"> ")+" --- ";
                
                             val0=(" <font color=\"red\"> ")+val0} 
                
                         else{
                
                             val1="✅";
                
                            // val1=(" <font color=\"lightgreen\"> ")+val1
                
                            // val2=(" <font color=\"green\"> ")+val2
                
                            // val3=(" <font color=\"green\"> ")+val3
                
                            // val0=(" <font color=\"green\"> ")+val0
                
                            }
                
                        
                
                     
                
                  
                
                    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 xiaomi
                
                
                
                if (linganSteckdose){
                
                               // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                
                     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Lingan Steckdose</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power"
                
                     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
                
                
                
                //sonoff.0.SonoffPow1.INFO.Module
                
                $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                
                  
                
                     if (getState(id).val=="Lingan SWA1") {
                
                      //  log (id)
                
                       var ida = id.split('.');
                
                         anzahl++;
                
                         counter++; 
                
                           //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                
                         val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                
                         val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                
                         val4=getState(id.replace("Module","IPAddress")).val
                
                         val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                
                         val3="na"; //getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                
                         val5="na"; //val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                
                         let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                
                         val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                         
                
                      //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                
                      //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                        // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                
                         //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                
                         val6=""
                
                         
                
                       
                
                         if (!getState(id.replace("INFO.Module","alive")).val) {
                
                             val1="❌";
                
                             val4=(" <font color=\"red\"> ")+val4;
                
                             val2=(" <font color=\"red\"> ")+val2;
                
                             val3=(" <font color=\"red\"> ")+" 0 %";
                
                             val5=(" <font color=\"red\"> ")+" --- ";
                
                             val6=(" <font color=\"red\"> ")+" --- ";
                
                             val7=(" <font color=\"red\"> ")+" --- ";
                
                             val0=(" <font color=\"red\"> ")+val0} 
                
                         else{
                
                             val1="✅";
                
                            // val1=(" <font color=\"lightgreen\"> ")+val1
                
                            // val2=(" <font color=\"green\"> ")+val2
                
                            // val3=(" <font color=\"green\"> ")+val3
                
                            // val0=(" <font color=\"green\"> ")+val0
                
                            }
                
                        
                
                     
                
                  
                
                    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 xiaomi
                
                
                
                
                
                if (rfbridge){
                
                               // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                
                     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>RF Bridge</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Received";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power "
                
                     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
                
                
                
                //sonoff.0.SonoffPow1.INFO.Module
                
                $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                
                  
                
                     if (getState(id).val=="Sonoff Bridge") {
                
                      //  log (id)
                
                       var ida = id.split('.');
                
                      anzahl++;
                
                         counter++; 
                
                           //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                
                         val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                
                         val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                
                         val4=getState(id.replace("Module","IPAddress")).val
                
                         val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                
                         val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                
                         let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                
                         val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                      //   let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                
                      //   val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                
                      //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                
                      //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                        // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                
                         //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                
                         val6=getState(id.replace("INFO.Module","RfReceived_Data")).val;
                
                         val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                
                       
                
                         if (!getState(id.replace("INFO.Module","alive")).val) {
                
                             val1="❌";
                
                             val4=(" <font color=\"red\"> ")+val4;
                
                             val2=(" <font color=\"red\"> ")+val2;
                
                             val3=(" <font color=\"red\"> ")+" 0 %";
                
                             val5=(" <font color=\"red\"> ")+" --- ";
                
                             val6=(" <font color=\"red\"> ")+" --- ";
                
                             val7=(" <font color=\"red\"> ")+" --- ";
                
                             val0=(" <font color=\"red\"> ")+val0} 
                
                         else{
                
                             val1="✅";
                
                            // val1=(" <font color=\"lightgreen\"> ")+val1
                
                            // val2=(" <font color=\"green\"> ")+val2
                
                            // val3=(" <font color=\"green\"> ")+val3
                
                            // val0=(" <font color=\"green\"> ")+val0
                
                            }
                
                        
                
                     
                
                  
                
                    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 xiaomi
                
                
                
                
                
                if (ohneInfo){
                
                               // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                
                     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Sonderfälle ohne INFO</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                
                     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
                
                var arrFilt=[];
                
                //sonoff.0.SonoffPow1.INFO.Module
                
                
                
                $('sonoff.*.*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                
                
                
                       var ida = id.split('.');
                
                
                
                       //  log(ida[0]+"."+ida[1]+"."+ida[2]+"."+"INFO.IPAddress")
                
                
                
                         $(ida[0]+"."+ida[1]+"."+ida[2]+"."+"INFO.IPAddress").each(function(id, i) {   // kontrolliere ob  vorhanden
                
                           
                
                             var idc = id.split('.');
                
                             if(!arrFilt.includes(idc[2])){
                
                           //  log(idc[2])
                
                          arrFilt.push(idc[2])}
                
                          });
                
                         
                
                });
                
                
                
                //log("filter: "+arrFilt.toString())
                
                //sonoff.0.ShellyWC.alive
                
                $('sonoff.*.*.alive').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                
                
                
                  var ida = id.split('.');
                
                  //log(ida[2])
                
                     //  log (" hier die werte: "+id)
                
                   //  if (filterArray.includes) {
                
                         if (!arrFilt.includes(ida[2])) {
                
                     //   log (id)
                
                     
                
                      anzahl++;
                
                         counter++; 
                
                           //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                
                         val1=getState(id).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                
                         val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                
                         val4=" na "; //getState(id.replace("Module","IPAddress")).val
                
                         val2=" na "; //getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                
                         val3="na"; //getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                
                         val5="na"; //val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                
                         val7="na" // let val7_1=getState(id.replace("alive","POWER")).val;        
                
                        // val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                         
                
                      //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                
                      //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                        // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                
                         //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                
                         ida[2].includes("Bridge") ?  val6=getState(id.replace("alive","RfReceived_Data")).val : val6="";
                
                         
                
                         
                
                       
                
                         if (!getState(id).val) {
                
                             val1="❌";
                
                             val4=(" <font color=\"red\"> ")+val4;
                
                             val2=(" <font color=\"red\"> ")+val1;
                
                             val3=(" <font color=\"red\"> ")+" 0 %";
                
                             val5=(" <font color=\"red\"> ")+" --- ";
                
                             val6=(" <font color=\"red\"> ")+" --- ";
                
                             val7=(" <font color=\"red\"> ")+" --- ";
                
                             val0=(" <font color=\"red\"> ")+val0} 
                
                         else{
                
                             val1="✅";
                
                            // val1=(" <font color=\"lightgreen\"> ")+val1
                
                            // val2=(" <font color=\"green\"> ")+val2
                
                            // val3=(" <font color=\"green\"> ")+val3
                
                            // val0=(" <font color=\"green\"> ")+val0
                
                            }
                
                        
                
                     
                
                  
                
                    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 xiaomi
                
                
                
                 if (sv){
                
                               // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                
                     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Sonoff SV</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">"
                
                     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
                
                
                
                //sonoff.0.SonoffPow1.INFO.Module
                
                $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                
                  
                
                     if (getState(id).val=="Sonoff SV") {
                
                      //  log (id)
                
                       var ida = id.split('.');
                
                      anzahl++;
                
                         counter++; 
                
                           //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                
                         val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                
                         val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                
                         val4=getState(id.replace("Module","IPAddress")).val
                
                         val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                
                         val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                
                       //  let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                
                         //val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                         val7="";
                
                      //   let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                
                      //   val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                
                      //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                
                      //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                        // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                
                         //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                
                         val6=""
                
                         val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                
                       
                
                         if (!getState(id.replace("INFO.Module","alive")).val) {
                
                             val1="❌";
                
                             val4=(" <font color=\"red\"> ")+val4;
                
                             val2=(" <font color=\"red\"> ")+val2;
                
                             val3=(" <font color=\"red\"> ")+" 0 %";
                
                             val5=(" <font color=\"red\"> ")+" --- ";
                
                             val6=(" <font color=\"red\"> ")+" --- ";
                
                             val7=(" <font color=\"red\"> ")+" --- ";
                
                             val0=(" <font color=\"red\"> ")+val0} 
                
                         else{
                
                             val1="✅";
                
                            // val1=(" <font color=\"lightgreen\"> ")+val1
                
                            // val2=(" <font color=\"green\"> ")+val2
                
                            // val3=(" <font color=\"green\"> ")+val3
                
                            // val0=(" <font color=\"green\"> ")+val0
                
                            }
                
                        
                
                     
                
                  
                
                    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 xiaomi
                
                
                
                   if (sonoffDev){
                
                               // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                
                     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                
                     tabelleAusbessern();
                
                     counter=0;
                
                     val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Sonoff Dev</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">"
                
                     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
                
                
                
                //sonoff.0.SonoffPow1.INFO.Module
                
                $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                
                  
                
                     if (getState(id).val=="Sonoff Dev") {
                
                      //  log (id)
                
                       var ida = id.split('.');
                
                      anzahl++;
                
                         counter++; 
                
                           //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                
                         val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                
                         val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                
                         val4=getState(id.replace("Module","IPAddress")).val
                
                         val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                
                         val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                
                       //  let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                
                         //val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                         val7="";
                
                      //   let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                
                      //   val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                
                      //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                
                      //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                
                        // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                
                         //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                
                         val6=""
                
                         val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                
                       
                
                         if (!getState(id.replace("INFO.Module","alive")).val) {
                
                             val1="❌";
                
                             val4=(" <font color=\"red\"> ")+val4;
                
                             val2=(" <font color=\"red\"> ")+val2;
                
                             val3=(" <font color=\"red\"> ")+" 0 %";
                
                             val5=(" <font color=\"red\"> ")+" --- ";
                
                             val6=(" <font color=\"red\"> ")+" --- ";
                
                             val7=(" <font color=\"red\"> ")+" --- ";
                
                             val0=(" <font color=\"red\"> ")+val0} 
                
                         else{
                
                             val1="✅";
                
                            // val1=(" <font color=\"lightgreen\"> ")+val1
                
                            // val2=(" <font color=\"green\"> ")+val2
                
                            // val3=(" <font color=\"green\"> ")+val3
                
                            // val0=(" <font color=\"green\"> ")+val0
                
                            }
                
                        
                
                     
                
                  
                
                    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 xiaomi
                
                
                
                
                
                //   if (AkkuAlarm.length >=1 ) {setState(dpAlarm,AkkuAlarm.length)} else {setState(dpAlarm,AkkuAlarm.length)}
                
                  // log("BATTERIE Alarm     : "+AkkuAlarm.length.toString());
                
                //-------------------------------------------------------------------------------------------------------------------------------------------------
                
                //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                
                //-------------------------------------------------------------------------------------------------------------------------------------------------
                
                
                
                   tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                
                
                
                   setState(dpAnzahl,anzahl); 
                
                
                
                  
                
                
                
                } // function ende
                
                
                
                
                
                
                
                //MAIN:
                
                
                
                schedule(mySchedule,  function () {
                
                writeHTML();
                
                if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                
                }); 
                
                writeHTML();
                
                  				 function tabelleBind(){
                
                    //HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT - hat man oben 5 Felder definiert, braucht man hier 5 Werte
                
                  
                
                      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><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td><td align="+Feld9lAlign+">&ensp;"+val8+"&ensp;</td><td align="+Feld10lAlign+">&ensp;"+val9+"&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><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                
                                             else {htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                
                                             else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";} 
                
                                                                                else    {htmlOut = htmlOut = htmlOut+"<td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td>&ensp;"+val1+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td>&ensp;</td><td>&ensp;</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><td>&ensp;</td><td>&ensp;</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><td>&ensp;</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><td>&ensp;</td><td>&ensp;</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><td>&ensp;</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><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() {
                
                
                
                     // tabelle fertigstellen
                
                      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><td>&ensp;</td><td>&ensp;</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><td>&ensp;</td><td>&ensp;</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><td>&ensp;</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><td>&ensp;</td><td>&ensp;</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><td>&ensp;</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><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")+"&ensp;&ensp;Anzahl: "+anzahl+"</p>"; 
                
                      var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: center;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss")+"&ensp;&ensp;Anzahl: "+anzahl+"</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);
                
                
                
                }
                
                
                
                   on({id: arrTrigger, ack: false, change: "any"}, function (obj) { 
                
                      log("TRIGGERED");
                
                   writeHTML();
                
                   if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                
                
                
                    
                
                  });
                

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

                  @Meister-Mopper es wird gerade eine tabelle entwickelt, bei der es um diese strom und leistungswerte geht - vielleicht ist das was für dich

                  https://forum.iobroker.net/topic/29022/strom-geräte-als-html-tabelle-vis-iqontrol/13

                  da wird das gestern sichlich drin sein

                  1 Reply Last reply Reply Quote 0
                  • crunchip
                    crunchip Forum Testing Most Active last edited by

                    @liv-in-sky es gibt mehrere Modelle

                    • SP1 mit Verbrauchsmessung
                    • SP111 mit Verbrauchmessung
                    • SP112 mit USB Anschlüssen und Verbrauchsmessung
                    • Sp211 Doppelzwischenstecker

                    ich habe aber nur die Variante SP1
                    9d48e120-b804-460c-8a28-86ac21d00f21-image.png

                    2ad7679a-9b3c-49e8-9415-4097f271a317-image.png
                    so viel ich weiß, laufen die SP111 unter Blitzwolf SHP 45

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

                      @crunchip

                      wenn du testen magst - allses ab zeile 15 muss kopiert werden

                      //@liv-in-sky Januar 2020
                      
                      //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.SONOFF"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                      let dpAnzahl="controll-own.0.TABELLEN.AnzahlSonoff";  //WICHTIG datenpunkt erstellen vom typ "number" - bei 0 kein alarm und größer 0 die anzahl der schlechten batterien
                      let htmlColorDeviceUeberschrift="white"
                      let triggerBySonoffPower=true;
                      
                      
                      // ------------------------    hier einstellen, was man für ein device  hat - die nicht gebraucht werden auf false setzen !!!
                      var pow=true;
                      var generic=true;
                      var basic=true;
                      var externalMitInfo=false; //noch nicht integriert
                      var externalOhneInfo=false;  //noch nicht integriert
                      var schalter2ch=true; 
                      var schalter3ch=true;
                      var dual=true; 
                      var schalter1ch=true;
                      var channel4=true;             //Sonoff 4CH                                             
                      var rfbridge=true;
                      var stdoseS2X=true;
                      var teckin=true;
                      var sv=true;
                      var blitzwolf_shp=true;
                      var sonoffDev=true;
                      var gosundSP1x=true;
                      var ohneInfo=true;             // bei manchen fehlt der INFO ordner - diese werden hier erfasst
                      //Sonderfall
                      var linganSteckdose =true;
                      
                      let mySchedule="  * * * * * "; 
                      
                      //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 5
                      var htmlFeld1='Device';       var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                      var htmlFeld2='Status';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                      var htmlFeld3='Version';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                      var htmlFeld4='WLAN';        var Feld4lAlign="right";                    // überschrift Tabellen Spalte4 und  Ausrichtung left,right or center
                      var htmlFeld5='IP';        var Feld5lAlign="left";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                      var htmlFeld6='';        var Feld6lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                      var htmlFeld7='';        var Feld7lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                      var htmlFeld8='';        var Feld8lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                      
                      //-----------------------------------
                      
                      
                      
                      //hier werden die styles für die tabelle definiert
                      //ÜBERSCHRIFT ÜBER TABELLE
                      let   htmlUberschrift=true;                           // mit Überschrift über der tabelle
                      let   htmlSignature=true;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
                      const htmlFeldUeber='Sonoff Devices';              // Überschrift und Signature
                      const htmlFarbUber="white";                         // Farbe der Überschrift
                      const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
                      const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
                      //MEHRERE TABELLEN NEBENEINANDER
                      let   mehrfachTabelle=1;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                      const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                      const htmlFarbTableColorUber="#BDBDBD";               // Ü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="14px";
                      //FELDER UND RAHMEN
                      let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
                      const htmlFarbFelderschrift="#BDBDBD";                  // SchriftFarbe der Felder
                      const htmlFarbFelderschrift2="#D8D8D8";                 // SchriftFarbe der Felder für jede 2te Tabelle
                      const htmlFarbTableColorGradient1="#424242";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
                      const htmlFarbTableColorGradient2="#424242";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
                      const htmlFarbTableBorderColor="gray";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
                      let htmlRahmenLinien="cols";                            // 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>";
                      
                      
                      //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 5
                      
                      
                      var htmlTabUeber2="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+htmlFeld4+"&ensp;</td><td  align="+Feld5lAlign+">&ensp;"+htmlFeld5+"&ensp;</td><td  align="+Feld6lAlign+">&ensp;"+htmlFeld6+"&ensp;</td><td  align="+Feld7lAlign+">&ensp;"+htmlFeld7+"&ensp;</td><td  align="+Feld8lAlign+">&ensp;"+htmlFeld8+"&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;"+htmlFeld3+
                                         "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld4+
                                         "&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld5+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld6+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld7+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\"&ensp;>"+htmlFeld8+"&ensp;</td>";
                                             //------------------------------------------------------
                      let triggerBySonoffSwitch=false;
                      var anzahl;
                      var AkkuAlarm=[];
                      var htmlOut="";
                      var mix;
                      var counter;
                      var arrTrigger=[];
                      var val1; var val2; var val0; var val3; var val4; var val5; var val6; var val7;
                      var htmlTabUeber="";
                      function writeHTML(){
                      
                      
                      anzahl=0;
                      htmlOut="";
                      
                      counter=-1;
                      htmlTabUeber="";
                      switch (mehrfachTabelle) { 
                         case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
                         case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                         case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2+htmlTabUeber2+htmlTabUeber3; break;
                         case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                      }; 
                      if (!UeberschriftSpalten) {htmlTabUeber=""}  
                      
                      //--------------------------------------------------------------------------------------------------------------------------------------------------
                      //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
                      //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2,val3,val4!!!------------------------------------------------------------
                      //--------------------------------------------------------------------------------------------------------------------------------------------------
                      
                      
                      if (triggerBySonoffPower) {
                          
                       $('sonoff.*.*.POWER*').each(function(id, i) {           // trigger für power datenpunkte  !!!
                              //log(id)
                              arrTrigger.push(id) });}
                        if (triggerBySonoffSwitch) {      
                       $('sonoff.*.*.Switch*').each(function(id, i) {           // trigger für power datenpunkte  !!!
                              //log(id)
                              arrTrigger.push(id) });}
                      //log(arrTrigger.toString())
                      var myColl=[];
                      var val1help;
                      
                        
                        if (pow){
                      
                                   // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                            tabelleAusbessern();
                            counter=0;
                            val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                            tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                            tabelleAusbessern();
                            counter=0;
                            val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Pow (R2)</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Gesamt";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power"
                            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
                      
                      //sonoff.0.SonoffPow1.INFO.Module
                       $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                         
                            if (getState(id).val=="Sonoff Pow" || getState(id).val=="Sonoff Pow R2") {
                               // log (id)
                               anzahl++;
                              var ida = id.split('.');
                             
                                counter++; 
                                  //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                val4=getState(id.replace("Module","IPAddress")).val
                                val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                val6=getState(id.replace("INFO.Module","ENERGY_Today")).val.toString();
                                val5=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                              
                                if (!getState(id.replace("INFO.Module","alive")).val) {
                                    val1="❌";
                                    val4=(" <font color=\"red\"> ")+val1;
                                    val2=(" <font color=\"red\"> ")+val2;
                                    val3=(" <font color=\"red\"> ")+" 0 %";
                                    val5=(" <font color=\"red\"> ")+" --- ";
                                    val6=(" <font color=\"red\"> ")+" --- ";
                                    val7=(" <font color=\"red\"> ")+" --- ";
                                    val0=(" <font color=\"red\"> ")+val0} 
                                else{
                                    val1="✅";
                                   // val1=(" <font color=\"lightgreen\"> ")+val1
                                   // val2=(" <font color=\"green\"> ")+val2
                                   // val3=(" <font color=\"green\"> ")+val3
                                   // val0=(" <font color=\"green\"> ")+val0
                                   }
                      
                      
                               
                         
                           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 fritzdect
                      
                        if (gosundSP1x){
                      
                                   // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                            tabelleAusbessern();
                            counter=0;
                            val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                            tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                            tabelleAusbessern();
                            counter=0;
                            val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Gosund</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Gesamt";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power"
                            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
                      
                      //sonoff.0.SonoffPow1.INFO.Module
                       $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                         
                            if (getState(id).val.includes("Gosund SP1")) {
                               // log (id)
                               anzahl++;
                              var ida = id.split('.');
                             
                                counter++; 
                                  //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                val4=getState(id.replace("Module","IPAddress")).val
                                val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                val6=getState(id.replace("INFO.Module","ENERGY_Today")).val.toString();
                                val5=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                              
                                if (!getState(id.replace("INFO.Module","alive")).val) {
                                    val1="❌";
                                    val4=(" <font color=\"red\"> ")+val1;
                                    val2=(" <font color=\"red\"> ")+val2;
                                    val3=(" <font color=\"red\"> ")+" 0 %";
                                    val5=(" <font color=\"red\"> ")+" --- ";
                                    val6=(" <font color=\"red\"> ")+" --- ";
                                    val7=(" <font color=\"red\"> ")+" --- ";
                                    val0=(" <font color=\"red\"> ")+val0} 
                                else{
                                    val1="✅";
                                   // val1=(" <font color=\"lightgreen\"> ")+val1
                                   // val2=(" <font color=\"green\"> ")+val2
                                   // val3=(" <font color=\"green\"> ")+val3
                                   // val0=(" <font color=\"green\"> ")+val0
                                   }
                      
                      
                               
                         
                           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 fritzdect
                      
                      
                      if (teckin){
                      
                                   // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                            tabelleAusbessern();
                            counter=0;
                            val0=val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                            tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                            tabelleAusbessern();
                            counter=0;
                            val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Teckin</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Gesamt";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power"
                            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
                      
                      //sonoff.0.SonoffPow1.INFO.Module
                       $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                         
                            if (getState(id).val=="Teckin") {
                               // log (id)
                               anzahl++;
                              var ida = id.split('.');
                             
                                counter++; 
                                  //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                val4=getState(id.replace("Module","IPAddress")).val
                                val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                val6=getState(id.replace("INFO.Module","ENERGY_Today")).val.toString();
                                val5=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                              
                                if (!getState(id.replace("INFO.Module","alive")).val) {
                                    val1="❌";
                                    val4=(" <font color=\"red\"> ")+val1;
                                    val2=(" <font color=\"red\"> ")+val2;
                                    val3=(" <font color=\"red\"> ")+" 0 %";
                                    val5=(" <font color=\"red\"> ")+" --- ";
                                    val6=(" <font color=\"red\"> ")+" --- ";
                                    val7=(" <font color=\"red\"> ")+" --- ";
                                    val0=(" <font color=\"red\"> ")+val0} 
                                else{
                                    val1="✅";
                                   // val1=(" <font color=\"lightgreen\"> ")+val1
                                   // val2=(" <font color=\"green\"> ")+val2
                                   // val3=(" <font color=\"green\"> ")+val3
                                   // val0=(" <font color=\"green\"> ")+val0
                                   }
                      
                      
                               
                         
                           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 fritzdect
                      
                          if (blitzwolf_shp){
                      
                                   // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                            tabelleAusbessern();
                            counter=0;
                            val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                            tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                            tabelleAusbessern();
                            counter=0;
                            val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>BlitzWolf SHP</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Gesamt";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Gestern"
                            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
                      
                      //sonoff.0.SonoffPow1.INFO.Module
                       $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                         
                            if (getState(id).val=="BlitzWolf SHP") {
                               // log (id)
                               anzahl++;
                              var ida = id.split('.');
                             
                                counter++; 
                                  //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                val4=getState(id.replace("Module","IPAddress")).val
                                val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                let val7_1=getState(id.replace("INFO.Module","ENERGY_Yesterday")).val.toString();        
                               // val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                val6=getState(id.replace("INFO.Module","ENERGY_Today")).val.toString();
                                val5=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                              
                                if (!getState(id.replace("INFO.Module","alive")).val) {
                                    val1="❌";
                                    val4=(" <font color=\"red\"> ")+val1;
                                    val2=(" <font color=\"red\"> ")+val2;
                                    val3=(" <font color=\"red\"> ")+" 0 %";
                                    val5=(" <font color=\"red\"> ")+" --- ";
                                    val6=(" <font color=\"red\"> ")+" --- ";
                                    val7=(" <font color=\"red\"> ")+" --- ";
                                    val0=(" <font color=\"red\"> ")+val0} 
                                else{
                                    val1="✅";
                                   // val1=(" <font color=\"lightgreen\"> ")+val1
                                   // val2=(" <font color=\"green\"> ")+val2
                                   // val3=(" <font color=\"green\"> ")+val3
                                   // val0=(" <font color=\"green\"> ")+val0
                                   }
                      
                      
                               
                         
                           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 fritzdect
                      
                       if (generic){
                                   // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                            tabelleAusbessern();
                            counter=0;
                            val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                            tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                            tabelleAusbessern();
                            counter=0;
                            val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Generic</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">"
                            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
                      
                      //sonoff.0.SonoffPow1.INFO.Module
                       $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                         
                            if (getState(id).val=="Generic") {
                               //log (id)
                               anzahl++;
                              var ida = id.split('.');
                             
                                counter++; 
                                  //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                val4=getState(id.replace("Module","IPAddress")).val
                                val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                              //   let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                              //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                   val7="";
                              //  let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                              //  val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                
                               // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                               // val6=""
                                 val6="";
                              
                                if (!getState(id.replace("INFO.Module","alive")).val) {
                                    val1="❌";
                                    val4=(" <font color=\"red\"> ")+val4;
                                    val2=(" <font color=\"red\"> ")+val2;
                                    val3=(" <font color=\"red\"> ")+" 0 %";
                                    val5=(" <font color=\"red\"> ")+" --- ";
                                    val6=(" <font color=\"red\"> ")+" --- ";
                                    val7=(" <font color=\"red\"> ")+" --- ";
                                    val0=(" <font color=\"red\"> ")+val0} 
                                else{
                                    val1="✅";
                                   // val1=(" <font color=\"lightgreen\"> ")+val1
                                   // val2=(" <font color=\"green\"> ")+val2
                                   // val3=(" <font color=\"green\"> ")+val3
                                   // val0=(" <font color=\"green\"> ")+val0
                                   }
                               
                            
                         
                           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 xiaomi
                      
                      if (basic){
                                      // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                            tabelleAusbessern();
                            counter=0;
                            val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                            tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                            tabelleAusbessern();
                            counter=0;
                            val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Basic</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power"
                            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
                      
                      //sonoff.0.SonoffPow1.INFO.Module
                       $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                         
                            if (getState(id).val=="Sonoff Basic") {
                             //  log (id)
                              var ida = id.split('.');
                             anzahl++;
                                counter++; 
                                  //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                val4=getState(id.replace("Module","IPAddress")).val
                                val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                             //   let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                             //   val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                             //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                             //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                               // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                val6=""
                                val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                              
                                if (!getState(id.replace("INFO.Module","alive")).val) {
                                    val1="❌";
                                    val4=(" <font color=\"red\"> ")+val4;
                                    val2=(" <font color=\"red\"> ")+val2;
                                    val3=(" <font color=\"red\"> ")+" 0 %";
                                    val5=(" <font color=\"red\"> ")+" --- ";
                                    val6=(" <font color=\"red\"> ")+" --- ";
                                    val7=(" <font color=\"red\"> ")+" --- ";
                                    val0=(" <font color=\"red\"> ")+val0} 
                                else{
                                    val1="✅";
                                   // val1=(" <font color=\"lightgreen\"> ")+val1
                                   // val2=(" <font color=\"green\"> ")+val2
                                   // val3=(" <font color=\"green\"> ")+val3
                                   // val0=(" <font color=\"green\"> ")+val0
                                   }
                               
                            
                         
                           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 xiaomi
                      
                        if (schalter1ch){
                                      // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                            tabelleAusbessern();
                            counter=0;
                            val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                            tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                            tabelleAusbessern();
                            counter=0;
                            val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Schalter T1 1CH</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Power";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">"
                            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
                      
                      //sonoff.0.SonoffPow1.INFO.Module
                       $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                         
                            if (getState(id).val=="Sonoff T1 1CH") {
                             //  log (id)
                             anzahl++;
                              var ida = id.split('.');
                             
                                counter++; 
                                  //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                val4=getState(id.replace("Module","IPAddress")).val
                                val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                let val6_1=getState(id.replace("INFO.Module","POWER")).val;        
                                val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                              //  let val7_1=getState(id.replace("INFO.Module","POWER2")).val;        
                              //  val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                              val7="";
                             //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                             //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                               // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                              //  val6=""
                                
                              
                                if (!getState(id.replace("INFO.Module","alive")).val) {
                                    val1="❌";
                                    val4=(" <font color=\"red\"> ")+val4;
                                    val2=(" <font color=\"red\"> ")+val2;
                                    val3=(" <font color=\"red\"> ")+" 0 %";
                                    val5=(" <font color=\"red\"> ")+" --- ";
                                    val6=(" <font color=\"red\"> ")+" --- ";
                                    val7=(" <font color=\"red\"> ")+" --- ";
                                    val0=(" <font color=\"red\"> ")+val0} 
                                else{
                                    val1="✅";
                                   // val1=(" <font color=\"lightgreen\"> ")+val1
                                   // val2=(" <font color=\"green\"> ")+val2
                                   // val3=(" <font color=\"green\"> ")+val3
                                   // val0=(" <font color=\"green\"> ")+val0
                                   }
                               
                            
                         
                           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 xiaomi
                      
                      if (schalter2ch){
                                      // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                            tabelleAusbessern();
                            counter=0;
                            val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                            tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                            tabelleAusbessern();
                            counter=0;
                            val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Schalter T1 2CH</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Power 1";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power 2"
                            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
                      
                      //sonoff.0.SonoffPow1.INFO.Module
                       $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                         
                            if (getState(id).val=="Sonoff T1 2CH") {
                             //  log (id)
                             anzahl++;
                              var ida = id.split('.');
                             
                                counter++; 
                                  //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                val4=getState(id.replace("Module","IPAddress")).val
                                val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                let val6_1=getState(id.replace("INFO.Module","POWER1")).val;        
                                val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                let val7_1=getState(id.replace("INFO.Module","POWER2")).val;        
                                val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                             //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                             //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                               // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                              //  val6=""
                                
                              
                                if (!getState(id.replace("INFO.Module","alive")).val) {
                                    val1="❌";
                                    val4=(" <font color=\"red\"> ")+val4;
                                    val2=(" <font color=\"red\"> ")+val2;
                                    val3=(" <font color=\"red\"> ")+" 0 %";
                                    val5=(" <font color=\"red\"> ")+" --- ";
                                    val6=(" <font color=\"red\"> ")+" --- ";
                                    val7=(" <font color=\"red\"> ")+" --- ";
                                    val0=(" <font color=\"red\"> ")+val0} 
                                else{
                                    val1="✅";
                                   // val1=(" <font color=\"lightgreen\"> ")+val1
                                   // val2=(" <font color=\"green\"> ")+val2
                                   // val3=(" <font color=\"green\"> ")+val3
                                   // val0=(" <font color=\"green\"> ")+val0
                                   }
                               
                            
                         
                           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 xiaomi
                      
                          if (schalter3ch){
                                      // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                            tabelleAusbessern();
                            counter=0;
                            val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                            tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                            tabelleAusbessern();
                            counter=0;
                           // val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Schalter CH4 </b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Switch 1";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Switch 2"
                            val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Schalter T1 3CH </b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Power 1/2";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power 3";
                            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
                      
                      //sonoff.0.SonoffPow1.INFO.Module
                       $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                         
                            if (getState(id).val=="Sonoff 3CH" ) {
                             //  log (id)
                             anzahl++;
                              var ida = id.split('.');
                             
                                counter++; 
                                  //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                val4=getState(id.replace("Module","IPAddress")).val
                                val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                
                                let val50;
                                let val50_1=getState(id.replace("INFO.Module","POWER3")).val;        
                                val50_1 ? val50=(" <font color=\"lightgreen\"> ")+"ON" : val50=(" <font color=\"red\"> ")+"OFF";
                      
                      
                                let val6_1=getState(id.replace("INFO.Module","POWER2")).val;        
                                val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                let val7_1=getState(id.replace("INFO.Module","POWER4")).val;        
                                val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                      
                                val6= val50+"&ensp;"+val6;
                                
                                
                              
                                if (!getState(id.replace("INFO.Module","alive")).val) {
                                    val1="❌";
                                    val4=(" <font color=\"red\"> ")+val4;
                                    val2=(" <font color=\"red\"> ")+val2;
                                    val3=(" <font color=\"red\"> ")+" 0 %";
                                    val5=(" <font color=\"red\"> ")+" --- ";
                                    val6=(" <font color=\"red\"> ")+" --- ";
                                    val7=(" <font color=\"red\"> ")+" --- ";
                                    val0=(" <font color=\"red\"> ")+val0} 
                                else{
                                    val1="✅";
                                   // val1=(" <font color=\"lightgreen\"> ")+val1
                                   // val2=(" <font color=\"green\"> ")+val2
                                   // val3=(" <font color=\"green\"> ")+val3
                                   // val0=(" <font color=\"green\"> ")+val0
                                   }
                               
                            
                         
                           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 ch4
                      
                          if (channel4){
                                      // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                            tabelleAusbessern();
                            counter=0;
                            val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                            tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                            tabelleAusbessern();
                            counter=0;
                           // val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Schalter CH4 </b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Switch 1";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Switch 2"
                            val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Schalter 4CH </b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Power 1/2";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power 3/4";
                            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
                      
                      //sonoff.0.SonoffPow1.INFO.Module
                       $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                         
                            if (getState(id).val=="Sonoff 4CH" ) {
                             //  log (id)
                             anzahl++;
                              var ida = id.split('.');
                             
                                counter++; 
                                  //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                val4=getState(id.replace("Module","IPAddress")).val
                                val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                
                                let val40;let val50;
                                let val40_1=getState(id.replace("INFO.Module","POWER1")).val;        
                                val40_1 ? val40=(" <font color=\"lightgreen\"> ")+"ON" : val40=(" <font color=\"red\"> ")+"OFF";
                                let val50_1=getState(id.replace("INFO.Module","POWER3")).val;        
                                val50_1 ? val50=(" <font color=\"lightgreen\"> ")+"ON" : val50=(" <font color=\"red\"> ")+"OFF";
                      
                      
                                let val6_1=getState(id.replace("INFO.Module","POWER2")).val;        
                                val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                let val7_1=getState(id.replace("INFO.Module","POWER4")).val;        
                                val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                      
                                val6= val40+"&ensp;"+val6;
                                val7= val50+"&ensp;"+val7;
                                
                              
                                if (!getState(id.replace("INFO.Module","alive")).val) {
                                    val1="❌";
                                    val4=(" <font color=\"red\"> ")+val4;
                                    val2=(" <font color=\"red\"> ")+val2;
                                    val3=(" <font color=\"red\"> ")+" 0 %";
                                    val5=(" <font color=\"red\"> ")+" --- ";
                                    val6=(" <font color=\"red\"> ")+" --- ";
                                    val7=(" <font color=\"red\"> ")+" --- ";
                                    val0=(" <font color=\"red\"> ")+val0} 
                                else{
                                    val1="✅";
                                   // val1=(" <font color=\"lightgreen\"> ")+val1
                                   // val2=(" <font color=\"green\"> ")+val2
                                   // val3=(" <font color=\"green\"> ")+val3
                                   // val0=(" <font color=\"green\"> ")+val0
                                   }
                               
                            
                         
                           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 ch4
                      
                        if (dual){
                                      // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                            tabelleAusbessern();
                            counter=0;
                            val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                            tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                            tabelleAusbessern();
                            counter=0;
                            val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Dual (R2) </b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Power 1";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power 2"
                            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
                      
                      //sonoff.0.SonoffPow1.INFO.Module
                       $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                         
                            if (getState(id).val=="Sonoff Dual" || getState(id).val=="Sonoff Dual R2") {
                             //  log (id)
                             anzahl++;
                              var ida = id.split('.');
                             
                                counter++; 
                                  //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                val4=getState(id.replace("Module","IPAddress")).val
                                val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                let val6_1=getState(id.replace("INFO.Module","POWER1")).val;        
                                val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                                let val7_1=getState(id.replace("INFO.Module","POWER2")).val;        
                                val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                             //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                             //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                               // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                              //  val6=""
                                
                              
                                if (!getState(id.replace("INFO.Module","alive")).val) {
                                    val1="❌";
                                    val4=(" <font color=\"red\"> ")+val4;
                                    val2=(" <font color=\"red\"> ")+val2;
                                    val3=(" <font color=\"red\"> ")+" 0 %";
                                    val5=(" <font color=\"red\"> ")+" --- ";
                                    val6=(" <font color=\"red\"> ")+" --- ";
                                    val7=(" <font color=\"red\"> ")+" --- ";
                                    val0=(" <font color=\"red\"> ")+val0} 
                                else{
                                    val1="✅";
                                   // val1=(" <font color=\"lightgreen\"> ")+val1
                                   // val2=(" <font color=\"green\"> ")+val2
                                   // val3=(" <font color=\"green\"> ")+val3
                                   // val0=(" <font color=\"green\"> ")+val0
                                   }
                               
                            
                         
                           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 xiaomi
                      
                      
                      
                      if (stdoseS2X){
                                      // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                            tabelleAusbessern();
                            counter=0;
                            val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                            tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                            tabelleAusbessern();
                            counter=0;
                            val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Steckdose S2X</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power"
                            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
                      
                      //sonoff.0.SonoffPow1.INFO.Module
                       $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                         
                            if (getState(id).val=="Sonoff S2X"  ) {
                             //  log (id)
                             anzahl++;
                              var ida = id.split('.');
                             
                                counter++; 
                                  //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                val4=getState(id.replace("Module","IPAddress")).val
                                val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                
                             //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                             //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                               // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                val6=""
                                
                              
                                if (!getState(id.replace("INFO.Module","alive")).val) {
                                    val1="❌";
                                    val4=(" <font color=\"red\"> ")+val4;
                                    val2=(" <font color=\"red\"> ")+val2;
                                    val3=(" <font color=\"red\"> ")+" 0 %";
                                    val5=(" <font color=\"red\"> ")+" --- ";
                                    val6=(" <font color=\"red\"> ")+" --- ";
                                    val7=(" <font color=\"red\"> ")+" --- ";
                                    val0=(" <font color=\"red\"> ")+val0} 
                                else{
                                    val1="✅";
                                   // val1=(" <font color=\"lightgreen\"> ")+val1
                                   // val2=(" <font color=\"green\"> ")+val2
                                   // val3=(" <font color=\"green\"> ")+val3
                                   // val0=(" <font color=\"green\"> ")+val0
                                   }
                               
                            
                         
                           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 xiaomi
                      
                      if (linganSteckdose){
                                      // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                            tabelleAusbessern();
                            counter=0;
                            val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                            tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                            tabelleAusbessern();
                            counter=0;
                            val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Lingan Steckdose</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power"
                            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
                      
                      //sonoff.0.SonoffPow1.INFO.Module
                       $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                         
                            if (getState(id).val=="Lingan SWA1") {
                             //  log (id)
                              var ida = id.split('.');
                                anzahl++;
                                counter++; 
                                  //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                val4=getState(id.replace("Module","IPAddress")).val
                                val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                val3="na"; //getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                val5="na"; //val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                
                             //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                             //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                               // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                val6=""
                                
                              
                                if (!getState(id.replace("INFO.Module","alive")).val) {
                                    val1="❌";
                                    val4=(" <font color=\"red\"> ")+val4;
                                    val2=(" <font color=\"red\"> ")+val2;
                                    val3=(" <font color=\"red\"> ")+" 0 %";
                                    val5=(" <font color=\"red\"> ")+" --- ";
                                    val6=(" <font color=\"red\"> ")+" --- ";
                                    val7=(" <font color=\"red\"> ")+" --- ";
                                    val0=(" <font color=\"red\"> ")+val0} 
                                else{
                                    val1="✅";
                                   // val1=(" <font color=\"lightgreen\"> ")+val1
                                   // val2=(" <font color=\"green\"> ")+val2
                                   // val3=(" <font color=\"green\"> ")+val3
                                   // val0=(" <font color=\"green\"> ")+val0
                                   }
                               
                            
                         
                           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 xiaomi
                      
                       
                      if (rfbridge){
                                      // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                            tabelleAusbessern();
                            counter=0;
                            val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                            tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                            tabelleAusbessern();
                            counter=0;
                            val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>RF Bridge</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Received";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power "
                            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
                      
                      //sonoff.0.SonoffPow1.INFO.Module
                       $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                         
                            if (getState(id).val=="Sonoff Bridge") {
                             //  log (id)
                              var ida = id.split('.');
                             anzahl++;
                                counter++; 
                                  //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                val4=getState(id.replace("Module","IPAddress")).val
                                val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                             //   let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                             //   val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                             //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                             //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                               // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                val6=getState(id.replace("INFO.Module","RfReceived_Data")).val;
                                val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                              
                                if (!getState(id.replace("INFO.Module","alive")).val) {
                                    val1="❌";
                                    val4=(" <font color=\"red\"> ")+val4;
                                    val2=(" <font color=\"red\"> ")+val2;
                                    val3=(" <font color=\"red\"> ")+" 0 %";
                                    val5=(" <font color=\"red\"> ")+" --- ";
                                    val6=(" <font color=\"red\"> ")+" --- ";
                                    val7=(" <font color=\"red\"> ")+" --- ";
                                    val0=(" <font color=\"red\"> ")+val0} 
                                else{
                                    val1="✅";
                                   // val1=(" <font color=\"lightgreen\"> ")+val1
                                   // val2=(" <font color=\"green\"> ")+val2
                                   // val3=(" <font color=\"green\"> ")+val3
                                   // val0=(" <font color=\"green\"> ")+val0
                                   }
                               
                            
                         
                           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 xiaomi
                      
                      
                       if (ohneInfo){
                                      // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                            tabelleAusbessern();
                            counter=0;
                            val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                            tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                            tabelleAusbessern();
                            counter=0;
                            val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Sonderfälle ohne INFO</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power Switch"
                            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
                      var arrFilt=[];
                      //sonoff.0.SonoffPow1.INFO.Module
                      
                       $('sonoff.*.*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                      
                              var ida = id.split('.');
                      
                              //  log(ida[0]+"."+ida[1]+"."+ida[2]+"."+"INFO.IPAddress")
                      
                                $(ida[0]+"."+ida[1]+"."+ida[2]+"."+"INFO.IPAddress").each(function(id, i) {   // kontrolliere ob  vorhanden
                                  
                                    var idc = id.split('.');
                                    if(!arrFilt.includes(idc[2])){
                                  //  log(idc[2])
                                 arrFilt.push(idc[2])}
                                 });
                                
                      });
                      
                      //log("filter: "+arrFilt.toString())
                      //sonoff.0.ShellyWC.alive
                       $('sonoff.*.*.alive').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                      
                         var ida = id.split('.');
                         //log(ida[2])
                            //  log (" hier die werte: "+id)
                          //  if (filterArray.includes) {
                                if (!arrFilt.includes(ida[2])) {
                            //   log (id)
                            
                             anzahl++;
                                counter++; 
                                  //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                val1=getState(id).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                val4=" na "; //getState(id.replace("Module","IPAddress")).val
                                val2=" na "; //getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                val3="na"; //getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                                val5="na"; //val3=getState(id.replace("INFO.Module","Uptime")).val.toString()
                                val7="na" // let val7_1=getState(id.replace("alive","POWER")).val;        
                               // val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                
                             //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                             //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                               // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                ida[2].includes("Bridge") ?  val6=getState(id.replace("alive","RfReceived_Data")).val : val6="";
                                
                                
                              
                                if (!getState(id).val) {
                                    val1="❌";
                                    val4=(" <font color=\"red\"> ")+val4;
                                    val2=(" <font color=\"red\"> ")+val1;
                                    val3=(" <font color=\"red\"> ")+" 0 %";
                                    val5=(" <font color=\"red\"> ")+" --- ";
                                    val6=(" <font color=\"red\"> ")+" --- ";
                                    val7=(" <font color=\"red\"> ")+" --- ";
                                    val0=(" <font color=\"red\"> ")+val0} 
                                else{
                                    val1="✅";
                                   // val1=(" <font color=\"lightgreen\"> ")+val1
                                   // val2=(" <font color=\"green\"> ")+val2
                                   // val3=(" <font color=\"green\"> ")+val3
                                   // val0=(" <font color=\"green\"> ")+val0
                                   }
                               
                            
                         
                           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 xiaomi
                      
                        if (sv){
                                      // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                            tabelleAusbessern();
                            counter=0;
                            val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                            tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                            tabelleAusbessern();
                            counter=0;
                            val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Sonoff SV</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">"
                            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
                      
                      //sonoff.0.SonoffPow1.INFO.Module
                       $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                         
                            if (getState(id).val=="Sonoff SV") {
                             //  log (id)
                              var ida = id.split('.');
                             anzahl++;
                                counter++; 
                                  //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                val4=getState(id.replace("Module","IPAddress")).val
                                val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                              //  let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                //val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                val7="";
                             //   let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                             //   val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                             //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                             //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                               // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                val6=""
                                val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                              
                                if (!getState(id.replace("INFO.Module","alive")).val) {
                                    val1="❌";
                                    val4=(" <font color=\"red\"> ")+val4;
                                    val2=(" <font color=\"red\"> ")+val2;
                                    val3=(" <font color=\"red\"> ")+" 0 %";
                                    val5=(" <font color=\"red\"> ")+" --- ";
                                    val6=(" <font color=\"red\"> ")+" --- ";
                                    val7=(" <font color=\"red\"> ")+" --- ";
                                    val0=(" <font color=\"red\"> ")+val0} 
                                else{
                                    val1="✅";
                                   // val1=(" <font color=\"lightgreen\"> ")+val1
                                   // val2=(" <font color=\"green\"> ")+val2
                                   // val3=(" <font color=\"green\"> ")+val3
                                   // val0=(" <font color=\"green\"> ")+val0
                                   }
                               
                            
                         
                           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 xiaomi
                      
                          if (sonoffDev){
                                      // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                            tabelleAusbessern();
                            counter=0;
                            val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";
                            tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                            tabelleAusbessern();
                            counter=0;
                            val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>Sonoff Dev</b>"; val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";val7="<font color=\""+htmlColorDeviceUeberschrift+"\">"
                            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
                      
                      //sonoff.0.SonoffPow1.INFO.Module
                       $('sonoff.*.*.INFO.Module').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                         
                            if (getState(id).val=="Sonoff Dev") {
                             //  log (id)
                              var ida = id.split('.');
                             anzahl++;
                                counter++; 
                                  //log("dad   "+getState(id.replace("Info.Module","alive")).val + " ----" +id.replace("Info.Module","alive"))
                                val1=getState(id.replace("INFO.Module","alive")).val;                   //sonoff.0.SonoffPow1.alive          sonoff.0.SonoffPow1.INFO.Module
                                val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                val4=getState(id.replace("Module","IPAddress")).val
                                val2=getState(id.replace("Module","Version")).val.replace(/\(.+\)/g,"")     //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                                val3=getState(id.replace("INFO.Module","Wifi_RSSI")).val.toString()+" %"; 
                              //  let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                                //val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                                val7="";
                             //   let val6_1=getState(id.replace("INFO.Module","Switch1")).val;        
                             //   val6_1 ? val6=(" <font color=\"lightgreen\"> ")+"ON" : val6=(" <font color=\"red\"> ")+"OFF";
                             //   let val7_1=getState(id.replace("INFO.Module","Switch1")).val;        
                             //   val7_1 ? val7=(" <font color=\"lightgreen\"> ")+"ON" : val7=(" <font color=\"red\"> ")+"OFF";
                               // val6=getState(id.replace("INFO.Module","SWITCH1")).val.toString();
                                //val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toString();
                                val6=""
                                val5=getState(id.replace("INFO.Module","Uptime")).val.toString()
                              
                                if (!getState(id.replace("INFO.Module","alive")).val) {
                                    val1="❌";
                                    val4=(" <font color=\"red\"> ")+val4;
                                    val2=(" <font color=\"red\"> ")+val2;
                                    val3=(" <font color=\"red\"> ")+" 0 %";
                                    val5=(" <font color=\"red\"> ")+" --- ";
                                    val6=(" <font color=\"red\"> ")+" --- ";
                                    val7=(" <font color=\"red\"> ")+" --- ";
                                    val0=(" <font color=\"red\"> ")+val0} 
                                else{
                                    val1="✅";
                                   // val1=(" <font color=\"lightgreen\"> ")+val1
                                   // val2=(" <font color=\"green\"> ")+val2
                                   // val3=(" <font color=\"green\"> ")+val3
                                   // val0=(" <font color=\"green\"> ")+val0
                                   }
                               
                            
                         
                           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 xiaomi
                      
                      
                       //   if (AkkuAlarm.length >=1 ) {setState(dpAlarm,AkkuAlarm.length)} else {setState(dpAlarm,AkkuAlarm.length)}
                         // log("BATTERIE Alarm     : "+AkkuAlarm.length.toString());
                      //-------------------------------------------------------------------------------------------------------------------------------------------------
                      //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                      //-------------------------------------------------------------------------------------------------------------------------------------------------
                      
                          tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                      
                          setState(dpAnzahl,anzahl); 
                       
                         
                      
                      } // function ende
                      
                      
                      
                      //MAIN:
                       
                      schedule(mySchedule,  function () {
                       writeHTML();
                       if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                      }); 
                       writeHTML();
                      
                         				 function tabelleBind(){
                           //HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT - hat man oben 5 Felder definiert, braucht man hier 5 Werte
                         
                             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><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                    else {htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                    else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";} 
                                                                                       else    {htmlOut = htmlOut = htmlOut+"<td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td>&ensp;"+val1+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&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><td>&ensp;</td><td>&ensp;</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><td>&ensp;</td><td>&ensp;</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><td>&ensp;</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><td>&ensp;</td><td>&ensp;</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><td>&ensp;</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><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() {
                      
                            // tabelle fertigstellen
                             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><td>&ensp;</td><td>&ensp;</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><td>&ensp;</td><td>&ensp;</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><td>&ensp;</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><td>&ensp;</td><td>&ensp;</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><td>&ensp;</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><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")+"&ensp;&ensp;Anzahl: "+anzahl+"</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")+"&ensp;&ensp;Anzahl: "+anzahl+"</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);
                       
                      }
                      
                          on({id: arrTrigger, ack: false, change: "any"}, function (obj) { 
                            // log("TRIGGERED");
                          writeHTML();
                          if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                      
                           
                         });
                      
                      
                      
                      

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

                        @liv-in-sky Perfekt, jetzt fehlen mir nur noch die Shelly
                        4bbf1072-dae2-446e-97ed-b008c7625ee5-image.png

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

                          @crunchip dann her damit

                          tasmota geflasht - dann hier

                          falls es auch über shelly instanz geht - dann unter strom tabelle

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

                            @liv-in-sky

                            • Shelly 1
                            • Shelly 1PM
                            • Shelly 2.5 (alte Version Shelly 2)
                              aktuell verbaut bis jetzt aber nur der Shelly 1 mit Tasmota
                              fc81385e-ddc5-4110-881c-eeb0289e3551-image.png
                            liv-in-sky 1 Reply Last reply Reply Quote 0
                            • Glasfaser
                              Glasfaser @liv-in-sky last edited by Glasfaser

                              @liv-in-sky

                              Sieht gut aus 🙂

                              1.JPG

                              Wäre dann so wie bei mir mit den Gosund SP1 v23 ,wie oben schon gezeigt . 😎

                              2.JPG

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

                                @Glasfaser mal sehen wieviele spalten wir in der strom tabelle brauchen - vielleicht wird es ja deine version mit 10 spalten

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

                                  @liv-in-sky

                                  Ich denke mal .... da wirst du nicht mit auskommen . Mal sehen was da kommt 😎

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

                                    @liv-in-sky Das wird ja langsam perfekt!

                                    Hast du irgendwo eine Idee was ich falsch mache beim Spalten bearbeiten?
                                    Ich will nur bis Spalte 6 darstellen.
                                    Zuerst dachte ich das ich das in Zeile 119 korrigieren kann, aber da scheine ich was falsch zu machen.

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

                                      @liv-in-sky kleinigkeit ist mir grad noch aufgefallen, find es auf die schnelle aber nicht( kann ja nicht scripten😁 )

                                      01d86d2c-8c07-4e7f-957e-38453345dde4-image.png

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

                                        @Chaot im ersten post gibt es ein 6 spalten script - darin kannst u einfach die var werte ändern und damit anzeigen, was du möchtest

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

                                          @liv-in-sky
                                          Danke dir.
                                          Das habe ich glatt übersehen.
                                          Was habe ich da falsch eingestellt:
                                          entfernt
                                          Ich habe an der VarWerten noch nichts verändert. Also dein Orignal. Aber der Status kommt nicht. Mit dem anderen Script ist er da.

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

                                            @crunchip

                                            eigentlich nicht falsch

                                            in spalte 7 wird power1 agezeigt , wenn man einen 2er oder 3 schalter schalter hat würde man es erkennen

                                            aber vielleicht schau ich nochmal durch - um es besser darzustellen - vielleicht macht es sinn alle powerx in eine spalte zu tun

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            909
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript monitoring template
                                            33
                                            629
                                            105809
                                            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