Navigation

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

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Strom Geräte als HTML Tabelle - Vis - Iqontrol

    This topic has been deleted. Only users with topic management privileges can see it.
    • Homoran
      Homoran Global Moderator Administrators last edited by

      Der Status Unreach wird korrekt überprüft (sobald HmIP das auch meldet 😉 )

      Allerdings scheint bei HmIP der Zustand des Schalters nicht zu passen:
      HmIP-States_vs_Energy.png

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

        @apollon77 o o - danke für die info

        1 Reply Last reply Reply Quote 0
        • Homoran
          Homoran Global Moderator Administrators last edited by

          Ich möchte hier mal eine ganz ketzerische Frage stellen:

          Lohnt sich eigentlich die ganze Arbeit, die sich @liv-in-sky hier macht?

          ich habe mich hier beteiligt weil ich die Daten von HomeMatic beitragen wollte.
          Aber je länger dieser Thread wird, desto mehr zweifle ich an Sinn und Unsinn dieses Projekts.

          Angefangen von den Inkompatibilitäten dieser ganzen Systeme resp. derer Datenpunkte und Informatonsgehalte.
          Weiterhin müsste IMHO eine solche Tabelle die die Zustände der Schalter, die aktuellen Verbrauchswerte usw. anzeigen soll sehr kurz getaktet aktualisiert werden, da es sonst IMHO keinen Sinn ergibt.

          Dazu alle Minute (oder gar noch öfter) eine ganze Tabelle neu aufbauen ist IMHO Ressourcenquälerei. wenn sie dann noch an einem schwachbrüstigen Tablet über miserable WLAN-Anbindung in dem gleichen Rhythmus aktualisiert werden soll, streckt irgendwann das System alle Beine von sich.

          Die bisherigen Beispiele waren bei weitem nicht so aktualitätspflichtig.

          Meinen Screen für die Energiemesssteckdosen habe ich ja schon früher gezeigt, hier die ganze Seite:
          Strom_jetzt.png

          Die Stromdaten oben links aktualisieren alle 5 Sekunden, die der Geräte unten rechts im Sbastnd der in den Dosen eingestellten Mindeständerung.

          Die Lichtschalter habe ich in meinem Klima-View eingebaut:
          Klima_aktuell.png

          Auch hier sind die Zustände sekundenaktuell.
          Weil noch Platz war auch die Rollläden und je nach Raum Heizung, Entfeuchter und Lüfter

          Bevor @liv-in-sky seine ganze Energie hier verpufft überlegt bitte einmal ob das Projekt wirklich sinnvoll ist.

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

            obwohl die infos von apollon eher negtiv waren - das script aber fast fertig für tuya war - falls es user gibt, die besondere tuya haben - ist die idee von apollon, diese extra einzutragen, eine gute idee und nicht allzu schwer zu integrieren

            hier ein neues zum test

            @sigi234 auch das hs100 ist hier drin und braucht check - der unterschied zwischen status und schalter !

            @homoran - wegen zustand des schalters -kannst du das bitte etwas beschreiben - die bilder sagen mir nicht viel, da ich deine ganzen namen nicht so intus habe und das homematic bild - ist halt ein schönes grün - ich glaube ich habe sowas schon mal in blau gesehen 🙂

            //@liv-in-sky Januar 2020
            
            //HIER WIRD PFAD UND FILENAME DEFINIERT
            const path = "/htmlenergy.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.ENERGY"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
            let dpAnzahl="controll-own.0.TABELLEN.AnzahlEnergiemesser";  //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;
            //---------------------------------------
            let mySchedule="  * * * * * "; 
            
            let kwhPreis=0.29;
            
            var pow=true;
            var tuya=true;
            var hs100=true; //tplink
            var homematic=true;
            var blitzwolf=true;
            
            var gosundSP1x=true;
            
            
            var externalOhneInfo=false;  //noch nicht integriert
            var schalter2ch=true; 
            var schalter3ch=true;
            
            //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='Amp';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
            var htmlFeld4='Volt';        var Feld4lAlign="center";                    // überschrift Tabellen Spalte4 und  Ausrichtung left,right or center
            var htmlFeld5='Power';        var Feld5lAlign="left";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
            var htmlFeld6='Schalter';        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";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
            var htmlFeld10='';        var Feld10lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
            
            //-----------------------------------
            
            
            //ÜBERSCHRIFT ÜBER TABELLE
            let   htmlUberschrift=true;                           // mit Überschrift über der tabelle
            let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
            const htmlFeldUeber='Energy 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  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+">&ensp;"+htmlFeld9+"&ensp;</td><td  align="+Feld10lAlign+">&ensp;"+htmlFeld10+"&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 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 (pow){
            
                         // 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>Pow (R2)</b>"; val1=""; val2="";val3="";val4="";
                  val5="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                  val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";
                  val7="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Gesamt"; 
                  val8="<font color=\""+htmlColorDeviceUeberschrift+"\"><i>Preis Heute<\/i>";
                  val9="<font color=\""+htmlColorDeviceUeberschrift+"\"><i>Preis Gesamt<\/i>";
                  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("INFO.Module","ENERGY_Power")).val.toString()+ " W"                       //sonoff.0.SonoffPow2.ENERGY_Power
                      val2=getState(id.replace("INFO.Module","ENERGY_Current")).val.toFixed(2)+ " A";   //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                      val3=getState(id.replace("INFO.Module","ENERGY_Voltage")).val.toString()+" V"; 
                      let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                      val7_1 ? val5=(" <font color=\"lightgreen\"> ")+"ON" : val5=(" <font color=\"red\"> ")+"OFF";
                      val6=getState(id.replace("INFO.Module","ENERGY_Today")).val.toFixed(2)+ " kWh";
                      val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toFixed(2)+ " kWh";
                      val8=(getState(id.replace("INFO.Module","ENERGY_Today")).val*kwhPreis).toFixed(2)+" €";
                      val9=(getState(id.replace("INFO.Module","ENERGY_Total")).val*kwhPreis).toFixed(2)+" €";
                    
                      if (!getState(id.replace("INFO.Module","alive")).val) {
                          val1="❌";
                          val4=(" <font color=\"red\"> ")+" --- ";
                          val2=(" <font color=\"red\"> ")+" --- ";
                          val3=(" <font color=\"red\"> ")+" --- ";
                          val5=(" <font color=\"red\"> ")+" --- ";
                          val6=(" <font color=\"red\"> ")+" --- ";
                          val7=(" <font color=\"red\"> ")+" --- ";
                          val0=(" <font color=\"red\"> ")+val0 ;
                          val8=(" <font color=\"red\"> ")+val8;
                          val9=(" <font color=\"red\"> ")+val9}
                      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){
            
                        // 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+"\">";
                 val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";
                 val7="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Gesamt"; 
                 val8="<font color=\""+htmlColorDeviceUeberschrift+"\"><i>Preis Heute<\/i>";
                 val9="<font color=\""+htmlColorDeviceUeberschrift+"\"><i>Preis Gesamt<\/i>";
                 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("INFO.Module","ENERGY_Power")).val.toString()+ " W"                       //sonoff.0.SonoffPow2.ENERGY_Power
                     val2=getState(id.replace("INFO.Module","ENERGY_Current")).val.toFixed(2)+ " A";   //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                     val3=getState(id.replace("INFO.Module","ENERGY_Voltage")).val.toString()+" V"; 
                     let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                     val7_1 ? val5=(" <font color=\"lightgreen\"> ")+"ON" : val5=(" <font color=\"red\"> ")+"OFF";
                     val6=getState(id.replace("INFO.Module","ENERGY_Today")).val.toFixed(2)+ " kWh";
                     val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toFixed(2)+ " kWh";
                     val8=(getState(id.replace("INFO.Module","ENERGY_Today")).val*kwhPreis).toFixed(2)+" €";
                     val9=(getState(id.replace("INFO.Module","ENERGY_Total")).val*kwhPreis).toFixed(2)+" €";
                   
                     if (!getState(id.replace("INFO.Module","alive")).val) {
                          val1="❌";
                          val4=(" <font color=\"red\"> ")+" --- ";
                          val2=(" <font color=\"red\"> ")+" --- ";
                          val3=(" <font color=\"red\"> ")+" --- ";
                          val5=(" <font color=\"red\"> ")+" --- ";
                          val6=(" <font color=\"red\"> ")+" --- ";
                          val7=(" <font color=\"red\"> ")+" --- ";
                          val0=(" <font color=\"red\"> ")+val0 ;
                          val8=(" <font color=\"red\"> ")+val8;
                          val9=(" <font color=\"red\"> ")+val9}
                     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+"\">";
                  val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";
                  val7="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Gesamt"; 
                  val8="<font color=\""+htmlColorDeviceUeberschrift+"\"><i>Preis Heute<\/i>";
                  val9="<font color=\""+htmlColorDeviceUeberschrift+"\"><i>Preis Gesamt<\/i>";
                  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("INFO.Module","ENERGY_Power")).val.toString()+ " W"                       //sonoff.0.SonoffPow2.ENERGY_Power
                      val2=getState(id.replace("INFO.Module","ENERGY_Current")).val.toFixed(2)+ " A";   //sonoff.0.SonoffPow1.Wifi_RSSIsonoff.0.SonoffPow1.POWER
                      val3=getState(id.replace("INFO.Module","ENERGY_Voltage")).val.toString()+" V"; 
                      let val7_1=getState(id.replace("INFO.Module","POWER")).val;        
                      val7_1 ? val5=(" <font color=\"lightgreen\"> ")+"ON" : val5=(" <font color=\"red\"> ")+"OFF";
                      val6=getState(id.replace("INFO.Module","ENERGY_Today")).val.toFixed(2)+ " kWh";
                      val7=getState(id.replace("INFO.Module","ENERGY_Total")).val.toFixed(2)+ " kWh";
                      val8=(getState(id.replace("INFO.Module","ENERGY_Today")).val*kwhPreis).toFixed(1)+" €";
                      val9=(getState(id.replace("INFO.Module","ENERGY_Total")).val*kwhPreis).toFixed(1)+" €";
                    
                      if (!getState(id.replace("INFO.Module","alive")).val) {
                          val1="❌";
                          val4=(" <font color=\"red\"> ")+" --- ";
                          val2=(" <font color=\"red\"> ")+" --- ";
                          val3=(" <font color=\"red\"> ")+" --- ";
                          val5=(" <font color=\"red\"> ")+" --- ";
                          val6=(" <font color=\"red\"> ")+" --- ";
                          val7=(" <font color=\"red\"> ")+" --- ";
                          val0=(" <font color=\"red\"> ")+val0 ;
                          val8=(" <font color=\"red\"> ")+val8;
                          val9=(" <font color=\"red\"> ")+val9}
                      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 (hs100){
            
                         // 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>HS100</b>"; val1=""; val2="";val3="";val4="";
                  val5="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                  val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Now";
                  val7="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Monat"; 
                  val8="<font color=\""+htmlColorDeviceUeberschrift+"\"><i>Preis Now<\/i>";
                  val9="<font color=\""+htmlColorDeviceUeberschrift+"\"><i>Preis Monat<\/i>";
                  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
             $('hs100.*.*.totalNow').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
               
            
                     // log (id)
                     anzahl++;
                    var ida = id.split('.');
                   
                      counter++; 
                      var valVersion=getState(id.replace("totalNow","hw_ver")).val;  
                      var val1_1=Date.parse(getState(id.replace("totalNow","last_update")).val); 
                      if (parseInt((new Date().getTime())) - val1_1 < 120000) {val1=true} else {val1=false;}  // log(val1.toString())          
                      val0=getObject(id).common.name ;
                     
                      var val4_1=getState(id.replace("totalNow","power")).val.toString();
                      val4=val4_1.substr(0, 4) + " W";            //getState(id.replace("totalNow","power")).val + " W"     ;    // log (val4)       //.substring(0,4)        
                      var val2_1=getState(id.replace("totalNow","current")).val.toString();
                      if(valVersion=="1.0")  {val2=val2_1.substr(0, 5) + " A";} else {val2=val2_1+ " mA";}  
                      var val3_1=getState(id.replace("totalNow","voltage")).val.toString();
                      val3=val3_1.substring(0, 3)+" V";
                      var val5_1= getState(id.replace("totalNow","state")).val;
                      val5_1 ? val5=(" <font color=\"lightgreen\"> ")+"ON" : val5=(" <font color=\"red\"> ")+"OFF";
                      val6=getState(id).val + " kWh";
                      val7=getState(id.replace("totalNow","totalMonthNow")).val+ " kWh";
                      val8=(parseFloat(getState(id).val)*kwhPreis).toFixed(2)+" €";
                      val9=(parseFloat(getState(id.replace("totalNow","totalMonthNow")).val)*kwhPreis).toFixed(2)+" €";
                    //  log(val1.toString()) 
            
                      if (!val1) {
                         // log("false")
                          val1="❌";
                          val4=(" <font color=\"red\"> ")+" --- ";
                          val2=(" <font color=\"red\"> ")+" --- ";
                          val3=(" <font color=\"red\"> ")+" --- ";
                          val5=(" <font color=\"red\"> ")+" --- ";
                          val6=(" <font color=\"red\"> ")+" --- ";
                          val7=(" <font color=\"red\"> ")+" --- ";
                          val0=(" <font color=\"red\"> ")+val0 ;
                          val8=(" <font color=\"red\"> ")+val8;
                          val9=(" <font color=\"red\"> ")+val9}
                      else{
                         // log("true")
                          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 (homematic){
            
                         // 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>Homematic</b>"; val1=""; val2="";val3="";val4="";
                  val5="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                  val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Now";
                  val7="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Monat"; 
                  val8="<font color=\""+htmlColorDeviceUeberschrift+"\"><i>Preis Now<\/i>";
                  val9="<font color=\""+htmlColorDeviceUeberschrift+"\"><i>Preis Monat<\/i>";
                  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
             $('hm-rpc.*.*.*.ENERGY_COUNTER').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
               
            var ida = id.split('.');
                         var arrFilt=[];
                       
                      $(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]+".*").each(function(id, i) {   // kontrolliere ob OPERATING_VOLTAGE vorhanden
                          var idc = id.split('.');
                       arrFilt.push(idc[4])
                       });
            
                       //log(arrFilt.toString())
            
                    //log (id)
                     anzahl++;
                    
                      var stateIdHM=ida[3]; //log(stateIdHM)
                      counter++; 
                  //   var valVersion=getState(id.replace("totalNow","hw_ver")).val;  
                       
                       
                    
                      val1=!getState(ida[0]+"."+ida[1]+"."+ida[2]+"."+"0"+".UNREACH").val   //getState(id.replace("ENERGY_COUNTER","STATE")).val;                  
                      val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;  //val0=getObject(id).common.name ;
                      val4=getState(id.replace("ENERGY_COUNTER","POWER")).val+ " W"     ;     //log (val4)       //.substring(0,4)        
                      if (arrFilt.includes("CURRENT")) {val2=getState(id.replace("ENERGY_COUNTER","CURRENT")).val.toFixed(0)+ " mA";} else {val2="-"} 
                      if (arrFilt.includes("VAOLTAGE")) {val3=getState(id.replace("ENERGY_COUNTER","VOLTAGE")).val.toFixed(0)+" V";}  else {val3="-"} 
                      if (stateIdHM=="6" && arrFilt.includes("CURRENT")) {val5=getState(ida[0]+"."+ida[1]+"."+ida[2]+"."+"3"+".STATE").val;val5 ? val5=(" <font color=\"lightgreen\"> ")+"ON" : val5=(" <font color=\"red\"> ")+"OFF";} else {val5="-"} 
                      if (stateIdHM=="2" && arrFilt.includes("CURRENT")) {val5=getState(ida[0]+"."+ida[1]+"."+ida[2]+"."+"1"+".STATE").val;val5 ? val5=(" <font color=\"lightgreen\"> ")+"ON" : val5=(" <font color=\"red\"> ")+"OFF";} else {val5="-"} 
                      //val7_1 ? val5=(" <font color=\"lightgreen\"> ")+"ON" : val5=(" <font color=\"red\"> ")+"OFF";
                      val6=" - "; // getState(id).val.substring(0,5)+ " kWh";
                      val7=" - "; // getState(id.replace("totalNow","totalMonthNow")).val.substring(0,5)+ " kWh";
                      val8=" - "; // (parseFloat(getState(id).val)*kwhPreis).toFixed(2)+" €";
                      val9=" - "; // (parseFloat(getState(id.replace("totalNow","totalMonthNow")).val)*kwhPreis).toFixed(2)+" €";
                      if(!val1) {
                          val1="❌";
                          val4=(" <font color=\"red\"> ")+" --- ";
                          val2=(" <font color=\"red\"> ")+" --- ";
                          val3=(" <font color=\"red\"> ")+" --- ";
                          val5=(" <font color=\"red\"> ")+" --- ";
                          val6=(" <font color=\"red\"> ")+" --- ";
                          val7=(" <font color=\"red\"> ")+" --- ";
                          val0=(" <font color=\"red\"> ")+val0;
                          val8=(" <font color=\"red\"> ")+" --- ";
                          val9=(" <font color=\"red\"> ")+" --- ";}
                      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 (tuya){
            
                         // 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>Tuya</b>"; val1=""; val2="";val3="";val4="";
                  val5="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                  val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Now";
                  val7="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Monat"; 
                  val8="<font color=\""+htmlColorDeviceUeberschrift+"\"><i>Preis Now<\/i>";
                  val9="<font color=\""+htmlColorDeviceUeberschrift+"\"><i>Preis Monat<\/i>";
                  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
             $('tuya.*.*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
              //  var arrFilt=[];
                var ida = id.split('.');
              //   var idb;
                var checker=false;
                var checkCur=false;
                var checkVol=false;
                var checkPow=false;
                var checkOnline=false;
                var val5_1=false;  var val5_2=false;
              
                //log(getObject(id).common.name)
               if (getObject(id).common.name == "cur_current")  {checkCur=true; val2=getState(id).val.toString(); // log(val2.toString())
                        // log(id)       
                       
                      $(ida[0]+"."+ida[1]+"."+ida[2]+".*").each(function(id, i) {   
                          if (getObject(id).common.name == "cur_voltage")  {checkVol=true; val3=getState(id).val.toString()+" mA"; }//log(val3.toString())}
                        });
                   
                      $(ida[0]+"."+ida[1]+"."+ida[2]+".*").each(function(id, i) {  
                           if (getObject(id).common.name == "cur_power")  {checkPow=true; val4=getState(id).val.toString()+" W"; }//log(val4.toString())}
                           }); 
                        
                     $(ida[0]+"."+ida[1]+"."+ida[2]+".*").each(function(id, i) {   
                            if (getObject(id).common.name.includes("online"))  {checkOnline=true; val1=getState(id).val; }//log(val1.toString())}
                          
                           });  
            
                           val5_2=false;
                      $(ida[0]+"."+ida[1]+"."+ida[2]+".*").each(function(id, i) {   
                            if (getObject(id).common.name ==("power"))  { val5_2=true; val5_1=getState(id).val; }//log(val5_1.toString())}
                          
                           });  
                          }
            
              // if (getObject(id.replace("cur_current","cur_voltage")).common.name == "cur_voltage")  {checkVol=true}
              // if (getObject(id.replace("cur_current","cur_power")).common.name == "cur_power")    {checkPow=true}
               
               if (checkCur && checkPow && checkVol && checkOnline) checker=true;
              // log(checkCur.toString() + checkVol.toString()+ checkPow.toString())///if (getObject(id).common.name == "cur_voltage") {}
               ///if (getObject(id).common.name == "cur_power") {}
            
               if (checker) {
            
            
            
            
                   
            
                    //log (id)
                     anzahl++;
                    
                      var stateIdHM=ida[3]; //log(stateIdHM)
                      counter++; 
                  //   var valVersion=getState(id.replace("totalNow","hw_ver")).val;  
                       
                       
                    
                    //  val1=getState(ida[0]+"."+ida[1]+"."+ida[2]+".cur_current").val   //getState(id.replace("ENERGY_COUNTER","STATE")).val;                  
                      val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;  //val0=getObject(id).common.name ;
                     if(val5_2) {if (val5_1)  {val5=(" <font color=\"lightgreen\"> ")+"ON"} else { val5=(" <font color=\"red\"> ")+"OFF";}}
                        else {if (val1) {val5=" - "} else { val5=(" <font color=\"red\"> ")+" - ";}} 
                    //  val4=getState(id.replace("ENERGY_COUNTER","POWER")).val+ " W"     ;     //log (val4)       //.substring(0,4)        
                    //  val2=" - ";
                    //  val3=" - ";
                     /* 
                      if (arrFilt.includes("CURRENT")) {val2=getState(id.replace("ENERGY_COUNTER","CURRENT")).val.toFixed(0)+ " mA";} else {val2="-"} 
                      if (arrFilt.includes("VAOLTAGE")) {val3=getState(id.replace("ENERGY_COUNTER","VOLTAGE")).val.toFixed(0)+" V";}  else {val3="-"} 
                      if (stateIdHM=="6" && arrFilt.includes("CURRENT")) {val5=getState(ida[0]+"."+ida[1]+"."+ida[2]+"."+"3"+".STATE").val;val5 ? val5=(" <font color=\"lightgreen\"> ")+"ON" : val5=(" <font color=\"red\"> ")+"OFF";} else {val5="-"} 
                      if (stateIdHM=="2" && arrFilt.includes("CURRENT")) {val5=getState(ida[0]+"."+ida[1]+"."+ida[2]+"."+"1"+".STATE").val;val5 ? val5=(" <font color=\"lightgreen\"> ")+"ON" : val5=(" <font color=\"red\"> ")+"OFF";} else {val5="-"} 
                      //val7_1 ? val5=(" <font color=\"lightgreen\"> ")+"ON" : val5=(" <font color=\"red\"> ")+"OFF";
                      */
                     // val5=" - ";
                      val6=" - "; // getState(id).val.substring(0,5)+ " kWh";
                      val7=" - "; // getState(id.replace("totalNow","totalMonthNow")).val.substring(0,5)+ " kWh";
                      val8=" - "; // (parseFloat(getState(id).val)*kwhPreis).toFixed(2)+" €";
                      val9=" - "; // (parseFloat(getState(id.replace("totalNow","totalMonthNow")).val)*kwhPreis).toFixed(2)+" €";
                      if(!val1) {
                          val1="❌";
                          val4=(" <font color=\"red\"> ")+" --- ";
                          val2=(" <font color=\"red\"> ")+" --- ";
                          val3=(" <font color=\"red\"> ")+" --- ";
                          val5=(" <font color=\"red\"> ")+" --- ";
                          val6=(" <font color=\"red\"> ")+" --- ";
                          val7=(" <font color=\"red\"> ")+" --- ";
                          val0=(" <font color=\"red\"> ")+val0;
                          val8=(" <font color=\"red\"> ")+" --- ";
                          val9=(" <font color=\"red\"> ")+" --- ";}
                      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
            
            //-------------------------------------------------------------------------------------------------------------------------------------------------
            //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
            //-------------------------------------------------------------------------------------------------------------------------------------------------
            
                  tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                // log(anzahl.toString());
                      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><td align="+Feld9lAlign+">&ensp;"+val8+"&ensp;</td><td align="+Feld10lAlign+">&ensp;"+val9+"&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><td align="+Feld9lAlign+">&ensp;"+val8+"&ensp;</td><td align="+Feld10lAlign+">&ensp;"+val9+"&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><td align="+Feld9lAlign+">&ensp;"+val8+"&ensp;</td><td align="+Feld10lAlign+">&ensp;"+val9+"&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><td align="+Feld9lAlign+">&ensp;"+val8+"&ensp;</td><td align="+Feld10lAlign+">&ensp;"+val9+"&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><td align="+Feld9lAlign+">&ensp;"+val8+"&ensp;</td><td align="+Feld10lAlign+">&ensp;"+val9+"&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><td align="+Feld9lAlign+">&ensp;"+val8+"&ensp;</td><td align="+Feld10lAlign+">&ensp;"+val9+"&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><td align="+Feld9lAlign+">&ensp;"+val8+"&ensp;</td><td align="+Feld10lAlign+">&ensp;"+val9+"&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><td align="+Feld9lAlign+">&ensp;"+val8+"&ensp;</td><td align="+Feld10lAlign+">&ensp;"+val9+"&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><td align="+Feld9lAlign+">&ensp;"+val8+"&ensp;</td><td align="+Feld10lAlign+">&ensp;"+val9+"&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><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><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><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><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><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><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><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><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><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><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><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><td>&ensp;</td><td>&ensp;</td></tr>');      
                                break; }
                 
                                var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
                   var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>"
                    
                    if (!htmlSignature) htmlUnter="";
                      //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
                       var htmlOutVIS="";
                     //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                        if (htmlUberschrift) 
                            { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter ;
            
                          } else {
                           zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter;
            
                             }
            
            // log("bin raus aus tabelleBind");
                       if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
            
             var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>"
             var htmlEnd="</table>"+htmlUnter+"</div></body>";
             if (!htmlSignature) htmlUnter="";
            
             //mit oder ohne überschrift - zentriert oder links
            htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
             //log(htmlOut);
             
            
            
            }
            
            
            
            

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

              @liv-in-sky sagte in Strom Geräte als HTML Tabelle - Vis - Iqontrol:

              ist halt ein schönes grün - ich glaube ich habe sowas schon mal in blau gesehen

              grün ist custom design - blau ist standard 😉

              Ich habe dort den Kanal :3 (ganz oben (das ist das Summensignal aus den nächsten drei virtuellen Kanälen) abgebildet =Schaltzustand: aus), und daneben das was dein Skript macht = On

              1 Reply Last reply Reply Quote 0
              • ?
                A Former User @liv-in-sky last edited by A Former User

                @liv-in-sky ich für meinen Teil bin ihm dankbar für seine Arbeit und schätze die Tabelle sehr. Ebenso erschließt sich mir nicht, warum ich eine Verbrauchsübersicht im Sekundentakt brauche. Aber das wird jetzt dann grundsätzlich und die Frage, ob weiter oder nicht Stelle ich an den Entwickler

                Ich danke ihm für diese Tabelle und die bereits erstellte sonoff. Ich schätze sie ausserordentlich

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

                  @all und @liv-in-sky

                  @Homoran sagte in Strom Geräte als HTML Tabelle - Vis - Iqontrol:

                  Ich möchte hier mal eine ganz ketzerische Frage stellen:

                  Lohnt sich eigentlich die ganze Arbeit, die sich @liv-in-sky hier macht?

                  ich habe mich hier beteiligt weil ich die Daten von HomeMatic beitragen wollte.
                  Aber je länger dieser Thread wird, desto mehr zweifle ich an Sinn und Unsinn dieses Projekts.

                  Erstmal nochmal einen ganz großes Lob was @liv-in-sky hier und in anderen Tabellen-Thread an Energie , Geduld und Freizeit reinsteckt .👍

                  Für mich Persönlich reicht es auch und habe nur kurz dabei beigetragen .

                  Bevor @liv-in-sky seine ganze Energie hier verpufft überlegt bitte einmal ob das Projekt wirklich sinnvoll ist.

                  Richtig … das sollte man hier bedenken ❗

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

                    @Homoran

                    ganz so abwegig ist der gedanke von homoran nicht- ich habe auch schon überlegt, ob das alles sinn macht aber ich habe noch weitere aspekte, die mich dann doch weitermachen liesen

                    • etwas einfach zu unterbrechen liegt mir nicht bzw dafür brauche ich für mich gute gründe - da ja auch andere zeit investieren um zu testen und diese tabelle tatsächlich nutzen wollen
                    • zb die tuya aufgabe - auch wenn sie nach der aussage von apollon eher falsch angegangen worden ist, wollte ich es einfach machen - da es mich sicherer im umgang mit diesen iobroker-verzeichnis macht - und ich gerne etwas programmiererfahrung sammle
                    • ich selbst wollte diese tabelle , weil noch weitere energiemesser bei mir kommen werden
                    Homoran 1 Reply Last reply Reply Quote 5
                    • Homoran
                      Homoran Global Moderator Administrators @liv-in-sky last edited by Homoran

                      @liv-in-sky

                      Das sind alles Punkte, die ICH für mich persönlcih auch unterschreiben würde.

                      Nach dem Motto: Ich will es können!

                      Danke für diesen Willen

                      1 Reply Last reply Reply Quote 0
                      • Homoran
                        Homoran Global Moderator Administrators @Guest last edited by

                        @HeinrichB sagte in Strom Geräte als HTML Tabelle - Vis - Iqontrol:

                        ich für meinen Teil bin ihm dankbar für seine Arbeit

                        Das ist wohl jeder hier - mich eingeschlossen.

                        @HeinrichB sagte in Strom Geräte als HTML Tabelle - Vis - Iqontrol:

                        Ebenso erschließt sich mir nicht, warum ich eine Verbrauchsübersicht im Sekundentakt brauche.

                        Das wird jetzt etwas komplexer!
                        Abgesehen davon dass ich das nie verlangt habe:
                        sekundengenau ist es nur dann notwendig, wenn man damit Berechnungen anstellen will. Dann muss der Messwert der Solarproduktion und der Messwert des Stromzählers zur selben (Milli-) Sekunde erfasst werden, damit kein Blödsinn raus kommt.
                        Die Leistung schwankt teilweise sehr schnell. ( Stichwort "Stromspitzen", auch wenn sich diese im Millisekundenbereich abspielen).Jeder von euch, der sich Messeinrichtungen gekauft hat, hatte dafür ja sicher einen Grund.

                        Der häufigste ist herauszubekommen, warum man dem EVU jeden Monat soooo viel Geld überweisen muss, und ob man da nicht noch etwas sparen kann. Also der effektive Verbrauch

                        Hier ein Beispiel warum es dann nichts bringt im 15 Minuten-Intervall diesen Verbrauch zu monitoren.

                        So sieht mein Diagramm für den Tagesüberblick aus:
                        Strom_overview.png

                        Der große Peak war eben das Badewasser über Durchlauferhitzer. Auch sonst sieht man da ein paar Spitzen. Aber Flot rundet! Auch (oder gerade) wenn die Messpunkte im 5-Sekunden Takt kommen.

                        Zoomt man das jetzt auf sieht es zwischen 16:45 und 17:00 so aus:
                        Strom_details.png

                        Wenn man sich jetzt nochmal vor Augen führt dass nur alle 15 Minuten aktualisiert wird, hätte man entweder einen Dauerverbrauch von 650W, 3.800W oder gar 5.800W.
                        In den ersten Fällen kann man gar nicht glauben, dass die Sicherung geflogen ist - im Letzten Fall wundert man sich nicht mehr.

                        Der nächste Punkt waren die Zustände der Schalter.
                        Hier hatte ich geschrieben, dass diese Zustände in meinem View sekunden genau sind. Nicht weil ich es will, sondern weil sie von der HM-Zentrale so gepusht werden. In dem Moment wo sie geschaltet werden sieht man es auch.

                        Jetzt stellen wir uns vor, diese Tabelle wird auch nur alle 15 Minuten aktualisiert.
                        Jetzt will ich aus dem Haus, ins Bett oder wer weiss was sonst und sehe auf die Tabell ob nochirgendwo Licht an ist, der Herd noch läuft, ein Fenster offen ist usw..

                        Was nutzen mir dann Daten, die 15 Minuten alt sind.
                        Auch hier kann es in beide Richtungen gehen.
                        Ich renne in den Garten und will die Schuppentür abschließen, dabei hat meine bessere Hälfte das bereits vor 10 Minuten erledigt.
                        Oder ich gehe beruhigt aus dem Haus, weil ja alle Fenster zu, kein Verbraucher mehr an ist usw...

                        Was nutzt dann diese wirklich schöne Tabelle?

                        Damit sind wir wieder ganz vorne - Der Wert von aktuellen Daten lebt von Aktualität 😉
                        Summen oder historisierte Daten zur Übersicht sind da etwas ganz anderes.

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

                          @liv-in-sky

                          Screenshot (1386).png

                          1 Reply Last reply Reply Quote 0
                          • ?
                            A Former User @Homoran last edited by

                            @Homoran dann habe ich den Sinn der Tabelle für mich gänzlich anders gedeutet. Mir geht es wieder um eine Vergleichsrechnung noch ein live Monitoring

                            Ich will nur wissen was wann wo am Tag und in Summe verbraucht wurde.

                            Wenn du dein Ziel anders formulierst, dann hast du Recht.

                            Mir reicht für Tabelle und ich bin dem Entwickler zu tiefem dank verpflichtet

                            Danke @liv-in-sky

                            Homoran 1 Reply Last reply Reply Quote 0
                            • Homoran
                              Homoran Global Moderator Administrators @Guest last edited by Homoran

                              @HeinrichB sagte in Strom Geräte als HTML Tabelle - Vis - Iqontrol:

                              Ich will nur wissen was wann wo am Tag und in Summe verbraucht wurde.

                              Dann bin ich voll bei dir!

                              Wobei es auch in diesem Thread schon mehrfach gesagt wurde, dass es für die Summenbildung ja u.a. den source Analytics Adapter gibt

                              ? 1 Reply Last reply Reply Quote 0
                              • ?
                                A Former User @Homoran last edited by

                                @Homoran das stimmt und alle die Daten für wir in der Tabelle haben, liegen eh überall. Es ist nur eine andere dynamische Darstellung

                                Sei mir nicht böse aber diese Diskussion läuft gerade aus den Ruder. Über den Sinn und Unsinn soll jeder für sich unterscheiden. Und jeder kann auch selbst such überlegen, was er wie für sich nutzt.

                                Ich werde für Tabelle sicher nutzen!

                                ? Homoran 2 Replies Last reply Reply Quote 0
                                • ?
                                  A Former User @Guest last edited by

                                  Ich danke @liv-in-sky für für Erstellung und werde die Tabelle nutzen!
                                  Jedoch Klinke ich mich jetzt aus dem topic aus

                                  Danke

                                  sigi234 1 Reply Last reply Reply Quote 0
                                  • sigi234
                                    sigi234 Forum Testing Most Active @Guest last edited by

                                    @HeinrichB sagte in Strom Geräte als HTML Tabelle - Vis - Iqontrol:

                                    Jedoch Klinke ich mich jetzt aus dem topic aus

                                    Warum?

                                    ? vauvau07 2 Replies Last reply Reply Quote 0
                                    • Homoran
                                      Homoran Global Moderator Administrators @Guest last edited by

                                      @HeinrichB sagte in Strom Geräte als HTML Tabelle - Vis - Iqontrol:

                                      Sei mir nicht böse

                                      Bin ich nicht 😉

                                      @HeinrichB sagte in Strom Geräte als HTML Tabelle - Vis - Iqontrol:

                                      aber diese Diskussion läuft gerade aus den Ruder.

                                      sehe ich anders.
                                      Wie wäre es denn wenn man alle EnergiemessGeräte" über source-Analytics einbinden würde und @liv-in-sky bindet nur noch deren Datenpunkte in diese wunderschöne Tabelle ein.

                                      Dann müsste das Rad (hier: die Berechnung der kumulierten Werte) nicht neu erfunden werden

                                      1 Reply Last reply Reply Quote 1
                                      • ?
                                        A Former User @sigi234 last edited by

                                        @sigi234 weil ich nichts mehr substanzielles beitragen kann. 👍

                                        1 Reply Last reply Reply Quote 0
                                        • vauvau07
                                          vauvau07 @sigi234 last edited by vauvau07

                                          @sigi234
                                          Strom4.PNG
                                          siehe an alles da
                                          Gas ? filterArray=?

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

                                            ich wollte nur kurz nachfragen

                                            hat noch jmd interesse daran weiterzumachen? muss noch etwas integriert werden?

                                            wer möchte sourcanalytics miteingebunden haben und da etwas testen - ich habe den adapter gerade zum erstenmal installiert - check noch nicht, was da alles geht - da ich im moment nur sonoff pows habe, die alles liefern, was ich brauche, wäre es gut , die sourceanalytics sache mit tuya oder homematic geräten zu testen - geräte ohne kwh anzeige

                                            wer die schalter-zustände aktuell möchte - man könnte auch wie bei der sonoff tabelle auf die schalter triggern und die tabelle updaten

                                            ? crunchip 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            602
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            13
                                            289
                                            26432
                                            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