Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Unifi Voucher in Vis anzeigen [gelöst]

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Unifi Voucher in Vis anzeigen [gelöst]

    This topic has been deleted. Only users with topic management privileges can see it.
    • liv-in-sky
      liv-in-sky @SoerenKaiser99 last edited by liv-in-sky

      @SoerenKaiser99

      du kannst mal ein log einfügen und nachsehen, ob er bei einem bestimmten eintrag stehen bleibt oder gleich beim ersten einen fehler macht

      Image 3.png

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

        @liv-in-sky
        ich hab die DP mal von zeichenkette auf gemischt gestellt, dann fällt das Log kürzer aus (noch ohne Log(id):

        javascript.0	2020-11-09 14:32:07.873	error	(9155) at Script.runInContext (vm.js:130:18)
        javascript.0	2020-11-09 14:32:07.873	error	(9155) at script.js.Javaskripte.Unifi_Voucher:340:3
        javascript.0	2020-11-09 14:32:07.873	error	(9155) at script.js.Javaskripte.Unifi_Voucher:229:2
        javascript.0	2020-11-09 14:32:07.873	error	(9155) at writeHTML (script.js.Javaskripte.Unifi_Voucher:143:38)
        javascript.0	2020-11-09 14:32:07.873	error	(9155) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:795:29)
        javascript.0	2020-11-09 14:32:07.873	error	(9155) at script.js.Javaskripte.Unifi_Voucher:148:44
        javascript.0	2020-11-09 14:32:07.872	error	(9155) script.js.Javaskripte.Unifi_Voucher: TypeError: Cannot read property 'slice' of null
        javascript.0	2020-11-09 14:32:07.871	info	(9155) script.js.Javaskripte.Unifi_Voucher: registered 0 subscriptions and 1 schedule
        javascript.0	2020-11-09 14:32:07.850	info	(9155) Start javascript script.js.Javaskripte.Unifi_Voucher
        javascript.0	2020-11-09 14:32:06.768	info	(9155) Stop script script.js.Javaskripte.Unifi_Voucher
        

        Beide Datenpunkte sind mit einer 0 befüllt.

        Hier mit dem Eintrag log(id):

        javascript.0	2020-11-09 14:33:35.394	error	(9155) at Script.runInContext (vm.js:130:18)
        javascript.0	2020-11-09 14:33:35.394	error	(9155) at script.js.Javaskripte.Unifi_Voucher:341:3
        javascript.0	2020-11-09 14:33:35.394	error	(9155) at script.js.Javaskripte.Unifi_Voucher:230:2
        javascript.0	2020-11-09 14:33:35.394	error	(9155) at writeHTML (script.js.Javaskripte.Unifi_Voucher:143:38)
        javascript.0	2020-11-09 14:33:35.394	error	(9155) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:795:29)
        javascript.0	2020-11-09 14:33:35.394	error	(9155) at script.js.Javaskripte.Unifi_Voucher:149:44
        javascript.0	2020-11-09 14:33:35.393	error	(9155) script.js.Javaskripte.Unifi_Voucher: TypeError: Cannot read property 'slice' of null
        javascript.0	2020-11-09 14:33:35.392	info	(9155) script.js.Javaskripte.Unifi_Voucher: registered 0 subscriptions and 1 schedule
        javascript.0	2020-11-09 14:33:35.392	info	(9155) script.js.Javaskripte.Unifi_Voucher: unifi.0.default.vouchers.voucher_.code
        javascript.0	2020-11-09 14:33:35.378	info	(9155) Start javascript script.js.Javaskripte.Unifi_Voucher
        javascript.0	2020-11-09 14:33:33.083	info	(9155) Stop script script.js.Javaskripte.Unifi_Voucher
        
        liv-in-sky 1 Reply Last reply Reply Quote 0
        • liv-in-sky
          liv-in-sky @SoerenKaiser99 last edited by

          @SoerenKaiser99

          warum 0 - das macht ja für den code keinen sinn - lösch mal die vouchers mit einer 0 im code

          so sieht das bzw muss das voucher verzeichnis ausehen:

          Image 9.png

          alle datenpunkte werden benötigt, ansonsten muss ich auf exists prüfen

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

            @liv-in-sky
            ich glaub du hast mich falsch verstanden. ich hab die DP Voucher und Voucher_Tabelle mit einer 0 befüllt. Hatte schon oft probleme wenn die leer waren bei der ersten Ausführung

            //HIER WIRD PFAD UND FILENAME DEFINIERT
            const path = "/htmlexample.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.Vis.WLAN_Voucher_Tabelle"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
            let dpLatestVoucher="0_userdata.0.Vis.WLAN_Voucher"
            let mySchedule=" 27 * * * * ";                       //
            

            Die Vouchers von unifi sehen aktuell so aus:
            1.JPG

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

              @SoerenKaiser99

              ja das habe ich

              lust auf anydesk oder teamviewer -. wäre mir lieber - geht meist schneller

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

                @SoerenKaiser99

                da fehlt was bei der id

                Image 10.png

                bei mir:

                unifi.0.default.vouchers.voucher_0358680882.code
                

                Image 11.png

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

                  @liv-in-sky
                  der unifi DP ist bei mir gleich:
                  unifi.0.default.vouchers.voucher_0339394363.code
                  in deinem Skript:
                  $('unifi.0.default.vouchers.*.code').each(function(id, i) { // hier eigene schleife definieren
                  Wenn ich einen neuen voucher generieren lasse, mekert er zwar noch immer an slice of 0 rum aber zusätzlich an Temp Farben

                  javascript.0	2020-11-09 14:57:02.641	error	(9155) at Script.runInContext (vm.js:130:18)
                  javascript.0	2020-11-09 14:57:02.641	error	(9155) at script.js.Javaskripte.Unifi_Voucher:341:3
                  javascript.0	2020-11-09 14:57:02.641	error	(9155) at script.js.Javaskripte.Unifi_Voucher:230:2
                  javascript.0	2020-11-09 14:57:02.641	error	(9155) at writeHTML (script.js.Javaskripte.Unifi_Voucher:143:38)
                  javascript.0	2020-11-09 14:57:02.641	error	(9155) at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:795:29)
                  javascript.0	2020-11-09 14:57:02.640	error	(9155) at script.js.Javaskripte.Unifi_Voucher:149:44
                  javascript.0	2020-11-09 14:57:02.640	error	(9155) script.js.Javaskripte.Unifi_Voucher: TypeError: Cannot read property 'slice' of null
                  javascript.0	2020-11-09 14:57:02.639	info	(9155) script.js.Javaskripte.Unifi_Voucher: registered 0 subscriptions and 1 schedule
                  javascript.0	2020-11-09 14:57:02.638	info	(9155) script.js.Javaskripte.Unifi_Voucher: unifi.0.default.vouchers.voucher_.code
                  javascript.0	2020-11-09 14:57:02.616	info	(9155) Start javascript script.js.Javaskripte.Unifi_Voucher
                  javascript.0	2020-11-09 14:42:52.724	error	(9155) script.js.Javaskripte.Vis.Vis_Temp_Farben: setForeignState: undefined is not a valid state value
                  javascript.0	2020-11-09 14:42:52.723	error	(9155) script.js.Javaskripte.Vis.Vis_Temp_Farben: setForeignState: undefined is not a valid state value
                  javascript.0	2020-11-09 14:42:10.418	error	(9155) script.js.Javaskripte.Vis.Vis_Temp_Farben: setForeignState: undefined is not a valid state value
                  javascript.0	2020-11-09 14:42:10.416	error	(9155) script.js.Javaskripte.Vis.Vis_Temp_Farben: setForeignState: undefined is not a valid state value
                  javascript.0	2020-11-09 14:41:28.535	error	(9155) script.js.Javaskripte.Vis.Vis_Temp_Farben: setForeignState: undefined is not a valid state value
                  javascript.0	2020-11-09 14:41:28.535	error	(9155) script.js.Javaskripte.Vis.Vis_Temp_Farben: setForeignState: undefined is not a valid state value
                  javascript.0	2020-11-09 14:40:46.197	error	(9155) script.js.Javaskripte.Vis.Vis_Temp_Farben: setForeignState: undefined is not a valid state value
                  javascript.0	2020-11-09 14:40:46.197	error	(9155) script.js.Javaskripte.Vis.Vis_Temp_Farben: setForeignState: undefined is not a valid state value
                  javascript.0	2020-11-09 14:40:04.310	error	(9155) script.js.Javaskripte.Vis.Vis_Temp_Farben: setForeignState: undefined is not a valid state value
                  javascript.0	2020-11-09 14:40:04.310	error	(9155) script.js.Javaskripte.Vis.Vis_Temp_Farben: setForeignState: undefined is not a valid state value
                  javascript.0	2020-11-09 14:39:21.235	error	(9155) script.js.Javaskripte.Vis.Vis_Temp_Farben: setForeignState: undefined is not a valid state value
                  javascript.0	2020-11-09 14:39:21.235	error	(9155) script.js.Javaskripte.Vis.Vis_Temp_Farben: setForeignState: undefined is not a valid state value
                  javascript.0	2020-11-09 14:38:39.175	error	(9155) script.js.Javaskripte.Vis.Vis_Temp_Farben: setForeignState: undefined is not a valid state value
                  javascript.0	2020-11-09 14:38:39.175	error	(9155) script.js.Javaskripte.Vis.Vis_Temp_Farben: setForeignState: undefined is not a valid state value
                  javascript.0	2020-11-09 14:37:56.898	error	(9155) script.js.Javaskripte.Vis.Vis_Temp_Farben: setForeignState: undefined is not a valid state value
                  javascript.0	2020-11-09 14:37:56.897	error	(9155) script.js.Javaskripte.Vis.Vis_Temp_Farben: setForeignState: undefined is not a valid state value
                  javascript.0	2020-11-09 14:37:14.844	error	(9155) script.js.Javaskripte.Vis.Vis_Temp_Farben: setForeignState: undefined is not a valid state value
                  javascript.0	2020-11-09 14:37:14.843	error	(9155) script.js.Javaskripte.Vis.Vis_Temp_Farben: setForeignState: undefined is not a valid state value
                  javascript.0	2020-11-09 14:36:32.607	error	(9155) script.js.Javaskripte.Vis.Vis_Temp_Farben: setForeignState: undefined is not a valid state value
                  javascript.0	2020-11-09 14:36:32.607	error	(9155) script.js.Javaskripte.Vis.Vis_Temp_Farben: setForeignState: undefined is not a valid state value
                  javascript.0	2020-11-09 14:36:04.660	info	(9155) Stop script script.js.Javaskripte.Unifi_Voucher
                  
                  liv-in-sky 2 Replies Last reply Reply Quote 0
                  • liv-in-sky
                    liv-in-sky @SoerenKaiser99 last edited by

                    @SoerenKaiser99

                    das ist ein anderes script ??? verstehe nix

                    anydesk ?

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

                      falsch gepostet

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

                        @SoerenKaiser99 definitiv javascript instanz neustarten - nicht das da was altes hängt

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

                          @liv-in-sky
                          gelöst 😄

                          1 Reply Last reply Reply Quote 0
                          • S
                            save last edited by

                            @liv-in-sky Gibt es hier bereits News? Habe in Der Tabelle gelöschte Vouchers, welche weder in den Objekten noch im Unifi vorhanden sind, bzw. gelöscht worden sind. Wie kann ich dies im Skript löschen damit diese nicht mehr in der Tabelle aufgelistet werden?

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

                              @save wenn sie nicht in den objecten sind - aber im script noch sichtbar, sollte es ein cache problem sein - javascript -istanz neustarten sollte da helfen

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

                                @liv-in-sky Super Vielen Dank. Habe dies zwar einmal versucht, aber wahrscheinlich mit der Schedule Zeit nicht gerechnet.

                                Habe dein Script soweit erweitert, dass es über Schedule und ein Button (Creat Vouchers) getriggert wird. So wird es direkt beim anfordern eines neuen Vouchers neu getriggert.

                                on({id: 'unifi.0.default.vouchers.create_vouchers', change: "ne"}, async function (obj) {
                                  var value = obj.state.val;
                                  var oldValue = obj.oldState.val;
                                  if ((obj.state ? obj.state.val : "")) {
                                    timeout = setTimeout(async function () {
                                        RunCreateVouchers();
                                        console.log('test');
                                    }, 5000);
                                  }
                                });
                                
                                schedule(mySchedule,  RunCreateVouchers);
                                
                                function RunCreateVouchers() {
                                writeHTML();
                                if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                                }; 
                                
                                1 Reply Last reply Reply Quote 0
                                • A
                                  Anrie @liv-in-sky last edited by

                                  @liv-in-sky Hallöchen, wäre es hier möglich die gesammelten Daten in einelne Datenpunkte zu speichern? Ich würde mir gerne eine eigene Tabelle zusammen bauen wollen.

                                  Liebe Güße aus Leipzig
                                  André

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

                                    @anrie

                                    die sind unter dem unifi adapter

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

                                      @liv-in-sky Ich möchte gerne die Codes die im Adaper angezeigt werden in einer Tabele bei VIS darstellen, ähnlich wie in deinem Skript. Allerdings mache ich alles mit Blockly und weis nicht wie ich die Datenpunkte auslesen kann wenn diese nach erstellung als neue Ordner geschrieben werden. Ich hoffe ich habe es verständlich rüber gebracht.

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

                                        @anrie

                                        was wäre denn anders in deiner tabelle ? mit blockly habe ich sowas noch nicht gemacht

                                        1 Reply Last reply Reply Quote 0
                                        • S
                                          Silence1599 last edited by

                                          Hi,

                                          @liv-in-sky Mega, vielen Dank für dieses Script. Die Tabelle funktioniert bei mir einwandfrei. Ob nun bereits genutzte Voucher aus der Liste verschwinden wird sich mit der Zeit zeigen. Aber eine andere Frage: Gibt es die Möglichkeit dass unter dem 'dpLatestVoucher' der letzte Voucher angezeigt wird, welcher noch nicht benutzt wurde ?

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

                                            @silence1599

                                            steht eigentlich ganz unten in der tabelle - habe schon lange nix mehr damit gemacht - bitte überprüfe auch, ob das stimmt, was in den dp steht

                                            teste bitte mal: vorher aber 2 neue dp vom typ string anlegen

                                            Image 2.png

                                             //@liv-in-sky 2020  13.012022.-08:42
                                            
                                            
                                            //HIER WIRD PFAD UND FILENAME DEFINIERT
                                            const path = "/htmlexample.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.Tabellen.Unifi-Voucher"         //WICHTIG wenn braucheEinVISWidget auf true gesetzt !!  dp zusätzlich für VIS-HTML-Basic-Widget
                                            let dpLatestVoucher="0_userdata.0.Tabellen.Unifi-Latest"
                                            let dpLatestVoucherUsed="0_userdata.0.Tabellen.Unifi-Latest-Used"
                                            let dpFirstVoucherUnused="0_userdata.0.Tabellen.Unifi-First-Unused"
                                            let mySchedule=" 5 * * * * ";                       //
                                            //---------------------------------------
                                            
                                            //HIER DIE SPALTEN ANZAHL DEFINIEREN - jede Spalte einen Wert - in diesem Beispiel sind es 5
                                            var htmlFeld1='CODE';       var Feld1lAlign="left";                     // überschrift Tabellen Spalte1 und  Ausrichtung left,right or center
                                            var htmlFeld2='Erstellt';        var Feld2lAlign="center";                      // überschrift Tabellen Spalte2 und  Ausrichtung left,right or center
                                            var htmlFeld3='Dauer';         var Feld3lAlign="center";                    // überschrift Tabellen Spalte3 und  Ausrichtung left,right or center
                                            var htmlFeld4='QOS';        var Feld4lAlign="center";                    // überschrift Tabellen Spalte4 und  Ausrichtung left,right or center
                                            var htmlFeld5='Quota';        var Feld5lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                                            var htmlFeld6='Notiz';        var Feld6lAlign="left";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                                            var htmlFeld7='Used';        var Feld7lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                                            var htmlFeld8='UpLoad';        var Feld8lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                                            var htmlFeld9='DownLoad';        var Feld9lAlign="center";                    // überschrift Tabellen Spalte5 und  Ausrichtung left,right or center
                                            
                                            
                                            //-----------------------------------
                                            
                                            
                                            
                                            //hier werden die styles für die tabelle definiert
                                            //ÜBERSCHRIFT ÜBER TABELLE
                                            let   htmlUberschrift=false;                           // mit Überschrift über der tabelle
                                            let   htmlSignature=false;                              // anstatt der Überscghrift eine signature: - kleiner - anliegend
                                            const htmlFeldUeber='Unifi Vouchers';              // Überschrift und Signature
                                            const htmlFarbUber="white";                         // Farbe der Überschrift
                                            const htmlSchriftWeite="normal";                       // bold, normal - Fettschrift für Überschrift
                                            const htmlÜberFontGroesse="18px";                       // schriftgröße überschrift
                                            //MEHRERE TABELLEN NEBENEINANDER
                                            let   mehrfachTabelle=1;                              // bis zu 4 Tabellen werden nebeneinander geschrieben-  verkürzt das Ganze, dafür etwas breiter - MÖGLICH 1,2,3,oder 4 !!!
                                            const trennungsLinie="2";                             //extra trennungslinie bei mehrfachtabellen - evtl auf 0 stellen, wnn htmlRahmenLinien auf none sind
                                            const farbetrennungsLinie="#88B7DF";
                                            const htmlFarbZweiteTabelle="white";                // Farbe der Überschrift bei jeder 2.ten Tabelle
                                            const htmlFarbTableColorUber="#88B7DF";               // Überschrift in der tabelle - der einzelnen Spalten
                                            //ÜBERSCHRIFT SPALTEN
                                            const UeberSchriftHoehe="35";                          //Überschrift bekommt mehr Raum - darunter und darüber - Zellenhöhe
                                            const LinieUnterUeberschrift="2";                   // Linie nur unter Spaltenüberschrift - 
                                            const farbeLinieUnterUeberschrift="#88B7DF";
                                            const groesseUeberschrift=16;
                                            const UeberschriftStyle="normal"                     // möglich "bold"
                                            //GANZE TABELLE
                                            let abstandZelle="4";
                                            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 weite="auto";                                     //Weite der Tabelle
                                            let zentriert=true;                                   //ganze tabelle zentriert
                                            const backgroundAll="#000000";                        //Hintergrund für die ganze Seite - für direkten aufruf oder iqontrol sichtber - keine auswirkung auf vis-widget
                                            const htmlSchriftart="Helvetica";
                                            const htmlSchriftgroesse="14px";
                                            //FELDER UND RAHMEN
                                            let   UeberschriftSpalten=true;                // ein- oder ausblenden der spatlen-überschriften
                                            const htmlFarbFelderschrift="#BDBDBD";                  // SchriftFarbe der Felder
                                            const htmlFarbFelderschrift2="#D8D8D8";                 // SchriftFarbe der Felder für jede 2te Tabelle
                                            const htmlFarbTableColorGradient1="#424242";          //  Gradient - Hintergrund der Tabelle - Verlauffarbe
                                            const htmlFarbTableColorGradient2="#424242";          //  Gradient - Hintergrund der Tabelle - ist dieser Wert gleich Gradient1 gibt es keinen verlauf
                                            const htmlFarbTableBorderColor="grey";             // Farbe des Rahmen - is tdieser gleich den gradienten, sind die rahmen unsichtbar
                                            let htmlRahmenLinien="none";                            // Format für Rahmen: MÖGLICH: "none" oder "all" oder "cols" oder "rows"
                                            const htmlSpalte1Weite="auto";                   //  Weite der ersten beiden  Spalten oder z.b. 115px
                                            
                                            // HIER NICHTS  ÄNDERN
                                            
                                            let borderHelpBottum;
                                            let borderHelpRight;
                                            let htmlcenterHelp;
                                            let htmlcenterHelp2;
                                            
                                            if(htmlRahmenLinien=="rows") {borderHelpBottum=1;borderHelpRight=0;}
                                            if(htmlRahmenLinien=="cols") {borderHelpBottum=0;borderHelpRight=1;}
                                            if(htmlRahmenLinien=="none") {borderHelpBottum=0;borderHelpRight=0;}
                                            if(htmlRahmenLinien=="all")  {borderHelpBottum=1;borderHelpRight=1;}
                                            zentriert ? htmlcenterHelp="auto" : htmlcenterHelp="left";
                                            zentriert ? htmlcenterHelp2="center" : htmlcenterHelp2="left";
                                            
                                            
                                            const htmlZentriert='<center>'
                                            const htmlStart=    "<!DOCTYPE html><html lang=\"de\"><head><title>Vorlage</title><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">"+
                                                               "<style> * {  margin: 0;} body {background-color: "+backgroundAll+"; margin: 0 auto;  }"+
                                                               " p {padding-top: 10px; padding-bottom: 10px; text-align: "+htmlcenterHelp2+"}"+
                                                              // " div { margin: 0 auto;  margin-left: auto; margin-right: auto;}"+
                                                               " td { padding:"+abstandZelle+"px; border:0px solid "+htmlFarbTableBorderColor+";  border-right:"+borderHelpRight+"px solid "+htmlFarbTableBorderColor+";border-bottom:"+borderHelpBottum+"px solid "+htmlFarbTableBorderColor+";}"+ 
                                                               " table { width: "+weite+";  margin: 0 "+htmlcenterHelp+"; border:1px solid "+htmlFarbTableBorderColor+"; border-spacing=\""+abstandZelle+"0px\" ; }"+   // margin macht center
                                                               "td:nth-child(1) {width: "+htmlSpalte1Weite+"}"+"td:nth-child(2) {width:"+htmlSpalte1Weite+"}"+
                                                               " </style></head><body> <div>";
                                            //const htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-weight: bold\">"+htmlFeldUeber+"</p>";                    
                                            const htmlTabStyle= "<table bordercolor=\""+htmlFarbTableBorderColor+"\" border=\"2px\" cellspacing=\""+abstandZelle+"\" cellpadding=\""+abstandZelle+"\" width=\""+weite+"\" rules=\""+htmlRahmenLinien+"\" style=\"color:"+htmlFarbFelderschrift+";  font-size:"+htmlSchriftgroesse+
                                                                  "; font-family:"+htmlSchriftart+";background-image: linear-gradient(42deg,"+htmlFarbTableColorGradient2+","+htmlFarbTableColorGradient1+");\">";
                                            const htmlTabUeber1="<tr height=\""+UeberSchriftHoehe+"\" style=\"color:"+htmlFarbTableColorUber+"; font-size: "+groesseUeberschrift+"px; font-weight: "+UeberschriftStyle+" ;  border-bottom: "+LinieUnterUeberschrift+"px solid "+farbeLinieUnterUeberschrift+" \">";
                                            const htmlTabUeber3="</tr>";
                                            
                                            
                                            //NICHTS ÄNDERN - abhängig von den oben definierten _Spalten - in diesem Beispiel sind es 5
                                            
                                            
                                            var htmlTabUeber2="<td width="+htmlSpalte1Weite+" align="+Feld1lAlign+">&ensp;"+htmlFeld1+"&ensp;</td><td width="+htmlSpalte1Weite+" align="+Feld2lAlign+">&ensp;"+htmlFeld2+"&ensp;</td><td  align="+Feld3lAlign+">&ensp;"+htmlFeld3+"&ensp;</td><td align="+Feld4lAlign+
                                                              ">&ensp;"+htmlFeld4+"&ensp;</td><td  align="+Feld5lAlign+">&ensp;"+htmlFeld5+"&ensp;</td><td  align="+Feld6lAlign+">&ensp;"+htmlFeld6+"&ensp;</td><td  align="+Feld7lAlign+">&ensp;"+htmlFeld7+"&ensp;</td><td  align="+Feld8lAlign+">&ensp;"+htmlFeld8+
                                                              "&ensp;</td><td  align="+Feld9lAlign+">&ensp;"+htmlFeld9+"&ensp;</td>";
                                            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>";
                                                                   //------------------------------------------------------
                                            
                                            
                                            
                                            var htmlOut="";
                                            let helpArr=[];
                                            let triggerArr;
                                            var mix;
                                            var counter;
                                            var val1; var val2; var val0; var val3; var val4; var val5; var val6; var val7;var val8; 
                                            var htmlTabUeber="";
                                            function writeHTML(){
                                            
                                            triggerArr=[];
                                            helpArr=[];
                                            htmlOut="";
                                            
                                            counter=-1;
                                            htmlTabUeber="";
                                            switch (mehrfachTabelle) { 
                                               case 1: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber3;  break;
                                               case 2: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                               case 3: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2+htmlTabUeber2+htmlTabUeber3; break;
                                               case 4: htmlTabUeber=htmlTabUeber1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber2+htmlTabUeber2_1+htmlTabUeber3; break;
                                            }; 
                                            if (!UeberschriftSpalten) {htmlTabUeber=""}  
                                            
                                            //--------------------------------------------------------------------------------------------------------------------------------------------------
                                            //---------hier kommt eure schleife rein counter++, tabelleBind() und tabelleFinish() müssen so integriert bleiben !!!------------------------------
                                            //---------alle valx werte müssen von euch bestimmt werden - val0,val1,val2,val3,val4!!!------------------------------------------------------------
                                            //--------------------------------------------------------------------------------------------------------------------------------------------------
                                            
                                            
                                            $('unifi.0.default.vouchers.*.code').each(function(id, i) {           // hier eigene schleife definieren
                                                // log(id)
                                                    var ida = id.split('.');
                                                  //   triggerArr.push(id)
                                                    //  counter++; 
                                                      let val2help;                                      // SEHR WICHTIG - MUSS IN JEDER SCHLEIFE INTEGRIERT SEIN
                                                      val0=getState(id).val; val0=val0.slice(0,5)+"-"+val0.slice(5)
                                                      val1=getState(id.replace("code","create_time")).val;
                                                      val2help=getState(id.replace("code","duration")).val*60;
                                                      val3=getState(id.replace("code","qos_overwrite")).val;
                                                      val4=getState(id.replace("code","quota")).val;
                                                      getState(id.replace("code","note")).val =="null" || getState(id.replace("code","note")).val ==null ? val5=""  :  val5=getState(id.replace("code","note")).val;
                                                      val6=getState(id.replace("code","used")).val;
                                            
                                            
                                                     val2=Math.floor( ((val2help)/60/60/24) )+"d "+ Math.floor(((val2help)/60/60) % 24) +"h "+ Math.floor( ((val2help)/60) % 60 )+" m" ;
                                            
                                                    //  if (getState(id).val==null) {val4="never used"}; //log(id)}; 
                                                      let val6helper=val6;
                                                      if (val6==0) {val6="✗"} else{val6="✓"}  
                                            
                                                      val7=""; val8=""; 
                                                      if (existsState(id.replace("code","qos_rate_max_down"))) { val7=getState(id.replace("code","qos_rate_max_down")).val + " kbps";} 
                                                      if (existsState(id.replace("code","qos_rate_max_up"))) {  val8=getState(id.replace("code","qos_rate_max_up")).val  + " kbps";}
                                                     // log(getState(id).lc.toString())
                                                      helpArr.push({
                                                                   "code" : val0,
                                                                   "erstellt":val1,
                                                                   "dauer":val2,
                                                                   "qos":val3,
                                                                   "quota":val4,
                                                                   "notiz":val5,
                                                                   "used":val6,
                                                                   "upload":val7,
                                                                   "download":val8,
                                                                   "sorter":getState(id).lc,
                                                                   "val6helper":val6helper
                                            
                                            
                                            
                                                      })
                                            
                                                    
                                            
                                                 //tabelleBind(); //HIER NICHTS ÄNDERN : HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT  - diese function muss als letztes in der eigenen schleife aufgerufen werden
                                                
                                               }); //Schleifen Ende - je nach schleifenart muss hier etwas geändert werden !!!!!!!!!
                                               //  log(helpArr[0].sorter)
                                             //  let helpOct=JSON.parse(helpArr)
                                            
                                                   helpArr.sort(function(a, b){
                                                                           return parseInt(a.sorter) - parseInt(b.sorter);
                                                                           });
                                                    //                       log(JSON.stringify(helpArr))
                                                   let helperUsed=false;  
                                                   let helperV=""                       
                                                   for (let i=0; i<helpArr.length;i++){ if( (helpArr[i].val6helper==0 || helpArr[i].val6helper=="0") && !helperUsed) {
                                                                                                                    helperV=helpArr[i].code;
                                                                                                                    setState(dpFirstVoucherUnused,helperV);
                                                                                                                    helperUsed=true}
                                                                                                                      }
                                            
                                                   helpArr.sort(function(a, b){
                                                                           return parseInt(b.sorter) - parseInt(a.sorter);
                                                                           });
                                                                    //     log(JSON.stringify(helpArr))
                                                helperUsed=false;
                                               for (let i=0; i<helpArr.length;i++){
                                                    if(i==0) {setState(dpLatestVoucher,helpArr[i].code)} 
                                                    if(helpArr[i].val6helper==1 && !helperUsed) {setState(dpLatestVoucherUsed,helpArr[i].code);helperUsed=true }
                                                   counter++;
                                                   val0=helpArr[i].code
                                                   if(helpArr[i].val6helper==1 || helpArr[i].val6helper=="1") {val0="<font color=\""+"white"+"\"> "+helpArr[i].code+"</i></font>"} else{val0=helpArr[i].code} 
                                                   val1=helpArr[i].erstellt
                                                   val2=helpArr[i].dauer
                                                   val3=helpArr[i].qos
                                                   val4=helpArr[i].quota
                                                   val5=helpArr[i].notiz
                                                //   val6=helpArr[i].used
                                                   if(helpArr[i].val6helper==1 || helpArr[i].val6helper=="1") {val6="<font color=\""+"white"+"\"> "+helpArr[i].used+"</i></font>"} else{val6=helpArr[i].used}
                                                   val7=helpArr[i].upload
                                                   val8=helpArr[i].download
                                            
                                            
                                            
                                                   tabelleBind();
                                               }
                                            
                                            
                                            //-------------------------------------------------------------------------------------------------------------------------------------------------
                                            //--------------------------------------------------Ende der schleife------------------------------------------------------------------------------
                                            //-------------------------------------------------------------------------------------------------------------------------------------------------
                                            
                                                  tabelleFinish(); // AB HIER NICHTS ÄNDERN - tabelle fertigstellen
                                            
                                            
                                            } // function ende
                                            
                                            //MAIN:
                                             
                                            schedule(mySchedule,  function () {
                                             writeHTML();
                                             if (braucheEinFile) {writeFile(home, path ,htmlOut, function (error) { /* log('file written');*/  });}
                                            }); 
                                             writeHTML();
                                            
                                               				 function tabelleBind(){
                                                 //HIER WERDEN DIE DATEN DER SCHLEIFE ZUSAMMENGESETZT - hat man oben 5 Felder definiert, braucht man hier 5 Werte
                                               
                                                   switch (mehrfachTabelle) {  
                                                    case 1: 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 align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld9lAlign+">&ensp;"+val8+"&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><td align="+Feld9lAlign+"style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val8+"&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 align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld9lAlign+">&ensp;"+val8+"&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><td align="+Feld9lAlign+"style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val8+"&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 align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld9lAlign+">&ensp;"+val8+"&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=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td><td align="+Feld9lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\">&ensp;"+val8+"&ensp;</td>";} 
                                                                                           else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td><td align="+Feld9lAlign+">&ensp;"+val8+"&ensp;</td></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 align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld9lAlign+">&ensp;"+val8+"&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=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td><td align="+Feld9lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+"; color:"+htmlFarbFelderschrift2+"\">&ensp;"+val8+"&ensp;</td>";} 
                                                                                           else    {htmlOut = htmlOut+"<td align="+Feld1lAlign+" >&ensp;"+val0+"&ensp;</td><td align="+Feld2lAlign+">&ensp;"+val1+"&ensp;</td><td align="+Feld3lAlign+">&ensp;"+val2+"&ensp;</td><td align="+Feld4lAlign+">&ensp;"+val3+"&ensp;</td><td align="+Feld5lAlign+">&ensp;"+val4+"&ensp;</td><td align="+Feld6lAlign+">&ensp;"+val5+"&ensp;</td><td align="+Feld7lAlign+">&ensp;"+val6+"&ensp;</td><td align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td><td align="+Feld9lAlign+">&ensp;"+val8+"&ensp;</td></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 align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld9lAlign+">&ensp;"+val8+"&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=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td><td align="+Feld9lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val8+"&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><td align="+Feld9lAlign+"style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val8+"&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 align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld9lAlign+">&ensp;"+val8+"&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 align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld9lAlign+">&ensp;"+val8+"&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=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val7+"&ensp;</td><td align="+Feld9lAlign+" style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";color:"+htmlFarbFelderschrift2+"\">&ensp;"+val8+"&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><td align="+Feld9lAlign+"style=\"color:"+htmlFarbFelderschrift2+"\">&ensp;"+val8+"&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 align="+Feld8lAlign+">&ensp;"+val7+"&ensp;</td><td style=\" border-right: "+trennungsLinie+"px solid "+farbetrennungsLinie+";\" align="+Feld9lAlign+">&ensp;"+val8+"&ensp;</td>";}}
                                                                                     } break;  }                        
                                            
                                                 } //switch ende
                                            
                                            
                                            
                                            }
                                            
                                            function tabelleFinish() {
                                            
                                                  // tabelle fertigstellen
                                                  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><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>&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><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><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>&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><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>&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><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><td>&ensp;</td></tr>"); 
                                                             break; }
                                                 
                                                                var htmlUeber=    "<p style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: "+htmlÜberFontGroesse+"; font-weight:"+htmlSchriftWeite+ "\">"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</p>"; 
                                                   var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 70%; text-align: right;\" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>"
                                                    
                                                    if (!htmlSignature) htmlUnter="";
                                                      //Ausgabe über VIS html widget - tabelle in datenpunkt schreiben - html tabelle ohne html header und body
                                                       var htmlOutVIS="";
                                                     //  htmlUberschrift ? htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>" : htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>";
                                                        if (htmlUberschrift) 
                                                            { zentriert ? htmlOutVIS=htmlZentriert+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter : htmlOutVIS=htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter ;
                                            
                                                          } else {
                                                           zentriert ?  htmlOutVIS=htmlZentriert+htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter :  htmlOutVIS=htmlTabStyle+htmlTabUeber+htmlOut+"</table>"+htmlUnter;
                                            
                                                             }
                                            
                                            // log("bin raus aus tabelleBind");
                                                       if (braucheEinVISWidget) setState(dpVIS, htmlOutVIS );
                                            
                                             var htmlUnter= "<div  style=\"color:"+htmlFarbUber+"; font-family:"+htmlSchriftart+"; font-size: 80%;  text-align: center; \" >"+htmlFeldUeber+"&ensp;&ensp;Last Update: "+formatDate(getDateObject((parseFloat((new Date().getTime())))), "SS:mm:ss");+"</div>"
                                            
                                             if (!htmlSignature) htmlUnter="";
                                             var htmlEnd="</table>"+htmlUnter+"</div></body>";
                                             //mit oder ohne überschrift - zentriert oder links
                                            htmlUberschrift ? htmlOut=htmlStart+htmlUeber+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd : htmlOut=htmlStart+htmlTabStyle+htmlTabUeber+htmlOut+htmlEnd;
                                             //log(htmlOut);
                                             
                                            
                                            
                                            }
                                            
                                            
                                                
                                            
                                            
                                            
                                            
                                            
                                            
                                            
                                            
                                            
                                            
                                            
                                            

                                            Image 3.png

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            512
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            unifi vis
                                            8
                                            42
                                            3167
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo