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.
    • 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
                                          • Chaot
                                            Chaot @liv-in-sky last edited by

                                            @liv-in-sky

                                            Fehler gefunden.
                                            Du hast beim val1 immer ein Fragezeichen zugeordnet und die Sonderzeichen aus dem anderen Script sind nicht drin ✅ und ❌
                                            Siehe z.B. Zeile 185

                                            Ich habe das korrigiert und jetzt funktioniert es einwandfrei.
                                            Ganz herzlichen Dank dafür.

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            528
                                            Online

                                            31.8k
                                            Users

                                            80.0k
                                            Topics

                                            1.3m
                                            Posts

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