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

  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Sonoff Geräte als HTML Tabelle - Vis

NEWS

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

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

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

Sonoff Geräte als HTML Tabelle - Vis

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascriptmonitoringtemplate
632 Beiträge 34 Kommentatoren 134.3k Aufrufe 39 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.
  • I Offline
    I Offline
    Idefix01
    schrieb am zuletzt editiert von Idefix01
    #359

    @liv-in-sky

    So habe es mal getestet, wenn ich die Zeile so abgeändert habe und val5 (Uptime) auch abgeändert habe dann funktioniert es ohne Fehler.

    Aber ich habe die Punkte (Wifi RSSI und Uptime) gefunden, kann sein das es aber bei mir anders von der Ordnerstruktur ist.
    Hier mal eine Json Datei von meinen Sonoff.

    sonoff.0.json

    Das muss in den Zeilen heißen Module.INFO, deshalb ging es nicht.

    liv-in-skyL 1 Antwort Letzte Antwort
    0
    • I Idefix01

      @liv-in-sky

      So habe es mal getestet, wenn ich die Zeile so abgeändert habe und val5 (Uptime) auch abgeändert habe dann funktioniert es ohne Fehler.

      Aber ich habe die Punkte (Wifi RSSI und Uptime) gefunden, kann sein das es aber bei mir anders von der Ordnerstruktur ist.
      Hier mal eine Json Datei von meinen Sonoff.

      sonoff.0.json

      Das muss in den Zeilen heißen Module.INFO, deshalb ging es nicht.

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

      @Idefix01 ich habe eine vermutung: du hast wasser 1 und wasser2 - zusätzlich hast du DVES_... 2 mal

      du hast aber nur 2 und die DVES_... sind eitgentlich die selben geräte, bevor umbenannt - die solltest du mal löschen - so das du nur noch 2 geräte hast -dann sollte das script auch ohne änderung funktionieren

      DVES_... werden nicht upgedatet, weil sie nicht existieren - kommt durchs flashen und anschliessend einrichten

      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
      • I Offline
        I Offline
        Idefix01
        schrieb am zuletzt editiert von
        #361

        @liv-in-sky

        Das war es gewesen. Perfekt. Danke.

        1 Antwort Letzte Antwort
        0
        • K Offline
          K Offline
          klaus88
          schrieb am zuletzt editiert von klaus88
          #362

          Hallo @liv-in-sky :
          Ich verwende nun dein Script seit Jänner und es lief wunderbar, aber seit ein paar Tagen (warum auch immer) habe ich Probleme, denn er stellt mir SonOff Geräte als "nicht alive" dar obwohl sie alive sind. Sie lassen sich auch schalten, denn ich habe natürlich im VIS noch mehrere Schalter um diese SonOffs zu schalten. Das LOG gibt keine Fehler aus! Was hab ich gemacht bzw. probiert:
          a) Nachdem ich doch einige Zeilen in deinem Script geändert habe, habe ich mir dein orig. Script nochmals runtergeladen und eingespielt - aber auch dort werden Geräte falsch angezeigt.
          b) Sonoff Adapter neu gestartet : Dann funktioniert es ein paar Stunden, doch dann das selbe Problem

          Screenshot Darstellung - dein Originals Script :
          Sonoff1.jpg

          Screenshot aus einem der R2s - die Objekte - damit man sieht, dass er "alive" ist:
          Sonoff2.jpg

          Hast du vielleicht einen Tipp für mich, was das sein kann, denn ich steh grad ziemlich auf der Leitung!
          Danke
          Klaus

          liv-in-skyL 2 Antworten Letzte Antwort
          0
          • K klaus88

            Hallo @liv-in-sky :
            Ich verwende nun dein Script seit Jänner und es lief wunderbar, aber seit ein paar Tagen (warum auch immer) habe ich Probleme, denn er stellt mir SonOff Geräte als "nicht alive" dar obwohl sie alive sind. Sie lassen sich auch schalten, denn ich habe natürlich im VIS noch mehrere Schalter um diese SonOffs zu schalten. Das LOG gibt keine Fehler aus! Was hab ich gemacht bzw. probiert:
            a) Nachdem ich doch einige Zeilen in deinem Script geändert habe, habe ich mir dein orig. Script nochmals runtergeladen und eingespielt - aber auch dort werden Geräte falsch angezeigt.
            b) Sonoff Adapter neu gestartet : Dann funktioniert es ein paar Stunden, doch dann das selbe Problem

            Screenshot Darstellung - dein Originals Script :
            Sonoff1.jpg

            Screenshot aus einem der R2s - die Objekte - damit man sieht, dass er "alive" ist:
            Sonoff2.jpg

            Hast du vielleicht einen Tipp für mich, was das sein kann, denn ich steh grad ziemlich auf der Leitung!
            Danke
            Klaus

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

            @klaus88

            • kann es sein, dass du "doppelte" datenpunkte für einen sonoff hast hast
            • manchmal spinnt der cache - daher javascript instanz neustarten oder ganzen iobroker
            • wenn man den sonoff weiß, der probleme hat, musst du script stoppen, sonoff instanz stoppen, alle datenpunkte des problem-sonoffs löschen , sonoff instanz wieder starten , den sonoff vom strom nehmen!!!!, etwas warten, bis alle dp wieder da sind, script starten

            das ist mal der standard, der mir einfällt

            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
            • K klaus88

              Hallo @liv-in-sky :
              Ich verwende nun dein Script seit Jänner und es lief wunderbar, aber seit ein paar Tagen (warum auch immer) habe ich Probleme, denn er stellt mir SonOff Geräte als "nicht alive" dar obwohl sie alive sind. Sie lassen sich auch schalten, denn ich habe natürlich im VIS noch mehrere Schalter um diese SonOffs zu schalten. Das LOG gibt keine Fehler aus! Was hab ich gemacht bzw. probiert:
              a) Nachdem ich doch einige Zeilen in deinem Script geändert habe, habe ich mir dein orig. Script nochmals runtergeladen und eingespielt - aber auch dort werden Geräte falsch angezeigt.
              b) Sonoff Adapter neu gestartet : Dann funktioniert es ein paar Stunden, doch dann das selbe Problem

              Screenshot Darstellung - dein Originals Script :
              Sonoff1.jpg

              Screenshot aus einem der R2s - die Objekte - damit man sieht, dass er "alive" ist:
              Sonoff2.jpg

              Hast du vielleicht einen Tipp für mich, was das sein kann, denn ich steh grad ziemlich auf der Leitung!
              Danke
              Klaus

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

              @klaus88

              was sagt eigentlich das log ? sind da warnungen ?

              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

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

                @klaus88

                was sagt eigentlich das log ? sind da warnungen ?

                K Offline
                K Offline
                klaus88
                schrieb am zuletzt editiert von
                #365

                @liv-in-sky : Also erstmal Danke für deine Hilfe :
                Zu deinen Fragen:
                a) doppelte Datenpunkte : Nein habe ich nicht
                b) ein sonoff der spinnt: Ist genau mein Problem - es sind viele wie du aus dem Screenshot siehst - aber eigentlich spinnen sie nicht, weil sie sich im Rest des VIS schalten lassen
                c) Javascript / iobroker /sonoff Adapter - neu starten : Ja das ist derzeit meine einzige Lösung die ich hab - dann geht es wieder für eine bestimmte Zeit
                d) LOG File : Kein Fehler - keine Meldung - gar nichts

                irgendwie ist das komisch - ich probier noch ein bisschen herum - falls ich was finde, poste ich es hier - vielleicht kann es dann wer brauchen!
                Danke
                Schönes Wochenende
                Klaus

                liv-in-skyL 1 Antwort Letzte Antwort
                0
                • K klaus88

                  @liv-in-sky : Also erstmal Danke für deine Hilfe :
                  Zu deinen Fragen:
                  a) doppelte Datenpunkte : Nein habe ich nicht
                  b) ein sonoff der spinnt: Ist genau mein Problem - es sind viele wie du aus dem Screenshot siehst - aber eigentlich spinnen sie nicht, weil sie sich im Rest des VIS schalten lassen
                  c) Javascript / iobroker /sonoff Adapter - neu starten : Ja das ist derzeit meine einzige Lösung die ich hab - dann geht es wieder für eine bestimmte Zeit
                  d) LOG File : Kein Fehler - keine Meldung - gar nichts

                  irgendwie ist das komisch - ich probier noch ein bisschen herum - falls ich was finde, poste ich es hier - vielleicht kann es dann wer brauchen!
                  Danke
                  Schönes Wochenende
                  Klaus

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

                  @klaus88

                  • ich spreche über mein script - bei änderungen kann ich nicht helfen !

                  normalerweise geht es oder nicht - wenn es noch einer gewissen zeit nicht geht, habe ich das noch nie gehabt.

                  sollen wir mal gemeinsam mit anydesk darauf schauen ?

                  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

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

                    @klaus88

                    • ich spreche über mein script - bei änderungen kann ich nicht helfen !

                    normalerweise geht es oder nicht - wenn es noch einer gewissen zeit nicht geht, habe ich das noch nie gehabt.

                    sollen wir mal gemeinsam mit anydesk darauf schauen ?

                    K Offline
                    K Offline
                    klaus88
                    schrieb am zuletzt editiert von
                    #367

                    @liv-in-sky uups anydesk - da müsste ich jetzt meine Firewall "aufbohren" ! Vorschlag ich schau nochmals drüber was es da haben kann. Irgendwie hatte ich gehofft, dass dieses Problem schon wer hatte! Danke auf jeden Fall vielmals für deine Hilfe!
                    Hab jetzt den Sonoff Adapter wieder neu gestartet und alles wieder perfekt !

                    liv-in-skyL 1 Antwort Letzte Antwort
                    0
                    • K klaus88

                      @liv-in-sky uups anydesk - da müsste ich jetzt meine Firewall "aufbohren" ! Vorschlag ich schau nochmals drüber was es da haben kann. Irgendwie hatte ich gehofft, dass dieses Problem schon wer hatte! Danke auf jeden Fall vielmals für deine Hilfe!
                      Hab jetzt den Sonoff Adapter wieder neu gestartet und alles wieder perfekt !

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

                      @klaus88 evtl ist es ein sonoff, der etwas durcheinander bringt und den müßte man finden und löschen

                      wenn mir noch was einfällt, schreibe ich.

                      der standard fehler ist eigentlich, dass ein tasmota gerät nicht alle datenpunkte hat, die das script nutzt - das script testet nicht auf fehlende states. dann sollte sich aber im log etwas finden lassen - wenn die javascript instanz beim logging auf info bzw warn steht

                      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
                      • K Offline
                        K Offline
                        klaus88
                        schrieb am zuletzt editiert von
                        #369

                        @liv-in-sky : Das wars - du hattest Recht! Nachdem man im Lockdown sowieso nichts anderes zu tun hat :-( - habe ich mich heute in der Nacht hingesetzt und alles von vorne bis hinten nochmals gecheckt! Es war ein POWR2. Der hat sich elektronisch verabschiedet. Aber nicht gleich ganz, denn dann hätte er es mir ja leicht gemacht - er geht mal und dann wieder nicht! Diese Aussetzer habe ich dann in den älteren LOGs gefunden - die ich leider vorher einfach nicht gelesen hatte. Habe ihn ausgetauscht und seit 3 Uhr läuft alles so wie man es sich erwartet!
                        DANKE VIELMALS für deinen Tipp - ohne dich wäre ich nie auf die Idee gekommen, dass ein Gerät alleine das auslösen kann! Wünsche dir einen schönen Sonntag - für mich ist es einer seit 3 Uhr :-)
                        lg
                        Klaus

                        liv-in-skyL 1 Antwort Letzte Antwort
                        0
                        • K klaus88

                          @liv-in-sky : Das wars - du hattest Recht! Nachdem man im Lockdown sowieso nichts anderes zu tun hat :-( - habe ich mich heute in der Nacht hingesetzt und alles von vorne bis hinten nochmals gecheckt! Es war ein POWR2. Der hat sich elektronisch verabschiedet. Aber nicht gleich ganz, denn dann hätte er es mir ja leicht gemacht - er geht mal und dann wieder nicht! Diese Aussetzer habe ich dann in den älteren LOGs gefunden - die ich leider vorher einfach nicht gelesen hatte. Habe ihn ausgetauscht und seit 3 Uhr läuft alles so wie man es sich erwartet!
                          DANKE VIELMALS für deinen Tipp - ohne dich wäre ich nie auf die Idee gekommen, dass ein Gerät alleine das auslösen kann! Wünsche dir einen schönen Sonntag - für mich ist es einer seit 3 Uhr :-)
                          lg
                          Klaus

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

                          @klaus88

                          freut mich, dass du den fehler gefunden hast.

                          diese tabelle ist eine der meist-genutzen tabelle bei mir im system - leider habe ich damals keinen großen wert auf die abfrage der existenz der datenpunkte gemacht - man lernt nie aus bei iobroker :-)

                          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

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

                            @klaus88

                            freut mich, dass du den fehler gefunden hast.

                            diese tabelle ist eine der meist-genutzen tabelle bei mir im system - leider habe ich damals keinen großen wert auf die abfrage der existenz der datenpunkte gemacht - man lernt nie aus bei iobroker :-)

                            K Offline
                            K Offline
                            klaus88
                            schrieb am zuletzt editiert von klaus88
                            #371

                            @liv-in-sky :
                            "...diese tabelle ist eine der meist-genutzen tabelle bei mir im system.." - Definitiv nicht nur bei dir! Auch bei mir - DANKE VIELMALS DAFÜR - und vor allem für deine Arbeit ! Nachdem ich auch sehr viele HomematicIP Geräte besitze, baue ich grad die Tabelle auch auf HMIP um - bin aber noch mitten drinnen!
                            lg
                            Klaus

                            liv-in-skyL 2 Antworten Letzte Antwort
                            0
                            • K klaus88

                              @liv-in-sky :
                              "...diese tabelle ist eine der meist-genutzen tabelle bei mir im system.." - Definitiv nicht nur bei dir! Auch bei mir - DANKE VIELMALS DAFÜR - und vor allem für deine Arbeit ! Nachdem ich auch sehr viele HomematicIP Geräte besitze, baue ich grad die Tabelle auch auf HMIP um - bin aber noch mitten drinnen!
                              lg
                              Klaus

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

                              @klaus88

                              auch eine gute idee - wenn du fragen zum tabellenscript hast, einfach her damit - vielleicht interessiert auch andere eine tabelle für die HomematicIP - dann könntest du dies auch posten

                              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
                              • K klaus88

                                @liv-in-sky :
                                "...diese tabelle ist eine der meist-genutzen tabelle bei mir im system.." - Definitiv nicht nur bei dir! Auch bei mir - DANKE VIELMALS DAFÜR - und vor allem für deine Arbeit ! Nachdem ich auch sehr viele HomematicIP Geräte besitze, baue ich grad die Tabelle auch auf HMIP um - bin aber noch mitten drinnen!
                                lg
                                Klaus

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

                                @klaus88

                                was mir noch eingefallen ist - im batterie script ist auch ein part, der die batterie von homematicip geräten anzeigt - evtl könntest du den teil gebrauchen und in deinem script integrieren.

                                https://forum.iobroker.net/topic/28789/script-fürtabelle-der-batterie-zustände

                                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
                                • K Offline
                                  K Offline
                                  klaus88
                                  schrieb am zuletzt editiert von
                                  #374

                                  @liv-in-sky Passt mache ich - brauch aber noch ein bisschen - bin nicht grad der Profi in Sachen Javascript :-) Danke für den Tipp mit dem Batteriescript!

                                  1 Antwort Letzte Antwort
                                  0
                                  • K Offline
                                    K Offline
                                    klaus88
                                    schrieb am zuletzt editiert von
                                    #375

                                    @liv-in-sky : Ist doch schneller gegangen als geglaubt ! Anbei mein Versuch einer HMIP Tabelle - wobei 90% davon von dir stammt und ich nur kleine Änderungen gemacht habe. Aber Achtung ich habe keine CCU3 nur den HMIP AccessPoint!

                                    /* -----------------------------------
                                    homematicip_uebersicht.js
                                    Veröffentlichungsdatum: 29.11.2020
                                    Quelle: sonoff-geräte-als-html-tabelle von liv-in-sky
                                    https://forum.iobroker.net/topic/28953/sonoff-ger%C3%A4te-als-html-tabelle-vis-iqontrol/374
                                    
                                    Danksagung: An liv-in-sky für die Programmierung der Tabelle!
                                    
                                    Config:
                                    Die Datenpunkte werden automatisch erzeugt - man kann sie nach eigenen Wünschen 
                                    benennen bzw. zuordnen unter Name[x] bzw. alle folgenden Arrays.
                                    
                                    WICHTIG!:
                                    HMIP reagiert nicht so schnell wie z.B. SonOff.
                                    Hier dauert eine Änderung sehr lange bis sie sich im iobroker niederschlägt 
                                    z.B. der Wechsel der Anzeige einer schaltbare Steckdose auf ON bzw. Wechsel auf OFF.
                                    Auch die Anzeige ob ein Device noch online ist, funktioniert fast nicht, aber dies 
                                    ist ähnlich wie am App.
                                    
                                    Änderungen:
                                    
                                    ------------------------------------*/
                                    
                                    // States anlegen, falls sie nicht vorhanden sind
                                    // HMIPTabelle
                                    var Beschreibung = new Array();
                                    var Name = new Array();
                                    var Art = new Array();
                                    var Def = new Array();
                                    Beschreibung[0]="0_userdata.0.HMIP.HMIP_HTML_Tabelle";
                                    Name[0]="HMIP HTML Tabelle"
                                    Art[0]="string";
                                    Def[0]="";
                                    Beschreibung[1]="0_userdata.0.HMIP.AnzahlHMIP";
                                    Name[1]="Anzahl HMIP"
                                    Art[1]="number";
                                    Def[1]=0;
                                    for (var x=0; x < Beschreibung.length; x++) { 
                                    	if (!existsState(Beschreibung[x])) {
                                    		createState(Beschreibung[x], {type: Art[x], name: Name[x], read: true, write: true, def: Def[x]});
                                    	}
                                    }
                                    
                                    //@liv-in-sky Januar 2020 Ver 12.2.02-19:22
                                     
                                    //HIER WIRD PFAD UND FILENAME DEFINIERT
                                    const path = "/htmlsonoff.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="0_userdata.0.HMIP.HMIP_HTML_Tabelle"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                                    let dpAnzahl="0_userdata.0.HMIP.AnzahlHMIP";  //WICHTIG datenpunkt erstellen vom typ "number" - bei 0 kein alarm und größer 0 die anzahl der schlechten batterien
                                    let htmlColorDeviceUeberschrift="#e5e944"            //  Farbe der Geräte Marken 
                                    let HTMLbrandSetting="b"                              // style der geräte marken:  möglich b fett; i kursiv; span normal
                                    let triggerBySonoffPower=false;
                                     
                                     
                                    // ------------------------    hier einstellen, was man für ein device  hat - die nicht gebraucht werden auf false setzen !!!
                                    
                                    var tuerkontakt=true;
                                    var wandthermostat=true;
                                    var heizkoerperthermostat=true;
                                    var steckdose=true;
                                    var wassermelder=true;
                                    var rauchmelder=true;
                                    var rolladen=true;
                                    var taster=true;
                                    
                                    
                                    const mitSchalter=true;           // für freigabe von schaltern für POWER
                                    const mitYesterday=true;          // Für anzeige der yestersay werte bei energie-aufzeichnenden geräten (poe, blitzwolf, teckin, ..)
                                    const mitLink=true;               // link zum sonoff-web-interface
                                    const farbeNichtConnected="lightblue";
                                    const styleNichtErreichbar="i";             // möglich i=schräg, b ist fett und span ist normal - nur eines  davon !!!
                                    const farbeSchalterON="#e5e944"               // farbe des schalters für ON #e5e944, lightblue
                                    const farbeSchalterOFF="grey"               // farbe des schalters für OFF
                                     
                                     
                                    var symbolOK="⚪";  // auch möglich: ="✅ ⚪ "}      
                                    var symbolKO="⭕";     //z.b. auch "<font color=\"red\"><b>X</b>" für ein rotes kreuz ❌"  ⚪  ⚫ ⭕  🔴 🔵 ⏱ 💀 👍 👎 📑 💲 👀
                                    var symbolWARN="⚠️";    // ="⚠️"
                                    var symbolSwitch="🔄"
                                    var symbolLink="🌎";
                                    var battok="✅";
                                    var battnok="<font color=\"red\"><b>X</b>";
                                     
                                     
                                     
                                    let mySchedule=" * * * * * "; 
                                     
                                    //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 5
                                    var htmlFeld1='Device';       var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                                    var htmlFeld2='Status';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                                    var htmlFeld3='Firmware';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                                    var htmlFeld4='WLAN';        var Feld4lAlign="right";                    // überschrift Tabellen Spalte4 und  Ausrichtung left,right or center
                                    var htmlFeld5='Model';        var Feld5lAlign="left";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                                    var htmlFeld6='Batterie';        var Feld6lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                                    var htmlFeld7='';        var Feld7lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                                    var htmlFeld8='';        var Feld8lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                                    var htmlFeld9='Firmware';        	var Feld9lAlign="center";  
                                    //-----------------------------------
                                     
                                     
                                     
                                    //hier werden die styles für die tabelle definiert
                                    //ÜBERSCHRIFT ÜBER TABELLE
                                    let   htmlUberschrift=true;                           // mit Überschrift über der tabelle
                                    let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
                                    const htmlFeldUeber='HMIP Geräte Übersicht';              // Überschrift und Signature
                                    const htmlFarbUber="white";                         // Farbe der Überschrift
                                    const htmlSchriftWeite="bold";                       // bold, normal - Fettschrift für Überschrift
                                    const htmlÜberFontGroesse="14px";                       // schriftgröße überschrift
                                    
                                    //MEHRERE TABELLEN NEBENEINANDER
                                    let   mehrfachTabelle=1;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                                    const trennungsLinie="2";                             //extra trennungslinie bei mehrfachtabellen - evtl auf 0 stellen, wnn htmlRahmenLinien auf none sind
                                    const farbetrennungsLinie="white";
                                    const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                                    const htmlFarbTableColorUber="white";               // Überschrift in der tabelle - der einzelnen Spalten lightblue
                                    
                                    //ÜBERSCHRIFT SPALTEN
                                    const UeberSchriftHöhe="35";                          //Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe
                                    const LinieUnterUeberschrift="2";                   // Linie nur unter Spaltenüberschrift - 
                                    const farbeLinieUnterUeberschrift="white";          //lightblue
                                    const groesseUeberschrift=16;
                                    const UeberschriftStyle="bold"                     // möglich "bold", normal
                                    
                                    //GANZE TABELLE
                                    let abstandZelle="1";
                                    //let farbeUngeradeZeilen="#000000";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
                                    //let farbeGeradeZeilen="#151515";                        //Farbe für gerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
                                    let farbeUngeradeZeilen="#424242";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
                                    let farbeGeradeZeilen="#383838";  
                                    let weite="95%";                                     //Weite der Tabelle auto
                                    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="Trebuchet MS";
                                    const htmlSchriftgroesse="16px";
                                    
                                    //FELDER UND RAHMEN
                                    let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
                                    const htmlFarbFelderschrift="#ffffff";                  // SchriftFarbe der Felder
                                    const htmlFarbFelderschrift2="#BDBDBD";                 // 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="grey";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
                                    let htmlRahmenLinien="cols";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
                                    const htmlSpalte1Weite="auto";                   //  Weite der ersten beiden  Spalten oder z.b. 115px
                                     
                                    // HIER NICHTS  ÄNDERN
                                     
                                    let borderHelpBottum;
                                    let borderHelpRight;
                                    let htmlcenterHelp;
                                    let htmlcenterHelp2;
                                     
                                    if(htmlRahmenLinien=="rows") {borderHelpBottum=1;borderHelpRight=0;}
                                    if(htmlRahmenLinien=="cols") {borderHelpBottum=0;borderHelpRight=1;}
                                    if(htmlRahmenLinien=="none") {borderHelpBottum=0;borderHelpRight=0;}
                                    if(htmlRahmenLinien=="all")  {borderHelpBottum=1;borderHelpRight=1;}
                                    zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
                                    zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";
                                     
                                     
                                    const htmlZentriert='<center>'
                                    const htmlStart=    "<!DOCTYPE html><html lang=\"de\"><head><title>Vorlage</title><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"+
                                                     "<style> * {  margin: 0;} body {background-color: "+backgroundAll+"; margin: 0 auto;  }"+
                                                     " p {padding-top: 10px; padding-bottom: 10px; text-align: "+htmlcenterHelp2+"}"+
                                                    // " div { margin: 0 auto;  margin-left: auto; margin-right: auto;}"+
                                                     " td { padding:"+abstandZelle+"px; border:0px solid "+htmlFarbTableBorderColor+";  border-right:"+borderHelpRight+"px solid "+htmlFarbTableBorderColor+";border-bottom:"+borderHelpBottum+"px solid "+htmlFarbTableBorderColor+";}"+ 
                                                     " table { width: "+weite+";  margin: 0 "+htmlcenterHelp+"; border:1px solid "+htmlFarbTableBorderColor+"; border-spacing=\""+abstandZelle+"0px\" ; }"+   // margin macht center
                                                     "td:nth-child(1) {width: "+htmlSpalte1Weite+"}"+"td:nth-child(2) {width:"+htmlSpalte1Weite+"}"+
                                                     " </style></head><body> <div>";
                                                      
                                    const 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 height=\""+UeberSchriftHöhe+"\" style=\"color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \">";
                                    const htmlTabUeber3="</tr>";
                                     
                                     
                                    const buttonScript =  '<script> function setOnDblClickCustom( myvalue ) {	var Self = this; var objID = myvalue;	Self.servConn.getStates(objID, (error, states) => {  console.log(states);  Self.servConn.setState(objID, !states[objID].val); }); } </script>'
                                     
                                     
                                    var htmlTabUeber2="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+htmlFeld4+"&ensp;</td><td  align="+Feld5lAlign+">&ensp;"+htmlFeld5+"&ensp;</td><td  align="+Feld6lAlign+">&ensp;"+htmlFeld6+"&ensp;</td><td  align="+Feld7lAlign+">&ensp;"+htmlFeld7+"&ensp;</td><td  align="+Feld8lAlign+">&ensp;"+htmlFeld8+"&ensp;</td><td  align="+Feld9lAlign+">&ensp;"+htmlFeld9+"&ensp;</td>";
                                    var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+
                                                       "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld4+
                                                       "&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld5+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld6+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld7+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld8+"&ensp;</td><td align="+Feld9lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld9+"&ensp;</td>";
                                                           //------------------------------------------------------
                                    let triggerBySonoffSwitch=false;
                                    var anzahl;
                                    var AkkuAlarm=[];
                                    var htmlOut="";
                                    var mix;
                                    var counter;
                                    var arrTrigger=[];
                                    var val1; var val2; var val0; var val3; var val4; var val5; var val6; var val7; var val8; var val9;
                                    var htmlTabUeber="";
                                    if (mitSchalter) triggerByHMIPPower=true;
                                    
                                    
                                    function writeHTML(){
                                    	anzahl=0;
                                    	htmlOut="";
                                    	counter=-1;
                                    	htmlTabUeber="";
                                    	switch (mehrfachTabelle) {
                                    		case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
                                    		case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                    		case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2+htmlTabUeber2+htmlTabUeber3; break;
                                    		case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                    	}; 
                                    	if (!UeberschriftSpalten) {htmlTabUeber=""}
                                    	if (triggerByHMIPPower) {
                                    		$('hmip.devices.*.channels.1.on').each(function(id, i) {           // trigger für power datenpunkte  !!!
                                    			arrTrigger.push(id) });}
                                    	if (triggerBySonoffSwitch) {      
                                    		$('sonoff.*.*.Switch*').each(function(id, i) {           // trigger für power datenpunkte  !!!
                                    			arrTrigger.push(id) });}
                                    	var myColl=[];
                                    	var val1help;
                                    	var tempArr=[];var humArr=[];var illArr=[];var sw1Arr=[];var sw2Arr=[];var irArr=[];;var powArr=[];var disArr=[];
                                    	$('hmip.*.*.*').each(function(id, i) {   var ida = id.split('.'); if(ida[3].indexOf("_Temperature")>-1) tempArr.push(id);
                                                                                                         if(ida[3].indexOf("_Humidity")>-1)  humArr.push(id); 
                                                                                                         if(ida[3].indexOf("_Illuminance")>-1) illArr.push(id);
                                                                                                         if(ida[3].indexOf("POWER1")>-1) sw1Arr.push(id);
                                                                                                         if(ida[3].indexOf("POWER2")>-1) sw2Arr.push(id);
                                                                                                         if(ida[3].indexOf("_Distance")>-1) disArr.push(id);
                                                                                                         if(ida[3].indexOf("IrReceived_Data")>-1) irArr.push(id);
                                                                                                         if(ida[3].match(/POWER$/)!=null) powArr.push(id);
                                                                                                        
                                         });
                                     
                                      
                                    	 if (tuerkontakt){
                                    		counter=-1;
                                    		for(var i=0;i<mehrfachTabelle;i++ ) {
                                    			val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7=""; val8="";counter++;tabelleBind();
                                    		}
                                    		for(var i=0;i<mehrfachTabelle;i++ ) {
                                    			if(i==0){val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><"+HTMLbrandSetting+">HMIP Fenster/Türkontakt</b>";} else{val0=""; }
                                    				val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                                    				if (mitYesterday) {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Sabotage";} else {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";}
                                    					val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Status";
                                    					 counter++;tabelleBind();
                                    				 } 
                                    		$('hmip.0.devices.*.channels.1.functionalChannelType').each(function(id, i) {           
                                    			if (getState(id).val=="SHUTTER_CONTACT_CHANNEL") {
                                    				anzahl++;
                                    				var ida = id.split('.');
                                    				counter++; 
                                    				val1=getState(id.replace("1.functionalChannelType","0.unreach")).val;                              
                                    				val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name;
                                    				val4=(getState(id.replace("channels.1.functionalChannelType","info.modelType")).val)
                                    				val2=getState(id.replace("channels.1.functionalChannelType","info.firmwareVersion")).val;      
                                    				val3=getState(id.replace("1.functionalChannelType","0.rssiDeviceValue")).val.toString()+""; 
                                    				val7=getState(id.replace("functionalChannelType","windowState")).val; 
                                    				batterie(id);
                                    				val6=translateboolean(getState(id.replace("1.functionalChannelType","0.sabotage")).val);
                                    				firmware(id);
                                    				inaktiv(id);
                                    				tabelleBind();  
                                    			} 
                                    		});    
                                    	} //ende tuerkontakt
                                    
                                    
                                    	if (steckdose){
                                    		tabelleAusbessern()
                                    		counter=-1;
                                    		for(var i=0;i<mehrfachTabelle;i++ ) {
                                    			val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7=""; val8="";counter++;tabelleBind();
                                    		}
                                    		for(var i=0;i<mehrfachTabelle;i++ ) {
                                    			if(i==0){val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><"+HTMLbrandSetting+">HMIP Steckdose</b>";} else{val0=""; }
                                    				val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                                    				if (mitYesterday) {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Verstärker";} else {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";}
                                    					val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power";
                                    					 counter++;tabelleBind();
                                    				 } 
                                    		$('hmip.0.devices.*.channels.1.functionalChannelType').each(function(id, i) {           
                                    			if (getState(id).val=="SWITCH_CHANNEL") {
                                    				anzahl++;
                                    				var ida = id.split('.');
                                    				counter++;
                                    				val1=getState(id.replace("1.functionalChannelType","0.unreach")).val;                              
                                    				val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name;
                                    				val4=(getState(id.replace("channels.1.functionalChannelType","info.modelType")).val)
                                    				val2=getState(id.replace("channels.1.functionalChannelType","info.firmwareVersion")).val;      
                                    				val3=getState(id.replace("1.functionalChannelType","0.rssiDeviceValue")).val.toString()+""; 
                                    				// val7 definition
                                    				ichWillSchalten(id);
                                    				val6=translateboolean(getState(id.replace("1.functionalChannelType","0.routerModuleEnabled")).val);
                                    				val5="";
                                    				firmware(id);
                                    				inaktiv(id);
                                    				tabelleBind();
                                    			}
                                    		});    
                                    	 } //end steckdose
                                    
                                    
                                    
                                    	if (wandthermostat){
                                    		tabelleAusbessern()
                                    		counter=-1;
                                    		for(var i=0;i<mehrfachTabelle;i++ ) {
                                    			val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";val8="";counter++;tabelleBind();
                                    		}
                                    		for(var i=0;i<mehrfachTabelle;i++ ) {
                                    			if(i==0){val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><"+HTMLbrandSetting+">HMIP Wandthermostat</b>";} else{val0=""; }
                                    			val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                                    			if (mitYesterday) {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Ist Humidity";} else {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";}
                                    			val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Ist Temp";
                                    			//val8="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";
                                    			counter++;tabelleBind();
                                    		} 
                                    		$('hmip.0.devices.*.channels.1.functionalChannelType').each(function(id, i) {
                                    			if (getState(id).val =="WALL_MOUNTED_THERMOSTAT_PRO_CHANNEL") {
                                    				anzahl++;
                                    				var ida = id.split('.');
                                    				counter++;
                                    				val1=getState(id.replace("1.functionalChannelType","0.unreach")).val;                              
                                    				val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name;
                                    				val4=(getState(id.replace("channels.1.functionalChannelType","info.modelType")).val)
                                    				val2=getState(id.replace("channels.1.functionalChannelType","info.firmwareVersion")).val;      
                                    				val3=getState(id.replace("1.functionalChannelType","0.rssiDeviceValue")).val.toString()+""; 
                                    				val7=getState(id.replace("functionalChannelType","actualTemperature")).val +" °C"; 
                                    				val6=getState(id.replace("functionalChannelType","humidity")).val +" %"; 
                                    				batterie(id);
                                    				firmware(id);
                                    				inaktiv(id);
                                    				tabelleBind(); 
                                    			} 
                                    		});    
                                    	} //ende wandthermostat
                                    
                                    	if (heizkoerperthermostat){
                                    		tabelleAusbessern()
                                    		counter=-1;
                                    		for(var i=0;i<mehrfachTabelle;i++ ) {
                                    			val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";val8="";counter++;tabelleBind();
                                    		}
                                    		for(var i=0;i<mehrfachTabelle;i++ ) {
                                    			if(i==0){val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><"+HTMLbrandSetting+">HMIP Heizkörperthermostat</b>";} else{val0=""; }
                                    			val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                                    			if (mitYesterday) {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Soll Temp";} else {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";}
                                    			val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Ist Temp";
                                    			//val8="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";
                                    			counter++;tabelleBind();
                                    		} 
                                    		$('hmip.0.devices.*.channels.1.functionalChannelType').each(function(id, i) {
                                    			if (getState(id).val =="HEATING_THERMOSTAT_CHANNEL") {
                                    				anzahl++;
                                    				var ida = id.split('.');
                                    				counter++;
                                    				val1=getState(id.replace("1.functionalChannelType","0.unreach")).val;                              
                                    				val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name;
                                    				val4=(getState(id.replace("channels.1.functionalChannelType","info.modelType")).val)
                                    				val2=getState(id.replace("channels.1.functionalChannelType","info.firmwareVersion")).val;      
                                    				val3=getState(id.replace("1.functionalChannelType","0.rssiDeviceValue")).val.toString()+""; 
                                    				val7=getState(id.replace("functionalChannelType","valveActualTemperature")).val +" °C"; 
                                    				val6=getState(id.replace("functionalChannelType","setPointTemperature")).val +" °C"; 
                                    				batterie(id);
                                    				firmware(id);
                                    				inaktiv(id);
                                    				tabelleBind(); 
                                    			} 
                                    		});    
                                    	} //ende heizkörperthermostat
                                    
                                    
                                    	if (rolladen){
                                    		tabelleAusbessern()
                                    		counter=-1;
                                    		for(var i=0;i<mehrfachTabelle;i++ ) {
                                    			val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";val8="";counter++;tabelleBind();
                                    		}
                                    		for(var i=0;i<mehrfachTabelle;i++ ) {
                                    			if(i==0){val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><"+HTMLbrandSetting+">HMIP Rolläden</b>";} else{val0=""; }
                                    			val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                                    			if (mitYesterday) {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">fährt";} else {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";}
                                    			val7="<font color=\""+htmlColorDeviceUeberschrift+"\">geschlossen";
                                    			//val8="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";
                                    			counter++;tabelleBind();
                                    		} 
                                    		$('hmip.0.devices.*.channels.1.functionalChannelType').each(function(id, i) {
                                    			if ((getState(id).val =="SHUTTER_CHANNEL") || (getState(id).val =="BLIND_CHANNEL")) {
                                    				anzahl++;
                                    				var ida = id.split('.');
                                    				counter++;
                                    				val1=getState(id.replace("1.functionalChannelType","0.unreach")).val;                              
                                    				val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name;
                                    				val4=(getState(id.replace("channels.1.functionalChannelType","info.modelType")).val)
                                    				val2=getState(id.replace("channels.1.functionalChannelType","info.firmwareVersion")).val;      
                                    				val3=getState(id.replace("1.functionalChannelType","0.rssiDeviceValue")).val.toString()+""; 
                                    				val7=(getState(id.replace("functionalChannelType","shutterLevel")).val *100) +" %"; 
                                    				//ichWillSchalten(id);
                                    				val6=translateboolean(getState(id.replace("functionalChannelType","processing")).val); 
                                    				val5="";
                                    				firmware(id);
                                    				inaktiv(id);
                                    				tabelleBind(); 
                                    			} 
                                    		});    
                                    	} //ende rolladen
                                    
                                    
                                    	if (wassermelder){
                                    		tabelleAusbessern()
                                    		counter=-1;
                                    		for(var i=0;i<mehrfachTabelle;i++ ) {
                                    			val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";val8="";counter++;tabelleBind();
                                    		}
                                    		for(var i=0;i<mehrfachTabelle;i++ ) {
                                    			if(i==0){val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><"+HTMLbrandSetting+">HMIP Wassermelder</b>";} else{val0=""; }
                                    			val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                                    			if (mitYesterday) {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Feucht. Alarm";} else {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";}
                                    			val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Wasser Alarm";
                                    			//val8="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";
                                    			counter++;tabelleBind();
                                    		} 
                                    		$('hmip.0.devices.*.channels.1.functionalChannelType').each(function(id, i) {
                                    			if (getState(id).val =="WATER_SENSOR_CHANNEL") {
                                    				anzahl++;
                                    				var ida = id.split('.');
                                    				counter++;
                                    				val1=getState(id.replace("1.functionalChannelType","0.unreach")).val;                              
                                    				val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name;
                                    				val4=(getState(id.replace("channels.1.functionalChannelType","info.modelType")).val)
                                    				val2=getState(id.replace("channels.1.functionalChannelType","info.firmwareVersion")).val;      
                                    				val3=getState(id.replace("1.functionalChannelType","0.rssiDeviceValue")).val.toString()+""; 
                                    				val7=translateboolean(getState(id.replace("functionalChannelType","waterlevelDetected")).val); 
                                    				val6=translateboolean(getState(id.replace("functionalChannelType","moistureDetected")).val); 
                                    				batterie(id);
                                    				firmware(id);
                                    				inaktiv(id);
                                    				tabelleBind(); 
                                    			} 
                                    		});    
                                    	} //ende wassermelder
                                    
                                    
                                    	if (rauchmelder){
                                    		tabelleAusbessern()
                                    		counter=-1;
                                    		for(var i=0;i<mehrfachTabelle;i++ ) {
                                    			val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";val8="";counter++;tabelleBind();
                                    		}
                                    		for(var i=0;i<mehrfachTabelle;i++ ) {
                                    			if(i==0){val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><"+HTMLbrandSetting+">HMIP Rauchmelder</b>";} else{val0=""; }
                                    			val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                                    			if (mitYesterday) {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";} else {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";}
                                    			val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Rauch Alarm";
                                    			//val8="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";
                                    			counter++;tabelleBind();
                                    		} 
                                    		$('hmip.0.devices.*.channels.1.functionalChannelType').each(function(id, i) {
                                    			if (getState(id).val =="SMOKE_DETECTOR_CHANNEL") {
                                    				anzahl++;
                                    				var ida = id.split('.');
                                    				counter++;
                                    				val1=getState(id.replace("1.functionalChannelType","0.unreach")).val;                              
                                    				val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name;
                                    				val4=(getState(id.replace("channels.1.functionalChannelType","info.modelType")).val)
                                    				val2=getState(id.replace("channels.1.functionalChannelType","info.firmwareVersion")).val;      
                                    				val3=getState(id.replace("1.functionalChannelType","0.rssiDeviceValue")).val.toString()+""; 
                                    				val7=getState(id.replace("functionalChannelType","smokeDetectorAlarmType")).val; 
                                    				val6=""; 
                                    				batterie(id);
                                    				firmware(id);
                                    				inaktiv(id);
                                    				tabelleBind(); 
                                    			} 
                                    		});    
                                    	} //ende rauchmelder
                                    
                                    	if (taster){
                                    		tabelleAusbessern()
                                    		counter=-1;
                                    		for(var i=0;i<mehrfachTabelle;i++ ) {
                                    			val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";val8="";counter++;tabelleBind();
                                    		}
                                    		for(var i=0;i<mehrfachTabelle;i++ ) {
                                    			if(i==0){val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><"+HTMLbrandSetting+">HMIP Taster</b>";} else{val0=""; }
                                    			val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                                    			if (mitYesterday) {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";} else {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";}
                                    			val7="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                                    			//val8="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";
                                    			counter++;tabelleBind();
                                    		} 
                                    		$('hmip.0.devices.*.channels.1.functionalChannelType').each(function(id, i) {
                                    			if (getState(id).val =="SINGLE_KEY_CHANNEL") {
                                    				anzahl++;
                                    				var ida = id.split('.');
                                    				counter++;
                                    				val1=getState(id.replace("1.functionalChannelType","0.unreach")).val;                              
                                    				val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name;
                                    				val4=(getState(id.replace("channels.1.functionalChannelType","info.modelType")).val)
                                    				val2=getState(id.replace("channels.1.functionalChannelType","info.firmwareVersion")).val;      
                                    				val3=getState(id.replace("1.functionalChannelType","0.rssiDeviceValue")).val.toString()+""; 
                                    				val7=""; 
                                    				val6=""; 
                                    				batterie(id);
                                    				firmware(id);
                                    				inaktiv(id);
                                    				tabelleBind(); 
                                    			} 
                                    		});    
                                    	} //ende taster
                                    	//-------------------------------------------------------------------------------------------------------------------------------------------------
                                    	//--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                                    	//-------------------------------------------------------------------------------------------------------------------------------------------------
                                    	tabelleFinish(); 
                                    	setState(dpAnzahl,anzahl); 
                                    }
                                     
                                     
                                    //MAIN:
                                     
                                    schedule(mySchedule,  function () {
                                    	writeHTML();
                                    	if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                                    }); 
                                     
                                    writeHTML();
                                     
                                    function tabelleBind(){
                                    	switch (mehrfachTabelle) {  
                                             case 1:  if(counter%2==0){  htmlOut=htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td><td align="+Feld9lAlign+">&ensp;"+val8+"&ensp;</td></tr>"; break;} else 
                                                                      {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td><td align="+Feld9lAlign+">&ensp;"+val8+"&ensp;</td></tr>"; break;}
                                     
                                            case 2:  if(counter%4==0) {
                                                      if(counter%2==0)            {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                                  else {htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td></tr>";} break;
                                                           }else{  
                                                      if(counter%2==0)            {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                                  else {htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td></tr>";} break;}
                                     
                                            case 3: if(counter%2==0 ) {
                                                       if(counter%3==0)           {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                                  else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>";} 
                                                                                   else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";}
                                                                             } break; }else{
                                                       if(counter%3==0)                {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                                  else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td>";} 
                                                                                   else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";}
                                                                             } break;      }
                                             case 4: if(counter%8==0)  {
                                                       if(counter%4==0)               {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                                      else {if(counter%4==1 )  { htmlOut = htmlOut+"<td  align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+" style=\border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td>";} 
                                                                                   else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\>&ensp;"+val7+"&ensp;</td></tr>";} 
                                                                                                     else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td>&ensp;"+val1+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>";}}
                                                                             } break;  }else{
                                                       if(counter%4==0)               {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                                      else {if(counter%4==1 )  { htmlOut = htmlOut+"<td  align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td>";} 
                                                                                   else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td></tr>";} 
                                                                                                     else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td>&ensp;"+val1+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>";}}
                                                                             } break;       }
                                     
                                         } //switch ende
                                    };
                                     
                                    function tabelleAusbessern() { 
                                          switch (mehrfachTabelle) {  
                                           case 1:    break;
                                           case 2:    
                                                     if(counter%2==0)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');  
                                                     break;
                                           case 3:   if(counter%3==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                                                     if(counter%3==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');         
                                                     if(counter%3==0)  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 style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                                                     break;
                                           case 4:   if(counter%4==3)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                                                     if(counter%4==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');  
                                                     if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");    
                                                     if(counter%4==0)  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 style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&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: if(counter%2==0) { 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;
                                            case 3:	if(counter%3==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                                                    if(counter%3==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');         
                                                    if(counter%3==0)  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  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                                    				break;
                                           case 4:  if(counter%4==3)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                                                    if(counter%4==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');  
                                                    if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");    
                                                    if(counter%4==0)  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 style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>"); 
                                                    break; 
                                    	}
                                    	var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss")+"&ensp;&ensp;Anzahl: "+anzahl+"</p>"; 
                                    	var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss")+"&ensp;&ensp;Anzahl: "+anzahl+"</div>"
                                        if (!htmlSignature) htmlUnter="";
                                        var htmlOutVIS="";
                                        if (htmlUberschrift){
                                    			zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+ buttonScript : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" + "bla bla"+htmlUnter + buttonScript;
                                            } else {
                                    			zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+ buttonScript :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>" + "blabla"+htmlUnter+ buttonScript ;
                                    		}
                                    	if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
                                    	var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>"
                                    	if (!htmlSignature) htmlUnter="";
                                    	var htmlEnd="</table>"+htmlUnter+"</div></body>";
                                    	htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+buttonScript+htmlEnd+buttonScript : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+buttonScript+htmlEnd+buttonScript;
                                    };
                                     
                                    on({id: arrTrigger, ack: false, change: "any"}, function (obj) { 
                                    	writeHTML();
                                        if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                                    });
                                     
                                    function ichWillSchalten(id) {
                                    	let val7_1; val7_1=getState(id.replace("functionalChannelType","on")).val;
                                    	val7_1 ? val7=(" <font color=\""+farbeSchalterON+"\"> ")+"ON" : val7=(" <font color=\""+farbeSchalterOFF+"\"> ")+"OFF";
                                    	if (mitSchalter){
                                    		let valButton=id.replace("functionalChannelType","on")
                                    		val7_1 ? val7="<button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:left\" value=\"toggle\" onclick=\"setOnDblClickCustom\(\'"+valButton+"\')\">"+symbolSwitch + "</button> <font color=\""+farbeSchalterON+"\"> "+"ON&ensp;" :
                                               val7="<button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:left\" value=\"toggle\" onclick=\"setOnDblClickCustom\(\'"+valButton+"\')\">"+symbolSwitch+"</button> <font color=\""+farbeSchalterOFF+"\"> "+"OFF";
                                               } else {val7_1 ? val7=(" <font color=\""+farbeSchalterON+"\"> ")+"ON" : val7=(" <font color=\""+farbeSchalterOFF+"\"> ")+"OFF";}
                                    }
                                    function inaktiv(id) {
                                    	if (getState(id.replace("1.functionalChannelType","0.unreach")).val) {   //farbeNichtConnected
                                    		val1=symbolKO;
                                                  val4=("<font color=\""+farbeNichtConnected+"\"><"+styleNichtErreichbar+">&ensp;&ensp; ")+val4;
                                                  val2=("<font color=\""+farbeNichtConnected+"\"><"+styleNichtErreichbar+">")+val2;
                                                  val3=("<font color=\""+farbeNichtConnected+"\"><"+styleNichtErreichbar+">")+" 0 %";
                                                  val5=("<font color=\""+farbeNichtConnected+"\">")+" --- ";
                                                  val6=("<font color=\""+farbeNichtConnected+"\">")+" --- ";
                                                  val7=("<font color=\""+farbeNichtConnected+"\">")+" --- ";
                                                  val0=("<font color=\""+farbeNichtConnected+"\"><"+styleNichtErreichbar+">")+val0} 
                                              else{
                                                  val1=symbolOK;
                                                 }
                                    };
                                    function batterie(id){
                                    	val5_1=getState(id.replace("1.functionalChannelType","0.lowBat")).val;
                                    	if (val5_1 == false) {
                                    			val5=battok;
                                    	} else {
                                    			val5=battnok;
                                    	}
                                    	
                                    };
                                    
                                    function firmware(id) {
                                    	val8_1=getState(id.replace("channels.1.functionalChannelType","info.updateState")).val;
                                    	if (val8_1 == "UP_TO_DATE") {
                                    		val8=battok;
                                    	} else {
                                    	val8=battnok + " <font style\=\"font\-size\ : 8px\;\"><br>" + val8_1 + "</font>";
                                    	}
                                    };
                                    
                                    function translateboolean(strinput){
                                    	if (strinput) {
                                    		return "Ja";
                                    	} else {
                                    		return "Nein";
                                    	}
                                    };
                                     
                                    

                                    lg
                                    Klaus

                                    liv-in-skyL 1 Antwort Letzte Antwort
                                    0
                                    • K klaus88

                                      @liv-in-sky : Ist doch schneller gegangen als geglaubt ! Anbei mein Versuch einer HMIP Tabelle - wobei 90% davon von dir stammt und ich nur kleine Änderungen gemacht habe. Aber Achtung ich habe keine CCU3 nur den HMIP AccessPoint!

                                      /* -----------------------------------
                                      homematicip_uebersicht.js
                                      Veröffentlichungsdatum: 29.11.2020
                                      Quelle: sonoff-geräte-als-html-tabelle von liv-in-sky
                                      https://forum.iobroker.net/topic/28953/sonoff-ger%C3%A4te-als-html-tabelle-vis-iqontrol/374
                                      
                                      Danksagung: An liv-in-sky für die Programmierung der Tabelle!
                                      
                                      Config:
                                      Die Datenpunkte werden automatisch erzeugt - man kann sie nach eigenen Wünschen 
                                      benennen bzw. zuordnen unter Name[x] bzw. alle folgenden Arrays.
                                      
                                      WICHTIG!:
                                      HMIP reagiert nicht so schnell wie z.B. SonOff.
                                      Hier dauert eine Änderung sehr lange bis sie sich im iobroker niederschlägt 
                                      z.B. der Wechsel der Anzeige einer schaltbare Steckdose auf ON bzw. Wechsel auf OFF.
                                      Auch die Anzeige ob ein Device noch online ist, funktioniert fast nicht, aber dies 
                                      ist ähnlich wie am App.
                                      
                                      Änderungen:
                                      
                                      ------------------------------------*/
                                      
                                      // States anlegen, falls sie nicht vorhanden sind
                                      // HMIPTabelle
                                      var Beschreibung = new Array();
                                      var Name = new Array();
                                      var Art = new Array();
                                      var Def = new Array();
                                      Beschreibung[0]="0_userdata.0.HMIP.HMIP_HTML_Tabelle";
                                      Name[0]="HMIP HTML Tabelle"
                                      Art[0]="string";
                                      Def[0]="";
                                      Beschreibung[1]="0_userdata.0.HMIP.AnzahlHMIP";
                                      Name[1]="Anzahl HMIP"
                                      Art[1]="number";
                                      Def[1]=0;
                                      for (var x=0; x < Beschreibung.length; x++) { 
                                      	if (!existsState(Beschreibung[x])) {
                                      		createState(Beschreibung[x], {type: Art[x], name: Name[x], read: true, write: true, def: Def[x]});
                                      	}
                                      }
                                      
                                      //@liv-in-sky Januar 2020 Ver 12.2.02-19:22
                                       
                                      //HIER WIRD PFAD UND FILENAME DEFINIERT
                                      const path = "/htmlsonoff.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="0_userdata.0.HMIP.HMIP_HTML_Tabelle"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                                      let dpAnzahl="0_userdata.0.HMIP.AnzahlHMIP";  //WICHTIG datenpunkt erstellen vom typ "number" - bei 0 kein alarm und größer 0 die anzahl der schlechten batterien
                                      let htmlColorDeviceUeberschrift="#e5e944"            //  Farbe der Geräte Marken 
                                      let HTMLbrandSetting="b"                              // style der geräte marken:  möglich b fett; i kursiv; span normal
                                      let triggerBySonoffPower=false;
                                       
                                       
                                      // ------------------------    hier einstellen, was man für ein device  hat - die nicht gebraucht werden auf false setzen !!!
                                      
                                      var tuerkontakt=true;
                                      var wandthermostat=true;
                                      var heizkoerperthermostat=true;
                                      var steckdose=true;
                                      var wassermelder=true;
                                      var rauchmelder=true;
                                      var rolladen=true;
                                      var taster=true;
                                      
                                      
                                      const mitSchalter=true;           // für freigabe von schaltern für POWER
                                      const mitYesterday=true;          // Für anzeige der yestersay werte bei energie-aufzeichnenden geräten (poe, blitzwolf, teckin, ..)
                                      const mitLink=true;               // link zum sonoff-web-interface
                                      const farbeNichtConnected="lightblue";
                                      const styleNichtErreichbar="i";             // möglich i=schräg, b ist fett und span ist normal - nur eines  davon !!!
                                      const farbeSchalterON="#e5e944"               // farbe des schalters für ON #e5e944, lightblue
                                      const farbeSchalterOFF="grey"               // farbe des schalters für OFF
                                       
                                       
                                      var symbolOK="⚪";  // auch möglich: ="✅ ⚪ "}      
                                      var symbolKO="⭕";     //z.b. auch "<font color=\"red\"><b>X</b>" für ein rotes kreuz ❌"  ⚪  ⚫ ⭕  🔴 🔵 ⏱ 💀 👍 👎 📑 💲 👀
                                      var symbolWARN="⚠️";    // ="⚠️"
                                      var symbolSwitch="🔄"
                                      var symbolLink="🌎";
                                      var battok="✅";
                                      var battnok="<font color=\"red\"><b>X</b>";
                                       
                                       
                                       
                                      let mySchedule=" * * * * * "; 
                                       
                                      //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 5
                                      var htmlFeld1='Device';       var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                                      var htmlFeld2='Status';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                                      var htmlFeld3='Firmware';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                                      var htmlFeld4='WLAN';        var Feld4lAlign="right";                    // überschrift Tabellen Spalte4 und  Ausrichtung left,right or center
                                      var htmlFeld5='Model';        var Feld5lAlign="left";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                                      var htmlFeld6='Batterie';        var Feld6lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                                      var htmlFeld7='';        var Feld7lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                                      var htmlFeld8='';        var Feld8lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                                      var htmlFeld9='Firmware';        	var Feld9lAlign="center";  
                                      //-----------------------------------
                                       
                                       
                                       
                                      //hier werden die styles für die tabelle definiert
                                      //ÜBERSCHRIFT ÜBER TABELLE
                                      let   htmlUberschrift=true;                           // mit Überschrift über der tabelle
                                      let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
                                      const htmlFeldUeber='HMIP Geräte Übersicht';              // Überschrift und Signature
                                      const htmlFarbUber="white";                         // Farbe der Überschrift
                                      const htmlSchriftWeite="bold";                       // bold, normal - Fettschrift für Überschrift
                                      const htmlÜberFontGroesse="14px";                       // schriftgröße überschrift
                                      
                                      //MEHRERE TABELLEN NEBENEINANDER
                                      let   mehrfachTabelle=1;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                                      const trennungsLinie="2";                             //extra trennungslinie bei mehrfachtabellen - evtl auf 0 stellen, wnn htmlRahmenLinien auf none sind
                                      const farbetrennungsLinie="white";
                                      const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                                      const htmlFarbTableColorUber="white";               // Überschrift in der tabelle - der einzelnen Spalten lightblue
                                      
                                      //ÜBERSCHRIFT SPALTEN
                                      const UeberSchriftHöhe="35";                          //Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe
                                      const LinieUnterUeberschrift="2";                   // Linie nur unter Spaltenüberschrift - 
                                      const farbeLinieUnterUeberschrift="white";          //lightblue
                                      const groesseUeberschrift=16;
                                      const UeberschriftStyle="bold"                     // möglich "bold", normal
                                      
                                      //GANZE TABELLE
                                      let abstandZelle="1";
                                      //let farbeUngeradeZeilen="#000000";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
                                      //let farbeGeradeZeilen="#151515";                        //Farbe für gerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
                                      let farbeUngeradeZeilen="#424242";                     //Farbe für ungerade Zeilenanzahl - Hintergrund der Spaltenüberschrift bleibt bei htmlFarbTableColorGradient1/2
                                      let farbeGeradeZeilen="#383838";  
                                      let weite="95%";                                     //Weite der Tabelle auto
                                      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="Trebuchet MS";
                                      const htmlSchriftgroesse="16px";
                                      
                                      //FELDER UND RAHMEN
                                      let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
                                      const htmlFarbFelderschrift="#ffffff";                  // SchriftFarbe der Felder
                                      const htmlFarbFelderschrift2="#BDBDBD";                 // 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="grey";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
                                      let htmlRahmenLinien="cols";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
                                      const htmlSpalte1Weite="auto";                   //  Weite der ersten beiden  Spalten oder z.b. 115px
                                       
                                      // HIER NICHTS  ÄNDERN
                                       
                                      let borderHelpBottum;
                                      let borderHelpRight;
                                      let htmlcenterHelp;
                                      let htmlcenterHelp2;
                                       
                                      if(htmlRahmenLinien=="rows") {borderHelpBottum=1;borderHelpRight=0;}
                                      if(htmlRahmenLinien=="cols") {borderHelpBottum=0;borderHelpRight=1;}
                                      if(htmlRahmenLinien=="none") {borderHelpBottum=0;borderHelpRight=0;}
                                      if(htmlRahmenLinien=="all")  {borderHelpBottum=1;borderHelpRight=1;}
                                      zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
                                      zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";
                                       
                                       
                                      const htmlZentriert='<center>'
                                      const htmlStart=    "<!DOCTYPE html><html lang=\"de\"><head><title>Vorlage</title><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"+
                                                       "<style> * {  margin: 0;} body {background-color: "+backgroundAll+"; margin: 0 auto;  }"+
                                                       " p {padding-top: 10px; padding-bottom: 10px; text-align: "+htmlcenterHelp2+"}"+
                                                      // " div { margin: 0 auto;  margin-left: auto; margin-right: auto;}"+
                                                       " td { padding:"+abstandZelle+"px; border:0px solid "+htmlFarbTableBorderColor+";  border-right:"+borderHelpRight+"px solid "+htmlFarbTableBorderColor+";border-bottom:"+borderHelpBottum+"px solid "+htmlFarbTableBorderColor+";}"+ 
                                                       " table { width: "+weite+";  margin: 0 "+htmlcenterHelp+"; border:1px solid "+htmlFarbTableBorderColor+"; border-spacing=\""+abstandZelle+"0px\" ; }"+   // margin macht center
                                                       "td:nth-child(1) {width: "+htmlSpalte1Weite+"}"+"td:nth-child(2) {width:"+htmlSpalte1Weite+"}"+
                                                       " </style></head><body> <div>";
                                                        
                                      const 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 height=\""+UeberSchriftHöhe+"\" style=\"color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \">";
                                      const htmlTabUeber3="</tr>";
                                       
                                       
                                      const buttonScript =  '<script> function setOnDblClickCustom( myvalue ) {	var Self = this; var objID = myvalue;	Self.servConn.getStates(objID, (error, states) => {  console.log(states);  Self.servConn.setState(objID, !states[objID].val); }); } </script>'
                                       
                                       
                                      var htmlTabUeber2="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+htmlFeld4+"&ensp;</td><td  align="+Feld5lAlign+">&ensp;"+htmlFeld5+"&ensp;</td><td  align="+Feld6lAlign+">&ensp;"+htmlFeld6+"&ensp;</td><td  align="+Feld7lAlign+">&ensp;"+htmlFeld7+"&ensp;</td><td  align="+Feld8lAlign+">&ensp;"+htmlFeld8+"&ensp;</td><td  align="+Feld9lAlign+">&ensp;"+htmlFeld9+"&ensp;</td>";
                                      var htmlTabUeber2_1="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+
                                                         "&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld3+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld4+
                                                         "&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld5+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld6+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld7+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld8+"&ensp;</td><td align="+Feld9lAlign+" style=\"color:"+htmlFarbZweiteTabelle+"\">&ensp;"+htmlFeld9+"&ensp;</td>";
                                                             //------------------------------------------------------
                                      let triggerBySonoffSwitch=false;
                                      var anzahl;
                                      var AkkuAlarm=[];
                                      var htmlOut="";
                                      var mix;
                                      var counter;
                                      var arrTrigger=[];
                                      var val1; var val2; var val0; var val3; var val4; var val5; var val6; var val7; var val8; var val9;
                                      var htmlTabUeber="";
                                      if (mitSchalter) triggerByHMIPPower=true;
                                      
                                      
                                      function writeHTML(){
                                      	anzahl=0;
                                      	htmlOut="";
                                      	counter=-1;
                                      	htmlTabUeber="";
                                      	switch (mehrfachTabelle) {
                                      		case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
                                      		case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                      		case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2+htmlTabUeber2+htmlTabUeber3; break;
                                      		case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                      	}; 
                                      	if (!UeberschriftSpalten) {htmlTabUeber=""}
                                      	if (triggerByHMIPPower) {
                                      		$('hmip.devices.*.channels.1.on').each(function(id, i) {           // trigger für power datenpunkte  !!!
                                      			arrTrigger.push(id) });}
                                      	if (triggerBySonoffSwitch) {      
                                      		$('sonoff.*.*.Switch*').each(function(id, i) {           // trigger für power datenpunkte  !!!
                                      			arrTrigger.push(id) });}
                                      	var myColl=[];
                                      	var val1help;
                                      	var tempArr=[];var humArr=[];var illArr=[];var sw1Arr=[];var sw2Arr=[];var irArr=[];;var powArr=[];var disArr=[];
                                      	$('hmip.*.*.*').each(function(id, i) {   var ida = id.split('.'); if(ida[3].indexOf("_Temperature")>-1) tempArr.push(id);
                                                                                                           if(ida[3].indexOf("_Humidity")>-1)  humArr.push(id); 
                                                                                                           if(ida[3].indexOf("_Illuminance")>-1) illArr.push(id);
                                                                                                           if(ida[3].indexOf("POWER1")>-1) sw1Arr.push(id);
                                                                                                           if(ida[3].indexOf("POWER2")>-1) sw2Arr.push(id);
                                                                                                           if(ida[3].indexOf("_Distance")>-1) disArr.push(id);
                                                                                                           if(ida[3].indexOf("IrReceived_Data")>-1) irArr.push(id);
                                                                                                           if(ida[3].match(/POWER$/)!=null) powArr.push(id);
                                                                                                          
                                           });
                                       
                                        
                                      	 if (tuerkontakt){
                                      		counter=-1;
                                      		for(var i=0;i<mehrfachTabelle;i++ ) {
                                      			val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7=""; val8="";counter++;tabelleBind();
                                      		}
                                      		for(var i=0;i<mehrfachTabelle;i++ ) {
                                      			if(i==0){val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><"+HTMLbrandSetting+">HMIP Fenster/Türkontakt</b>";} else{val0=""; }
                                      				val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                                      				if (mitYesterday) {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Sabotage";} else {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";}
                                      					val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Status";
                                      					 counter++;tabelleBind();
                                      				 } 
                                      		$('hmip.0.devices.*.channels.1.functionalChannelType').each(function(id, i) {           
                                      			if (getState(id).val=="SHUTTER_CONTACT_CHANNEL") {
                                      				anzahl++;
                                      				var ida = id.split('.');
                                      				counter++; 
                                      				val1=getState(id.replace("1.functionalChannelType","0.unreach")).val;                              
                                      				val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name;
                                      				val4=(getState(id.replace("channels.1.functionalChannelType","info.modelType")).val)
                                      				val2=getState(id.replace("channels.1.functionalChannelType","info.firmwareVersion")).val;      
                                      				val3=getState(id.replace("1.functionalChannelType","0.rssiDeviceValue")).val.toString()+""; 
                                      				val7=getState(id.replace("functionalChannelType","windowState")).val; 
                                      				batterie(id);
                                      				val6=translateboolean(getState(id.replace("1.functionalChannelType","0.sabotage")).val);
                                      				firmware(id);
                                      				inaktiv(id);
                                      				tabelleBind();  
                                      			} 
                                      		});    
                                      	} //ende tuerkontakt
                                      
                                      
                                      	if (steckdose){
                                      		tabelleAusbessern()
                                      		counter=-1;
                                      		for(var i=0;i<mehrfachTabelle;i++ ) {
                                      			val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7=""; val8="";counter++;tabelleBind();
                                      		}
                                      		for(var i=0;i<mehrfachTabelle;i++ ) {
                                      			if(i==0){val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><"+HTMLbrandSetting+">HMIP Steckdose</b>";} else{val0=""; }
                                      				val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                                      				if (mitYesterday) {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Verstärker";} else {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";}
                                      					val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Power";
                                      					 counter++;tabelleBind();
                                      				 } 
                                      		$('hmip.0.devices.*.channels.1.functionalChannelType').each(function(id, i) {           
                                      			if (getState(id).val=="SWITCH_CHANNEL") {
                                      				anzahl++;
                                      				var ida = id.split('.');
                                      				counter++;
                                      				val1=getState(id.replace("1.functionalChannelType","0.unreach")).val;                              
                                      				val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name;
                                      				val4=(getState(id.replace("channels.1.functionalChannelType","info.modelType")).val)
                                      				val2=getState(id.replace("channels.1.functionalChannelType","info.firmwareVersion")).val;      
                                      				val3=getState(id.replace("1.functionalChannelType","0.rssiDeviceValue")).val.toString()+""; 
                                      				// val7 definition
                                      				ichWillSchalten(id);
                                      				val6=translateboolean(getState(id.replace("1.functionalChannelType","0.routerModuleEnabled")).val);
                                      				val5="";
                                      				firmware(id);
                                      				inaktiv(id);
                                      				tabelleBind();
                                      			}
                                      		});    
                                      	 } //end steckdose
                                      
                                      
                                      
                                      	if (wandthermostat){
                                      		tabelleAusbessern()
                                      		counter=-1;
                                      		for(var i=0;i<mehrfachTabelle;i++ ) {
                                      			val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";val8="";counter++;tabelleBind();
                                      		}
                                      		for(var i=0;i<mehrfachTabelle;i++ ) {
                                      			if(i==0){val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><"+HTMLbrandSetting+">HMIP Wandthermostat</b>";} else{val0=""; }
                                      			val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                                      			if (mitYesterday) {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Ist Humidity";} else {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";}
                                      			val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Ist Temp";
                                      			//val8="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";
                                      			counter++;tabelleBind();
                                      		} 
                                      		$('hmip.0.devices.*.channels.1.functionalChannelType').each(function(id, i) {
                                      			if (getState(id).val =="WALL_MOUNTED_THERMOSTAT_PRO_CHANNEL") {
                                      				anzahl++;
                                      				var ida = id.split('.');
                                      				counter++;
                                      				val1=getState(id.replace("1.functionalChannelType","0.unreach")).val;                              
                                      				val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name;
                                      				val4=(getState(id.replace("channels.1.functionalChannelType","info.modelType")).val)
                                      				val2=getState(id.replace("channels.1.functionalChannelType","info.firmwareVersion")).val;      
                                      				val3=getState(id.replace("1.functionalChannelType","0.rssiDeviceValue")).val.toString()+""; 
                                      				val7=getState(id.replace("functionalChannelType","actualTemperature")).val +" °C"; 
                                      				val6=getState(id.replace("functionalChannelType","humidity")).val +" %"; 
                                      				batterie(id);
                                      				firmware(id);
                                      				inaktiv(id);
                                      				tabelleBind(); 
                                      			} 
                                      		});    
                                      	} //ende wandthermostat
                                      
                                      	if (heizkoerperthermostat){
                                      		tabelleAusbessern()
                                      		counter=-1;
                                      		for(var i=0;i<mehrfachTabelle;i++ ) {
                                      			val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";val8="";counter++;tabelleBind();
                                      		}
                                      		for(var i=0;i<mehrfachTabelle;i++ ) {
                                      			if(i==0){val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><"+HTMLbrandSetting+">HMIP Heizkörperthermostat</b>";} else{val0=""; }
                                      			val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                                      			if (mitYesterday) {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Soll Temp";} else {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";}
                                      			val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Ist Temp";
                                      			//val8="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";
                                      			counter++;tabelleBind();
                                      		} 
                                      		$('hmip.0.devices.*.channels.1.functionalChannelType').each(function(id, i) {
                                      			if (getState(id).val =="HEATING_THERMOSTAT_CHANNEL") {
                                      				anzahl++;
                                      				var ida = id.split('.');
                                      				counter++;
                                      				val1=getState(id.replace("1.functionalChannelType","0.unreach")).val;                              
                                      				val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name;
                                      				val4=(getState(id.replace("channels.1.functionalChannelType","info.modelType")).val)
                                      				val2=getState(id.replace("channels.1.functionalChannelType","info.firmwareVersion")).val;      
                                      				val3=getState(id.replace("1.functionalChannelType","0.rssiDeviceValue")).val.toString()+""; 
                                      				val7=getState(id.replace("functionalChannelType","valveActualTemperature")).val +" °C"; 
                                      				val6=getState(id.replace("functionalChannelType","setPointTemperature")).val +" °C"; 
                                      				batterie(id);
                                      				firmware(id);
                                      				inaktiv(id);
                                      				tabelleBind(); 
                                      			} 
                                      		});    
                                      	} //ende heizkörperthermostat
                                      
                                      
                                      	if (rolladen){
                                      		tabelleAusbessern()
                                      		counter=-1;
                                      		for(var i=0;i<mehrfachTabelle;i++ ) {
                                      			val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";val8="";counter++;tabelleBind();
                                      		}
                                      		for(var i=0;i<mehrfachTabelle;i++ ) {
                                      			if(i==0){val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><"+HTMLbrandSetting+">HMIP Rolläden</b>";} else{val0=""; }
                                      			val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                                      			if (mitYesterday) {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">fährt";} else {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";}
                                      			val7="<font color=\""+htmlColorDeviceUeberschrift+"\">geschlossen";
                                      			//val8="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";
                                      			counter++;tabelleBind();
                                      		} 
                                      		$('hmip.0.devices.*.channels.1.functionalChannelType').each(function(id, i) {
                                      			if ((getState(id).val =="SHUTTER_CHANNEL") || (getState(id).val =="BLIND_CHANNEL")) {
                                      				anzahl++;
                                      				var ida = id.split('.');
                                      				counter++;
                                      				val1=getState(id.replace("1.functionalChannelType","0.unreach")).val;                              
                                      				val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name;
                                      				val4=(getState(id.replace("channels.1.functionalChannelType","info.modelType")).val)
                                      				val2=getState(id.replace("channels.1.functionalChannelType","info.firmwareVersion")).val;      
                                      				val3=getState(id.replace("1.functionalChannelType","0.rssiDeviceValue")).val.toString()+""; 
                                      				val7=(getState(id.replace("functionalChannelType","shutterLevel")).val *100) +" %"; 
                                      				//ichWillSchalten(id);
                                      				val6=translateboolean(getState(id.replace("functionalChannelType","processing")).val); 
                                      				val5="";
                                      				firmware(id);
                                      				inaktiv(id);
                                      				tabelleBind(); 
                                      			} 
                                      		});    
                                      	} //ende rolladen
                                      
                                      
                                      	if (wassermelder){
                                      		tabelleAusbessern()
                                      		counter=-1;
                                      		for(var i=0;i<mehrfachTabelle;i++ ) {
                                      			val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";val8="";counter++;tabelleBind();
                                      		}
                                      		for(var i=0;i<mehrfachTabelle;i++ ) {
                                      			if(i==0){val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><"+HTMLbrandSetting+">HMIP Wassermelder</b>";} else{val0=""; }
                                      			val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                                      			if (mitYesterday) {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">Feucht. Alarm";} else {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";}
                                      			val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Wasser Alarm";
                                      			//val8="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";
                                      			counter++;tabelleBind();
                                      		} 
                                      		$('hmip.0.devices.*.channels.1.functionalChannelType').each(function(id, i) {
                                      			if (getState(id).val =="WATER_SENSOR_CHANNEL") {
                                      				anzahl++;
                                      				var ida = id.split('.');
                                      				counter++;
                                      				val1=getState(id.replace("1.functionalChannelType","0.unreach")).val;                              
                                      				val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name;
                                      				val4=(getState(id.replace("channels.1.functionalChannelType","info.modelType")).val)
                                      				val2=getState(id.replace("channels.1.functionalChannelType","info.firmwareVersion")).val;      
                                      				val3=getState(id.replace("1.functionalChannelType","0.rssiDeviceValue")).val.toString()+""; 
                                      				val7=translateboolean(getState(id.replace("functionalChannelType","waterlevelDetected")).val); 
                                      				val6=translateboolean(getState(id.replace("functionalChannelType","moistureDetected")).val); 
                                      				batterie(id);
                                      				firmware(id);
                                      				inaktiv(id);
                                      				tabelleBind(); 
                                      			} 
                                      		});    
                                      	} //ende wassermelder
                                      
                                      
                                      	if (rauchmelder){
                                      		tabelleAusbessern()
                                      		counter=-1;
                                      		for(var i=0;i<mehrfachTabelle;i++ ) {
                                      			val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";val8="";counter++;tabelleBind();
                                      		}
                                      		for(var i=0;i<mehrfachTabelle;i++ ) {
                                      			if(i==0){val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><"+HTMLbrandSetting+">HMIP Rauchmelder</b>";} else{val0=""; }
                                      			val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                                      			if (mitYesterday) {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";} else {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";}
                                      			val7="<font color=\""+htmlColorDeviceUeberschrift+"\">Rauch Alarm";
                                      			//val8="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";
                                      			counter++;tabelleBind();
                                      		} 
                                      		$('hmip.0.devices.*.channels.1.functionalChannelType').each(function(id, i) {
                                      			if (getState(id).val =="SMOKE_DETECTOR_CHANNEL") {
                                      				anzahl++;
                                      				var ida = id.split('.');
                                      				counter++;
                                      				val1=getState(id.replace("1.functionalChannelType","0.unreach")).val;                              
                                      				val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name;
                                      				val4=(getState(id.replace("channels.1.functionalChannelType","info.modelType")).val)
                                      				val2=getState(id.replace("channels.1.functionalChannelType","info.firmwareVersion")).val;      
                                      				val3=getState(id.replace("1.functionalChannelType","0.rssiDeviceValue")).val.toString()+""; 
                                      				val7=getState(id.replace("functionalChannelType","smokeDetectorAlarmType")).val; 
                                      				val6=""; 
                                      				batterie(id);
                                      				firmware(id);
                                      				inaktiv(id);
                                      				tabelleBind(); 
                                      			} 
                                      		});    
                                      	} //ende rauchmelder
                                      
                                      	if (taster){
                                      		tabelleAusbessern()
                                      		counter=-1;
                                      		for(var i=0;i<mehrfachTabelle;i++ ) {
                                      			val0=""; val1=""; val2="";val3="";val4="";val5="";val6="";val7="";val8="";counter++;tabelleBind();
                                      		}
                                      		for(var i=0;i<mehrfachTabelle;i++ ) {
                                      			if(i==0){val0="<font color=\""+htmlColorDeviceUeberschrift+"\"><"+HTMLbrandSetting+">HMIP Taster</b>";} else{val0=""; }
                                      			val1=""; val2="";val3="";val4="";val5="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                                      			if (mitYesterday) {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">";} else {val6="<font color=\""+htmlColorDeviceUeberschrift+"\">kWh Heute";}
                                      			val7="<font color=\""+htmlColorDeviceUeberschrift+"\">";
                                      			//val8="<font color=\""+htmlColorDeviceUeberschrift+"\">Uptime";
                                      			counter++;tabelleBind();
                                      		} 
                                      		$('hmip.0.devices.*.channels.1.functionalChannelType').each(function(id, i) {
                                      			if (getState(id).val =="SINGLE_KEY_CHANNEL") {
                                      				anzahl++;
                                      				var ida = id.split('.');
                                      				counter++;
                                      				val1=getState(id.replace("1.functionalChannelType","0.unreach")).val;                              
                                      				val0=getObject(ida[0]+"."+ida[1]+"."+ida[2]+"."+ida[3]).common.name;
                                      				val4=(getState(id.replace("channels.1.functionalChannelType","info.modelType")).val)
                                      				val2=getState(id.replace("channels.1.functionalChannelType","info.firmwareVersion")).val;      
                                      				val3=getState(id.replace("1.functionalChannelType","0.rssiDeviceValue")).val.toString()+""; 
                                      				val7=""; 
                                      				val6=""; 
                                      				batterie(id);
                                      				firmware(id);
                                      				inaktiv(id);
                                      				tabelleBind(); 
                                      			} 
                                      		});    
                                      	} //ende taster
                                      	//-------------------------------------------------------------------------------------------------------------------------------------------------
                                      	//--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                                      	//-------------------------------------------------------------------------------------------------------------------------------------------------
                                      	tabelleFinish(); 
                                      	setState(dpAnzahl,anzahl); 
                                      }
                                       
                                       
                                      //MAIN:
                                       
                                      schedule(mySchedule,  function () {
                                      	writeHTML();
                                      	if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                                      }); 
                                       
                                      writeHTML();
                                       
                                      function tabelleBind(){
                                      	switch (mehrfachTabelle) {  
                                               case 1:  if(counter%2==0){  htmlOut=htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td><td align="+Feld9lAlign+">&ensp;"+val8+"&ensp;</td></tr>"; break;} else 
                                                                        {  htmlOut=htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td><td align="+Feld9lAlign+">&ensp;"+val8+"&ensp;</td></tr>"; break;}
                                       
                                              case 2:  if(counter%4==0) {
                                                        if(counter%2==0)            {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                                    else {htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td></tr>";} break;
                                                             }else{  
                                                        if(counter%2==0)            {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                                    else {htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td></tr>";} break;}
                                       
                                              case 3: if(counter%2==0 ) {
                                                         if(counter%3==0)           {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                                    else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>";} 
                                                                                     else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";}
                                                                               } break; }else{
                                                         if(counter%3==0)                {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                                    else { if(counter%3==1 )  { htmlOut = htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td>";} 
                                                                                     else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td></tr>";}
                                                                               } break;      }
                                               case 4: if(counter%8==0)  {
                                                         if(counter%4==0)               {htmlOut = htmlOut+"<tr bgcolor=\""+farbeGeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                                        else {if(counter%4==1 )  { htmlOut = htmlOut+"<td  align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+" style=\border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td>";} 
                                                                                     else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\>&ensp;"+val7+"&ensp;</td></tr>";} 
                                                                                                       else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td>&ensp;"+val1+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>";}}
                                                                               } break;  }else{
                                                         if(counter%4==0)               {htmlOut = htmlOut+"<tr bgcolor=\""+farbeUngeradeZeilen+"\"><td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\"align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>"; } 
                                                                        else {if(counter%4==1 )  { htmlOut = htmlOut+"<td  align="+Feld1lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td  align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+" style=\"border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td>";} 
                                                                                     else    {if(counter%4==3)  { htmlOut= htmlOut+"<td align="+Feld1lAlign+"  style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val0+"&ensp;</td><td  align="+Feld2lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val2+"&ensp;</td><td  align="+Feld4lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+" style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td></tr>";} 
                                                                                                       else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td>&ensp;"+val1+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td>";}}
                                                                               } break;       }
                                       
                                           } //switch ende
                                      };
                                       
                                      function tabelleAusbessern() { 
                                            switch (mehrfachTabelle) {  
                                             case 1:    break;
                                             case 2:    
                                                       if(counter%2==0)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');  
                                                       break;
                                             case 3:   if(counter%3==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                                                       if(counter%3==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');         
                                                       if(counter%3==0)  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 style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                                                       break;
                                             case 4:   if(counter%4==3)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                                                       if(counter%4==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');  
                                                       if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");    
                                                       if(counter%4==0)  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 style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&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: if(counter%2==0) { 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;
                                              case 3:	if(counter%3==2)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                                                      if(counter%3==1)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');         
                                                      if(counter%3==0)  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  style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");
                                      				break;
                                             case 4:  if(counter%4==3)  htmlOut = htmlOut.replace(/<\/td>$/, "</td></tr>");
                                                      if(counter%4==2)  htmlOut = htmlOut.replace(/<\/td>$/, '</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>');  
                                                      if(counter%4==1)  htmlOut = htmlOut.replace(/<\/td>$/, "</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>");    
                                                      if(counter%4==0)  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 style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"\">&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td><td>&ensp;</td></tr>"); 
                                                      break; 
                                      	}
                                      	var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss")+"&ensp;&ensp;Anzahl: "+anzahl+"</p>"; 
                                      	var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss")+"&ensp;&ensp;Anzahl: "+anzahl+"</div>"
                                          if (!htmlSignature) htmlUnter="";
                                          var htmlOutVIS="";
                                          if (htmlUberschrift){
                                      			zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+ buttonScript : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" + "bla bla"+htmlUnter + buttonScript;
                                              } else {
                                      			zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter+ buttonScript :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>" + "blabla"+htmlUnter+ buttonScript ;
                                      		}
                                      	if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
                                      	var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>"
                                      	if (!htmlSignature) htmlUnter="";
                                      	var htmlEnd="</table>"+htmlUnter+"</div></body>";
                                      	htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+buttonScript+htmlEnd+buttonScript : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+buttonScript+htmlEnd+buttonScript;
                                      };
                                       
                                      on({id: arrTrigger, ack: false, change: "any"}, function (obj) { 
                                      	writeHTML();
                                          if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                                      });
                                       
                                      function ichWillSchalten(id) {
                                      	let val7_1; val7_1=getState(id.replace("functionalChannelType","on")).val;
                                      	val7_1 ? val7=(" <font color=\""+farbeSchalterON+"\"> ")+"ON" : val7=(" <font color=\""+farbeSchalterOFF+"\"> ")+"OFF";
                                      	if (mitSchalter){
                                      		let valButton=id.replace("functionalChannelType","on")
                                      		val7_1 ? val7="<button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:left\" value=\"toggle\" onclick=\"setOnDblClickCustom\(\'"+valButton+"\')\">"+symbolSwitch + "</button> <font color=\""+farbeSchalterON+"\"> "+"ON&ensp;" :
                                                 val7="<button style\=\"border:none\; background-color\:transparent\; color\:white\; font\-size\:1em\; text\-align:left\" value=\"toggle\" onclick=\"setOnDblClickCustom\(\'"+valButton+"\')\">"+symbolSwitch+"</button> <font color=\""+farbeSchalterOFF+"\"> "+"OFF";
                                                 } else {val7_1 ? val7=(" <font color=\""+farbeSchalterON+"\"> ")+"ON" : val7=(" <font color=\""+farbeSchalterOFF+"\"> ")+"OFF";}
                                      }
                                      function inaktiv(id) {
                                      	if (getState(id.replace("1.functionalChannelType","0.unreach")).val) {   //farbeNichtConnected
                                      		val1=symbolKO;
                                                    val4=("<font color=\""+farbeNichtConnected+"\"><"+styleNichtErreichbar+">&ensp;&ensp; ")+val4;
                                                    val2=("<font color=\""+farbeNichtConnected+"\"><"+styleNichtErreichbar+">")+val2;
                                                    val3=("<font color=\""+farbeNichtConnected+"\"><"+styleNichtErreichbar+">")+" 0 %";
                                                    val5=("<font color=\""+farbeNichtConnected+"\">")+" --- ";
                                                    val6=("<font color=\""+farbeNichtConnected+"\">")+" --- ";
                                                    val7=("<font color=\""+farbeNichtConnected+"\">")+" --- ";
                                                    val0=("<font color=\""+farbeNichtConnected+"\"><"+styleNichtErreichbar+">")+val0} 
                                                else{
                                                    val1=symbolOK;
                                                   }
                                      };
                                      function batterie(id){
                                      	val5_1=getState(id.replace("1.functionalChannelType","0.lowBat")).val;
                                      	if (val5_1 == false) {
                                      			val5=battok;
                                      	} else {
                                      			val5=battnok;
                                      	}
                                      	
                                      };
                                      
                                      function firmware(id) {
                                      	val8_1=getState(id.replace("channels.1.functionalChannelType","info.updateState")).val;
                                      	if (val8_1 == "UP_TO_DATE") {
                                      		val8=battok;
                                      	} else {
                                      	val8=battnok + " <font style\=\"font\-size\ : 8px\;\"><br>" + val8_1 + "</font>";
                                      	}
                                      };
                                      
                                      function translateboolean(strinput){
                                      	if (strinput) {
                                      		return "Ja";
                                      	} else {
                                      		return "Nein";
                                      	}
                                      };
                                       
                                      

                                      lg
                                      Klaus

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

                                      @klaus88 das war flott - da ich keine homematic habe , wäre ein bild der tabelle nett!

                                      wenn du das anderen zur verfügung stellen möchtest, würde ich dir empfehlen, einen eigenen thread zu öffnen - damit können homematic user das script besser finden und du könntest immer im ersten post neue updates fürs script posten

                                      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

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

                                        @klaus88 das war flott - da ich keine homematic habe , wäre ein bild der tabelle nett!

                                        wenn du das anderen zur verfügung stellen möchtest, würde ich dir empfehlen, einen eigenen thread zu öffnen - damit können homematic user das script besser finden und du könntest immer im ersten post neue updates fürs script posten

                                        K Offline
                                        K Offline
                                        klaus88
                                        schrieb am zuletzt editiert von
                                        #377

                                        @liv-in-sky Passt mach ich!

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

                                          --------------------------------------------------------------------------------------------------------------------

                                          NEUE VERSION DES SCRIPT's HIER: https://forum.iobroker.net/post/601855
                                          --------------------------------------------------------------------------------------------------------------------


                                          hier eine tabelle mit sonoff devices in html zur anzeige in iqontrol, vis oder als webseite - die tabelle kaann verschieden formatiert werden - farben, linien, abstande, schriftart, ...
                                          grundlage für die einstellung der tabellenparameter ist hier : https://forum.iobroker.net/topic/28021/html-table-für-vis-oder-iqontrol-js-und-blockly/96

                                          wichtig - ihr müßt euch einen eigenen datenpunkt als zeichenkette anlegen und diesen dann im script (ganz oben "dpVIS") eingeben
                                          darunter werden dann die einzelnen devices freigeschalten - steht eine deviceart auf true und ist im system nicht enthalten, passiert nix außer das die überschrift in der tabelle erscheint und keine geräte da sind
                                          zusätzlich wird ein datenpunkt für die anzahl benötigt - auch den selbst anlegen und im script (dpAnzahl) einfügen

                                          wie legt man einen datenpunkt an: https://forum.iobroker.net/post/400338

                                          das widget ist ein standard html widget und der von euch angelegte datenpunkt wird als binding angegeben -also einfach den datenpunkt unter HTML reinschreiben und in klammern setzen {}

                                          ein erstes beispiel - es fehlen noch einige sonoffarten - da könnte ich hilfe brauchen, da ich nicht alle arten habe - also falls es da wünsche gibt - einfach melden

                                          Image 3.png

                                          wenn die geräte nicht erreichbar sind:

                                          Image 2.png

                                          aus platz-gründen in einer datei - beim kopieren einen editor verwenden (wegen emojis) - nicht direkt aus browser kopieren sondern datei downloaden und mit editor öffnen und dann in iobroker einfügen !!!
                                          sonoff-8spalten-tabelle-15.1.21.txt

                                          script mit 6 spalten - es fehlen die switch: dieses script mit 6 spalten wird nicht weitergepflegt - daher alte version

                                          sonoff-6spalten-tabelle.txt

                                          Image 7.png

                                          bisher integriert

                                          • pow
                                          • generic
                                          • basic
                                          • th10
                                          • schalter2ch
                                          • schalter3ch
                                          • dual
                                          • schalter1ch
                                          • channel4
                                          • rfbridge
                                          • ZbBridge
                                          • stdoseS2X
                                          • teckin
                                          • sv
                                          • blitzwolf_shp
                                          • sonoffDev
                                          • gosundSP1x
                                          • shelly
                                          • mini
                                          • delock
                                          K Online
                                          K Online
                                          Kuddel
                                          schrieb am zuletzt editiert von
                                          #378

                                          @liv-in-sky welchen Sonoff-Wert verwendest du, um die Singalstärke (WLAN in %) anzuzueigen?

                                          GaspodeG 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

                                          654

                                          Online

                                          32.4k

                                          Benutzer

                                          81.4k

                                          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