Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Script fürTabelle der Batterie Zustände

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.5k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.1k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    2.7k

Script fürTabelle der Batterie Zustände

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascriptmonitoringtemplate
1.4k Beiträge 67 Kommentatoren 490.3k Aufrufe 86 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • Bulli BultmannB Offline
    Bulli BultmannB Offline
    Bulli Bultmann
    schrieb am zuletzt editiert von
    #567

    Ja genau.

    In den ersten Bildern von mir sind die auch als Überschrift zu sehen.
    Aber es werden keine Geräte gelistet.

    liv-in-skyL 1 Antwort Letzte Antwort
    0
    • liv-in-skyL liv-in-sky

      @Bulli-Bultmann die fenstersensoren von xiaomi sind doch die kleinen magnet schalter, die aus 2 teilen bestehen

      die habe ich auch - sollten drin sein

      Image 12.png

      vauvau07V Online
      vauvau07V Online
      vauvau07
      schrieb am zuletzt editiert von
      #568

      @liv-in-sky
      ich habe auch einige Geräte, sind unter zigbee angemeldet aber keine Anzeige

      Gruß Volkmar

      liv-in-skyL 1 Antwort Letzte Antwort
      0
      • Bulli BultmannB Bulli Bultmann

        Ja genau.

        In den ersten Bildern von mir sind die auch als Überschrift zu sehen.
        Aber es werden keine Geräte gelistet.

        liv-in-skyL Offline
        liv-in-skyL Offline
        liv-in-sky
        schrieb am zuletzt editiert von
        #569

        @Bulli-Bultmann mach mal den export des json und gebe mir die datei - einfach die datei ins forum ziehen

        anleitung https://forum.iobroker.net/post/355793

        nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

        Bulli BultmannB 1 Antwort Letzte Antwort
        0
        • liv-in-skyL liv-in-sky

          UPDATE

          ich habe mal das neuste script im ersten post hinterlegt - es gibt nun einen dritten datenpunkt - bitte nicht vergessen anzulegen und im script einzutragen- in diesem datenpunkt ist eine comma-separated liste mit den geräten, die einen low-bat-stand haben - darunter muss muss dies freigeschaltet werden - erst dann wird der datenpunkt beschrieben - er wird nur upgedate, wenn ein alarm dazukommt oder das script neugestartet wird

          bitte macht das update- ansonsten ist der support viel schwieriger

          NegaleinN Offline
          NegaleinN Offline
          Negalein
          Global Moderator
          schrieb am zuletzt editiert von
          #570

          @liv-in-sky sagte in Script fürTabelle der Batterie Zustände:

          ich habe mal das neuste script im ersten post hinterlegt

          hat sich nur das geändert?
          Denn dann würde ich nur die Zeile kopieren. Anders muss ich immer neu-alt vergleichen.

          ° Node.js: 20.17.0 NPM: 10.8.2
          ° Proxmox, Ubuntu 22.04.3 LTS
          ° Fixer ---> iob fix

          liv-in-skyL 2 Antworten Letzte Antwort
          0
          • vauvau07V vauvau07

            @liv-in-sky
            ich habe auch einige Geräte, sind unter zigbee angemeldet aber keine Anzeige

            liv-in-skyL Offline
            liv-in-skyL Offline
            liv-in-sky
            schrieb am zuletzt editiert von liv-in-sky
            #571

            @vauvau07 sind auch nicht integriert

            schau mal da in dieses script -da sind sie drin - bitte testen bevor ich es uploade - ich habe keine datenpunkte dazu - daher blindflug

            @Bulli-Bultmann du kannst dieses file auch gerne testen für die zigbee

            //@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.AKKU"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget - zeichenkette(string)
            let dpAlarm="controll-own.0.TABELLEN.AkkuAlarm";  //WICHTIG datenpunkt erstellen vom typ "number" - bei 0 kein alarm und größer 0 die anzahl der schlechten batterien
            let dpAlarmMessage="controll-own.0.TABELLEN.AkkuMeessage";  //WICHTIG datenpunkt erstellen vom typ "string" Inhalt - alle devices mit lowbat-alarmen
            let wantAmessage=false;                                      // dieser message datenpunkt kann hier abgeschalten werden
            let htmlColorDeviceUeberschrift="#00BFFF"
            var battAlarm=30;                                     //alarm batterie wert
            var battAlarmWarning=55;                                     //warnungen batterie wert
            
            // ------------------------    hier einstellen, was man für adapter hat - die nicht gebraucht werden auf false setzen !!!
            var tradfri=true;
            var hue=true;
            var hueExt=true;
            var homematic=true;
            var homematicIp=true;
            var xiaomi=true;                                                // mihome.0
            var fritzDect=true;
            var netatmo=true;
            var homee=true;
            var tado=true;
            var zigbee=true;
            var iogo=true;                                                 // iogo - adapter - hat batterie abfrage
            var fullyBrowser=true;                                         // fullybrowser - adapter - hat batterie abfrage
            var handy1=false;                                              // sind einzelne datenpunkte, 
            var handy2=false;
            
            //f          ür spezialisten bei devices mit über 3 volt batterien
            var bigBattAlarm=3.3; var bigBattWarn=3.6; //WICHTIG bei bigAlarm nicht unter 3.3 gehen !!!!!!!!
            
            var symbolOK="✅";
            var symbolKO="❌";     //z.b. auch "<font color=\"red\"><b>X</b>" für ein rotes kreuz
            var symbolWARN="⚠️";
            
            var filterArray=[]; //hier den ganzenpfad von ungewünschten LOW_BAT werten eingeben - diese werden dann gefiltert
                                          // BEISPIEL var filterArray=["hm-rpc.0.LEQ0242145.0.LOWBAT", "hm-rpc.0.LEQ0242152.0.LOWBAT","hm-rpc.1.OEQ0473764.0.LOWBAT"];
            let mySchedule=" */5 * * * * ";                       //jede minute  
            //---------------------------------------
            
            //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
            var htmlFeld1='Device';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
            var htmlFeld2='Wert';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
            var htmlFeld3='Status';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
            //-----------------------------------
            
            
            //------------------------------hier werden die styles für die tabelle definiert
            
            //ÜBERSCHRIFT ÜBER TABELLE
            let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
            let   htmlSignature=true;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
            const htmlFeldUeber='Batterie Zustand Sensoren';              // Überschrift und Signature
            const htmlFarbUber="white";                         // Farbe der Überschrift
            const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
            const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
            //MEHRERE TABELLEN NEBENEINANDER
            let   mehrfachTabelle=4;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
            const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
            const htmlFarbTableColorUber="#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
            
            // AB HIER NICHTS  ÄNDERN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            // AB HIER NICHTS  ÄNDERN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            // AB 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 3
            
             	var htmlTabUeber2="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;</td>";
            var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                             "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
            //------------------------------------------------------
            
            
            var htmlTabUeber="";
            var htmlOut="";
            var mix;
            var counter;
            var AkkuAlarm=[];
            var alarmMessage=[];
            let AkkuMessageLengthAlt=0;
            var arrDoppelt=[];
            //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
            var val1; var val0; var val2;
            
            function writeHTML(){
             AkkuAlarm=[];
            
            htmlOut="";
            
            counter=-1;
            htmlTabUeber="";
            switch (mehrfachTabelle) { 
             case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
             case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
             case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
             case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
            };   
            if (!UeberschriftSpalten) {htmlTabUeber=""}
            
            
            //--------------------------------------------------------------------------------------------------------------------------------------------------
            //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
            //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
            //--------------------------------------------------------------------------------------------------------------------------------------------------
            var myColl=[];
            var val1help;
            
              
              if (fritzDect){
            
                         // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                           tabelleAusbessern();
                           tabelleAusbessern();
                           counter=0;
                             val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>FRITZDECT THERMOSTATE</b>"; val1=""; val2="";
                           tabelleBind(); 
                           tabelleAusbessern();
                           counter=-1;
            
            
             $('fritzdect.*.*.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                if (!filterArray.includes(id)){
                    var ida = id.split('.');
                   
                      counter++; 
                        
                    //  val0=ida[2]+"."+ida[3];
                      val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                      val1help=parseFloat((getState(id).val));
                      if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                      if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                      if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                      if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                      if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
            
                      if (val1help<=battAlarm) AkkuAlarm.push(1);
                      if (val1help<=battAlarm)  alarmMessage.push(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 (homee){
            
                  tabelleAusbessern();
                  counter=0;
                  val0=""; val1=""; val2="";
                  tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                  tabelleAusbessern();
                  counter=0;
                  val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HOMEE DEVICES</b>"; val1=""; val2="";
                  tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                  tabelleAusbessern();
                  counter=-1
            
            
             $('homee.0.*.BatteryLevel*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                if (!filterArray.includes(id)){
                    var ida = id.split('.');
                   
                      counter++; 
                        
                    //  val0=ida[2]+"."+ida[3];
                      val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                      val1help=parseFloat((getState(id).val));
                     //    var val2_1;
                    //   if (parseInt((new Date().getTime())) - val2_2help < 120000) {val2_1=true} else {val2_1=false;}
            
                      if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                      if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                      if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                      if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                    //  var val2_2help=Date.parse(getState(id.replace("BatteryStatus","LastUpdate")).val); 
                    //  if (val2_1) {val2=symbolOK} else{val2=symbolKO}   
                           
                      if (val1help<=battAlarm) AkkuAlarm.push(1);
                      if (val1help<=battAlarm)  alarmMessage.push(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 (netatmo){
            
                  tabelleAusbessern();
                  counter=0;
                  val0=""; val1=""; val2="";
                  tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                  tabelleAusbessern();
                  counter=0;
                  val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>NETATMO DEVICES</b>"; val1=""; val2="";
                  tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                  tabelleAusbessern();
                  counter=-1
            
            
             $('netatmo.*.*.*.BatteryStatus').each(function(id, i) {           // netatmo.0.Hinxxxer.Außenmodul-Carport.BatteryStatus
            
            //  if (!filterArray.includes(id)){
            
                  
                    var ida = id.split('.');
                 
                      counter++; 
                        
                    //  val0=ida[2]+"."+ida[3];
                      val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name ;
                      val1help=parseFloat((getState(id).val));
                      //   var val2_1;
                    //   if (parseInt((new Date().getTime())) - val2_2help < 120000) {val2_1=true} else {val2_1=false;}
            
                      if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                      if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                      if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                      if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                    //  var val2_2help=Date.parse(getState(id.replace("BatteryStatus","LastUpdate")).val); 
                    //  if (val2_1) {val2=symbolOK} else{val2=symbolKO}   
                           
                      if (val1help<=battAlarm) AkkuAlarm.push(1);
                      if (val1help<=battAlarm)  alarmMessage.push(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 (xiaomi){
                  // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                  tabelleAusbessern();
                  counter=0;
                  val0=""; val1=""; val2="";
                  tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                  tabelleAusbessern();
                  counter=0;
                  val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>XIAOMI DEVICES</b>"; val1=""; val2="";
                  tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                  tabelleAusbessern();
                  counter=-1
            
            
            $('mihome.*.devices.*.percent').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                  // log (id)
                   if (!filterArray.includes(id)){
                    var ida = id.split('.');
                   
                    
                      counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                    //  val0=ida[3];
                      val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name ;
                     val0=val0.replace(/.battery$/,""); 
                    // log(val0+"   "+id);
                      val1help=parseFloat((getState(id).val));
                      if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                      if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                      if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                      if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                      if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                     
                      if (val1help<=battAlarm) AkkuAlarm.push(1);
                      if (val1help<=battAlarm)  alarmMessage.push(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 (hue){
                // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                  tabelleAusbessern();
                  counter=0;
                  val0=""; val1=""; val2="";
                  tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                  tabelleAusbessern();     
                  counter=0;
                  val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HUE DEVICES</b>"; val1=""; val2="";
                  tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                  tabelleAusbessern();
                  counter=-1
                
            $('hue.*.*.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
             
              if (!filterArray.includes(id)){
                   var ida = id.split('.');
                  
                   
                     counter++; 
                      val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name ;   val0=val0.replace(/.battery$/,""); val0=val0.replace("Philips_hue.",""); val0=val0.replace(/_/g," ");                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                      val1help=parseFloat((getState(id).val));
                      if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                      if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                      if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                      if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                      if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                    
                      if (val1help<=battAlarm) AkkuAlarm.push(1);
                      if (val1help<=battAlarm)  alarmMessage.push(val0);
              
                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
            
            } }); 
            
             }  //ende hue
            if (hueExt){ 
                   // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                  tabelleAusbessern();
                  counter=0;
                  val0=""; val1=""; val2="";
                  tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                  tabelleAusbessern();        
                  counter=0;
                  val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HUE EXTENDED</b>"; val1=""; val2="";
                  tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                  tabelleAusbessern();
                  counter=-1
            
            $('hue-extended.*.*.*.config.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
            
            if (!filterArray.includes(id)){
                  var ida = id.split('.');
               
                  
                    counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                   
                       val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name ;   val0=val0.replace("Philips_hue.",""); val0=val0.replace(/_/g," ");                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
            
                      val1help=parseFloat((getState(id).val));
                      if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                      if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                      if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                      if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                      if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                      if (val1help<=battAlarm) AkkuAlarm.push(1);
                      if (val1help<=battAlarm)  alarmMessage.push(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 hue-extended
            
               if (zigbee){ 
            
                  // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                  tabelleAusbessern();
                  counter=0;
                  val0=""; val1=""; val2="";
                  tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                  tabelleAusbessern();
                  counter=0;
                  val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>ZIGBEE</b>"; val1=""; val2="";
                  tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                  tabelleAusbessern();
                  counter=-1
            
            $('zigbee.*.*.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                 
                  if (!filterArray.includes(id)){
                  var ida = id.split('.');
                 
                  
                    counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                   
                   
                     val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                    // log(val0+"   "+id);
                    val1help=getState(id).val;
                    val1help=parseFloat((getState(id).val));
                    if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                    if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                    if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                    if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                    if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
            
                    if (val1help<=battAlarm) AkkuAlarm.push(1);
                    if (val1help<=battAlarm)  alarmMessage.push(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 !!!!!!!!!
             }
            
            if (tradfri){ 
            
                  // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                  tabelleAusbessern();
                  counter=0;
                  val0=""; val1=""; val2="";
                  tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                  tabelleAusbessern();
                  counter=0;
                  val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>IKEA TRADFRI</b>"; val1=""; val2="";
                  tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                  tabelleAusbessern();
                  counter=-1
            
            $('tradfri.*.*.batteryPercentage').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                 
                  if (!filterArray.includes(id)){
                  var ida = id.split('.');
                 
                  
                    counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                   
                   
                     val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                    // log(val0+"   "+id);
                    val1help=getState(id).val;
                    val1help=parseFloat((getState(id).val));
                    if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                    if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                    if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                    if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                    if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
            
                    if (val1help<=battAlarm) AkkuAlarm.push(1);
                    if (val1help<=battAlarm)  alarmMessage.push(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 !!!!!!!!!
             }
            
             if (tado){
                tabelleAusbessern();
                counter=0;
                val0=val0=""; val1=""; val2="";
                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                tabelleAusbessern();
                counter=0;
                val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>TADO DEVICES</b>"; val1=""; val2="";
                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                tabelleAusbessern();
                counter=-1
            
            
            $('tado.*.*.*.*.*.*.info.batteryState').each(function(id, i) {           // tado.0.337268.Rooms.11.devices.VA3078030592.info.batteryState
                var ida = id.split('.');
                 if (!filterArray.includes(id)){
                  counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                //  log(id)
                   val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]+"."+ida[4]).common.name                     //getObject(id).common.name ; //ida[2]+"."+ida[3];
                                                                                                   //tado.0.337268.Rooms.11
                  
                   //log(val0+"   "+id);
                  val1help=getState(id).val;
                  if (val1help=="LOW") {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                  //if (val1help<=battAlarm) {val2="<font color=\"red\"><b>X</b>"} else{val2=symbolOK}
                  if (val1help=="LOW") {val2="<font color=\"red\">"+symbolKO} else{val2=symbolOK}   
                  //if (val1help) {val2=<font color=\"red\"><b>X</b>} else{val2="✔"}         
                  
                  if (val1help=="LOW") AkkuAlarm.push(1);
                  if (val1help=="LOW")  alarmMessage.push(val0);
            
             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                 } // ende filterArr
            }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!! 
              }  //ende tado
            
            
            if (homematic){
                tabelleAusbessern();
                counter=0;
                val0=val0=""; val1=""; val2="";
                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                tabelleAusbessern();
                counter=0;
                val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HOMEMATIC</b>"; val1=""; val2="";
                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                tabelleAusbessern();
                counter=-1
                arrDoppelt=[];
            $('hm-rpc.*.*.*.BATTERY_STATE').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
             
             if (!filterArray.includes(id)){
                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])
                     });
                  arrDoppelt.push(ida[0]+"."+ida[1]+"."+ida[2]);
                  counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
            
               if (arrFilt.includes("BATTERY_STATE")) {
                           val0=getObject(id).common.name ; 
                           var ida = val0.split('.');
                           val0=ida[0].replace(/:.+/g,"");
                           val1help=getState(id).val;
                           var  val1helper=getState(id.replace("LOW_BAT","BATTERY_STATUS")).val;     
                           //bigBatterien 
                           //log (val1helper.toFixed(1))
                           if (val1helper>3.2){
                                  if (val1helper<=bigBattAlarm) {val2=symbolKO} else if (val1helper<=bigBattWarn && val1helper>bigBattAlarm) 
                                     {val2=symbolWARN} else{val2=symbolOK};
                                  if (val1helper<=bigBattAlarm) {val1=(" <font color=\"red\"> ")+val1helper.toFixed(1)+" V"} else if (val1helper<=bigBattWarn && val1helper>bigBattAlarm) 
                                     {val1=(" <font color=\"yellow\"> ")+val1helper.toFixed(1)+" V"} else{val1=(" <font color=\"green\"> ")+(val1helper.toFixed(1))+" V"};
                                  if (val1helper<bigBattAlarm) AkkuAlarm.push(1);
                                  if (val1helper<=bigBattAlarm)  alarmMessage.push(val0);
                               }
            
                           else {         
                                 if (val1helper<2.2) {val2=symbolKO} else if (val1helper<=2.5 && val1helper>=2.2) 
                                    {val2=symbolWARN} else{val2=symbolOK};
                                 if (val1helper<2.2) {val1=(" <font color=\"red\"> ")+val1helper.toFixed(1)+" V"} else if (val1helper<=2.5 && val1helper>=2.2) 
                                    {val1=(" <font color=\"yellow\"> ")+val1helper.toFixed(1)+" V"} else{val1=(" <font color=\"green\"> ")+val1helper.toFixed(1)+" V"};
                                 if (val1helper<2.2) AkkuAlarm.push(1);
                                 if (val1helper<2.2)  alarmMessage.push(val0);}
            
                 } else {
                                                              
                          val0=getObject(id).common.name ; 
                          var ida = val0.split('.');
                          val0=ida[0].replace(/:.+/g,"");
                          val1help=getState(id).val;
                          if (val1help) {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                          if (val1help) {val2=symbolKO} else{val2=symbolOK}         
                          if (val1help) AkkuAlarm.push(1);
                          if (val1help)  alarmMessage.push(val0);
            
                 }
            
             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
             }
            });
            //log(arrDoppelt.toString())
            $('hm-rpc.*.*.0.LOWBAT').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                var ida = id.split('.');
              //  log(id)
                //log(arrDoppelt.toString())
             //    if (!filterArray.includes(id) && !arrDoppelt.includes(ida[0]+"."+ida[1]+"."+ida[2]+".*.BATTERY_STATE") ) {
                         if (!filterArray.includes(id) && !arrDoppelt.includes(ida[0]+"."+ida[1]+"."+ida[2]) ) {                          
                  
                     
                  counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                //  log(id)
                   val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name                     //getObject(id).common.name ; //ida[2]+"."+ida[3];
                   var ida = val0.split('.');
                   val0=ida[0].replace(/:.+/g,"");
                   //log(val0+"   "+id);
                  val1help=getState(id).val;
                  if (val1help) {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                  //if (val1help<=battAlarm) {val2="<font color=\"red\"><b>X</b>"} else{val2=symbolOK}
                  if (val1help) {val2="<font color=\"red\">"+symbolKO} else{val2=symbolOK}   
                  //if (val1help) {val2=<font color=\"red\"><b>X</b>} else{val2="✔"}         
                  
                  if (val1help) AkkuAlarm.push(1);
                  if (val1help)  alarmMessage.push(val0);
            
            
             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                 } // log(id)// ende filterArr
            }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
            
            
            //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
             
              } //ende hm
            
            if (homematicIp ){ 
                   tabelleAusbessern();
                   counter=0;
                   val0=""; val1=""; val2="";
                   tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                   tabelleAusbessern();
                   counter=0;
                   val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HOMEMATIC IP</b>"; val1=""; val2="";
                   tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                   tabelleAusbessern();
                   counter=-1
            
            
            
            $('hm-rpc.*.*.0.LOW_BAT').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
            
             if (!filterArray.includes(id)){
                  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());
            
                    counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
            
                 if (arrFilt.includes("OPERATING_VOLTAGE")) {
                           //  val0=getObject(id).common.name ; 
                             val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ; 
                             var ida = val0.split('.');
                             val0=ida[0].replace(/:.+/g,"");
                             val1help=getState(id).val;
                             var  val1helper=getState(id.replace("LOW_BAT","OPERATING_VOLTAGE")).val;     
                             //bigBatterien 
                             //log (val1helper.toFixed(1))
                             if (val1helper>3.2){
                                    if (val1helper<=bigBattAlarm) {val2=symbolKO} else if (val1helper<=bigBattWarn && val1helper>bigBattAlarm) 
                                       {val2=symbolWARN} else{val2=symbolOK};
                                    if (val1helper<=bigBattAlarm) {val1=(" <font color=\"red\"> ")+val1helper.toFixed(1)+" V"} else if (val1helper<=bigBattWarn && val1helper>bigBattAlarm) 
                                       {val1=(" <font color=\"yellow\"> ")+val1helper.toFixed(1)+" V"} else{val1=(" <font color=\"green\"> ")+(val1helper.toFixed(1))+" V"};
                                    if (val1helper<bigBattAlarm) AkkuAlarm.push(1);
                                    if (val1helper<2.2) alarmMessage.push(val0);
                                 }
              
                             else {         
                                   if (val1helper<2.2) {val2=symbolKO} else if (val1helper<=2.5 && val1helper>=2.2) 
                                      {val2=symbolWARN} else{val2=symbolOK};
                                   if (val1helper<2.2) {val1=(" <font color=\"red\"> ")+val1helper.toFixed(1)+" V"} else if (val1helper<=2.5 && val1helper>=2.2) 
                                      {val1=(" <font color=\"yellow\"> ")+val1helper.toFixed(1)+" V"} else{val1=(" <font color=\"green\"> ")+val1helper.toFixed(1)+" V"};
                                   if (val1helper<2.2) {AkkuAlarm.push(1);}
                                   if (val1helper<2.2) alarmMessage.push(val0);
                                   }
            
                   } else {
                                                                
                            val0=getObject(id).common.name ; 
                            var ida = val0.split('.');
                            val0=ida[0].replace(/:.+/g,"");
                            val1help=getState(id).val;
                            if (val1help) {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                            if (val1help) {val2=symbolKO} else{val2=symbolOK}         
                            if (val1help) AkkuAlarm.push(1);
            
                   }
            
               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 hm-ip
            
             if (fullyBrowser){
                  tabelleAusbessern();
                  counter=0;
                  val0=""; val1=""; val2="";
                  tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                  tabelleAusbessern();
                  counter=0;
                  val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>FULLYBROWSER</b>"; val1=""; val2="";
                  tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                  tabelleAusbessern();
                  counter=-1
            
            
            $('fullybrowser.*.*.Info.batteryLevel').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
            if (!filterArray.includes(id)){
                    var ida = id.split('.');
                   
                    
                      counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
            
                      val0=getState(id.replace("batteryLevel","deviceName")).val;
                      val1help=parseFloat((getState(id).val));
                      if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                      if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                      if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                      if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                      if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                     
                      if (val1help<=battAlarm) AkkuAlarm.push(1);
                      if (val1help<=battAlarm)  alarmMessage.push(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 fullybrowser
            
            
             if (iogo){
                  tabelleAusbessern();
                  counter=0;
                  val0=""; val1=""; val2="";
                  tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                  tabelleAusbessern();
                  counter=0;
                  val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HANDY über IOGO</b>"; val1=""; val2="";
                  tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                  tabelleAusbessern();
                  counter=-1
            
            
            $('iogo.*.*.battery.level').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
            if (!filterArray.includes(id)){
                    var ida = id.split('.');
                   
                    
                      counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                   //   val0=ida[3];
                      val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                    // log(val0+"   "+id);
                      val1help=parseFloat((getState(id).val));
                      if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                      if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                      if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                      if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                      if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                     
                      if (val1help<=battAlarm) AkkuAlarm.push(1);
                      if (val1help<=battAlarm)  alarmMessage.push(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 iogo
            
            
              if (handy1){  
                      tabelleAusbessern();
                      counter=0;
                      val0=""; val1=""; val2="";
                      tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                      tabelleAusbessern();
                      counter=0;
                      val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HANDYs</b>"; val1=""; val2="";
                      tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                      tabelleAusbessern();
                      counter=-1
            
                   $('controll-own.0.HANDY.*batt*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                    if (!filterArray.includes(id)){
                  var ida = id.split('.');
                  
                    counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                    val0=ida[3];
                   // log(val0+"   "+id);
                    val1help=parseFloat((getState(id).val));
                    if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                    if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                    if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                    if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                    if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
            
                    if (val1help<=battAlarm) AkkuAlarm.push(1);
                    if (val1help<=battAlarm)  alarmMessage.push(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 handy1
            
            
            
              if (handy2){ 
                       $('controll-own.0.HANDY.*Batt*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                        if (!filterArray.includes(id)){
                  var ida = id.split('.');
                  
                    counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                    val0=ida[3];
                   // log(val0+"   "+id);
                    val1help=parseFloat((getState(id).val));
                    if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                    if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                    if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                    if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                    if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                    if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                   
            
             
               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 handy2
            //-------------------------------------------------------------------------------------------------------------------------------------------------
            //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
            //-------------------------------------------------------------------------------------------------------------------------------------------------
            
                tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
            
                if (AkkuAlarm.length >=1 ) {setState(dpAlarm,AkkuAlarm.length)} else {setState(dpAlarm,AkkuAlarm.length)}
               // log("BATTERIE Alarm     : "+AkkuAlarm.length.toString());
               if (AkkuMessageLengthAlt < AkkuAlarm.length && wantAmessage) {setState(dpAlarmMessage,alarmMessage.toString()); AkkuMessageLengthAlt=AkkuAlarm.length}
               alarmMessage=[];
                   
            } // function ende
            
            //MAIN:
            
            schedule(mySchedule,  function () { 
            writeHTML();
            if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
            }); 
            writeHTML();  
            if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}                                 //     <tdalign
            function tabelleBind(){
                 switch (mehrfachTabelle) {  
                   case 1:                    htmlOut=htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;
                   case 2:  if(counter%2==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                         else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;
                                              
                   case 3: if(counter%3==0 )  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                         else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                          else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                    } break;
            
            
                   case 4: if(counter%4==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                             else {if(counter%2==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                          else    {if(counter%2==1 && counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} 
                                                                            else    {htmlOut = htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}}
                                                    } break; } //switch ende
            
            }
            
            function tabelleAusbessern() {
            
            switch (mehrfachTabelle) {  
                   case 1:    break;
                   case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                              break;
                   case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                              if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                              break;
                   case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                              if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                              if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                              break; }
            }
            
            function tabelleFinish() {
            
            switch (mehrfachTabelle) {  
                   case 1:    break;
                   case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                              break;
                   case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                              if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                              break;
                   case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                              if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                              if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                              if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                              break; }
               
                   var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
                 var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>";
                  
                  if (!htmlSignature) htmlUnter="";
                    //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
                     var htmlOutVIS="";
                   //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                      if (htmlUberschrift) 
                          { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter ;
            
                        } else {
                         zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter;
            
                           }
                           
            
            // log("bin raus aus tabelleBind");
                     if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
                     //console.log dpVIS;
            
            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);
            
            
            }
            
            
            

            nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

            Bulli BultmannB 2 Antworten Letzte Antwort
            0
            • NegaleinN Negalein

              @liv-in-sky sagte in Script fürTabelle der Batterie Zustände:

              ich habe mal das neuste script im ersten post hinterlegt

              hat sich nur das geändert?
              Denn dann würde ich nur die Zeile kopieren. Anders muss ich immer neu-alt vergleichen.

              liv-in-skyL Offline
              liv-in-skyL Offline
              liv-in-sky
              schrieb am zuletzt editiert von
              #572

              @Negalein sorry - es waren einige änderungen

              nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

              1 Antwort Letzte Antwort
              0
              • ? Offline
                ? Offline
                Ein ehemaliger Benutzer
                schrieb am zuletzt editiert von
                #573

                Aqara Human Motion Sensor
                Zigbee

                zigbee.0.00158d00034ce0ea.json

                liv-in-skyL 1 Antwort Letzte Antwort
                0
                • NegaleinN Negalein

                  @liv-in-sky sagte in Script fürTabelle der Batterie Zustände:

                  ich habe mal das neuste script im ersten post hinterlegt

                  hat sich nur das geändert?
                  Denn dann würde ich nur die Zeile kopieren. Anders muss ich immer neu-alt vergleichen.

                  liv-in-skyL Offline
                  liv-in-skyL Offline
                  liv-in-sky
                  schrieb am zuletzt editiert von
                  #574

                  @Negalein du kannst aber noch ein wenig warten - es ist noch was dazu gekommen - also muss ich noch was dazufügen - ich sag dann bescheid

                  nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                  1 Antwort Letzte Antwort
                  1
                  • ? Ein ehemaliger Benutzer

                    Aqara Human Motion Sensor
                    Zigbee

                    zigbee.0.00158d00034ce0ea.json

                    liv-in-skyL Offline
                    liv-in-skyL Offline
                    liv-in-sky
                    schrieb am zuletzt editiert von
                    #575

                    @Yetiberg

                    im nächsten update mit drin

                    Image 13.png

                    nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                    ? 1 Antwort Letzte Antwort
                    0
                    • liv-in-skyL liv-in-sky

                      @Yetiberg

                      im nächsten update mit drin

                      Image 13.png

                      ? Offline
                      ? Offline
                      Ein ehemaliger Benutzer
                      schrieb am zuletzt editiert von
                      #576

                      @liv-in-sky
                      WOW, das ging schnell :-)

                      1 Antwort Letzte Antwort
                      0
                      • liv-in-skyL liv-in-sky

                        @Bulli-Bultmann mach mal den export des json und gebe mir die datei - einfach die datei ins forum ziehen

                        anleitung https://forum.iobroker.net/post/355793

                        Bulli BultmannB Offline
                        Bulli BultmannB Offline
                        Bulli Bultmann
                        schrieb am zuletzt editiert von
                        #577

                        @liv-in-sky

                        zigbee.0.00158d0002c0d25b.json

                        So ok ? Kannte ich so noch nicht.

                        liv-in-skyL 1 Antwort Letzte Antwort
                        1
                        • liv-in-skyL Offline
                          liv-in-skyL Offline
                          liv-in-sky
                          schrieb am zuletzt editiert von
                          #578

                          im ersten post ist jetzt auch zigbee drin

                          @Negalein jetzt :-)

                          nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                          vauvau07V 1 Antwort Letzte Antwort
                          0
                          • liv-in-skyL liv-in-sky

                            im ersten post ist jetzt auch zigbee drin

                            @Negalein jetzt :-)

                            vauvau07V Online
                            vauvau07V Online
                            vauvau07
                            schrieb am zuletzt editiert von
                            #579

                            @liv-in-sky
                            geht alles sehr schnell TOP

                            Gruß Volkmar

                            liv-in-skyL 1 Antwort Letzte Antwort
                            0
                            • vauvau07V vauvau07

                              @liv-in-sky
                              geht alles sehr schnell TOP

                              liv-in-skyL Offline
                              liv-in-skyL Offline
                              liv-in-sky
                              schrieb am zuletzt editiert von
                              #580

                              @vauvau07 solange keine fehler kommen :-)

                              nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                              1 Antwort Letzte Antwort
                              0
                              • Bulli BultmannB Bulli Bultmann

                                @liv-in-sky

                                zigbee.0.00158d0002c0d25b.json

                                So ok ? Kannte ich so noch nicht.

                                liv-in-skyL Offline
                                liv-in-skyL Offline
                                liv-in-sky
                                schrieb am zuletzt editiert von
                                #581

                                @Bulli-Bultmann ich wollte eigentlich den xiaomi json haben - der macht doch ärger ? bzw wird bei dir nicht angezeigt - bei mir ist er drin

                                nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                                1 Antwort Letzte Antwort
                                0
                                • liv-in-skyL liv-in-sky

                                  @vauvau07 sind auch nicht integriert

                                  schau mal da in dieses script -da sind sie drin - bitte testen bevor ich es uploade - ich habe keine datenpunkte dazu - daher blindflug

                                  @Bulli-Bultmann du kannst dieses file auch gerne testen für die zigbee

                                  //@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.AKKU"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget - zeichenkette(string)
                                  let dpAlarm="controll-own.0.TABELLEN.AkkuAlarm";  //WICHTIG datenpunkt erstellen vom typ "number" - bei 0 kein alarm und größer 0 die anzahl der schlechten batterien
                                  let dpAlarmMessage="controll-own.0.TABELLEN.AkkuMeessage";  //WICHTIG datenpunkt erstellen vom typ "string" Inhalt - alle devices mit lowbat-alarmen
                                  let wantAmessage=false;                                      // dieser message datenpunkt kann hier abgeschalten werden
                                  let htmlColorDeviceUeberschrift="#00BFFF"
                                  var battAlarm=30;                                     //alarm batterie wert
                                  var battAlarmWarning=55;                                     //warnungen batterie wert
                                  
                                  // ------------------------    hier einstellen, was man für adapter hat - die nicht gebraucht werden auf false setzen !!!
                                  var tradfri=true;
                                  var hue=true;
                                  var hueExt=true;
                                  var homematic=true;
                                  var homematicIp=true;
                                  var xiaomi=true;                                                // mihome.0
                                  var fritzDect=true;
                                  var netatmo=true;
                                  var homee=true;
                                  var tado=true;
                                  var zigbee=true;
                                  var iogo=true;                                                 // iogo - adapter - hat batterie abfrage
                                  var fullyBrowser=true;                                         // fullybrowser - adapter - hat batterie abfrage
                                  var handy1=false;                                              // sind einzelne datenpunkte, 
                                  var handy2=false;
                                  
                                  //f          ür spezialisten bei devices mit über 3 volt batterien
                                  var bigBattAlarm=3.3; var bigBattWarn=3.6; //WICHTIG bei bigAlarm nicht unter 3.3 gehen !!!!!!!!
                                  
                                  var symbolOK="✅";
                                  var symbolKO="❌";     //z.b. auch "<font color=\"red\"><b>X</b>" für ein rotes kreuz
                                  var symbolWARN="⚠️";
                                  
                                  var filterArray=[]; //hier den ganzenpfad von ungewünschten LOW_BAT werten eingeben - diese werden dann gefiltert
                                                                // BEISPIEL var filterArray=["hm-rpc.0.LEQ0242145.0.LOWBAT", "hm-rpc.0.LEQ0242152.0.LOWBAT","hm-rpc.1.OEQ0473764.0.LOWBAT"];
                                  let mySchedule=" */5 * * * * ";                       //jede minute  
                                  //---------------------------------------
                                  
                                  //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
                                  var htmlFeld1='Device';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                                  var htmlFeld2='Wert';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                                  var htmlFeld3='Status';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                                  //-----------------------------------
                                  
                                  
                                  //------------------------------hier werden die styles für die tabelle definiert
                                  
                                  //ÜBERSCHRIFT ÜBER TABELLE
                                  let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
                                  let   htmlSignature=true;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
                                  const htmlFeldUeber='Batterie Zustand Sensoren';              // Überschrift und Signature
                                  const htmlFarbUber="white";                         // Farbe der Überschrift
                                  const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
                                  const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
                                  //MEHRERE TABELLEN NEBENEINANDER
                                  let   mehrfachTabelle=4;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                                  const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                                  const htmlFarbTableColorUber="#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
                                  
                                  // AB HIER NICHTS  ÄNDERN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                                  // AB HIER NICHTS  ÄNDERN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                                  // AB 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 3
                                  
                                   	var htmlTabUeber2="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;</td>";
                                  var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                                                   "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
                                  //------------------------------------------------------
                                  
                                  
                                  var htmlTabUeber="";
                                  var htmlOut="";
                                  var mix;
                                  var counter;
                                  var AkkuAlarm=[];
                                  var alarmMessage=[];
                                  let AkkuMessageLengthAlt=0;
                                  var arrDoppelt=[];
                                  //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
                                  var val1; var val0; var val2;
                                  
                                  function writeHTML(){
                                   AkkuAlarm=[];
                                  
                                  htmlOut="";
                                  
                                  counter=-1;
                                  htmlTabUeber="";
                                  switch (mehrfachTabelle) { 
                                   case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
                                   case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                   case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
                                   case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                  };   
                                  if (!UeberschriftSpalten) {htmlTabUeber=""}
                                  
                                  
                                  //--------------------------------------------------------------------------------------------------------------------------------------------------
                                  //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
                                  //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
                                  //--------------------------------------------------------------------------------------------------------------------------------------------------
                                  var myColl=[];
                                  var val1help;
                                  
                                    
                                    if (fritzDect){
                                  
                                               // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                                 tabelleAusbessern();
                                                 tabelleAusbessern();
                                                 counter=0;
                                                   val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>FRITZDECT THERMOSTATE</b>"; val1=""; val2="";
                                                 tabelleBind(); 
                                                 tabelleAusbessern();
                                                 counter=-1;
                                  
                                  
                                   $('fritzdect.*.*.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                      if (!filterArray.includes(id)){
                                          var ida = id.split('.');
                                         
                                            counter++; 
                                              
                                          //  val0=ida[2]+"."+ida[3];
                                            val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                            val1help=parseFloat((getState(id).val));
                                            if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                            if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                            if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                  
                                            if (val1help<=battAlarm) AkkuAlarm.push(1);
                                            if (val1help<=battAlarm)  alarmMessage.push(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 (homee){
                                  
                                        tabelleAusbessern();
                                        counter=0;
                                        val0=""; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();
                                        counter=0;
                                        val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HOMEE DEVICES</b>"; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();
                                        counter=-1
                                  
                                  
                                   $('homee.0.*.BatteryLevel*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                      if (!filterArray.includes(id)){
                                          var ida = id.split('.');
                                         
                                            counter++; 
                                              
                                          //  val0=ida[2]+"."+ida[3];
                                            val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                            val1help=parseFloat((getState(id).val));
                                           //    var val2_1;
                                          //   if (parseInt((new Date().getTime())) - val2_2help < 120000) {val2_1=true} else {val2_1=false;}
                                  
                                            if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                            if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                          //  var val2_2help=Date.parse(getState(id.replace("BatteryStatus","LastUpdate")).val); 
                                          //  if (val2_1) {val2=symbolOK} else{val2=symbolKO}   
                                                 
                                            if (val1help<=battAlarm) AkkuAlarm.push(1);
                                            if (val1help<=battAlarm)  alarmMessage.push(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 (netatmo){
                                  
                                        tabelleAusbessern();
                                        counter=0;
                                        val0=""; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();
                                        counter=0;
                                        val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>NETATMO DEVICES</b>"; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();
                                        counter=-1
                                  
                                  
                                   $('netatmo.*.*.*.BatteryStatus').each(function(id, i) {           // netatmo.0.Hinxxxer.Außenmodul-Carport.BatteryStatus
                                  
                                  //  if (!filterArray.includes(id)){
                                  
                                        
                                          var ida = id.split('.');
                                       
                                            counter++; 
                                              
                                          //  val0=ida[2]+"."+ida[3];
                                            val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name ;
                                            val1help=parseFloat((getState(id).val));
                                            //   var val2_1;
                                          //   if (parseInt((new Date().getTime())) - val2_2help < 120000) {val2_1=true} else {val2_1=false;}
                                  
                                            if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                            if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                          //  var val2_2help=Date.parse(getState(id.replace("BatteryStatus","LastUpdate")).val); 
                                          //  if (val2_1) {val2=symbolOK} else{val2=symbolKO}   
                                                 
                                            if (val1help<=battAlarm) AkkuAlarm.push(1);
                                            if (val1help<=battAlarm)  alarmMessage.push(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 (xiaomi){
                                        // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                        tabelleAusbessern();
                                        counter=0;
                                        val0=""; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();
                                        counter=0;
                                        val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>XIAOMI DEVICES</b>"; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();
                                        counter=-1
                                  
                                  
                                  $('mihome.*.devices.*.percent').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                        // log (id)
                                         if (!filterArray.includes(id)){
                                          var ida = id.split('.');
                                         
                                          
                                            counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                          //  val0=ida[3];
                                            val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name ;
                                           val0=val0.replace(/.battery$/,""); 
                                          // log(val0+"   "+id);
                                            val1help=parseFloat((getState(id).val));
                                            if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                            if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                            if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                           
                                            if (val1help<=battAlarm) AkkuAlarm.push(1);
                                            if (val1help<=battAlarm)  alarmMessage.push(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 (hue){
                                      // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                        tabelleAusbessern();
                                        counter=0;
                                        val0=""; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();     
                                        counter=0;
                                        val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HUE DEVICES</b>"; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();
                                        counter=-1
                                      
                                  $('hue.*.*.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                   
                                    if (!filterArray.includes(id)){
                                         var ida = id.split('.');
                                        
                                         
                                           counter++; 
                                            val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name ;   val0=val0.replace(/.battery$/,""); val0=val0.replace("Philips_hue.",""); val0=val0.replace(/_/g," ");                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                            val1help=parseFloat((getState(id).val));
                                            if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                            if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                            if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                          
                                            if (val1help<=battAlarm) AkkuAlarm.push(1);
                                            if (val1help<=battAlarm)  alarmMessage.push(val0);
                                    
                                      tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                  
                                  } }); 
                                  
                                   }  //ende hue
                                  if (hueExt){ 
                                         // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                        tabelleAusbessern();
                                        counter=0;
                                        val0=""; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();        
                                        counter=0;
                                        val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HUE EXTENDED</b>"; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();
                                        counter=-1
                                  
                                  $('hue-extended.*.*.*.config.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                  
                                  if (!filterArray.includes(id)){
                                        var ida = id.split('.');
                                     
                                        
                                          counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                         
                                             val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name ;   val0=val0.replace("Philips_hue.",""); val0=val0.replace(/_/g," ");                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                  
                                            val1help=parseFloat((getState(id).val));
                                            if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                            if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                            if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                            if (val1help<=battAlarm) AkkuAlarm.push(1);
                                            if (val1help<=battAlarm)  alarmMessage.push(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 hue-extended
                                  
                                     if (zigbee){ 
                                  
                                        // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                        tabelleAusbessern();
                                        counter=0;
                                        val0=""; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();
                                        counter=0;
                                        val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>ZIGBEE</b>"; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();
                                        counter=-1
                                  
                                  $('zigbee.*.*.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                       
                                        if (!filterArray.includes(id)){
                                        var ida = id.split('.');
                                       
                                        
                                          counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                         
                                         
                                           val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                          // log(val0+"   "+id);
                                          val1help=getState(id).val;
                                          val1help=parseFloat((getState(id).val));
                                          if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                          if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                          if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                          if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                          if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                  
                                          if (val1help<=battAlarm) AkkuAlarm.push(1);
                                          if (val1help<=battAlarm)  alarmMessage.push(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 !!!!!!!!!
                                   }
                                  
                                  if (tradfri){ 
                                  
                                        // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                        tabelleAusbessern();
                                        counter=0;
                                        val0=""; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();
                                        counter=0;
                                        val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>IKEA TRADFRI</b>"; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();
                                        counter=-1
                                  
                                  $('tradfri.*.*.batteryPercentage').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                       
                                        if (!filterArray.includes(id)){
                                        var ida = id.split('.');
                                       
                                        
                                          counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                         
                                         
                                           val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                          // log(val0+"   "+id);
                                          val1help=getState(id).val;
                                          val1help=parseFloat((getState(id).val));
                                          if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                          if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                          if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                          if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                          if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                  
                                          if (val1help<=battAlarm) AkkuAlarm.push(1);
                                          if (val1help<=battAlarm)  alarmMessage.push(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 !!!!!!!!!
                                   }
                                  
                                   if (tado){
                                      tabelleAusbessern();
                                      counter=0;
                                      val0=val0=""; val1=""; val2="";
                                      tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                      tabelleAusbessern();
                                      counter=0;
                                      val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>TADO DEVICES</b>"; val1=""; val2="";
                                      tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                      tabelleAusbessern();
                                      counter=-1
                                  
                                  
                                  $('tado.*.*.*.*.*.*.info.batteryState').each(function(id, i) {           // tado.0.337268.Rooms.11.devices.VA3078030592.info.batteryState
                                      var ida = id.split('.');
                                       if (!filterArray.includes(id)){
                                        counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                      //  log(id)
                                         val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]+"."+ida[4]).common.name                     //getObject(id).common.name ; //ida[2]+"."+ida[3];
                                                                                                                         //tado.0.337268.Rooms.11
                                        
                                         //log(val0+"   "+id);
                                        val1help=getState(id).val;
                                        if (val1help=="LOW") {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                                        //if (val1help<=battAlarm) {val2="<font color=\"red\"><b>X</b>"} else{val2=symbolOK}
                                        if (val1help=="LOW") {val2="<font color=\"red\">"+symbolKO} else{val2=symbolOK}   
                                        //if (val1help) {val2=<font color=\"red\"><b>X</b>} else{val2="✔"}         
                                        
                                        if (val1help=="LOW") AkkuAlarm.push(1);
                                        if (val1help=="LOW")  alarmMessage.push(val0);
                                  
                                   tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                       } // ende filterArr
                                  }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!! 
                                    }  //ende tado
                                  
                                  
                                  if (homematic){
                                      tabelleAusbessern();
                                      counter=0;
                                      val0=val0=""; val1=""; val2="";
                                      tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                      tabelleAusbessern();
                                      counter=0;
                                      val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HOMEMATIC</b>"; val1=""; val2="";
                                      tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                      tabelleAusbessern();
                                      counter=-1
                                      arrDoppelt=[];
                                  $('hm-rpc.*.*.*.BATTERY_STATE').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                   
                                   if (!filterArray.includes(id)){
                                      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])
                                           });
                                        arrDoppelt.push(ida[0]+"."+ida[1]+"."+ida[2]);
                                        counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                  
                                     if (arrFilt.includes("BATTERY_STATE")) {
                                                 val0=getObject(id).common.name ; 
                                                 var ida = val0.split('.');
                                                 val0=ida[0].replace(/:.+/g,"");
                                                 val1help=getState(id).val;
                                                 var  val1helper=getState(id.replace("LOW_BAT","BATTERY_STATUS")).val;     
                                                 //bigBatterien 
                                                 //log (val1helper.toFixed(1))
                                                 if (val1helper>3.2){
                                                        if (val1helper<=bigBattAlarm) {val2=symbolKO} else if (val1helper<=bigBattWarn && val1helper>bigBattAlarm) 
                                                           {val2=symbolWARN} else{val2=symbolOK};
                                                        if (val1helper<=bigBattAlarm) {val1=(" <font color=\"red\"> ")+val1helper.toFixed(1)+" V"} else if (val1helper<=bigBattWarn && val1helper>bigBattAlarm) 
                                                           {val1=(" <font color=\"yellow\"> ")+val1helper.toFixed(1)+" V"} else{val1=(" <font color=\"green\"> ")+(val1helper.toFixed(1))+" V"};
                                                        if (val1helper<bigBattAlarm) AkkuAlarm.push(1);
                                                        if (val1helper<=bigBattAlarm)  alarmMessage.push(val0);
                                                     }
                                  
                                                 else {         
                                                       if (val1helper<2.2) {val2=symbolKO} else if (val1helper<=2.5 && val1helper>=2.2) 
                                                          {val2=symbolWARN} else{val2=symbolOK};
                                                       if (val1helper<2.2) {val1=(" <font color=\"red\"> ")+val1helper.toFixed(1)+" V"} else if (val1helper<=2.5 && val1helper>=2.2) 
                                                          {val1=(" <font color=\"yellow\"> ")+val1helper.toFixed(1)+" V"} else{val1=(" <font color=\"green\"> ")+val1helper.toFixed(1)+" V"};
                                                       if (val1helper<2.2) AkkuAlarm.push(1);
                                                       if (val1helper<2.2)  alarmMessage.push(val0);}
                                  
                                       } else {
                                                                                    
                                                val0=getObject(id).common.name ; 
                                                var ida = val0.split('.');
                                                val0=ida[0].replace(/:.+/g,"");
                                                val1help=getState(id).val;
                                                if (val1help) {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                                                if (val1help) {val2=symbolKO} else{val2=symbolOK}         
                                                if (val1help) AkkuAlarm.push(1);
                                                if (val1help)  alarmMessage.push(val0);
                                  
                                       }
                                  
                                   tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                   }
                                  });
                                  //log(arrDoppelt.toString())
                                  $('hm-rpc.*.*.0.LOWBAT').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                      var ida = id.split('.');
                                    //  log(id)
                                      //log(arrDoppelt.toString())
                                   //    if (!filterArray.includes(id) && !arrDoppelt.includes(ida[0]+"."+ida[1]+"."+ida[2]+".*.BATTERY_STATE") ) {
                                               if (!filterArray.includes(id) && !arrDoppelt.includes(ida[0]+"."+ida[1]+"."+ida[2]) ) {                          
                                        
                                           
                                        counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                      //  log(id)
                                         val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name                     //getObject(id).common.name ; //ida[2]+"."+ida[3];
                                         var ida = val0.split('.');
                                         val0=ida[0].replace(/:.+/g,"");
                                         //log(val0+"   "+id);
                                        val1help=getState(id).val;
                                        if (val1help) {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                                        //if (val1help<=battAlarm) {val2="<font color=\"red\"><b>X</b>"} else{val2=symbolOK}
                                        if (val1help) {val2="<font color=\"red\">"+symbolKO} else{val2=symbolOK}   
                                        //if (val1help) {val2=<font color=\"red\"><b>X</b>} else{val2="✔"}         
                                        
                                        if (val1help) AkkuAlarm.push(1);
                                        if (val1help)  alarmMessage.push(val0);
                                  
                                  
                                   tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                       } // log(id)// ende filterArr
                                  }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
                                  
                                  
                                  //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
                                   
                                    } //ende hm
                                  
                                  if (homematicIp ){ 
                                         tabelleAusbessern();
                                         counter=0;
                                         val0=""; val1=""; val2="";
                                         tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                         tabelleAusbessern();
                                         counter=0;
                                         val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HOMEMATIC IP</b>"; val1=""; val2="";
                                         tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                         tabelleAusbessern();
                                         counter=-1
                                  
                                  
                                  
                                  $('hm-rpc.*.*.0.LOW_BAT').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                  
                                   if (!filterArray.includes(id)){
                                        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());
                                  
                                          counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                  
                                       if (arrFilt.includes("OPERATING_VOLTAGE")) {
                                                 //  val0=getObject(id).common.name ; 
                                                   val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ; 
                                                   var ida = val0.split('.');
                                                   val0=ida[0].replace(/:.+/g,"");
                                                   val1help=getState(id).val;
                                                   var  val1helper=getState(id.replace("LOW_BAT","OPERATING_VOLTAGE")).val;     
                                                   //bigBatterien 
                                                   //log (val1helper.toFixed(1))
                                                   if (val1helper>3.2){
                                                          if (val1helper<=bigBattAlarm) {val2=symbolKO} else if (val1helper<=bigBattWarn && val1helper>bigBattAlarm) 
                                                             {val2=symbolWARN} else{val2=symbolOK};
                                                          if (val1helper<=bigBattAlarm) {val1=(" <font color=\"red\"> ")+val1helper.toFixed(1)+" V"} else if (val1helper<=bigBattWarn && val1helper>bigBattAlarm) 
                                                             {val1=(" <font color=\"yellow\"> ")+val1helper.toFixed(1)+" V"} else{val1=(" <font color=\"green\"> ")+(val1helper.toFixed(1))+" V"};
                                                          if (val1helper<bigBattAlarm) AkkuAlarm.push(1);
                                                          if (val1helper<2.2) alarmMessage.push(val0);
                                                       }
                                    
                                                   else {         
                                                         if (val1helper<2.2) {val2=symbolKO} else if (val1helper<=2.5 && val1helper>=2.2) 
                                                            {val2=symbolWARN} else{val2=symbolOK};
                                                         if (val1helper<2.2) {val1=(" <font color=\"red\"> ")+val1helper.toFixed(1)+" V"} else if (val1helper<=2.5 && val1helper>=2.2) 
                                                            {val1=(" <font color=\"yellow\"> ")+val1helper.toFixed(1)+" V"} else{val1=(" <font color=\"green\"> ")+val1helper.toFixed(1)+" V"};
                                                         if (val1helper<2.2) {AkkuAlarm.push(1);}
                                                         if (val1helper<2.2) alarmMessage.push(val0);
                                                         }
                                  
                                         } else {
                                                                                      
                                                  val0=getObject(id).common.name ; 
                                                  var ida = val0.split('.');
                                                  val0=ida[0].replace(/:.+/g,"");
                                                  val1help=getState(id).val;
                                                  if (val1help) {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                                                  if (val1help) {val2=symbolKO} else{val2=symbolOK}         
                                                  if (val1help) AkkuAlarm.push(1);
                                  
                                         }
                                  
                                     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 hm-ip
                                  
                                   if (fullyBrowser){
                                        tabelleAusbessern();
                                        counter=0;
                                        val0=""; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();
                                        counter=0;
                                        val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>FULLYBROWSER</b>"; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();
                                        counter=-1
                                  
                                  
                                  $('fullybrowser.*.*.Info.batteryLevel').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                  if (!filterArray.includes(id)){
                                          var ida = id.split('.');
                                         
                                          
                                            counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                  
                                            val0=getState(id.replace("batteryLevel","deviceName")).val;
                                            val1help=parseFloat((getState(id).val));
                                            if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                            if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                            if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                           
                                            if (val1help<=battAlarm) AkkuAlarm.push(1);
                                            if (val1help<=battAlarm)  alarmMessage.push(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 fullybrowser
                                  
                                  
                                   if (iogo){
                                        tabelleAusbessern();
                                        counter=0;
                                        val0=""; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();
                                        counter=0;
                                        val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HANDY über IOGO</b>"; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();
                                        counter=-1
                                  
                                  
                                  $('iogo.*.*.battery.level').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                  if (!filterArray.includes(id)){
                                          var ida = id.split('.');
                                         
                                          
                                            counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                         //   val0=ida[3];
                                            val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                          // log(val0+"   "+id);
                                            val1help=parseFloat((getState(id).val));
                                            if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                            if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                            if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                           
                                            if (val1help<=battAlarm) AkkuAlarm.push(1);
                                            if (val1help<=battAlarm)  alarmMessage.push(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 iogo
                                  
                                  
                                    if (handy1){  
                                            tabelleAusbessern();
                                            counter=0;
                                            val0=""; val1=""; val2="";
                                            tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                            tabelleAusbessern();
                                            counter=0;
                                            val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HANDYs</b>"; val1=""; val2="";
                                            tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                            tabelleAusbessern();
                                            counter=-1
                                  
                                         $('controll-own.0.HANDY.*batt*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                          if (!filterArray.includes(id)){
                                        var ida = id.split('.');
                                        
                                          counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                          val0=ida[3];
                                         // log(val0+"   "+id);
                                          val1help=parseFloat((getState(id).val));
                                          if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                          if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                          if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                          if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                          if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                  
                                          if (val1help<=battAlarm) AkkuAlarm.push(1);
                                          if (val1help<=battAlarm)  alarmMessage.push(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 handy1
                                  
                                  
                                  
                                    if (handy2){ 
                                             $('controll-own.0.HANDY.*Batt*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                              if (!filterArray.includes(id)){
                                        var ida = id.split('.');
                                        
                                          counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                          val0=ida[3];
                                         // log(val0+"   "+id);
                                          val1help=parseFloat((getState(id).val));
                                          if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                          if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                          if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                                          if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                          if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                          if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                         
                                  
                                   
                                     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 handy2
                                  //-------------------------------------------------------------------------------------------------------------------------------------------------
                                  //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                                  //-------------------------------------------------------------------------------------------------------------------------------------------------
                                  
                                      tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                                  
                                      if (AkkuAlarm.length >=1 ) {setState(dpAlarm,AkkuAlarm.length)} else {setState(dpAlarm,AkkuAlarm.length)}
                                     // log("BATTERIE Alarm     : "+AkkuAlarm.length.toString());
                                     if (AkkuMessageLengthAlt < AkkuAlarm.length && wantAmessage) {setState(dpAlarmMessage,alarmMessage.toString()); AkkuMessageLengthAlt=AkkuAlarm.length}
                                     alarmMessage=[];
                                         
                                  } // function ende
                                  
                                  //MAIN:
                                  
                                  schedule(mySchedule,  function () { 
                                  writeHTML();
                                  if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                                  }); 
                                  writeHTML();  
                                  if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}                                 //     <tdalign
                                  function tabelleBind(){
                                       switch (mehrfachTabelle) {  
                                         case 1:                    htmlOut=htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;
                                         case 2:  if(counter%2==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                               else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;
                                                                    
                                         case 3: if(counter%3==0 )  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                               else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                                else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                                          } break;
                                  
                                  
                                         case 4: if(counter%4==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                                   else {if(counter%2==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                                else    {if(counter%2==1 && counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} 
                                                                                                  else    {htmlOut = htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}}
                                                                          } break; } //switch ende
                                  
                                  }
                                  
                                  function tabelleAusbessern() {
                                  
                                  switch (mehrfachTabelle) {  
                                         case 1:    break;
                                         case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                                    if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                    break;
                                         case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                                    if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                    if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                                    break;
                                         case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                                    if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                                    if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                                    if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                                                    break; }
                                  }
                                  
                                  function tabelleFinish() {
                                  
                                  switch (mehrfachTabelle) {  
                                         case 1:    break;
                                         case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                                    if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                    break;
                                         case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                                    if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                    if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                                    break;
                                         case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                                    if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                                    if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                                    if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                                                    break; }
                                     
                                         var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
                                       var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>";
                                        
                                        if (!htmlSignature) htmlUnter="";
                                          //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
                                           var htmlOutVIS="";
                                         //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                                            if (htmlUberschrift) 
                                                { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter ;
                                  
                                              } else {
                                               zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter;
                                  
                                                 }
                                                 
                                  
                                  // log("bin raus aus tabelleBind");
                                           if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
                                           //console.log dpVIS;
                                  
                                  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);
                                  
                                  
                                  }
                                  
                                  
                                  

                                  Bulli BultmannB Offline
                                  Bulli BultmannB Offline
                                  Bulli Bultmann
                                  schrieb am zuletzt editiert von
                                  #582

                                  @liv-in-sky
                                  :+1: :innocent: Hat geklappt. Zigbee ist jetzt drin, Gerät wird angezeigt.
                                  Toll.

                                  1 Antwort Letzte Antwort
                                  0
                                  • liv-in-skyL liv-in-sky

                                    @vauvau07 sind auch nicht integriert

                                    schau mal da in dieses script -da sind sie drin - bitte testen bevor ich es uploade - ich habe keine datenpunkte dazu - daher blindflug

                                    @Bulli-Bultmann du kannst dieses file auch gerne testen für die zigbee

                                    //@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.AKKU"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget - zeichenkette(string)
                                    let dpAlarm="controll-own.0.TABELLEN.AkkuAlarm";  //WICHTIG datenpunkt erstellen vom typ "number" - bei 0 kein alarm und größer 0 die anzahl der schlechten batterien
                                    let dpAlarmMessage="controll-own.0.TABELLEN.AkkuMeessage";  //WICHTIG datenpunkt erstellen vom typ "string" Inhalt - alle devices mit lowbat-alarmen
                                    let wantAmessage=false;                                      // dieser message datenpunkt kann hier abgeschalten werden
                                    let htmlColorDeviceUeberschrift="#00BFFF"
                                    var battAlarm=30;                                     //alarm batterie wert
                                    var battAlarmWarning=55;                                     //warnungen batterie wert
                                    
                                    // ------------------------    hier einstellen, was man für adapter hat - die nicht gebraucht werden auf false setzen !!!
                                    var tradfri=true;
                                    var hue=true;
                                    var hueExt=true;
                                    var homematic=true;
                                    var homematicIp=true;
                                    var xiaomi=true;                                                // mihome.0
                                    var fritzDect=true;
                                    var netatmo=true;
                                    var homee=true;
                                    var tado=true;
                                    var zigbee=true;
                                    var iogo=true;                                                 // iogo - adapter - hat batterie abfrage
                                    var fullyBrowser=true;                                         // fullybrowser - adapter - hat batterie abfrage
                                    var handy1=false;                                              // sind einzelne datenpunkte, 
                                    var handy2=false;
                                    
                                    //f          ür spezialisten bei devices mit über 3 volt batterien
                                    var bigBattAlarm=3.3; var bigBattWarn=3.6; //WICHTIG bei bigAlarm nicht unter 3.3 gehen !!!!!!!!
                                    
                                    var symbolOK="✅";
                                    var symbolKO="❌";     //z.b. auch "<font color=\"red\"><b>X</b>" für ein rotes kreuz
                                    var symbolWARN="⚠️";
                                    
                                    var filterArray=[]; //hier den ganzenpfad von ungewünschten LOW_BAT werten eingeben - diese werden dann gefiltert
                                                                  // BEISPIEL var filterArray=["hm-rpc.0.LEQ0242145.0.LOWBAT", "hm-rpc.0.LEQ0242152.0.LOWBAT","hm-rpc.1.OEQ0473764.0.LOWBAT"];
                                    let mySchedule=" */5 * * * * ";                       //jede minute  
                                    //---------------------------------------
                                    
                                    //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
                                    var htmlFeld1='Device';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                                    var htmlFeld2='Wert';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                                    var htmlFeld3='Status';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                                    //-----------------------------------
                                    
                                    
                                    //------------------------------hier werden die styles für die tabelle definiert
                                    
                                    //ÜBERSCHRIFT ÜBER TABELLE
                                    let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
                                    let   htmlSignature=true;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
                                    const htmlFeldUeber='Batterie Zustand Sensoren';              // Überschrift und Signature
                                    const htmlFarbUber="white";                         // Farbe der Überschrift
                                    const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
                                    const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
                                    //MEHRERE TABELLEN NEBENEINANDER
                                    let   mehrfachTabelle=4;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                                    const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                                    const htmlFarbTableColorUber="#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
                                    
                                    // AB HIER NICHTS  ÄNDERN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                                    // AB HIER NICHTS  ÄNDERN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                                    // AB 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 3
                                    
                                     	var htmlTabUeber2="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;</td>";
                                    var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                                                     "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
                                    //------------------------------------------------------
                                    
                                    
                                    var htmlTabUeber="";
                                    var htmlOut="";
                                    var mix;
                                    var counter;
                                    var AkkuAlarm=[];
                                    var alarmMessage=[];
                                    let AkkuMessageLengthAlt=0;
                                    var arrDoppelt=[];
                                    //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
                                    var val1; var val0; var val2;
                                    
                                    function writeHTML(){
                                     AkkuAlarm=[];
                                    
                                    htmlOut="";
                                    
                                    counter=-1;
                                    htmlTabUeber="";
                                    switch (mehrfachTabelle) { 
                                     case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
                                     case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                     case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
                                     case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                    };   
                                    if (!UeberschriftSpalten) {htmlTabUeber=""}
                                    
                                    
                                    //--------------------------------------------------------------------------------------------------------------------------------------------------
                                    //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
                                    //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
                                    //--------------------------------------------------------------------------------------------------------------------------------------------------
                                    var myColl=[];
                                    var val1help;
                                    
                                      
                                      if (fritzDect){
                                    
                                                 // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                                   tabelleAusbessern();
                                                   tabelleAusbessern();
                                                   counter=0;
                                                     val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>FRITZDECT THERMOSTATE</b>"; val1=""; val2="";
                                                   tabelleBind(); 
                                                   tabelleAusbessern();
                                                   counter=-1;
                                    
                                    
                                     $('fritzdect.*.*.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                        if (!filterArray.includes(id)){
                                            var ida = id.split('.');
                                           
                                              counter++; 
                                                
                                            //  val0=ida[2]+"."+ida[3];
                                              val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                              val1help=parseFloat((getState(id).val));
                                              if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                              if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                              if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                              if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                              if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                    
                                              if (val1help<=battAlarm) AkkuAlarm.push(1);
                                              if (val1help<=battAlarm)  alarmMessage.push(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 (homee){
                                    
                                          tabelleAusbessern();
                                          counter=0;
                                          val0=""; val1=""; val2="";
                                          tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          tabelleAusbessern();
                                          counter=0;
                                          val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HOMEE DEVICES</b>"; val1=""; val2="";
                                          tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          tabelleAusbessern();
                                          counter=-1
                                    
                                    
                                     $('homee.0.*.BatteryLevel*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                        if (!filterArray.includes(id)){
                                            var ida = id.split('.');
                                           
                                              counter++; 
                                                
                                            //  val0=ida[2]+"."+ida[3];
                                              val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                              val1help=parseFloat((getState(id).val));
                                             //    var val2_1;
                                            //   if (parseInt((new Date().getTime())) - val2_2help < 120000) {val2_1=true} else {val2_1=false;}
                                    
                                              if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                              if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                              if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                              if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                            //  var val2_2help=Date.parse(getState(id.replace("BatteryStatus","LastUpdate")).val); 
                                            //  if (val2_1) {val2=symbolOK} else{val2=symbolKO}   
                                                   
                                              if (val1help<=battAlarm) AkkuAlarm.push(1);
                                              if (val1help<=battAlarm)  alarmMessage.push(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 (netatmo){
                                    
                                          tabelleAusbessern();
                                          counter=0;
                                          val0=""; val1=""; val2="";
                                          tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          tabelleAusbessern();
                                          counter=0;
                                          val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>NETATMO DEVICES</b>"; val1=""; val2="";
                                          tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          tabelleAusbessern();
                                          counter=-1
                                    
                                    
                                     $('netatmo.*.*.*.BatteryStatus').each(function(id, i) {           // netatmo.0.Hinxxxer.Außenmodul-Carport.BatteryStatus
                                    
                                    //  if (!filterArray.includes(id)){
                                    
                                          
                                            var ida = id.split('.');
                                         
                                              counter++; 
                                                
                                            //  val0=ida[2]+"."+ida[3];
                                              val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name ;
                                              val1help=parseFloat((getState(id).val));
                                              //   var val2_1;
                                            //   if (parseInt((new Date().getTime())) - val2_2help < 120000) {val2_1=true} else {val2_1=false;}
                                    
                                              if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                              if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                              if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                              if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                            //  var val2_2help=Date.parse(getState(id.replace("BatteryStatus","LastUpdate")).val); 
                                            //  if (val2_1) {val2=symbolOK} else{val2=symbolKO}   
                                                   
                                              if (val1help<=battAlarm) AkkuAlarm.push(1);
                                              if (val1help<=battAlarm)  alarmMessage.push(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 (xiaomi){
                                          // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                          tabelleAusbessern();
                                          counter=0;
                                          val0=""; val1=""; val2="";
                                          tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          tabelleAusbessern();
                                          counter=0;
                                          val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>XIAOMI DEVICES</b>"; val1=""; val2="";
                                          tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          tabelleAusbessern();
                                          counter=-1
                                    
                                    
                                    $('mihome.*.devices.*.percent').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                          // log (id)
                                           if (!filterArray.includes(id)){
                                            var ida = id.split('.');
                                           
                                            
                                              counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                            //  val0=ida[3];
                                              val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name ;
                                             val0=val0.replace(/.battery$/,""); 
                                            // log(val0+"   "+id);
                                              val1help=parseFloat((getState(id).val));
                                              if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                              if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                              if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                              if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                              if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                             
                                              if (val1help<=battAlarm) AkkuAlarm.push(1);
                                              if (val1help<=battAlarm)  alarmMessage.push(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 (hue){
                                        // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                          tabelleAusbessern();
                                          counter=0;
                                          val0=""; val1=""; val2="";
                                          tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          tabelleAusbessern();     
                                          counter=0;
                                          val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HUE DEVICES</b>"; val1=""; val2="";
                                          tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          tabelleAusbessern();
                                          counter=-1
                                        
                                    $('hue.*.*.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                     
                                      if (!filterArray.includes(id)){
                                           var ida = id.split('.');
                                          
                                           
                                             counter++; 
                                              val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name ;   val0=val0.replace(/.battery$/,""); val0=val0.replace("Philips_hue.",""); val0=val0.replace(/_/g," ");                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                              val1help=parseFloat((getState(id).val));
                                              if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                              if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                              if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                              if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                              if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                            
                                              if (val1help<=battAlarm) AkkuAlarm.push(1);
                                              if (val1help<=battAlarm)  alarmMessage.push(val0);
                                      
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                    
                                    } }); 
                                    
                                     }  //ende hue
                                    if (hueExt){ 
                                           // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                          tabelleAusbessern();
                                          counter=0;
                                          val0=""; val1=""; val2="";
                                          tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          tabelleAusbessern();        
                                          counter=0;
                                          val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HUE EXTENDED</b>"; val1=""; val2="";
                                          tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          tabelleAusbessern();
                                          counter=-1
                                    
                                    $('hue-extended.*.*.*.config.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                    
                                    if (!filterArray.includes(id)){
                                          var ida = id.split('.');
                                       
                                          
                                            counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                           
                                               val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name ;   val0=val0.replace("Philips_hue.",""); val0=val0.replace(/_/g," ");                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                    
                                              val1help=parseFloat((getState(id).val));
                                              if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                              if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                              if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                              if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                              if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                              if (val1help<=battAlarm) AkkuAlarm.push(1);
                                              if (val1help<=battAlarm)  alarmMessage.push(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 hue-extended
                                    
                                       if (zigbee){ 
                                    
                                          // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                          tabelleAusbessern();
                                          counter=0;
                                          val0=""; val1=""; val2="";
                                          tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          tabelleAusbessern();
                                          counter=0;
                                          val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>ZIGBEE</b>"; val1=""; val2="";
                                          tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          tabelleAusbessern();
                                          counter=-1
                                    
                                    $('zigbee.*.*.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                         
                                          if (!filterArray.includes(id)){
                                          var ida = id.split('.');
                                         
                                          
                                            counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                           
                                           
                                             val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                            // log(val0+"   "+id);
                                            val1help=getState(id).val;
                                            val1help=parseFloat((getState(id).val));
                                            if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                            if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                            if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                    
                                            if (val1help<=battAlarm) AkkuAlarm.push(1);
                                            if (val1help<=battAlarm)  alarmMessage.push(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 !!!!!!!!!
                                     }
                                    
                                    if (tradfri){ 
                                    
                                          // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                          tabelleAusbessern();
                                          counter=0;
                                          val0=""; val1=""; val2="";
                                          tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          tabelleAusbessern();
                                          counter=0;
                                          val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>IKEA TRADFRI</b>"; val1=""; val2="";
                                          tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          tabelleAusbessern();
                                          counter=-1
                                    
                                    $('tradfri.*.*.batteryPercentage').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                         
                                          if (!filterArray.includes(id)){
                                          var ida = id.split('.');
                                         
                                          
                                            counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                           
                                           
                                             val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                            // log(val0+"   "+id);
                                            val1help=getState(id).val;
                                            val1help=parseFloat((getState(id).val));
                                            if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                            if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                            if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                    
                                            if (val1help<=battAlarm) AkkuAlarm.push(1);
                                            if (val1help<=battAlarm)  alarmMessage.push(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 !!!!!!!!!
                                     }
                                    
                                     if (tado){
                                        tabelleAusbessern();
                                        counter=0;
                                        val0=val0=""; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();
                                        counter=0;
                                        val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>TADO DEVICES</b>"; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();
                                        counter=-1
                                    
                                    
                                    $('tado.*.*.*.*.*.*.info.batteryState').each(function(id, i) {           // tado.0.337268.Rooms.11.devices.VA3078030592.info.batteryState
                                        var ida = id.split('.');
                                         if (!filterArray.includes(id)){
                                          counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                        //  log(id)
                                           val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]+"."+ida[4]).common.name                     //getObject(id).common.name ; //ida[2]+"."+ida[3];
                                                                                                                           //tado.0.337268.Rooms.11
                                          
                                           //log(val0+"   "+id);
                                          val1help=getState(id).val;
                                          if (val1help=="LOW") {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                                          //if (val1help<=battAlarm) {val2="<font color=\"red\"><b>X</b>"} else{val2=symbolOK}
                                          if (val1help=="LOW") {val2="<font color=\"red\">"+symbolKO} else{val2=symbolOK}   
                                          //if (val1help) {val2=<font color=\"red\"><b>X</b>} else{val2="✔"}         
                                          
                                          if (val1help=="LOW") AkkuAlarm.push(1);
                                          if (val1help=="LOW")  alarmMessage.push(val0);
                                    
                                     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                         } // ende filterArr
                                    }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!! 
                                      }  //ende tado
                                    
                                    
                                    if (homematic){
                                        tabelleAusbessern();
                                        counter=0;
                                        val0=val0=""; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();
                                        counter=0;
                                        val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HOMEMATIC</b>"; val1=""; val2="";
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        tabelleAusbessern();
                                        counter=-1
                                        arrDoppelt=[];
                                    $('hm-rpc.*.*.*.BATTERY_STATE').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                     
                                     if (!filterArray.includes(id)){
                                        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])
                                             });
                                          arrDoppelt.push(ida[0]+"."+ida[1]+"."+ida[2]);
                                          counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                    
                                       if (arrFilt.includes("BATTERY_STATE")) {
                                                   val0=getObject(id).common.name ; 
                                                   var ida = val0.split('.');
                                                   val0=ida[0].replace(/:.+/g,"");
                                                   val1help=getState(id).val;
                                                   var  val1helper=getState(id.replace("LOW_BAT","BATTERY_STATUS")).val;     
                                                   //bigBatterien 
                                                   //log (val1helper.toFixed(1))
                                                   if (val1helper>3.2){
                                                          if (val1helper<=bigBattAlarm) {val2=symbolKO} else if (val1helper<=bigBattWarn && val1helper>bigBattAlarm) 
                                                             {val2=symbolWARN} else{val2=symbolOK};
                                                          if (val1helper<=bigBattAlarm) {val1=(" <font color=\"red\"> ")+val1helper.toFixed(1)+" V"} else if (val1helper<=bigBattWarn && val1helper>bigBattAlarm) 
                                                             {val1=(" <font color=\"yellow\"> ")+val1helper.toFixed(1)+" V"} else{val1=(" <font color=\"green\"> ")+(val1helper.toFixed(1))+" V"};
                                                          if (val1helper<bigBattAlarm) AkkuAlarm.push(1);
                                                          if (val1helper<=bigBattAlarm)  alarmMessage.push(val0);
                                                       }
                                    
                                                   else {         
                                                         if (val1helper<2.2) {val2=symbolKO} else if (val1helper<=2.5 && val1helper>=2.2) 
                                                            {val2=symbolWARN} else{val2=symbolOK};
                                                         if (val1helper<2.2) {val1=(" <font color=\"red\"> ")+val1helper.toFixed(1)+" V"} else if (val1helper<=2.5 && val1helper>=2.2) 
                                                            {val1=(" <font color=\"yellow\"> ")+val1helper.toFixed(1)+" V"} else{val1=(" <font color=\"green\"> ")+val1helper.toFixed(1)+" V"};
                                                         if (val1helper<2.2) AkkuAlarm.push(1);
                                                         if (val1helper<2.2)  alarmMessage.push(val0);}
                                    
                                         } else {
                                                                                      
                                                  val0=getObject(id).common.name ; 
                                                  var ida = val0.split('.');
                                                  val0=ida[0].replace(/:.+/g,"");
                                                  val1help=getState(id).val;
                                                  if (val1help) {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                                                  if (val1help) {val2=symbolKO} else{val2=symbolOK}         
                                                  if (val1help) AkkuAlarm.push(1);
                                                  if (val1help)  alarmMessage.push(val0);
                                    
                                         }
                                    
                                     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                     }
                                    });
                                    //log(arrDoppelt.toString())
                                    $('hm-rpc.*.*.0.LOWBAT').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                        var ida = id.split('.');
                                      //  log(id)
                                        //log(arrDoppelt.toString())
                                     //    if (!filterArray.includes(id) && !arrDoppelt.includes(ida[0]+"."+ida[1]+"."+ida[2]+".*.BATTERY_STATE") ) {
                                                 if (!filterArray.includes(id) && !arrDoppelt.includes(ida[0]+"."+ida[1]+"."+ida[2]) ) {                          
                                          
                                             
                                          counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                        //  log(id)
                                           val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name                     //getObject(id).common.name ; //ida[2]+"."+ida[3];
                                           var ida = val0.split('.');
                                           val0=ida[0].replace(/:.+/g,"");
                                           //log(val0+"   "+id);
                                          val1help=getState(id).val;
                                          if (val1help) {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                                          //if (val1help<=battAlarm) {val2="<font color=\"red\"><b>X</b>"} else{val2=symbolOK}
                                          if (val1help) {val2="<font color=\"red\">"+symbolKO} else{val2=symbolOK}   
                                          //if (val1help) {val2=<font color=\"red\"><b>X</b>} else{val2="✔"}         
                                          
                                          if (val1help) AkkuAlarm.push(1);
                                          if (val1help)  alarmMessage.push(val0);
                                    
                                    
                                     tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                         } // log(id)// ende filterArr
                                    }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
                                    
                                    
                                    //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
                                     
                                      } //ende hm
                                    
                                    if (homematicIp ){ 
                                           tabelleAusbessern();
                                           counter=0;
                                           val0=""; val1=""; val2="";
                                           tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                           tabelleAusbessern();
                                           counter=0;
                                           val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HOMEMATIC IP</b>"; val1=""; val2="";
                                           tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                           tabelleAusbessern();
                                           counter=-1
                                    
                                    
                                    
                                    $('hm-rpc.*.*.0.LOW_BAT').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                    
                                     if (!filterArray.includes(id)){
                                          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());
                                    
                                            counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                    
                                         if (arrFilt.includes("OPERATING_VOLTAGE")) {
                                                   //  val0=getObject(id).common.name ; 
                                                     val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ; 
                                                     var ida = val0.split('.');
                                                     val0=ida[0].replace(/:.+/g,"");
                                                     val1help=getState(id).val;
                                                     var  val1helper=getState(id.replace("LOW_BAT","OPERATING_VOLTAGE")).val;     
                                                     //bigBatterien 
                                                     //log (val1helper.toFixed(1))
                                                     if (val1helper>3.2){
                                                            if (val1helper<=bigBattAlarm) {val2=symbolKO} else if (val1helper<=bigBattWarn && val1helper>bigBattAlarm) 
                                                               {val2=symbolWARN} else{val2=symbolOK};
                                                            if (val1helper<=bigBattAlarm) {val1=(" <font color=\"red\"> ")+val1helper.toFixed(1)+" V"} else if (val1helper<=bigBattWarn && val1helper>bigBattAlarm) 
                                                               {val1=(" <font color=\"yellow\"> ")+val1helper.toFixed(1)+" V"} else{val1=(" <font color=\"green\"> ")+(val1helper.toFixed(1))+" V"};
                                                            if (val1helper<bigBattAlarm) AkkuAlarm.push(1);
                                                            if (val1helper<2.2) alarmMessage.push(val0);
                                                         }
                                      
                                                     else {         
                                                           if (val1helper<2.2) {val2=symbolKO} else if (val1helper<=2.5 && val1helper>=2.2) 
                                                              {val2=symbolWARN} else{val2=symbolOK};
                                                           if (val1helper<2.2) {val1=(" <font color=\"red\"> ")+val1helper.toFixed(1)+" V"} else if (val1helper<=2.5 && val1helper>=2.2) 
                                                              {val1=(" <font color=\"yellow\"> ")+val1helper.toFixed(1)+" V"} else{val1=(" <font color=\"green\"> ")+val1helper.toFixed(1)+" V"};
                                                           if (val1helper<2.2) {AkkuAlarm.push(1);}
                                                           if (val1helper<2.2) alarmMessage.push(val0);
                                                           }
                                    
                                           } else {
                                                                                        
                                                    val0=getObject(id).common.name ; 
                                                    var ida = val0.split('.');
                                                    val0=ida[0].replace(/:.+/g,"");
                                                    val1help=getState(id).val;
                                                    if (val1help) {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                                                    if (val1help) {val2=symbolKO} else{val2=symbolOK}         
                                                    if (val1help) AkkuAlarm.push(1);
                                    
                                           }
                                    
                                       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 hm-ip
                                    
                                     if (fullyBrowser){
                                          tabelleAusbessern();
                                          counter=0;
                                          val0=""; val1=""; val2="";
                                          tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          tabelleAusbessern();
                                          counter=0;
                                          val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>FULLYBROWSER</b>"; val1=""; val2="";
                                          tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          tabelleAusbessern();
                                          counter=-1
                                    
                                    
                                    $('fullybrowser.*.*.Info.batteryLevel').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                    if (!filterArray.includes(id)){
                                            var ida = id.split('.');
                                           
                                            
                                              counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                    
                                              val0=getState(id.replace("batteryLevel","deviceName")).val;
                                              val1help=parseFloat((getState(id).val));
                                              if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                              if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                              if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                              if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                              if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                             
                                              if (val1help<=battAlarm) AkkuAlarm.push(1);
                                              if (val1help<=battAlarm)  alarmMessage.push(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 fullybrowser
                                    
                                    
                                     if (iogo){
                                          tabelleAusbessern();
                                          counter=0;
                                          val0=""; val1=""; val2="";
                                          tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          tabelleAusbessern();
                                          counter=0;
                                          val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HANDY über IOGO</b>"; val1=""; val2="";
                                          tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          tabelleAusbessern();
                                          counter=-1
                                    
                                    
                                    $('iogo.*.*.battery.level').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                    if (!filterArray.includes(id)){
                                            var ida = id.split('.');
                                           
                                            
                                              counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                           //   val0=ida[3];
                                              val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                            // log(val0+"   "+id);
                                              val1help=parseFloat((getState(id).val));
                                              if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                              if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                              if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                              if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                              if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                             
                                              if (val1help<=battAlarm) AkkuAlarm.push(1);
                                              if (val1help<=battAlarm)  alarmMessage.push(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 iogo
                                    
                                    
                                      if (handy1){  
                                              tabelleAusbessern();
                                              counter=0;
                                              val0=""; val1=""; val2="";
                                              tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                              tabelleAusbessern();
                                              counter=0;
                                              val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HANDYs</b>"; val1=""; val2="";
                                              tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                              tabelleAusbessern();
                                              counter=-1
                                    
                                           $('controll-own.0.HANDY.*batt*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                            if (!filterArray.includes(id)){
                                          var ida = id.split('.');
                                          
                                            counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                            val0=ida[3];
                                           // log(val0+"   "+id);
                                            val1help=parseFloat((getState(id).val));
                                            if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                            if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                            if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                    
                                            if (val1help<=battAlarm) AkkuAlarm.push(1);
                                            if (val1help<=battAlarm)  alarmMessage.push(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 handy1
                                    
                                    
                                    
                                      if (handy2){ 
                                               $('controll-own.0.HANDY.*Batt*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                                if (!filterArray.includes(id)){
                                          var ida = id.split('.');
                                          
                                            counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                            val0=ida[3];
                                           // log(val0+"   "+id);
                                            val1help=parseFloat((getState(id).val));
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                            if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                                            if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                            if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                            if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                           
                                    
                                     
                                       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 handy2
                                    //-------------------------------------------------------------------------------------------------------------------------------------------------
                                    //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                                    //-------------------------------------------------------------------------------------------------------------------------------------------------
                                    
                                        tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                                    
                                        if (AkkuAlarm.length >=1 ) {setState(dpAlarm,AkkuAlarm.length)} else {setState(dpAlarm,AkkuAlarm.length)}
                                       // log("BATTERIE Alarm     : "+AkkuAlarm.length.toString());
                                       if (AkkuMessageLengthAlt < AkkuAlarm.length && wantAmessage) {setState(dpAlarmMessage,alarmMessage.toString()); AkkuMessageLengthAlt=AkkuAlarm.length}
                                       alarmMessage=[];
                                           
                                    } // function ende
                                    
                                    //MAIN:
                                    
                                    schedule(mySchedule,  function () { 
                                    writeHTML();
                                    if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                                    }); 
                                    writeHTML();  
                                    if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}                                 //     <tdalign
                                    function tabelleBind(){
                                         switch (mehrfachTabelle) {  
                                           case 1:                    htmlOut=htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;
                                           case 2:  if(counter%2==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                                 else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;
                                                                      
                                           case 3: if(counter%3==0 )  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                                 else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                                  else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                                            } break;
                                    
                                    
                                           case 4: if(counter%4==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                                     else {if(counter%2==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                                  else    {if(counter%2==1 && counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} 
                                                                                                    else    {htmlOut = htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}}
                                                                            } break; } //switch ende
                                    
                                    }
                                    
                                    function tabelleAusbessern() {
                                    
                                    switch (mehrfachTabelle) {  
                                           case 1:    break;
                                           case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                                      if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                      break;
                                           case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                                      if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                      if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                                      break;
                                           case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                                      if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                                      if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                                      if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                                                      break; }
                                    }
                                    
                                    function tabelleFinish() {
                                    
                                    switch (mehrfachTabelle) {  
                                           case 1:    break;
                                           case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                                      if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                      break;
                                           case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                                      if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                      if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                                      break;
                                           case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                                      if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                                      if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                                      if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                                                      break; }
                                       
                                           var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
                                         var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>";
                                          
                                          if (!htmlSignature) htmlUnter="";
                                            //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
                                             var htmlOutVIS="";
                                           //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                                              if (htmlUberschrift) 
                                                  { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter ;
                                    
                                                } else {
                                                 zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter;
                                    
                                                   }
                                                   
                                    
                                    // log("bin raus aus tabelleBind");
                                             if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
                                             //console.log dpVIS;
                                    
                                    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);
                                    
                                    
                                    }
                                    
                                    
                                    

                                    Bulli BultmannB Offline
                                    Bulli BultmannB Offline
                                    Bulli Bultmann
                                    schrieb am zuletzt editiert von
                                    #583

                                    @liv-in-sky Einen habe ich noch. :nerd_face:
                                    HM Fenstersensor mit einer Batterie 1,5 volt.

                                    Batterie6.JPG

                                    hm-rpc.2.0000DA499B2068.json

                                    Gehen die auch ?

                                    liv-in-skyL 1 Antwort Letzte Antwort
                                    0
                                    • NegaleinN Offline
                                      NegaleinN Offline
                                      Negalein
                                      Global Moderator
                                      schrieb am zuletzt editiert von
                                      #584

                                      @liv-in-sky

                                      Script hab ich angepasst, jedoch bekomm ich jetzt wieder Warn-Meldungen

                                      18:23:17.185	warn	javascript.0 (592) at tabelleFinish (script.js.common.Akku_Alarm_Tabelle:923:36)
                                      18:23:17.185	warn	javascript.0 (592) at writeHTML (script.js.common.Akku_Alarm_Tabelle:834:6)
                                      18:23:17.185	warn	javascript.0 (592) at script.js.common.Akku_Alarm_Tabelle:849:1
                                      18:23:17.186	warn	javascript.0 (592) at writeHTML (script.js.common.Akku_Alarm_Tabelle:836:76)
                                      18:23:17.186	warn	javascript.0 (592) at script.js.common.Akku_Alarm_Tabelle:849:1
                                      

                                      //@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.AKKU"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget - zeichenkette(string)
                                      let dpAlarm="controll-own.0.TABELLEN.AkkuAlarm";  //WICHTIG datenpunkt erstellen vom typ "number" - bei 0 kein alarm und größer 0 die anzahl der schlechten batterien
                                      let dpAlarmMessage="0_userdata.0.Tabellen.AkkuMessage";  //WICHTIG datenpunkt erstellen vom typ "string" Inhalt - alle devices mit lowbat-alarmen
                                      let wantAmessage=true;                                      // dieser message datenpunkt kann hier abgeschalten werden
                                      let htmlColorDeviceUeberschrift="#00BFFF"
                                      var battAlarm=30;                                     //alarm batterie wert
                                      var battAlarmWarning=55;                                     //warnungen batterie wert
                                       
                                       // ------------------------    hier einstellen, was man für adapter hat - die nicht gebraucht werden auf false setzen !!!
                                      var tradfri=false;
                                      var hue=true;
                                      var hueExt=false;
                                      var homematic=true;
                                      var homematicIp=true;
                                      var xiaomi=true;                                                // mihome.0
                                      var fritzDect=false;
                                      var netatmo=false;
                                      var homee=false;
                                      var tado=false;
                                      var zigbee=false;
                                      var iogo=false;                                                 // iogo - adapter - hat batterie abfrage
                                      var fullyBrowser=false;                                         // fullybrowser - adapter - hat batterie abfrage
                                      var handy1=false;                                              // sind einzelne datenpunkte, 
                                      var handy2=false;
                                       
                                      //für spezialisten bei devices mit über 3 volt batterien
                                      var bigBattAlarm=3.3; var bigBattWarn=3.6; //WICHTIG bei bigAlarm nicht unter 3.3 gehen !!!!!!!!
                                       
                                      var symbolOK="✅";
                                      var symbolKO="❌";     //z.b. auch "<font color=\"red\"><b>X</b>" für ein rotes kreuz
                                      var symbolWARN="⚠️";
                                       
                                      var filterArray=["mihome.0.devices.plug_158d0001f24aad.percent","mihome.0.devices.plug_158d00020d98af.percent"]; //hier den ganzenpfad von ungewünschten LOW_BAT werten eingeben - diese werden dann gefiltert
                                                                     // BEISPIEL var filterArray=["hm-rpc.0.LEQ0242145.0.LOWBAT", "hm-rpc.0.LEQ0242152.0.LOWBAT","hm-rpc.1.OEQ0473764.0.LOWBAT"];
                                      let mySchedule=" */5 * * * * ";                       //jede minute  
                                      //---------------------------------------
                                       
                                      //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
                                      var htmlFeld1='Device';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                                      var htmlFeld2='V bzw. %';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                                      var htmlFeld3='Status';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                                      //-----------------------------------
                                       
                                       
                                      //------------------------------hier werden die styles für die tabelle definiert
                                       
                                      //ÜBERSCHRIFT ÜBER TABELLE
                                      let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
                                      let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
                                      const htmlFeldUeber='Batterie Zustand Sensoren';              // Überschrift und Signature
                                      const htmlFarbUber="white";                         // Farbe der Überschrift
                                      const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
                                      const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
                                      //MEHRERE TABELLEN NEBENEINANDER
                                      let   mehrfachTabelle=2;                              // 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="white";             // 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
                                       
                                      // AB HIER NICHTS  ÄNDERN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                                      // AB HIER NICHTS  ÄNDERN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                                      // AB 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 3
                                       
                                        	var htmlTabUeber2="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;</td>";
                                      var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                                                        "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
                                      //------------------------------------------------------
                                       
                                       
                                      var htmlTabUeber="";
                                      var htmlOut="";
                                      var mix;
                                      var counter;
                                      var AkkuAlarm=[];
                                      var alarmMessage=[];
                                      let AkkuMessageLengthAlt=0;
                                       var arrDoppelt=[];
                                      //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
                                      var val1; var val0; var val2;
                                       
                                      function writeHTML(){
                                        AkkuAlarm=[];
                                       
                                      htmlOut="";
                                       
                                      counter=-1;
                                      htmlTabUeber="";
                                      switch (mehrfachTabelle) { 
                                        case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
                                        case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                        case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
                                        case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                      };   
                                      if (!UeberschriftSpalten) {htmlTabUeber=""}
                                       
                                       
                                      //--------------------------------------------------------------------------------------------------------------------------------------------------
                                      //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
                                      //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
                                      //--------------------------------------------------------------------------------------------------------------------------------------------------
                                      var myColl=[];
                                      var val1help;
                                       
                                         
                                         if (fritzDect){
                                       
                                                    // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                                      tabelleAusbessern();
                                                      tabelleAusbessern();
                                                      counter=0;
                                                        val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>FRITZDECT THERMOSTATE</b>"; val1=""; val2="";
                                                      tabelleBind(); 
                                                      tabelleAusbessern();
                                                      counter=-1;
                                       
                                       
                                        $('fritzdect.*.*.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                           if (!filterArray.includes(id)){
                                               var ida = id.split('.');
                                              
                                                 counter++; 
                                                   
                                               //  val0=ida[2]+"."+ida[3];
                                                 val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                 val1help=parseFloat((getState(id).val));
                                                 if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                                 if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                                 if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                       
                                                 if (val1help<=battAlarm) AkkuAlarm.push(1);
                                                 if (val1help<=battAlarm)  alarmMessage.push(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 (homee){
                                       
                                             tabelleAusbessern();
                                             counter=0;
                                             val0=""; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=0;
                                             val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HOMEE DEVICES</b>"; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=-1
                                       
                                       
                                        $('homee.0.*.BatteryLevel*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                           if (!filterArray.includes(id)){
                                               var ida = id.split('.');
                                              
                                                 counter++; 
                                                   
                                               //  val0=ida[2]+"."+ida[3];
                                                 val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                 val1help=parseFloat((getState(id).val));
                                                //    var val2_1;
                                               //   if (parseInt((new Date().getTime())) - val2_2help < 120000) {val2_1=true} else {val2_1=false;}
                                       
                                                 if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                                 if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                               //  var val2_2help=Date.parse(getState(id.replace("BatteryStatus","LastUpdate")).val); 
                                               //  if (val2_1) {val2=symbolOK} else{val2=symbolKO}   
                                                      
                                                 if (val1help<=battAlarm) AkkuAlarm.push(1);
                                                 if (val1help<=battAlarm)  alarmMessage.push(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 (netatmo){
                                       
                                             tabelleAusbessern();
                                             counter=0;
                                             val0=""; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=0;
                                             val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>NETATMO DEVICES</b>"; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=-1
                                       
                                       
                                        $('netatmo.*.*.*.BatteryStatus').each(function(id, i) {           // netatmo.0.Hinxxxer.Außenmodul-Carport.BatteryStatus
                                       
                                       //  if (!filterArray.includes(id)){
                                       
                                             
                                               var ida = id.split('.');
                                            
                                                 counter++; 
                                                   
                                               //  val0=ida[2]+"."+ida[3];
                                                 val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name ;
                                                 val1help=parseFloat((getState(id).val));
                                                 //   var val2_1;
                                               //   if (parseInt((new Date().getTime())) - val2_2help < 120000) {val2_1=true} else {val2_1=false;}
                                       
                                                 if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                                 if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                               //  var val2_2help=Date.parse(getState(id.replace("BatteryStatus","LastUpdate")).val); 
                                               //  if (val2_1) {val2=symbolOK} else{val2=symbolKO}   
                                                      
                                                 if (val1help<=battAlarm) AkkuAlarm.push(1);
                                                 if (val1help<=battAlarm)  alarmMessage.push(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 (xiaomi){
                                             // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                             tabelleAusbessern();
                                             counter=0;
                                             val0=""; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=0;
                                             val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>XIAOMI DEVICES</b>"; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=-1
                                       
                                       
                                      $('mihome.*.devices.*.percent').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                             // log (id)
                                              if (!filterArray.includes(id)){
                                               var ida = id.split('.');
                                              
                                               
                                                 counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                               //  val0=ida[3];
                                                 val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name ;
                                                val0=val0.replace(/.battery$/,""); 
                                               // log(val0+"   "+id);
                                                 val1help=parseFloat((getState(id).val));
                                                 if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                                 if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                                 if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                                
                                                 if (val1help<=battAlarm) AkkuAlarm.push(1);
                                                 if (val1help<=battAlarm)  alarmMessage.push(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 (hue){
                                           // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                             tabelleAusbessern();
                                             counter=0;
                                             val0=""; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();     
                                             counter=0;
                                             val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HUE DEVICES</b>"; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=-1
                                           
                                      $('hue.*.*.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                        
                                         if (!filterArray.includes(id)){
                                              var ida = id.split('.');
                                             
                                              
                                                counter++; 
                                                 val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name ;   val0=val0.replace(/.battery$/,""); val0=val0.replace("Philips_hue.",""); val0=val0.replace(/_/g," ");                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                                 val1help=parseFloat((getState(id).val));
                                                 if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                                 if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                                 if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                               
                                                 if (val1help<=battAlarm) AkkuAlarm.push(1);
                                                 if (val1help<=battAlarm)  alarmMessage.push(val0);
                                         
                                           tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                       
                                       } }); 
                                       
                                        }  //ende hue
                                       if (hueExt){ 
                                              // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                             tabelleAusbessern();
                                             counter=0;
                                             val0=""; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();        
                                             counter=0;
                                             val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HUE EXTENDED</b>"; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=-1
                                       
                                      $('hue-extended.*.*.*.config.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                       
                                       if (!filterArray.includes(id)){
                                             var ida = id.split('.');
                                          
                                             
                                               counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                              
                                                  val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name ;   val0=val0.replace("Philips_hue.",""); val0=val0.replace(/_/g," ");                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                       
                                                 val1help=parseFloat((getState(id).val));
                                                 if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                                 if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                                 if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                                 if (val1help<=battAlarm) AkkuAlarm.push(1);
                                                 if (val1help<=battAlarm)  alarmMessage.push(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 hue-extended
                                       
                                          if (zigbee){ 
                                       
                                             // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                             tabelleAusbessern();
                                             counter=0;
                                             val0=""; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=0;
                                             val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>ZIGBEE</b>"; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=-1
                                       
                                      $('zigbee.*.*.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                            
                                             if (!filterArray.includes(id)){
                                             var ida = id.split('.');
                                            
                                             
                                               counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                              
                                              
                                                val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                               // log(val0+"   "+id);
                                               val1help=getState(id).val;
                                               val1help=parseFloat((getState(id).val));
                                               if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                               if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                               if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                               if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                               if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                       
                                               if (val1help<=battAlarm) AkkuAlarm.push(1);
                                               if (val1help<=battAlarm)  alarmMessage.push(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 !!!!!!!!!
                                        }
                                       
                                       if (tradfri){ 
                                       
                                             // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                             tabelleAusbessern();
                                             counter=0;
                                             val0=""; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=0;
                                             val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>IKEA TRADFRI</b>"; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=-1
                                       
                                      $('tradfri.*.*.batteryPercentage').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                            
                                             if (!filterArray.includes(id)){
                                             var ida = id.split('.');
                                            
                                             
                                               counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                              
                                              
                                                val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                               // log(val0+"   "+id);
                                               val1help=getState(id).val;
                                               val1help=parseFloat((getState(id).val));
                                               if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                               if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                               if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                               if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                               if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                       
                                               if (val1help<=battAlarm) AkkuAlarm.push(1);
                                               if (val1help<=battAlarm)  alarmMessage.push(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 !!!!!!!!!
                                        }
                                       
                                        if (tado){
                                           tabelleAusbessern();
                                           counter=0;
                                           val0=val0=""; val1=""; val2="";
                                           tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                           tabelleAusbessern();
                                           counter=0;
                                           val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>TADO DEVICES</b>"; val1=""; val2="";
                                           tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                           tabelleAusbessern();
                                           counter=-1
                                       
                                       
                                      $('tado.*.*.*.*.*.*.info.batteryState').each(function(id, i) {           // tado.0.337268.Rooms.11.devices.VA3078030592.info.batteryState
                                           var ida = id.split('.');
                                            if (!filterArray.includes(id)){
                                             counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                           //  log(id)
                                              val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]+"."+ida[4]).common.name                     //getObject(id).common.name ; //ida[2]+"."+ida[3];
                                                                                                                              //tado.0.337268.Rooms.11
                                             
                                              //log(val0+"   "+id);
                                             val1help=getState(id).val;
                                             if (val1help=="LOW") {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                                             //if (val1help<=battAlarm) {val2="<font color=\"red\"><b>X</b>"} else{val2=symbolOK}
                                             if (val1help=="LOW") {val2="<font color=\"red\">"+symbolKO} else{val2=symbolOK}   
                                             //if (val1help) {val2=<font color=\"red\"><b>X</b>} else{val2="✔"}         
                                             
                                             if (val1help=="LOW") AkkuAlarm.push(1);
                                             if (val1help=="LOW")  alarmMessage.push(val0);
                                       
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                            } // ende filterArr
                                      }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!! 
                                         }  //ende tado
                                       
                                       
                                      if (homematic){
                                           tabelleAusbessern();
                                           counter=0;
                                           val0=val0=""; val1=""; val2="";
                                           tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                           tabelleAusbessern();
                                           counter=0;
                                           val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HOMEMATIC</b>"; val1=""; val2="";
                                           tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                           tabelleAusbessern();
                                           counter=-1
                                           arrDoppelt=[];
                                      $('hm-rpc.*.*.*.BATTERY_STATE').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                        
                                        if (!filterArray.includes(id)){
                                           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])
                                                });
                                             arrDoppelt.push(ida[0]+"."+ida[1]+"."+ida[2]);
                                             counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                       
                                          if (arrFilt.includes("BATTERY_STATE")) {
                                                      val0=getObject(id).common.name ; 
                                                      var ida = val0.split('.');
                                                      val0=ida[0].replace(/:.+/g,"");
                                                      val1help=getState(id).val;
                                                      var  val1helper=getState(id.replace("LOW_BAT","BATTERY_STATUS")).val;     
                                                      //bigBatterien 
                                                      //log (val1helper.toFixed(1))
                                                      if (val1helper>3.2){
                                                             if (val1helper<=bigBattAlarm) {val2=symbolKO} else if (val1helper<=bigBattWarn && val1helper>bigBattAlarm) 
                                                                {val2=symbolWARN} else{val2=symbolOK};
                                                             if (val1helper<=bigBattAlarm) {val1=(" <font color=\"red\"> ")+val1helper.toFixed(1)+" V"} else if (val1helper<=bigBattWarn && val1helper>bigBattAlarm) 
                                                                {val1=(" <font color=\"yellow\"> ")+val1helper.toFixed(1)+" V"} else{val1=(" <font color=\"green\"> ")+(val1helper.toFixed(1))+" V"};
                                                             if (val1helper<bigBattAlarm) AkkuAlarm.push(1);
                                                             if (val1helper<=bigBattAlarm)  alarmMessage.push(val0);
                                                          }
                                       
                                                      else {         
                                                            if (val1helper<2.2) {val2=symbolKO} else if (val1helper<=2.5 && val1helper>=2.2) 
                                                               {val2=symbolWARN} else{val2=symbolOK};
                                                            if (val1helper<2.2) {val1=(" <font color=\"red\"> ")+val1helper.toFixed(1)+" V"} else if (val1helper<=2.5 && val1helper>=2.2) 
                                                               {val1=(" <font color=\"yellow\"> ")+val1helper.toFixed(1)+" V"} else{val1=(" <font color=\"green\"> ")+val1helper.toFixed(1)+" V"};
                                                            if (val1helper<2.2) AkkuAlarm.push(1);
                                                            if (val1helper<2.2)  alarmMessage.push(val0);}
                                       
                                            } else {
                                                                                         
                                                     val0=getObject(id).common.name ; 
                                                     var ida = val0.split('.');
                                                     val0=ida[0].replace(/:.+/g,"");
                                                     val1help=getState(id).val;
                                                     if (val1help) {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                                                     if (val1help) {val2=symbolKO} else{val2=symbolOK}         
                                                     if (val1help) AkkuAlarm.push(1);
                                                     if (val1help)  alarmMessage.push(val0);
                                       
                                            }
                                       
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                        }
                                      });
                                      //log(arrDoppelt.toString())
                                      $('hm-rpc.*.*.0.LOWBAT').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                           var ida = id.split('.');
                                         //  log(id)
                                           //log(arrDoppelt.toString())
                                        //    if (!filterArray.includes(id) && !arrDoppelt.includes(ida[0]+"."+ida[1]+"."+ida[2]+".*.BATTERY_STATE") ) {
                                                    if (!filterArray.includes(id) && !arrDoppelt.includes(ida[0]+"."+ida[1]+"."+ida[2]) ) {                          
                                             
                                                
                                             counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                           //  log(id)
                                              val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name                     //getObject(id).common.name ; //ida[2]+"."+ida[3];
                                              var ida = val0.split('.');
                                              val0=ida[0].replace(/:.+/g,"");
                                              //log(val0+"   "+id);
                                             val1help=getState(id).val;
                                             if (val1help) {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                                             //if (val1help<=battAlarm) {val2="<font color=\"red\"><b>X</b>"} else{val2=symbolOK}
                                             if (val1help) {val2="<font color=\"red\">"+symbolKO} else{val2=symbolOK}   
                                             //if (val1help) {val2=<font color=\"red\"><b>X</b>} else{val2="✔"}         
                                             
                                             if (val1help) AkkuAlarm.push(1);
                                             if (val1help)  alarmMessage.push(val0);
                                       
                                       
                                        tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                            } // log(id)// ende filterArr
                                      }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
                                       
                                       
                                       //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
                                        
                                         } //ende hm
                                       
                                       if (homematicIp ){ 
                                              tabelleAusbessern();
                                              counter=0;
                                              val0=""; val1=""; val2="";
                                              tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                              tabelleAusbessern();
                                              counter=0;
                                              val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HOMEMATIC IP</b>"; val1=""; val2="";
                                              tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                              tabelleAusbessern();
                                              counter=-1
                                       
                                       
                                       
                                      $('hm-rpc.*.*.0.LOW_BAT').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                       
                                        if (!filterArray.includes(id)){
                                             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());
                                       
                                               counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                       
                                            if (arrFilt.includes("OPERATING_VOLTAGE")) {
                                                      //  val0=getObject(id).common.name ; 
                                                        val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ; 
                                                        var ida = val0.split('.');
                                                        val0=ida[0].replace(/:.+/g,"");
                                                        val1help=getState(id).val;
                                                        var  val1helper=getState(id.replace("LOW_BAT","OPERATING_VOLTAGE")).val;     
                                                        //bigBatterien 
                                                        //log (val1helper.toFixed(1))
                                                        if (val1helper>3.2){
                                                               if (val1helper<=bigBattAlarm) {val2=symbolKO} else if (val1helper<=bigBattWarn && val1helper>bigBattAlarm) 
                                                                  {val2=symbolWARN} else{val2=symbolOK};
                                                               if (val1helper<=bigBattAlarm) {val1=(" <font color=\"red\"> ")+val1helper.toFixed(1)+" V"} else if (val1helper<=bigBattWarn && val1helper>bigBattAlarm) 
                                                                  {val1=(" <font color=\"yellow\"> ")+val1helper.toFixed(1)+" V"} else{val1=(" <font color=\"green\"> ")+(val1helper.toFixed(1))+" V"};
                                                               if (val1helper<bigBattAlarm) AkkuAlarm.push(1);
                                                               if (val1helper<2.2) alarmMessage.push(val0);
                                                            }
                                         
                                                        else {         
                                                              if (val1helper<2.2) {val2=symbolKO} else if (val1helper<=2.5 && val1helper>=2.2) 
                                                                 {val2=symbolWARN} else{val2=symbolOK};
                                                              if (val1helper<2.2) {val1=(" <font color=\"red\"> ")+val1helper.toFixed(1)+" V"} else if (val1helper<=2.5 && val1helper>=2.2) 
                                                                 {val1=(" <font color=\"yellow\"> ")+val1helper.toFixed(1)+" V"} else{val1=(" <font color=\"green\"> ")+val1helper.toFixed(1)+" V"};
                                                              if (val1helper<2.2) {AkkuAlarm.push(1);}
                                                              if (val1helper<2.2) alarmMessage.push(val0);
                                                              }
                                       
                                              } else {
                                                                                           
                                                       val0=getObject(id).common.name ; 
                                                       var ida = val0.split('.');
                                                       val0=ida[0].replace(/:.+/g,"");
                                                       val1help=getState(id).val;
                                                       if (val1help) {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                                                       if (val1help) {val2=symbolKO} else{val2=symbolOK}         
                                                       if (val1help) AkkuAlarm.push(1);
                                       
                                              }
                                       
                                          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 hm-ip
                                       
                                        if (fullyBrowser){
                                             tabelleAusbessern();
                                             counter=0;
                                             val0=""; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=0;
                                             val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>FULLYBROWSER</b>"; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=-1
                                       
                                       
                                      $('fullybrowser.*.*.Info.batteryLevel').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                       if (!filterArray.includes(id)){
                                               var ida = id.split('.');
                                              
                                               
                                                 counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                       
                                                 val0=getState(id.replace("batteryLevel","deviceName")).val;
                                                 val1help=parseFloat((getState(id).val));
                                                 if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                                 if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                                 if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                                
                                                 if (val1help<=battAlarm) AkkuAlarm.push(1);
                                                 if (val1help<=battAlarm)  alarmMessage.push(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 fullybrowser
                                       
                                       
                                        if (iogo){
                                             tabelleAusbessern();
                                             counter=0;
                                             val0=""; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=0;
                                             val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HANDY über IOGO</b>"; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=-1
                                       
                                       
                                      $('iogo.*.*.battery.level').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                       if (!filterArray.includes(id)){
                                               var ida = id.split('.');
                                              
                                               
                                                 counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                              //   val0=ida[3];
                                                 val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                               // log(val0+"   "+id);
                                                 val1help=parseFloat((getState(id).val));
                                                 if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                                 if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                                 if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                                
                                                 if (val1help<=battAlarm) AkkuAlarm.push(1);
                                                 if (val1help<=battAlarm)  alarmMessage.push(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 iogo
                                       
                                       
                                         if (handy1){  
                                                 tabelleAusbessern();
                                                 counter=0;
                                                 val0=""; val1=""; val2="";
                                                 tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                 tabelleAusbessern();
                                                 counter=0;
                                                 val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HANDYs</b>"; val1=""; val2="";
                                                 tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                 tabelleAusbessern();
                                                 counter=-1
                                       
                                              $('controll-own.0.HANDY.*batt*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                               if (!filterArray.includes(id)){
                                             var ida = id.split('.');
                                             
                                               counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                               val0=ida[3];
                                              // log(val0+"   "+id);
                                               val1help=parseFloat((getState(id).val));
                                               if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                               if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                               if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                               if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                               if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                       
                                               if (val1help<=battAlarm) AkkuAlarm.push(1);
                                               if (val1help<=battAlarm)  alarmMessage.push(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 handy1
                                       
                                       
                                       
                                         if (handy2){ 
                                                  $('controll-own.0.HANDY.*Batt*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                                   if (!filterArray.includes(id)){
                                             var ida = id.split('.');
                                             
                                               counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                               val0=ida[3];
                                              // log(val0+"   "+id);
                                               val1help=parseFloat((getState(id).val));
                                               if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                               if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                               if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                                               if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                               if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                               if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                              
                                       
                                        
                                          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 handy2
                                      //-------------------------------------------------------------------------------------------------------------------------------------------------
                                      //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                                      //-------------------------------------------------------------------------------------------------------------------------------------------------
                                       
                                           tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                                       
                                           if (AkkuAlarm.length >=1 ) {setState(dpAlarm,AkkuAlarm.length)} else {setState(dpAlarm,AkkuAlarm.length)}
                                          // log("BATTERIE Alarm     : "+AkkuAlarm.length.toString());
                                          if (AkkuMessageLengthAlt < AkkuAlarm.length && wantAmessage) {setState(dpAlarmMessage,alarmMessage.toString()); AkkuMessageLengthAlt=AkkuAlarm.length}
                                          alarmMessage=[];
                                              
                                      } // function ende
                                       
                                      //MAIN:
                                       
                                      schedule(mySchedule,  function () { 
                                      writeHTML();
                                      if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                                      }); 
                                      writeHTML();  
                                      if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}                                 //     <tdalign
                                      function tabelleBind(){
                                            switch (mehrfachTabelle) {  
                                              case 1:                    htmlOut=htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;
                                              case 2:  if(counter%2==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                                    else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;
                                                                         
                                              case 3: if(counter%3==0 )  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                                    else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                                     else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                                               } break;
                                       
                                       
                                              case 4: if(counter%4==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                                        else {if(counter%2==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                                     else    {if(counter%2==1 && counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} 
                                                                                                       else    {htmlOut = htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}}
                                                                               } break; } //switch ende
                                       
                                      }
                                       
                                      function tabelleAusbessern() {
                                       
                                      switch (mehrfachTabelle) {  
                                              case 1:    break;
                                              case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                                         if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                         break;
                                              case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                                         if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                         if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                                         break;
                                              case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                                         if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                                         if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                                         if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                                                         break; }
                                      }
                                       
                                      function tabelleFinish() {
                                       
                                      switch (mehrfachTabelle) {  
                                              case 1:    break;
                                              case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                                         if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                         break;
                                              case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                                         if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                         if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                                         break;
                                              case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                                         if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                                         if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                                         if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                                                         break; }
                                          
                                              var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
                                            var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>";
                                             
                                             if (!htmlSignature) htmlUnter="";
                                               //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
                                                var htmlOutVIS="";
                                              //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                                                 if (htmlUberschrift) 
                                                     { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter ;
                                       
                                                   } else {
                                                    zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter;
                                       
                                                      }
                                                      
                                       
                                       // log("bin raus aus tabelleBind");
                                                if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
                                                //console.log dpVIS;
                                       
                                      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);
                                       
                                       
                                      }
                                      

                                      ° Node.js: 20.17.0 NPM: 10.8.2
                                      ° Proxmox, Ubuntu 22.04.3 LTS
                                      ° Fixer ---> iob fix

                                      liv-in-skyL 1 Antwort Letzte Antwort
                                      0
                                      • NegaleinN Negalein

                                        @liv-in-sky

                                        Script hab ich angepasst, jedoch bekomm ich jetzt wieder Warn-Meldungen

                                        18:23:17.185	warn	javascript.0 (592) at tabelleFinish (script.js.common.Akku_Alarm_Tabelle:923:36)
                                        18:23:17.185	warn	javascript.0 (592) at writeHTML (script.js.common.Akku_Alarm_Tabelle:834:6)
                                        18:23:17.185	warn	javascript.0 (592) at script.js.common.Akku_Alarm_Tabelle:849:1
                                        18:23:17.186	warn	javascript.0 (592) at writeHTML (script.js.common.Akku_Alarm_Tabelle:836:76)
                                        18:23:17.186	warn	javascript.0 (592) at script.js.common.Akku_Alarm_Tabelle:849:1
                                        

                                        //@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.AKKU"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget - zeichenkette(string)
                                        let dpAlarm="controll-own.0.TABELLEN.AkkuAlarm";  //WICHTIG datenpunkt erstellen vom typ "number" - bei 0 kein alarm und größer 0 die anzahl der schlechten batterien
                                        let dpAlarmMessage="0_userdata.0.Tabellen.AkkuMessage";  //WICHTIG datenpunkt erstellen vom typ "string" Inhalt - alle devices mit lowbat-alarmen
                                        let wantAmessage=true;                                      // dieser message datenpunkt kann hier abgeschalten werden
                                        let htmlColorDeviceUeberschrift="#00BFFF"
                                        var battAlarm=30;                                     //alarm batterie wert
                                        var battAlarmWarning=55;                                     //warnungen batterie wert
                                         
                                         // ------------------------    hier einstellen, was man für adapter hat - die nicht gebraucht werden auf false setzen !!!
                                        var tradfri=false;
                                        var hue=true;
                                        var hueExt=false;
                                        var homematic=true;
                                        var homematicIp=true;
                                        var xiaomi=true;                                                // mihome.0
                                        var fritzDect=false;
                                        var netatmo=false;
                                        var homee=false;
                                        var tado=false;
                                        var zigbee=false;
                                        var iogo=false;                                                 // iogo - adapter - hat batterie abfrage
                                        var fullyBrowser=false;                                         // fullybrowser - adapter - hat batterie abfrage
                                        var handy1=false;                                              // sind einzelne datenpunkte, 
                                        var handy2=false;
                                         
                                        //für spezialisten bei devices mit über 3 volt batterien
                                        var bigBattAlarm=3.3; var bigBattWarn=3.6; //WICHTIG bei bigAlarm nicht unter 3.3 gehen !!!!!!!!
                                         
                                        var symbolOK="✅";
                                        var symbolKO="❌";     //z.b. auch "<font color=\"red\"><b>X</b>" für ein rotes kreuz
                                        var symbolWARN="⚠️";
                                         
                                        var filterArray=["mihome.0.devices.plug_158d0001f24aad.percent","mihome.0.devices.plug_158d00020d98af.percent"]; //hier den ganzenpfad von ungewünschten LOW_BAT werten eingeben - diese werden dann gefiltert
                                                                       // BEISPIEL var filterArray=["hm-rpc.0.LEQ0242145.0.LOWBAT", "hm-rpc.0.LEQ0242152.0.LOWBAT","hm-rpc.1.OEQ0473764.0.LOWBAT"];
                                        let mySchedule=" */5 * * * * ";                       //jede minute  
                                        //---------------------------------------
                                         
                                        //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 3
                                        var htmlFeld1='Device';      var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                                        var htmlFeld2='V bzw. %';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                                        var htmlFeld3='Status';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                                        //-----------------------------------
                                         
                                         
                                        //------------------------------hier werden die styles für die tabelle definiert
                                         
                                        //ÜBERSCHRIFT ÜBER TABELLE
                                        let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
                                        let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
                                        const htmlFeldUeber='Batterie Zustand Sensoren';              // Überschrift und Signature
                                        const htmlFarbUber="white";                         // Farbe der Überschrift
                                        const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
                                        const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
                                        //MEHRERE TABELLEN NEBENEINANDER
                                        let   mehrfachTabelle=2;                              // 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="white";             // 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
                                         
                                        // AB HIER NICHTS  ÄNDERN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                                        // AB HIER NICHTS  ÄNDERN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                                        // AB 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 3
                                         
                                          	var htmlTabUeber2="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;</td>";
                                        var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+"  align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld2+
                                                          "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td>";
                                        //------------------------------------------------------
                                         
                                         
                                        var htmlTabUeber="";
                                        var htmlOut="";
                                        var mix;
                                        var counter;
                                        var AkkuAlarm=[];
                                        var alarmMessage=[];
                                        let AkkuMessageLengthAlt=0;
                                         var arrDoppelt=[];
                                        //HIER SIND DIE  WERTE, DIE IN DER SCHLEIFE GEFILTERET WER%DEN - Jede spalte einen wert - jeder valx muss in dieser schleife gesetzt werden !!
                                        var val1; var val0; var val2;
                                         
                                        function writeHTML(){
                                          AkkuAlarm=[];
                                         
                                        htmlOut="";
                                         
                                        counter=-1;
                                        htmlTabUeber="";
                                        switch (mehrfachTabelle) { 
                                          case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
                                          case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                          case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber3; break;
                                          case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                        };   
                                        if (!UeberschriftSpalten) {htmlTabUeber=""}
                                         
                                         
                                        //--------------------------------------------------------------------------------------------------------------------------------------------------
                                        //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
                                        //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2 !!!---------------------------------------------------------------------
                                        //--------------------------------------------------------------------------------------------------------------------------------------------------
                                        var myColl=[];
                                        var val1help;
                                         
                                           
                                           if (fritzDect){
                                         
                                                      // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                                        tabelleAusbessern();
                                                        tabelleAusbessern();
                                                        counter=0;
                                                          val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>FRITZDECT THERMOSTATE</b>"; val1=""; val2="";
                                                        tabelleBind(); 
                                                        tabelleAusbessern();
                                                        counter=-1;
                                         
                                         
                                          $('fritzdect.*.*.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                             if (!filterArray.includes(id)){
                                                 var ida = id.split('.');
                                                
                                                   counter++; 
                                                     
                                                 //  val0=ida[2]+"."+ida[3];
                                                   val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                   val1help=parseFloat((getState(id).val));
                                                   if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                                   if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                                   if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                                   if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                                   if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                         
                                                   if (val1help<=battAlarm) AkkuAlarm.push(1);
                                                   if (val1help<=battAlarm)  alarmMessage.push(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 (homee){
                                         
                                               tabelleAusbessern();
                                               counter=0;
                                               val0=""; val1=""; val2="";
                                               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                               tabelleAusbessern();
                                               counter=0;
                                               val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HOMEE DEVICES</b>"; val1=""; val2="";
                                               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                               tabelleAusbessern();
                                               counter=-1
                                         
                                         
                                          $('homee.0.*.BatteryLevel*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                             if (!filterArray.includes(id)){
                                                 var ida = id.split('.');
                                                
                                                   counter++; 
                                                     
                                                 //  val0=ida[2]+"."+ida[3];
                                                   val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                   val1help=parseFloat((getState(id).val));
                                                  //    var val2_1;
                                                 //   if (parseInt((new Date().getTime())) - val2_2help < 120000) {val2_1=true} else {val2_1=false;}
                                         
                                                   if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                                   if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                                   if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                                   if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                                 //  var val2_2help=Date.parse(getState(id.replace("BatteryStatus","LastUpdate")).val); 
                                                 //  if (val2_1) {val2=symbolOK} else{val2=symbolKO}   
                                                        
                                                   if (val1help<=battAlarm) AkkuAlarm.push(1);
                                                   if (val1help<=battAlarm)  alarmMessage.push(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 (netatmo){
                                         
                                               tabelleAusbessern();
                                               counter=0;
                                               val0=""; val1=""; val2="";
                                               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                               tabelleAusbessern();
                                               counter=0;
                                               val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>NETATMO DEVICES</b>"; val1=""; val2="";
                                               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                               tabelleAusbessern();
                                               counter=-1
                                         
                                         
                                          $('netatmo.*.*.*.BatteryStatus').each(function(id, i) {           // netatmo.0.Hinxxxer.Außenmodul-Carport.BatteryStatus
                                         
                                         //  if (!filterArray.includes(id)){
                                         
                                               
                                                 var ida = id.split('.');
                                              
                                                   counter++; 
                                                     
                                                 //  val0=ida[2]+"."+ida[3];
                                                   val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name ;
                                                   val1help=parseFloat((getState(id).val));
                                                   //   var val2_1;
                                                 //   if (parseInt((new Date().getTime())) - val2_2help < 120000) {val2_1=true} else {val2_1=false;}
                                         
                                                   if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                                   if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                                   if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                                   if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                                 //  var val2_2help=Date.parse(getState(id.replace("BatteryStatus","LastUpdate")).val); 
                                                 //  if (val2_1) {val2=symbolOK} else{val2=symbolKO}   
                                                        
                                                   if (val1help<=battAlarm) AkkuAlarm.push(1);
                                                   if (val1help<=battAlarm)  alarmMessage.push(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 (xiaomi){
                                               // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                               tabelleAusbessern();
                                               counter=0;
                                               val0=""; val1=""; val2="";
                                               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                               tabelleAusbessern();
                                               counter=0;
                                               val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>XIAOMI DEVICES</b>"; val1=""; val2="";
                                               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                               tabelleAusbessern();
                                               counter=-1
                                         
                                         
                                        $('mihome.*.devices.*.percent').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                               // log (id)
                                                if (!filterArray.includes(id)){
                                                 var ida = id.split('.');
                                                
                                                 
                                                   counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                                 //  val0=ida[3];
                                                   val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name ;
                                                  val0=val0.replace(/.battery$/,""); 
                                                 // log(val0+"   "+id);
                                                   val1help=parseFloat((getState(id).val));
                                                   if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                                   if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                                   if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                                   if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                                   if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                                  
                                                   if (val1help<=battAlarm) AkkuAlarm.push(1);
                                                   if (val1help<=battAlarm)  alarmMessage.push(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 (hue){
                                             // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                               tabelleAusbessern();
                                               counter=0;
                                               val0=""; val1=""; val2="";
                                               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                               tabelleAusbessern();     
                                               counter=0;
                                               val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HUE DEVICES</b>"; val1=""; val2="";
                                               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                               tabelleAusbessern();
                                               counter=-1
                                             
                                        $('hue.*.*.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                          
                                           if (!filterArray.includes(id)){
                                                var ida = id.split('.');
                                               
                                                
                                                  counter++; 
                                                   val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name ;   val0=val0.replace(/.battery$/,""); val0=val0.replace("Philips_hue.",""); val0=val0.replace(/_/g," ");                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                                   val1help=parseFloat((getState(id).val));
                                                   if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                                   if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                                   if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                                   if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                                   if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                                 
                                                   if (val1help<=battAlarm) AkkuAlarm.push(1);
                                                   if (val1help<=battAlarm)  alarmMessage.push(val0);
                                           
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                         
                                         } }); 
                                         
                                          }  //ende hue
                                         if (hueExt){ 
                                                // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                               tabelleAusbessern();
                                               counter=0;
                                               val0=""; val1=""; val2="";
                                               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                               tabelleAusbessern();        
                                               counter=0;
                                               val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HUE EXTENDED</b>"; val1=""; val2="";
                                               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                               tabelleAusbessern();
                                               counter=-1
                                         
                                        $('hue-extended.*.*.*.config.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                         
                                         if (!filterArray.includes(id)){
                                               var ida = id.split('.');
                                            
                                               
                                                 counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                                
                                                    val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name ;   val0=val0.replace("Philips_hue.",""); val0=val0.replace(/_/g," ");                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                         
                                                   val1help=parseFloat((getState(id).val));
                                                   if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                                   if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                                   if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                                   if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                                   if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                                   if (val1help<=battAlarm) AkkuAlarm.push(1);
                                                   if (val1help<=battAlarm)  alarmMessage.push(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 hue-extended
                                         
                                            if (zigbee){ 
                                         
                                               // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                               tabelleAusbessern();
                                               counter=0;
                                               val0=""; val1=""; val2="";
                                               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                               tabelleAusbessern();
                                               counter=0;
                                               val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>ZIGBEE</b>"; val1=""; val2="";
                                               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                               tabelleAusbessern();
                                               counter=-1
                                         
                                        $('zigbee.*.*.battery').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                              
                                               if (!filterArray.includes(id)){
                                               var ida = id.split('.');
                                              
                                               
                                                 counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                                
                                                
                                                  val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                 // log(val0+"   "+id);
                                                 val1help=getState(id).val;
                                                 val1help=parseFloat((getState(id).val));
                                                 if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                                 if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                                 if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                         
                                                 if (val1help<=battAlarm) AkkuAlarm.push(1);
                                                 if (val1help<=battAlarm)  alarmMessage.push(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 !!!!!!!!!
                                          }
                                         
                                         if (tradfri){ 
                                         
                                               // UNTERTEILUNG - ÜBERSCHRIFT IN TABELLE
                                               tabelleAusbessern();
                                               counter=0;
                                               val0=""; val1=""; val2="";
                                               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                               tabelleAusbessern();
                                               counter=0;
                                               val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>IKEA TRADFRI</b>"; val1=""; val2="";
                                               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                               tabelleAusbessern();
                                               counter=-1
                                         
                                        $('tradfri.*.*.batteryPercentage').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                              
                                               if (!filterArray.includes(id)){
                                               var ida = id.split('.');
                                              
                                               
                                                 counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                                
                                                
                                                  val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                 // log(val0+"   "+id);
                                                 val1help=getState(id).val;
                                                 val1help=parseFloat((getState(id).val));
                                                 if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                                 if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                                 if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                         
                                                 if (val1help<=battAlarm) AkkuAlarm.push(1);
                                                 if (val1help<=battAlarm)  alarmMessage.push(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 !!!!!!!!!
                                          }
                                         
                                          if (tado){
                                             tabelleAusbessern();
                                             counter=0;
                                             val0=val0=""; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=0;
                                             val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>TADO DEVICES</b>"; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=-1
                                         
                                         
                                        $('tado.*.*.*.*.*.*.info.batteryState').each(function(id, i) {           // tado.0.337268.Rooms.11.devices.VA3078030592.info.batteryState
                                             var ida = id.split('.');
                                              if (!filterArray.includes(id)){
                                               counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                             //  log(id)
                                                val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]+"."+ida[4]).common.name                     //getObject(id).common.name ; //ida[2]+"."+ida[3];
                                                                                                                                //tado.0.337268.Rooms.11
                                               
                                                //log(val0+"   "+id);
                                               val1help=getState(id).val;
                                               if (val1help=="LOW") {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                                               //if (val1help<=battAlarm) {val2="<font color=\"red\"><b>X</b>"} else{val2=symbolOK}
                                               if (val1help=="LOW") {val2="<font color=\"red\">"+symbolKO} else{val2=symbolOK}   
                                               //if (val1help) {val2=<font color=\"red\"><b>X</b>} else{val2="✔"}         
                                               
                                               if (val1help=="LOW") AkkuAlarm.push(1);
                                               if (val1help=="LOW")  alarmMessage.push(val0);
                                         
                                          tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                              } // ende filterArr
                                        }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!! 
                                           }  //ende tado
                                         
                                         
                                        if (homematic){
                                             tabelleAusbessern();
                                             counter=0;
                                             val0=val0=""; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=0;
                                             val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HOMEMATIC</b>"; val1=""; val2="";
                                             tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                             tabelleAusbessern();
                                             counter=-1
                                             arrDoppelt=[];
                                        $('hm-rpc.*.*.*.BATTERY_STATE').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                          
                                          if (!filterArray.includes(id)){
                                             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])
                                                  });
                                               arrDoppelt.push(ida[0]+"."+ida[1]+"."+ida[2]);
                                               counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                         
                                            if (arrFilt.includes("BATTERY_STATE")) {
                                                        val0=getObject(id).common.name ; 
                                                        var ida = val0.split('.');
                                                        val0=ida[0].replace(/:.+/g,"");
                                                        val1help=getState(id).val;
                                                        var  val1helper=getState(id.replace("LOW_BAT","BATTERY_STATUS")).val;     
                                                        //bigBatterien 
                                                        //log (val1helper.toFixed(1))
                                                        if (val1helper>3.2){
                                                               if (val1helper<=bigBattAlarm) {val2=symbolKO} else if (val1helper<=bigBattWarn && val1helper>bigBattAlarm) 
                                                                  {val2=symbolWARN} else{val2=symbolOK};
                                                               if (val1helper<=bigBattAlarm) {val1=(" <font color=\"red\"> ")+val1helper.toFixed(1)+" V"} else if (val1helper<=bigBattWarn && val1helper>bigBattAlarm) 
                                                                  {val1=(" <font color=\"yellow\"> ")+val1helper.toFixed(1)+" V"} else{val1=(" <font color=\"green\"> ")+(val1helper.toFixed(1))+" V"};
                                                               if (val1helper<bigBattAlarm) AkkuAlarm.push(1);
                                                               if (val1helper<=bigBattAlarm)  alarmMessage.push(val0);
                                                            }
                                         
                                                        else {         
                                                              if (val1helper<2.2) {val2=symbolKO} else if (val1helper<=2.5 && val1helper>=2.2) 
                                                                 {val2=symbolWARN} else{val2=symbolOK};
                                                              if (val1helper<2.2) {val1=(" <font color=\"red\"> ")+val1helper.toFixed(1)+" V"} else if (val1helper<=2.5 && val1helper>=2.2) 
                                                                 {val1=(" <font color=\"yellow\"> ")+val1helper.toFixed(1)+" V"} else{val1=(" <font color=\"green\"> ")+val1helper.toFixed(1)+" V"};
                                                              if (val1helper<2.2) AkkuAlarm.push(1);
                                                              if (val1helper<2.2)  alarmMessage.push(val0);}
                                         
                                              } else {
                                                                                           
                                                       val0=getObject(id).common.name ; 
                                                       var ida = val0.split('.');
                                                       val0=ida[0].replace(/:.+/g,"");
                                                       val1help=getState(id).val;
                                                       if (val1help) {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                                                       if (val1help) {val2=symbolKO} else{val2=symbolOK}         
                                                       if (val1help) AkkuAlarm.push(1);
                                                       if (val1help)  alarmMessage.push(val0);
                                         
                                              }
                                         
                                          tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                          }
                                        });
                                        //log(arrDoppelt.toString())
                                        $('hm-rpc.*.*.0.LOWBAT').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                             var ida = id.split('.');
                                           //  log(id)
                                             //log(arrDoppelt.toString())
                                          //    if (!filterArray.includes(id) && !arrDoppelt.includes(ida[0]+"."+ida[1]+"."+ida[2]+".*.BATTERY_STATE") ) {
                                                      if (!filterArray.includes(id) && !arrDoppelt.includes(ida[0]+"."+ida[1]+"."+ida[2]) ) {                          
                                               
                                                  
                                               counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                             //  log(id)
                                                val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name                     //getObject(id).common.name ; //ida[2]+"."+ida[3];
                                                var ida = val0.split('.');
                                                val0=ida[0].replace(/:.+/g,"");
                                                //log(val0+"   "+id);
                                               val1help=getState(id).val;
                                               if (val1help) {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                                               //if (val1help<=battAlarm) {val2="<font color=\"red\"><b>X</b>"} else{val2=symbolOK}
                                               if (val1help) {val2="<font color=\"red\">"+symbolKO} else{val2=symbolOK}   
                                               //if (val1help) {val2=<font color=\"red\"><b>X</b>} else{val2="✔"}         
                                               
                                               if (val1help) AkkuAlarm.push(1);
                                               if (val1help)  alarmMessage.push(val0);
                                         
                                         
                                          tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                              } // log(id)// ende filterArr
                                        }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
                                         
                                         
                                         //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!  
                                          
                                           } //ende hm
                                         
                                         if (homematicIp ){ 
                                                tabelleAusbessern();
                                                counter=0;
                                                val0=""; val1=""; val2="";
                                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                tabelleAusbessern();
                                                counter=0;
                                                val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HOMEMATIC IP</b>"; val1=""; val2="";
                                                tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                tabelleAusbessern();
                                                counter=-1
                                         
                                         
                                         
                                        $('hm-rpc.*.*.0.LOW_BAT').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                         
                                          if (!filterArray.includes(id)){
                                               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());
                                         
                                                 counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                         
                                              if (arrFilt.includes("OPERATING_VOLTAGE")) {
                                                        //  val0=getObject(id).common.name ; 
                                                          val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ; 
                                                          var ida = val0.split('.');
                                                          val0=ida[0].replace(/:.+/g,"");
                                                          val1help=getState(id).val;
                                                          var  val1helper=getState(id.replace("LOW_BAT","OPERATING_VOLTAGE")).val;     
                                                          //bigBatterien 
                                                          //log (val1helper.toFixed(1))
                                                          if (val1helper>3.2){
                                                                 if (val1helper<=bigBattAlarm) {val2=symbolKO} else if (val1helper<=bigBattWarn && val1helper>bigBattAlarm) 
                                                                    {val2=symbolWARN} else{val2=symbolOK};
                                                                 if (val1helper<=bigBattAlarm) {val1=(" <font color=\"red\"> ")+val1helper.toFixed(1)+" V"} else if (val1helper<=bigBattWarn && val1helper>bigBattAlarm) 
                                                                    {val1=(" <font color=\"yellow\"> ")+val1helper.toFixed(1)+" V"} else{val1=(" <font color=\"green\"> ")+(val1helper.toFixed(1))+" V"};
                                                                 if (val1helper<bigBattAlarm) AkkuAlarm.push(1);
                                                                 if (val1helper<2.2) alarmMessage.push(val0);
                                                              }
                                           
                                                          else {         
                                                                if (val1helper<2.2) {val2=symbolKO} else if (val1helper<=2.5 && val1helper>=2.2) 
                                                                   {val2=symbolWARN} else{val2=symbolOK};
                                                                if (val1helper<2.2) {val1=(" <font color=\"red\"> ")+val1helper.toFixed(1)+" V"} else if (val1helper<=2.5 && val1helper>=2.2) 
                                                                   {val1=(" <font color=\"yellow\"> ")+val1helper.toFixed(1)+" V"} else{val1=(" <font color=\"green\"> ")+val1helper.toFixed(1)+" V"};
                                                                if (val1helper<2.2) {AkkuAlarm.push(1);}
                                                                if (val1helper<2.2) alarmMessage.push(val0);
                                                                }
                                         
                                                } else {
                                                                                             
                                                         val0=getObject(id).common.name ; 
                                                         var ida = val0.split('.');
                                                         val0=ida[0].replace(/:.+/g,"");
                                                         val1help=getState(id).val;
                                                         if (val1help) {val1=(" <font color=\"red\"> ")+"low bat"} else{val1=(" <font color=\"green\"> ")+"full bat"} 
                                                         if (val1help) {val2=symbolKO} else{val2=symbolOK}         
                                                         if (val1help) AkkuAlarm.push(1);
                                         
                                                }
                                         
                                            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 hm-ip
                                         
                                          if (fullyBrowser){
                                               tabelleAusbessern();
                                               counter=0;
                                               val0=""; val1=""; val2="";
                                               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                               tabelleAusbessern();
                                               counter=0;
                                               val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>FULLYBROWSER</b>"; val1=""; val2="";
                                               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                               tabelleAusbessern();
                                               counter=-1
                                         
                                         
                                        $('fullybrowser.*.*.Info.batteryLevel').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                         if (!filterArray.includes(id)){
                                                 var ida = id.split('.');
                                                
                                                 
                                                   counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                         
                                                   val0=getState(id.replace("batteryLevel","deviceName")).val;
                                                   val1help=parseFloat((getState(id).val));
                                                   if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                                   if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                                   if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                                   if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                                   if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                                  
                                                   if (val1help<=battAlarm) AkkuAlarm.push(1);
                                                   if (val1help<=battAlarm)  alarmMessage.push(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 fullybrowser
                                         
                                         
                                          if (iogo){
                                               tabelleAusbessern();
                                               counter=0;
                                               val0=""; val1=""; val2="";
                                               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                               tabelleAusbessern();
                                               counter=0;
                                               val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HANDY über IOGO</b>"; val1=""; val2="";
                                               tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                               tabelleAusbessern();
                                               counter=-1
                                         
                                         
                                        $('iogo.*.*.battery.level').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                         if (!filterArray.includes(id)){
                                                 var ida = id.split('.');
                                                
                                                 
                                                   counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                                //   val0=ida[3];
                                                   val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]).common.name ;
                                                 // log(val0+"   "+id);
                                                   val1help=parseFloat((getState(id).val));
                                                   if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                                   if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                                   if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                                   if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                                   if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                                  
                                                   if (val1help<=battAlarm) AkkuAlarm.push(1);
                                                   if (val1help<=battAlarm)  alarmMessage.push(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 iogo
                                         
                                         
                                           if (handy1){  
                                                   tabelleAusbessern();
                                                   counter=0;
                                                   val0=""; val1=""; val2="";
                                                   tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                   tabelleAusbessern();
                                                   counter=0;
                                                   val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><b>HANDYs</b>"; val1=""; val2="";
                                                   tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                   tabelleAusbessern();
                                                   counter=-1
                                         
                                                $('controll-own.0.HANDY.*batt*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                                 if (!filterArray.includes(id)){
                                               var ida = id.split('.');
                                               
                                                 counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                                 val0=ida[3];
                                                // log(val0+"   "+id);
                                                 val1help=parseFloat((getState(id).val));
                                                 if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                                 if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                                 if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                         
                                                 if (val1help<=battAlarm) AkkuAlarm.push(1);
                                                 if (val1help<=battAlarm)  alarmMessage.push(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 handy1
                                         
                                         
                                         
                                           if (handy2){ 
                                                    $('controll-own.0.HANDY.*Batt*').each(function(id, i) {           // hier eigene schleife definieren und den wert counter++ nicht vergessen  !!!
                                                     if (!filterArray.includes(id)){
                                               var ida = id.split('.');
                                               
                                                 counter++;                                       // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                                 val0=ida[3];
                                                // log(val0+"   "+id);
                                                 val1help=parseFloat((getState(id).val));
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()+" %"}
                                                 if (val1help<=battAlarm) {val1=(" <font color=\"red\"> ")+val1help.toString()+" %"} else{val1=(" <font color=\"green\"> ")+val1help.toString()+" %"} 
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) {val1=(" <font color=\"yellow\"> ")+val1help.toString()}
                                                 if (getState(id).val==null) {val2="never used"}; //log(id)}; 
                                                 if (val1help<=battAlarm) {val2=symbolKO} else{val2=symbolOK}         
                                                 if (val1help>battAlarm && val1help<=battAlarmWarning) val2=symbolWARN;
                                                
                                         
                                          
                                            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 handy2
                                        //-------------------------------------------------------------------------------------------------------------------------------------------------
                                        //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                                        //-------------------------------------------------------------------------------------------------------------------------------------------------
                                         
                                             tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                                         
                                             if (AkkuAlarm.length >=1 ) {setState(dpAlarm,AkkuAlarm.length)} else {setState(dpAlarm,AkkuAlarm.length)}
                                            // log("BATTERIE Alarm     : "+AkkuAlarm.length.toString());
                                            if (AkkuMessageLengthAlt < AkkuAlarm.length && wantAmessage) {setState(dpAlarmMessage,alarmMessage.toString()); AkkuMessageLengthAlt=AkkuAlarm.length}
                                            alarmMessage=[];
                                                
                                        } // function ende
                                         
                                        //MAIN:
                                         
                                        schedule(mySchedule,  function () { 
                                        writeHTML();
                                        if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                                        }); 
                                        writeHTML();  
                                        if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}                                 //     <tdalign
                                        function tabelleBind(){
                                              switch (mehrfachTabelle) {  
                                                case 1:                    htmlOut=htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>"; break;
                                                case 2:  if(counter%2==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                                      else {htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} break;
                                                                           
                                                case 3: if(counter%3==0 )  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                                      else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                                       else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td></tr>";}
                                                                                 } break;
                                         
                                         
                                                case 4: if(counter%4==0)  {htmlOut = htmlOut+"<tr><td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>"; } 
                                                                          else {if(counter%2==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td>";} 
                                                                                       else    {if(counter%2==1 && counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td></tr>";} 
                                                                                                         else    {htmlOut = htmlOut = htmlOut+"<td align="+Feld1lAlign+">&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td>";}}
                                                                                 } break; } //switch ende
                                         
                                        }
                                         
                                        function tabelleAusbessern() {
                                         
                                        switch (mehrfachTabelle) {  
                                                case 1:    break;
                                                case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                                           if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                           break;
                                                case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                                           if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                           if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                                           break;
                                                case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                                           if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                                           if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                                           if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                                                           break; }
                                        }
                                         
                                        function tabelleFinish() {
                                         
                                        switch (mehrfachTabelle) {  
                                                case 1:    break;
                                                case 2:    mix=Math.abs(((counter+1)%2)-mehrfachTabelle);  
                                                           if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                           break;
                                                case 3:    mix =Math.abs(((counter+1)%3)-mehrfachTabelle);
                                                           if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');       
                                                           if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');   
                                                           break;
                                                case 4:    mix=Math.abs(((counter+1)%4)-mehrfachTabelle);
                                                           if(mix==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');
                                                           if(mix==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');    
                                                           if(mix==3)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');      
                                                           break; }
                                            
                                                var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
                                              var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>";
                                               
                                               if (!htmlSignature) htmlUnter="";
                                                 //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
                                                  var htmlOutVIS="";
                                                //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                                                   if (htmlUberschrift) 
                                                       { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter ;
                                         
                                                     } else {
                                                      zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter;
                                         
                                                        }
                                                        
                                         
                                         // log("bin raus aus tabelleBind");
                                                  if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
                                                  //console.log dpVIS;
                                         
                                        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);
                                         
                                         
                                        }
                                        

                                        liv-in-skyL Offline
                                        liv-in-skyL Offline
                                        liv-in-sky
                                        schrieb am zuletzt editiert von
                                        #585

                                        @Negalein du hast die datenpunkte von mir noch imscript - da müssen deine rein (controll-own... sind meine)

                                        nach einem gelösten Thread wäre es sinnvoll dies in der Überschrift des ersten Posts einzutragen [gelöst]-... Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat. Forum-Tools: PicPick https://picpick.app/en/download/ und ScreenToGif https://www.screentogif.com/downloads.html

                                        NegaleinN 1 Antwort Letzte Antwort
                                        0
                                        • liv-in-skyL liv-in-sky

                                          @Negalein du hast die datenpunkte von mir noch imscript - da müssen deine rein (controll-own... sind meine)

                                          NegaleinN Offline
                                          NegaleinN Offline
                                          Negalein
                                          Global Moderator
                                          schrieb am zuletzt editiert von
                                          #586

                                          @liv-in-sky sagte in Script fürTabelle der Batterie Zustände:

                                          du hast die datenpunkte von mir noch imscript

                                          Ah, ich Depp
                                          Hab den neuen geändert, aber die alten komplett übersehen

                                          Danke, läuft

                                          ° Node.js: 20.17.0 NPM: 10.8.2
                                          ° Proxmox, Ubuntu 22.04.3 LTS
                                          ° Fixer ---> iob fix

                                          1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          354

                                          Online

                                          32.4k

                                          Benutzer

                                          81.5k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe