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

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

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. async / await -> Muster Anleitung gesucht

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    11
    1
    481

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.6k

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

async / await -> Muster Anleitung gesucht

Geplant Angeheftet Gesperrt Verschoben JavaScript
35 Beiträge 10 Kommentatoren 3.4k Aufrufe 13 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.
  • bahnuhrB bahnuhr

    @hendrick
    Hallo,
    habe dein Script mal probiert mit einer ts Datei, Größe 480 MB
    Und ein paar logs eingebaut.

    const fs = require('fs');
     
     
    log ("start");
    begin();
    
    function begin() {
        mainAsync();
        log ("Punkt 1")
    }
    
    
    async function mainAsync() {
     
        try {
     
            /**
             * Hier kopieren wir die Datei.
             */
     
            log(`Trying to copy file...`);
            const fileSource = "/opt/iobroker/iobroker-data/files/vis.0/James.ts";
            const fileTarget = "/mnt/Jam.ts";
            
            const fileCopied = await copyFileAsync(fileSource, fileTarget);
            if (!fileCopied) {
                // Beim Kopieren trat ein Fehler auf.
                log(`Datei '${fileSource}' konnte nicht nach '${fileTarget}' kopiert werden.`, 'warn');
                log(`Script wird beendet.`, 'warn');
                return false;
            }
            log(`File copied.`);
            await weiter();
    
            /**
             * Datei erfolgreich kopiert, hier geht's weiter
             */
            // HIER GEHT ES WEITER
            // ...
            // Setze z.B. jetzt einen Datenpunkt
            // await setStateAsync('0_userdata.0.test.123.Datei-ist-kopiert', {val:true, ack:false});
     
     
        } catch (error) {
            dumpError(`[mainAsync()]`, error);
            return false;
        }
     
    }
     
    function weiter(){
        log ("Punkt 2")
    }
    
    
    
     
    /**
     * Copy file async - https://stackoverflow.com/a/30405105
     * @param {string} source     /path/to/file
     * @param {string} target     /path/to/file
     * @return {Promise<boolean>} true if successful, false if not
     */
    async function copyFileAsync(source, target) {
     
        const rd = fs.createReadStream(source);
        const wr = fs.createWriteStream(target);
     
        try {
     
            await new Promise( (resolve, reject) => {
                rd.on('error', reject);
                wr.on('error', reject);
                wr.on('finish', resolve);
                rd.pipe(wr);
            });
            return true;
     
        } catch (error) {
            rd.destroy();
            wr.end();
            dumpError(`[copyFileAsync()]`, error);
            return false;
      }
     
    }
     
     
    /**
     * Error Message to Log. Handles error object being provided.
     * @param {string} msg               - (intro) message of the error
     * @param {*}      [error=undefined] - Optional: Error object or string
     */
    function dumpError(msg, error=undefined) {
        if (!error) {
            console.error(msg);
        } else {
            if (typeof error === 'object') {
                if (error.stack) {
                    log(`${msg} – ${error.stack}`, 'error');
                } else if (error.message) {
                    log(`${msg} – ${error.message}`, 'error');
                } else {
                    log(`${msg} – ${JSON.stringify(error)}`, 'error');
                }
            } else if (typeof error === 'string') {
                log(`${msg} – ${error}`, 'error');
            } else {
                log(`[dumpError()] : wrong error argument: ${JSON.stringify(error)}`, 'error');
            }
        }
    }
    
    

    Hiersieht man, dass "file copied" und "Punkt 2" schon nach 4 Sek. kommt.
    9f6519f5-0362-4623-b855-e41382df690a-image.png

    Wenn ich dann aber im win.Explorer nachschaue wird die Datei noch kopiert (MB zählt nach oben).

    Folglich scheint die Kopie doch noch nicht fertig zu sein.
    Oder ich versteht dies falsch und hab irgendwo einen Denkfehler.

    mfg
    Dieter

    H Offline
    H Offline
    Hendrick
    schrieb am zuletzt editiert von
    #19

    @bahnuhr

    Gute Frage.
    Die async/await-Abarbeitung im Script ist sauber.

    Hier nur kleine Anmerkung:
    Du ruft die Funktion "weiter()" per await weiter(); auf, allerdings ist diese Funktion "weiter()" nicht async definiert. Hat so jetzt keine Auswirkung im Script, aber besser machst du statt function weiter() ein async function weiter(), weil du mit await weiter(); implizierst, dass eine async Funktion aufgerufen wird, was ja so nicht der Fall ist.

    Jetzt aber zur Thematik:
    Ich habe das jetzt nicht mit einem großen File getestet. Aber so wie sich der Code in copyFileAsync() liest, wird mittels wr.on('finish', resolve); erst dann ein erfolgreiches Schreiben zurückgemeldet, wenn der Prozess abgeschlossen ist.
    Somit wundert es mich, dass du vorher schon die Rückmeldung bekommst.
    Du könntest das mal überprüfen, in dem du im Script die Dateigröße der Quelle mit der Dateigröße des Ziels vergleichst in deiner Funktion weiter() und diese als Log mal ausgibst. Dann weißt du, ob lt. Script wirklich kopiert wurde.

    Lange Rede, kurzer Sinn: dies hat nichts mit dem Script-Aufbau zu async/await zu tun, sondern könnte bei dir fs.createWriteStream() schon vorzeitig ein finish liefern, obwohl noch gar nicht fertig kopiert wurde.
    Seltsam, aber wäre es wert, näher einzusteigen.

    bahnuhrB 2 Antworten Letzte Antwort
    0
    • H Hendrick

      @bahnuhr

      Gute Frage.
      Die async/await-Abarbeitung im Script ist sauber.

      Hier nur kleine Anmerkung:
      Du ruft die Funktion "weiter()" per await weiter(); auf, allerdings ist diese Funktion "weiter()" nicht async definiert. Hat so jetzt keine Auswirkung im Script, aber besser machst du statt function weiter() ein async function weiter(), weil du mit await weiter(); implizierst, dass eine async Funktion aufgerufen wird, was ja so nicht der Fall ist.

      Jetzt aber zur Thematik:
      Ich habe das jetzt nicht mit einem großen File getestet. Aber so wie sich der Code in copyFileAsync() liest, wird mittels wr.on('finish', resolve); erst dann ein erfolgreiches Schreiben zurückgemeldet, wenn der Prozess abgeschlossen ist.
      Somit wundert es mich, dass du vorher schon die Rückmeldung bekommst.
      Du könntest das mal überprüfen, in dem du im Script die Dateigröße der Quelle mit der Dateigröße des Ziels vergleichst in deiner Funktion weiter() und diese als Log mal ausgibst. Dann weißt du, ob lt. Script wirklich kopiert wurde.

      Lange Rede, kurzer Sinn: dies hat nichts mit dem Script-Aufbau zu async/await zu tun, sondern könnte bei dir fs.createWriteStream() schon vorzeitig ein finish liefern, obwohl noch gar nicht fertig kopiert wurde.
      Seltsam, aber wäre es wert, näher einzusteigen.

      bahnuhrB Offline
      bahnuhrB Offline
      bahnuhr
      Forum Testing Most Active
      schrieb am zuletzt editiert von
      #20

      @hendrick sagte in async / await -> Muster Anleitung gesucht:

      diese als Log mal ausgibst.

      Hast du da mal ein Scriptschnipsel.

      Danke, ich werds dann probieren.

      Fazit:
      Das ganze ist verdammt verwirrend und irreführend für mich.

      Wenn ich mir das Script so anschaue, dann sind das nur für den kopier Befehl ca. 30 Zeilen (ohne sie jetzt genau gezählt zu haben).
      Mein derzeitiges kopier-Script hat 3 Zeilen + timeout Zeilen.


      Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
      Danke.
      gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
      ScreenToGif :https://www.screentogif.com/downloads.html

      H 1 Antwort Letzte Antwort
      0
      • H Hendrick

        @bahnuhr

        Gute Frage.
        Die async/await-Abarbeitung im Script ist sauber.

        Hier nur kleine Anmerkung:
        Du ruft die Funktion "weiter()" per await weiter(); auf, allerdings ist diese Funktion "weiter()" nicht async definiert. Hat so jetzt keine Auswirkung im Script, aber besser machst du statt function weiter() ein async function weiter(), weil du mit await weiter(); implizierst, dass eine async Funktion aufgerufen wird, was ja so nicht der Fall ist.

        Jetzt aber zur Thematik:
        Ich habe das jetzt nicht mit einem großen File getestet. Aber so wie sich der Code in copyFileAsync() liest, wird mittels wr.on('finish', resolve); erst dann ein erfolgreiches Schreiben zurückgemeldet, wenn der Prozess abgeschlossen ist.
        Somit wundert es mich, dass du vorher schon die Rückmeldung bekommst.
        Du könntest das mal überprüfen, in dem du im Script die Dateigröße der Quelle mit der Dateigröße des Ziels vergleichst in deiner Funktion weiter() und diese als Log mal ausgibst. Dann weißt du, ob lt. Script wirklich kopiert wurde.

        Lange Rede, kurzer Sinn: dies hat nichts mit dem Script-Aufbau zu async/await zu tun, sondern könnte bei dir fs.createWriteStream() schon vorzeitig ein finish liefern, obwohl noch gar nicht fertig kopiert wurde.
        Seltsam, aber wäre es wert, näher einzusteigen.

        bahnuhrB Offline
        bahnuhrB Offline
        bahnuhr
        Forum Testing Most Active
        schrieb am zuletzt editiert von
        #21

        @hendrick sagte in async / await -> Muster Anleitung gesucht:

        Du ruft die Funktion "weiter()" per await weiter();

        Ja, aber nur weil du im Beispiel den:
        await setStateAsync('0_userdata.0.test.123.Datei-ist-kopiert', {val:true, ack:false});
        auch mit await aufgerufen hast.

        Wusste nicht, dass da ein Unterschied besteht.


        Wenn ich helfen konnte, dann Daumen hoch (Pfeil nach oben)!
        Danke.
        gute Forenbeiträge: https://forum.iobroker.net/topic/51555/hinweise-f%C3%BCr-gute-forenbeitr%C3%A4ge
        ScreenToGif :https://www.screentogif.com/downloads.html

        H 1 Antwort Letzte Antwort
        0
        • bahnuhrB bahnuhr

          @hendrick sagte in async / await -> Muster Anleitung gesucht:

          diese als Log mal ausgibst.

          Hast du da mal ein Scriptschnipsel.

          Danke, ich werds dann probieren.

          Fazit:
          Das ganze ist verdammt verwirrend und irreführend für mich.

          Wenn ich mir das Script so anschaue, dann sind das nur für den kopier Befehl ca. 30 Zeilen (ohne sie jetzt genau gezählt zu haben).
          Mein derzeitiges kopier-Script hat 3 Zeilen + timeout Zeilen.

          H Offline
          H Offline
          Hendrick
          schrieb am zuletzt editiert von
          #22

          @bahnuhr said in async / await -> Muster Anleitung gesucht:

          Fazit:
          Das ganze ist verdammt verwirrend und irreführend für mich.
          Wenn ich mir das Script so anschaue, dann sind das nur für den kopier Befehl ca. 30 Zeilen (ohne sie jetzt genau gezählt zu haben).
          Mein derzeitiges kopier-Script hat 3 Zeilen + timeout Zeilen.

          Achtung :relaxed:

          Ich, und wohl jeder hier, erklären dir gerne alles. Sag weiterhin gerne Bescheid, wo du konkret Fragen hast.

          Viele Script-Beispiele hier im Forum sind "Quick&Dirty", aber funktionieren halt einfach :-)

          Einstieg in async/await bedeutet auch, dass du DEUTLICH besseren Quellcode bekommst. Im Idealfall verifizierst da z.T. auch mehr, und wirst mehr diszipliniert, zu prüfen.

          Beispiel:

          setState('XYZ', getState('ABC').val);
          

          Hier wird einfach so ein Datenpunktwert ohne Prüfung in einen anderen Datenpunkt gesetzt. Egal, ob der DP überhaupt vorhanden ist, egal, ob der Ziel-Datenpunkt kompatibel ist zum Datentyp, etc.

          Im Idealfall wartet man hier erst mal ab, ob und was der getState() überhaupt zurück liefert, und reagiert dann.
          cf33cfef-cfd9-4e9a-8821-f59d19dd7a01-image.png

          Das hat jetzt nicht unbedingt mit async/await zu tun, aber Prüfungen usw. verlängeren den Quellcode, aber ersparen dir viel Ärger in der Zukunft.

          Auch die Nutzung von try/error wie in den obigen Beispielen.

          JA - Quellcode wird deutlich länger. Aber auch deutlich sicherer.

          1 Antwort Letzte Antwort
          0
          • bahnuhrB bahnuhr

            @hendrick sagte in async / await -> Muster Anleitung gesucht:

            Du ruft die Funktion "weiter()" per await weiter();

            Ja, aber nur weil du im Beispiel den:
            await setStateAsync('0_userdata.0.test.123.Datei-ist-kopiert', {val:true, ack:false});
            auch mit await aufgerufen hast.

            Wusste nicht, dass da ein Unterschied besteht.

            H Offline
            H Offline
            Hendrick
            schrieb am zuletzt editiert von
            #23

            @bahnuhr said in async / await -> Muster Anleitung gesucht:

            @hendrick sagte in async / await -> Muster Anleitung gesucht:

            Du ruft die Funktion "weiter()" per await weiter();

            Ja, aber nur weil du im Beispiel den:
            await setStateAsync('0_userdata.0.test.123.Datei-ist-kopiert', {val:true, ack:false});
            auch mit await aufgerufen hast.

            Wusste nicht, dass da ein Unterschied besteht.

            setStateAsync() ist bereits eine asynchrone Funktion von ioBroker.
            Um async zu nutzen, rufst du diese per await setStateAsync() auf.

            weiter() ist deine eigene Funktion, nicht von ioBroker, und nicht von node.js oder einem Modul, hier musst du dieser Funktion selbst sagen, dass sie async ist, in dem du ein async function weiter() machst. Sonst ist sie nicht async und wird einfach so abgefeuert, und es wird auf kein Ergebnis gewartet.

            dslraserD 1 Antwort Letzte Antwort
            0
            • H Hendrick

              @bahnuhr said in async / await -> Muster Anleitung gesucht:

              @hendrick sagte in async / await -> Muster Anleitung gesucht:

              Du ruft die Funktion "weiter()" per await weiter();

              Ja, aber nur weil du im Beispiel den:
              await setStateAsync('0_userdata.0.test.123.Datei-ist-kopiert', {val:true, ack:false});
              auch mit await aufgerufen hast.

              Wusste nicht, dass da ein Unterschied besteht.

              setStateAsync() ist bereits eine asynchrone Funktion von ioBroker.
              Um async zu nutzen, rufst du diese per await setStateAsync() auf.

              weiter() ist deine eigene Funktion, nicht von ioBroker, und nicht von node.js oder einem Modul, hier musst du dieser Funktion selbst sagen, dass sie async ist, in dem du ein async function weiter() machst. Sonst ist sie nicht async und wird einfach so abgefeuert, und es wird auf kein Ergebnis gewartet.

              dslraserD Offline
              dslraserD Offline
              dslraser
              Forum Testing Most Active
              schrieb am zuletzt editiert von dslraser
              #24

              @hendrick
              Ich beschäftige mich aktuell auch gerade mit diesem Thema und hänge mich hier mal drann, ich hoffe das ist okay.

              Bisher arbeite ich fast ausschließlich mit Blockly, und erstelle mit einer Javascript Funktion meine benötigten Datenpunkte. Hier im Blockly können Variablen auf true/false gestellt werden, dann werden die benötigten Datenpunkte erstellt oder bei Abwahl auch wieder gelöscht, falls die existieren. Das hat lange so funktioniert, geht nun aber nicht mehr bzw. manchmal nicht mehr. Es wird angeblich ein DP nicht gefunden, der ist aber da, das endet dann immer im Absturz der Instanz. (Fehlermeldung reiche ich nach)
              Ziel ist es alle benötigten Datenpunkte zu erstellen oder zu löschen, erst wenn das fertig ist soll die Funktion main() aufgerufen werden, darin befindet sich das eigentliche Blockly.

              host.iobroker	2021-12-16 19:47:27.171	info	Restart adapter system.adapter.javascript.0 because enabled
              host.iobroker	2021-12-16 19:47:27.171	error	instance system.adapter.javascript.0 terminated with code 6 (UNCAUGHT_EXCEPTION)
              host.iobroker	2021-12-16 19:47:27.171	error	Caught by controller[1]: at processImmediate (internal/timers.js:466:21)
              host.iobroker	2021-12-16 19:47:27.171	error	Caught by controller[1]: at Immediate.<anonymous> (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1965:33)
              host.iobroker	2021-12-16 19:47:27.171	error	Caught by controller[1]: at setStateHelper (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:390:30)
              host.iobroker	2021-12-16 19:47:27.171	error	Caught by controller[1]: at Object.<anonymous> (/opt/iobroker/node_modules/iobroker.javascript/lib/tools.js:83:39)
              host.iobroker	2021-12-16 19:47:27.171	error	Caught by controller[1]: Error: State "javascript.0.Geraete_zaehlen.Steckdosen.Haus.01_Anzeigen_und_Listen.04_eingeschaltete_Steckdosen_Liste" not found
              host.iobroker	2021-12-16 19:47:27.170	error	Caught by controller[0]: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejecte
              javascript.0	2021-12-16 19:47:26.541	warn	(27359) Terminated (UNCAUGHT_EXCEPTION): Without reason
              javascript.0	2021-12-16 19:47:26.541	info	(27359) terminating
              

              Variablen und der Inhalt der Funktion bisher:

              Bildschirmfoto 2021-12-16 um 19.21.33.png

              async function createUserStates(where, statesToCreate) {
                let dp, idKey;
                for(let key of statesToCreate){
                	idKey = where + '.' + key[0];
                    dp = key[1];
                	if (!(await existsStateAsync(idKey))) {
                		await createStateAsync(idKey, dp);
                	}
                }
              }
              
              //let iqontrol_vorhanden =  'system.adapter.iqontrol'; //prüfen ob iqontol installiert ist
              //let iot_vorhanden =  'system.adapter.iot'; //prüfen ob iot installiert ist
              
              //#####################################################################################################################################################################################################################################################################################################################################################################################
              
              //Ansage Button Steckdosenansage anlegen
              if (Alexa_Ansage_verwenden == true && Steckdosen_verwenden == true){
              let statesToCreate = [
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.04_Alexa.01_Alexa_Routinebutton', {'name': '01_Alexa_Routinebutton','type': 'boolean', 'read': false, 'write': true, 'role': 'button','def':true, "smartName": {"de": 'Steckdosenansage '+[etage],"smartType": "SWITCH"} }], 
              ];
              await createUserStates(anlegen_in, statesToCreate)};
              
              //Steckdosen  Datenpunkte anlegen
              if (Steckdosen_verwenden == true){
              let statesToCreate = [
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.01_Steckdosen_Anzahl_gesamt', {'name':'01_Steckdosen_Anzahl_gesamt', 'type':'number', 'read':true, 'write':false, 'role':'value', 'unit': 'Steckdosen', 'def':0 }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.02_Steckdosen_Anzahl_eingeschaltet', {'name':'02_Steckdosen_Anzahl_eingeschaltet', 'type':'number', 'read':true, 'write':false, 'role':'value', 'unit': 'Steckdosen', 'def':0 }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.03_Steckdosen_Anzahl_ausgeschaltet', {'name':'03_Steckdosen_Anzahl_ausgeschaltet', 'type':'number', 'read':true, 'write':false, 'role':'value', 'unit': 'Steckdosen', 'def':0 }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.04_eingeschaltete_Steckdosen_Liste', {'name': '04_eingeschaltete_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'noch leer' }],    
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.05_gesamte_Steckdosen_Liste', {'name': '05_gesamte_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'noch leer' }],
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.06_html_Steckdosen_Liste', {'name':'06_html_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'html', 'def':'noch leer' }],
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.07_Steckdosen_Liste_mit_Emojis', {'name':'07_Steckdosen_Liste_mit_Emojis', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'noch leer' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.08_Steckdosen_Emoji_eingeschaltet', {'name':'08_Steckdosen_Emoji_eingeschaltet', 'type':'mixed', 'read':true, 'write':true, 'role':'mixed' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.09_Steckdosen_Emoji_ausgeschaltet', {'name':'09_Steckdosen_Emoji_ausgeschaltet', 'type':'mixed', 'read':true, 'write':true, 'role':'mixed' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.10_html_nur_eingeschaltete_Steckdosen_Liste', {'name':'10_html_nur_eingeschaltete_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'html', 'def':'noch leer' }],
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.Version', {'name':'Version', 'type':'string', 'read':false, 'write':false, 'role':'text', 'def':'' }],   
                 ///////////////////////////////////
                 // iQontrol Trigger und Schalter //
                 /////////////////////////////////// 
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.01_Thema_hell_Steckdosen_Liste', {'name':'01_Thema_hell_Steckdosen_Liste', 'type':'boolean', 'read':true, 'write':true, 'role':'switch','def':true}],
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.02_Thema_dunkel_Steckdosen_Liste', {'name':'02_Thema_dunkel_Steckdosen_Liste', 'type':'boolean', 'read':true, 'write':true, 'role':'switch','def':false}],
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.03_Thema_eigenes_Steckdosen_Liste', {'name':'03_Thema_eigenes_Steckdosen_Liste', 'type':'boolean', 'read':true, 'write':true, 'role':'switch','def':false}],
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.04_Trigger_Tabelle_iQontrol_Steckdosen_Liste', {'name': '04_Trigger_Tabelle_iQontrol_Steckdosen_Liste','type': 'boolean', 'read': false, 'write': true, 'role': 'button','def':true}], 
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.05_Schalter_fuer_Button_Tabelle_Steckdosen_Liste', {'name': '05_Schalter_fuer_Button_Tabelle_Steckdosen_Liste','type': 'boolean', 'read': true, 'write': true, 'role': 'switch','def':false}], 
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.06_Trigger_Farbe_iQontrol_Steckdosen_Liste', {'name': '06_Trigger_Farbe_iQontrol_Steckdosen_Liste','type': 'boolean', 'read': false, 'write': true, 'role': 'button','def':true}], 
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.07_Umschalter_Farbe_Steckdosen_Liste', {'name': '07_Umschalter_Farbe_Steckdosen_Liste','type': 'number', 'read': true, 'write': false, 'role': 'value','def':0}], 
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.08_Geraetestatus_in_Ueberschrift_an_aus', {'name': '08_Geraetestatus_in_Ueberschrift_an_aus','type': 'boolean', 'read': true, 'write': true, 'role': 'switch','def':true}], 
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.09_Geraete_in_HTML_Liste_schaltbar', {'name': '09_Geraete_in_HTML_Liste_schaltbar','type': 'boolean', 'read': true, 'write': true, 'role': 'switch','def':true}], 
                 ///////////////////////////////////////////////
                 // HTML Daten Hell-Dunkel nicht beschreibbar //
                 ///////////////////////////////////////////////
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.01_Hintergrundfarbe_Steckdosen_Liste', {'name':'01_Hintergrundfarbe_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'white' }],       
                 //Rahmen Kopf
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.02_Rahmenbreite_Kopf_Steckdosen_Liste', {'name':'02_Rahmenbreite_Kopf_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'0' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.03_Rahmenstyle_Kopf_Steckdosen_Liste', {'name':'03_Rahmenstyle_Kopf_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'solid' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.04_Rahmenfarbe_Kopf_Steckdosen_Liste', {'name':'04_Rahmenfarbe_Kopf_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'black' }],   
                 //Rahmen Überschrift
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.05_Rahmenbreite_Ueberschrift_Steckdosen_Liste', {'name':'05_Rahmenbreite_Ueberschrift_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'0' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.06_Rahmenstyle_Ueberschrift_Steckdosen_Liste', {'name':'06_Rahmenstyle_Ueberschrift_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'solid' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.07_Rahmenfarbe_Ueberschrift_Steckdosen_Liste', {'name':'07_Rahmenfarbe_Ueberschrift_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'black' }],   
                 //Rahmen Tabelle aussen
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.08_Rahmenbreite_Tabelle_aussen_Steckdosen_Liste', {'name':'08_Rahmenbreite_Tabelle_aussen_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'5' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.09_Rahmenstyle_Tabelle_aussen_Steckdosen_Liste', {'name':'09_Rahmenstyle_Tabelle_aussen_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'solid' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.10_Rahmenfarbe_Tabelle_aussen_Steckdosen_Liste', {'name':'10_Rahmenfarbe_Tabelle_aussen_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'black' }],   
                 //Ueberschrift
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.11_Ueberschrift_Schriftgroesse_Steckdosen_Liste', {'name':'11_Ueberschrift_Schriftgroesse_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'4' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.12_Ueberschrift_Farbe_Steckdosen_Liste', {'name':'12_Ueberschrift_Farbe_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'black' }],       
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.13_Ueberschrift_Schriftart_Steckdosen_Liste', {'name':'13_Ueberschrift_Schriftart_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'apple' }],           
                 //Bild links
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.14_Bild_links_Steckdosen_Liste', {'name':'14_Bild_links_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':' data:image/png;base64,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'}], 
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.15_Bild_links_Hoehe_Steckdosen_Liste', {'name':'15_Bild_links_Hoehe_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'8' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.16_Bild_links_Breite_Steckdosen_Liste', {'name':'16_Bild_links_Breite_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'8' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.17_Bild_links_Abstand_links_Steckdosen_Liste', {'name':'17_Bild_links_Abstand_links_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'0' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.18_Bild_links_Abstand_oben_Steckdosen_Liste', {'name':'18_Bild_links_Abstand_oben_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'0' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.19_Bild_links_Abstand_unten_Steckdosen_Liste', {'name':'19_Bild_links_Abstand_unten_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'0' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.20_Bild_links_Abstand_rechts_Steckdosen_Liste', {'name':'20_Bild_links_Abstand_rechts_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'0' }],   
                 //Bild rechts
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.21_Bild_rechts_Steckdosen_Liste', {'name':'21_Bild_rechts_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':' data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAUVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcqRVCAAAAGnRSTlMAECAwP0BQYG9wf4CPkJ+gr7C/wM/Q3+Dv8DtSRt8AAAMESURBVGje7ZndkqMgEEbBhIzEmfgvet7/QfdCM7uKBlBi1Val79JWOEIj/XUjxMc+dobJtOqIYl2VynXGvSei9fe1aRREtsKeTHQGFEtGBmB0Eie6iTYA2WKxeqCVETdRC/TzATVgZNStOgB65qotz2HTQDnzdEASF5IA3cwDEPvbtsb8QP5TyPX+GI/prnrcr2+AyLRaHk2bx/lOiNo4PgsVDaKq7ZO2UlEg8vEc0ORaJUIIkSidm6f3IY9DblO+bJdpINHtlANvRyHf40D16qqoenz6fQgy5eR2c+FVu71knhDZgCsHaAAauRcyMszl9Td3MRsUP0iBV06WLcBjH+QHz7w/Un72QG54a4uRcguHyD5AW0hjaxMfSA5w8T3WLwB5KEQRpl80gAqEVEAbkqJaoAqDKPvFHGb/wwkpgTos29ZLMeeCyOCJTFORARAdGhEhhDDAVwBklzTWiyV2QdgjjZOVQV5AFGDChZaZB9IByezP18fyeXHlgOT7qhU9fzcHpJ7POym6rlgJ0dKv5pF3QOYlUdID9BbF8i/KHgdk/qscJUm5hNj+V6M4Hk/Cq1tCbP8ByDDpxyXE9h+AvGm5zDzwA8BgB37pT17Ny7mFS2PKtS288Idt4VM+xlOOFbW2Y93WBR2Qpxz15yQtDTR7Visk/Z4iJERpSTWnVaGS6BxxJ+rQqDSWHIwvuLM9gntP6fATXgQNQOdbBHXAEF4EjeVc41fONWv7xL8w9aGMjGxfiZ37UUZGvrdZ0AJ0rmZBt1Em+7Y9xs5J+oqRslWKezdwRrHQbDdwxu5LfqCB84z+VoPu2dLLDjfVJnnVpcumWjpdgA0qQnsw/70Oe6TXsT14TR+/V2x5hPbgPw26NavjNDqFEEKV64gyXstWCCHklzWd+itu83maT5bXBsDUeebOaJ+rjQ/kb2n2hitAYymgt19m6gDV4Kkteuu95eCtGjwZzYp+yQD6NNZVedqv5pky/qV/uZVpYzLWVj8bYiKGbCNYujRxCKbUUnzsY2fYH0Cu0ke796XoAAAAAElFTkSuQmCC'}], 
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.22_Bild_rechts_Hoehe_Steckdosen_Liste', {'name':'22_Bild_rechts_Hoehe_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'8' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.23_Bild_rechts_Breite_Steckdosen_Liste', {'name':'23_Bild_rechts_Breite_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'8' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.24_Bild_rechts_Abstand_links_Steckdosen_Liste', {'name':'24_Bild_rechts_Abstand_links_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'0' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.25_Bild_rechts_Abstand_oben_Steckdosen_Liste', {'name':'25_Bild_rechts_Abstand_oben_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'0' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.26_Bild_rechts_Abstand_unten_Steckdosen_Liste', {'name':'26_Bild_rechts_Abstand_unten_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'0' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.27_Bild_rechts_Abstand_rechts_Steckdosen_Liste', {'name':'27_Bild_rechts_Abstand_rechts_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'0' }],   
                 //Abstand Kopf zur Tabelle
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.28_Abstand_Tabelle_zum_Kopf_Steckdosen_Liste', {'name':'28_Abstand_Tabelle_zum_Kopf_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'4' }],   
                 //Rahmen Tabelle
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.29_Rahmenbreite_Tabelle_innen_Steckdosen_Liste', {'name':'29_Rahmenbreite_Tabelle_innen_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'1' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.30_Rahmenfarbe_Tabelle_innen_Steckdosen_Liste', {'name':'30_Rahmenfarbe_Tabelle_innen_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'black' }],           
                 //Schrift in der Tabelle aktive Geräte
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.31_Tabelle_Schriftart_Steckdosen_Liste', {'name':'31_Tabelle_Schriftart_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'apple' }],
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.32_Tabelle_Schriftfarbe_aktives_Geraet_Steckdosen_Liste', {'name':'32_Tabelle_Schriftfarbe_aktives_Geraet_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'red' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.33_Tabelle_Schriftgroesse_aktives_Geraet_Steckdosen_Liste', {'name':'33_Tabelle_Schriftgroesse_aktives_Geraet_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'3.5' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.34_Tabelle_Schriftfarbe_aktives_Geraet_Status_Steckdosen_Liste', {'name':'34_Tabelle_Schriftfarbe_aktives_Geraet_Status_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'red' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.35_Tabelle_Schriftgroesse_aktives_Geraet_Status_Steckdosen_Liste', {'name':'35_Tabelle_Schriftgroesse_aktives_Geraet_Status_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'3.5' }],        
                 //Schrift in der Tabelle inaktive Geräte
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.36_Tabelle_Schriftfarbe_inaktives_Geraet_Steckdosen_Liste', {'name':'36_Tabelle_Schriftfarbe_inaktives_Geraet_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'black' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.37_Tabelle_Schriftgroesse_inaktives_Geraet_Steckdosen_Liste', {'name':'37_Tabelle_Schriftgroesse_inaktives_Geraet_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'3.5' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.38_Tabelle_Schriftfarbe_inaktives_Geraet_Status_Steckdosen_Liste', {'name':'38_Tabelle_Schriftfarbe_inaktives_Geraet_Status_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'black' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.39_Tabelle_Schriftgroesse_inaktives_Geraet_Status_Steckdosen_Liste', {'name':'39_Tabelle_Schriftgroesse_inaktives_Geraet_Status_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'3.5' }],        
                 //Schriftgroesse Status Geräte Ueberschrift
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.40_Ueberschrift_Schriftgroesse_aktive_Geraete', {'name':'40_Ueberschrift_Schriftgroesse_aktive_Geraete', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':'3' }],        
                 //Groesse Schaltfeld    
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.41_Schaltfeld_Groesse_Steckdosen_Liste', {'name':'41_Schaltfeld_Groesse_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':'4' }],        
                 //////////////////////////////////////////////////
                 // HTML Daten eigene Einstellungen beschreibbar // 
                 //////////////////////////////////////////////////
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.01_Hintergrundfarbe_Steckdosen_Liste', {'name':'01_Hintergrundfarbe_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],      
                 //Rahmen Kopf
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.02_Rahmenbreite_Kopf_Steckdosen_Liste', {'name':'02_Rahmenbreite_Kopf_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.03_Rahmenstyle_Kopf_Steckdosen_Liste', {'name':'03_Rahmenstyle_Kopf_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.04_Rahmenfarbe_Kopf_Steckdosen_Liste', {'name':'04_Rahmenfarbe_Kopf_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 //Rahmen Überschrift
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.05_Rahmenbreite_Ueberschrift_Steckdosen_Liste', {'name':'05_Rahmenbreite_Ueberschrift_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.06_Rahmenstyle_Ueberschrift_Steckdosen_Liste', {'name':'06_Rahmenstyle_Ueberschrift_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.07_Rahmenfarbe_Ueberschrift_Steckdosen_Liste', {'name':'07_Rahmenfarbe_Ueberschrift_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 //Rahmen Tabelle aussen
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.08_Rahmenbreite_Tabelle_aussen_Steckdosen_Liste', {'name':'08_Rahmenbreite_Tabelle_aussen_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.09_Rahmenstyle_Tabelle_aussen_Steckdosen_Liste', {'name':'09_Rahmenstyle_Tabelle_aussen_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.10_Rahmenfarbe_Tabelle_aussen_Steckdosen_Liste', {'name':'10_Rahmenfarbe_Tabelle_aussen_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 //Ueberschrift
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.11_Ueberschrift_Schriftgroesse_Steckdosen_Liste', {'name':'11_Ueberschrift_Schriftgroesse_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.12_Ueberschrift_Farbe_Steckdosen_Liste', {'name':'12_Ueberschrift_Farbe_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],       
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.13_Ueberschrift_Schriftart_Steckdosen_Liste', {'name':'13_Ueberschrift_Schriftart_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],           
                 //Bild links
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.14_Bild_links_Steckdosen_Liste', {'name':'14_Bild_links_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }], 
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.15_Bild_links_Hoehe_Steckdosen_Liste', {'name':'15_Bild_links_Hoehe_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.16_Bild_links_Breite_Steckdosen_Liste', {'name':'16_Bild_links_Breite_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.17_Bild_links_Abstand_links_Steckdosen_Liste', {'name':'17_Bild_links_Abstand_links_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.18_Bild_links_Abstand_oben_Steckdosen_Liste', {'name':'18_Bild_links_Abstand_oben_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.19_Bild_links_Abstand_unten_Steckdosen_Liste', {'name':'19_Bild_links_Abstand_unten_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.20_Bild_links_Abstand_rechts_Steckdosen_Liste', {'name':'20_Bild_links_Abstand_rechts_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 //Bild rechts
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.21_Bild_rechts_Steckdosen_Liste', {'name':'21_Bild_rechts_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }], 
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.22_Bild_rechts_Hoehe_Steckdosen_Liste', {'name':'22_Bild_rechts_Hoehe_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.23_Bild_rechts_Breite_Steckdosen_Liste', {'name':'23_Bild_rechts_Breite_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.24_Bild_rechts_Abstand_links_Steckdosen_Liste', {'name':'24_Bild_rechts_Abstand_links_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.25_Bild_rechts_Abstand_oben_Steckdosen_Liste', {'name':'25_Bild_rechts_Abstand_oben_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.26_Bild_rechts_Abstand_unten_Steckdosen_Liste', {'name':'26_Bild_rechts_Abstand_unten_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.27_Bild_rechts_Abstand_rechts_Steckdosen_Liste', {'name':'27_Bild_rechts_Abstand_rechts_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 //Abstand Kopf zur Tabelle
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.28_Abstand_Tabelle_zum_Kopf_Steckdosen_Liste', {'name':'28_Abstand_Tabelle_zum_Kopf_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 //Rahmen Tabelle
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.29_Rahmenbreite_Tabelle_innen_Steckdosen_Liste', {'name':'29_Rahmenbreite_Tabelle_innen_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.30_Rahmenfarbe_Tabelle_innen_Steckdosen_Liste', {'name':'30_Rahmenfarbe_Tabelle_innen_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],           
                 //Schrift in der Tabelle aktive Gerätte
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.31_Tabelle_Schriftart_Steckdosen_Liste', {'name':'31_Tabelle_Schriftart_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.32_Tabelle_Schriftfarbe_aktives_Geraet_Steckdosen_Liste', {'name':'32_Tabelle_Schriftfarbe_aktives_Geraet_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.33_Tabelle_Schriftgroesse_aktives_Geraet_Steckdosen_Liste', {'name':'33_Tabelle_Schriftgroesse_aktives_Geraet_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.34_Tabelle_Schriftfarbe_aktives_Geraet_Status_Steckdosen_Liste', {'name':'34_Tabelle_Schriftfarbe_aktives_Geraet_Status_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.35_Tabelle_Schriftgroesse_aktives_Geraet_Status_Steckdosen_Liste', {'name':'35_Tabelle_Schriftgroesse_aktives_Geraet_Status_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],        
                 //Schrift in der Tabelle inaktive Gerätte
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.36_Tabelle_Schriftfarbe_inaktives_Geraet_Steckdosen_Liste', {'name':'36_Tabelle_Schriftfarbe_inaktives_Geraet_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.37_Tabelle_Schriftgroesse_inaktives_Geraet_Steckdosen_Liste', {'name':'37_Tabelle_Schriftgroesse_inaktives_Geraet_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.38_Tabelle_Schriftfarbe_inaktives_Geraet_Status_Steckdosen_Liste', {'name':'38_Tabelle_Schriftfarbe_inaktives_Geraet_Status_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.39_Tabelle_Schriftgroesse_inaktives_Geraet_Status_Steckdosen_Liste', {'name':'39_Tabelle_Schriftgroesse_inaktives_Geraet_Status_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],        
                 //Schriftgroesse Status Geräte Ueberschrift
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.40_Ueberschrift_Schriftgroesse_aktive_Geraete', {'name':'40_Ueberschrift_Schriftgroesse_aktive_Geraete', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],        
                 //Groesse Schaltfeld    
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.41_Schaltfeld_Groesse_Steckdosen_Liste', {'name':'41_Schaltfeld_Groesse_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],            
              ];
              await createUserStates(anlegen_in, statesToCreate)};
              
              //Telegram Steckdosen  Nachrichtenversand anlegen mit SmartNamen
              if (Steckdosen_verwenden == true && Telegram_verwenden == true && Alexa_Ansage_verwenden == true){
              let statesToCreate = [
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.05_Telegram.Telegram_Steckdosen_'+[etage]+'_Versand_an_aus', {'name':'Telegram_Steckdosen_'+[etage]+'_Versand_an_aus', 'type':'boolean', 'read':true, 'write':true, 'role':'switch', 'def':false }],
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.05_Telegram.Telegram_Steckdosenstatus_'+[etage]+'_senden', {'name':'Telegram_Steckdosenstatus_'+[etage]+'_senden', 'type':'boolean', 'read':false, 'write':true, 'role':'button', 'def':true, "smartName": {"de": 'Telegram Steckdosenstatus '+[etage]+' senden',"smartType": "SWITCH"} }],   
              ];
              await createUserStates(anlegen_in, statesToCreate)};
              
              //Telegram Steckdosen  Nachrichtenversand anlegen ohne SmartNamen
              if (Steckdosen_verwenden == true && Telegram_verwenden == true && Alexa_Ansage_verwenden == false){
              let statesToCreate = [
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.05_Telegram.Telegram_Steckdosen_'+[etage]+'_Versand_an_aus', {'name':'Telegram_Steckdosen_'+[etage]+'_Versand_an_aus', 'type':'boolean', 'read':true, 'write':true, 'role':'switch', 'def':false }],
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.05_Telegram.Telegram_Steckdosenstatus_'+[etage]+'_senden', {'name':'Telegram_Steckdosenstatus_'+[etage]+'_senden', 'type':'boolean', 'read':false, 'write':true, 'role':'button', 'def':true, "smartName": false }],   
              ];
              await createUserStates(anlegen_in, statesToCreate)};
              
              //E-Mail Steckdosen Nachrichtenversand anlegen mit SmartNamen
              if (Steckdosen_verwenden == true && Email_verwenden == true && Alexa_Ansage_verwenden == true){
              let statesToCreate = [
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.06_E-Mail.EMAIL_Steckdosen_'+[etage]+'_Versand_an_aus', {'name':'EMAIL_Steckdosen_'+[etage]+'_Versand_an_aus', 'type':'boolean', 'read':true, 'write':true, 'role':'switch', 'def':false }],
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.06_E-Mail.EMAIL_Steckdosenstatus_'+[etage]+'_senden', {'name':'EMAIL_Steckdosenstatus_'+[etage]+'_senden', 'type':'boolean', 'read':false, 'write':true, 'role':'button', 'def':true, "smartName": {"de": 'EMAIL Steckdosenstatus '+[etage]+' senden',"smartType": "SWITCH"} }],   
              ];
              await createUserStates(anlegen_in, statesToCreate)};
              
              //E-Mail Steckdosen Nachrichtenversand anlegen mit SmartNamen
              if (Steckdosen_verwenden == true && Email_verwenden == true && Alexa_Ansage_verwenden == false){
              let statesToCreate = [
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.06_E-Mail.EMAIL_Steckdosen_'+[etage]+'_Versand_an_aus', {'name':'EMAIL_Steckdosen_'+[etage]+'_Versand_an_aus', 'type':'boolean', 'read':true, 'write':true, 'role':'switch', 'def':false }],
                 ['Geraete_zaehlen.Steckdosen.'+[etage]+'.06_E-Mail.EMAIL_Steckdosenstatus_'+[etage]+'_senden', {'name':'EMAIL_Steckdosenstatus_'+[etage]+'_senden', 'type':'boolean', 'read':false, 'write':true, 'role':'button', 'def':true, "smartName": false }],   
              ];
              await createUserStates(anlegen_in, statesToCreate)};
              
              //#####################################################################################################################################################################################################################################################################################################################################################################################
              
              //Ab hier Datenpunkte löschen
              //###############################################################################
              
              if (!Steckdosen_verwenden && anlegen_in.slice(0, 10) == 'javascript') {
              const idsjs = $('javascript.*.Geraete_zaehlen.Steckdosen*');
              idsjs.each(function(id, i) {
                if(existsState(id)) deleteState(id);
              })};
              
              if (!Steckdosen_verwenden && anlegen_in.slice(0, 10) == '0_userdata') {
              const idsud = $('0_userdata.0.Geraete_zaehlen.Steckdosen*');
              idsud.each(function(id, i) {
                if(existsState(id)) deleteState(id);
              })};
              
              //###############################################################################
              
              if (!Alexa_Ansage_verwenden && anlegen_in.slice(0, 10) == 'javascript') {
              const idsjs = $('javascript.*.Geraete_zaehlen.Steckdosen.*.04_Alexa.*');  
              idsjs.each(function(id, i) {
                if(existsState(id)) deleteState(id);
              })};
              
              if (!Alexa_Ansage_verwenden && anlegen_in.slice(0, 10) == '0_userdata') {
              const idsud = $('0_userdata.0.Geraete_zaehlen.Steckdosen.*.04_Alexa.*');  
              idsud.each(function(id, i) {
                if(existsState(id)) deleteState(id);
              })};
              
              //###############################################################################
              
              if (!Telegram_verwenden && anlegen_in.slice(0, 10) == 'javascript') {
              const idsjs = $('javascript.*.Geraete_zaehlen.Steckdosen.*.05_Telegram.*'); 
              idsjs.each(function(id, i) {
                if(existsState(id)) deleteState(id);
              })};
              
              if (!Telegram_verwenden && anlegen_in.slice(0, 10) == '0_userdata') {
              const idsud = $('0_userdata.0.Geraete_zaehlen.Steckdosen.*.05_Telegram.*'); 
              idsud.each(function(id, i) {
                if(existsState(id)) deleteState(id);
              })};
              
              //###############################################################################
              
              if (!Email_verwenden && anlegen_in.slice(0, 10) == 'javascript') {
              const idsjs = $('javascript.*.Geraete_zaehlen.Steckdosen.*.06_E-Mail.*'); 
              idsjs.each(function(id, i) {
                if(existsState(id)) deleteState(id);
              })};
              
              if (!Email_verwenden && anlegen_in.slice(0, 10) == '0_userdata') {
              const idsud = $('0_userdata.0.Geraete_zaehlen.Steckdosen.*.06_E-Mail.*'); 
              idsud.each(function(id, i) {
                if(existsState(id)) deleteState(id);
              })};
              
              //###############################################################################
              
              //Funktion main mit Verzögerung aufrufen
              //timeout = setTimeout(function () {
              //  main();
              //}, 5000);
              main()
              

              Mein aktueller Versuch: (endet aber auch manchmal im Fehler, manchmal geht es aber auch x Mal ohne Fehler ? Wie müßte sowas "richtig" gemacht werden ? In dieser Testfunktion habe ich die Variablen, die sonst im Blockly sind, oben eingefügt. Die Datenpunkte sind nicht vollständig, sonder nur der Anfang. (der Aufruf von main() ist auch noch nicht drinn.
              Über Hilfe würde ich mich freuen.

              var Steckdosen_verwenden,Alexa_Ansage_verwenden,Telegram_verwenden,Email_verwenden,anlegen_in,etage;
              anlegen_in = 'javascript.0'
              etage = 'Haus'
              Steckdosen_verwenden = true;
              Alexa_Ansage_verwenden = true;
              Telegram_verwenden = false;
              Email_verwenden = false;
              
              
              mainAsync();
              async function mainAsync() {
              
              if(Steckdosen_verwenden){ 
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.01_Steckdosen_Anzahl_gesamt', {name:'01_Steckdosen_Anzahl_gesamt', type:'number', read:true, write:false, role:'value', unit:'Steckdosen', def:0 });
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.02_Steckdosen_Anzahl_eingeschaltet', {name:'02_Steckdosen_Anzahl_eingeschaltet',type:'number', read:true, write:false, role:'value',unit:'Steckdosen', def:0});
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.03_Steckdosen_Anzahl_ausgeschaltet', {name:'03_Steckdosen_Anzahl_ausgeschaltet',type:'number', read:true, write:false, role:'value',unit:'Steckdosen', def:0});
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.04_eingeschaltete_Steckdosen_Liste', {name:'04_eingeschaltete_Steckdosen_Liste',type:'string', read:true, write:false, role:'text', def:'noch leer'});
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.05_gesamte_Steckdosen_Liste', {name:'05_gesamte_Steckdosen_Liste',type:'string', read:true, write:false, role:'text', def:'noch leer'});
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.06_html_Steckdosen_Liste', {name:'06_html_Steckdosen_Liste',type:'string', read:true, write:false, role:'html', def:'noch leer'}); 
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.07_Steckdosen_Liste_mit_Emojis', {name:'07_Steckdosen_Liste_mit_Emojis',type:'string', read:true, write:false, role:'text', def:'noch leer'});
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.08_Steckdosen_Emoji_eingeschaltet', {name:'08_Steckdosen_Emoji_eingeschaltet',type:'mixed', read:true, write:true, role:'mixed'});
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.09_Steckdosen_Emoji_ausgeschaltet', {name:'09_Steckdosen_Emoji_ausgeschaltet',type:'mixed', read:true, write:true, role:'mixed'});
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.10_html_nur_eingeschaltete_Steckdosen_Liste', {name:'10_html_nur_eingeschaltete_Steckdosen_Liste',type:'string', read:true, write:false, role:'html', def:'noch leer'});
              
              // iQontrol Trigger und Schalter
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.01_Thema_hell_Steckdosen_Liste', {name:'01_Thema_hell_Steckdosen_Liste',type:'boolean', read:true, write:true, role:'switch', def:true});
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.02_Thema_dunkel_Steckdosen_Liste', {name:'02_Thema_dunkel_Steckdosen_Liste',type: 'boolean', read:true, write:true, role:'switch', def:false});
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.03_Thema_eigenes_Steckdosen_Liste', {name:'03_Thema_eigenes_Steckdosen_Liste',type:'boolean', read:true, write:true, role:'switch', def:false});
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.04_Trigger_Tabelle_iQontrol_Steckdosen_Liste', {name:'04_Trigger_Tabelle_iQontrol_Steckdosen_Liste',type:'boolean', read:false, write:true, role:'button', def:true});
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.05_Schalter_fuer_Button_Tabelle_Steckdosen_Liste', {name:'05_Schalter_fuer_Button_Tabelle_Steckdosen_Liste',type:'boolean', read:true, write:true, role:'switch', def:false});
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.06_Trigger_Farbe_iQontrol_Steckdosen_Liste', {name:'06_Trigger_Farbe_iQontrol_Steckdosen_Liste',type:'boolean', read:false, write:true, role:'button', def:true});
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.07_Umschalter_Farbe_Steckdosen_Liste', {name:'07_Umschalter_Farbe_Steckdosen_Liste',type:'number', read:true, write:false, role:'value', def:0});
              await  createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.08_Geraetestatus_in_Ueberschrift_an_aus', {name:'08_Geraetestatus_in_Ueberschrift_an_aus',type:'boolean', read:true, write:true, role:'switch', def:true});
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.09_Geraete_in_HTML_Liste_schaltbar', {name:'09_Geraete_in_HTML_Liste_schaltbar',type:'boolean', read:true, write:true, role:'switch', def:true});
              
              // HTML Daten Hell-Dunkel nicht beschreibbar
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.01_Hintergrundfarbe_Steckdosen_Liste', {name:'01_Hintergrundfarbe_Steckdosen_Liste',type:'string', read:true, write:false, role:'text', def:'white'});
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.02_Rahmenbreite_Kopf_Steckdosen_Liste', {name:'02_Rahmenbreite_Kopf_Steckdosen_Liste',type:'string', read:true, write:false, role:'text', def:'0'});
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.03_Rahmenstyle_Kopf_Steckdosen_Liste', {name:'03_Rahmenstyle_Kopf_Steckdosen_Liste',type:'string', read:true, write:false, role:'text', def:'solid'})
              
              
              
                     // States erstellt   
                     console.log('States 1 erfolgreich erstellt.');
                 }} 
              
              
              
              alexa_dp_Async();
              async function alexa_dp_Async() {
              if(Alexa_Ansage_verwenden && Steckdosen_verwenden){ 
              
              await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.04_Alexa.01_Alexa_Routinebutton', {name:'01_Alexa_Routinebutton',type: 'boolean', read:false, write:true, role:'button',def:true, smartName: {'de': 'Steckdosenansage '+[etage],smartType:'SWITCH'}})
              
                     // States erstellt    
                     console.log('States 2 erfolgreich erstellt.')
              
                 }} 
              
              
              //Ab hier Datenpunkte löschen falls abgewählt
              //###############################################################################
              //alle DP löschen
              if (!Steckdosen_verwenden && anlegen_in.slice(0, 10) == 'javascript') {
                    console.log('alle States vom Blockly Steckdosen zählen werden gelöscht')
              const idsjs = $('javascript.*.Geraete_zaehlen.Steckdosen*');
              idsjs.each(function(id, i) {
                if(existsState(id)) deleteStateAsync(id);
              })};
              
              if (!Steckdosen_verwenden && anlegen_in.slice(0, 10) == '0_userdata') {
                     console.log('alle States vom Blockly Steckdosen zählen werden gelöscht')
              const idsud = $('0_userdata.0.Geraete_zaehlen.Steckdosen*');
              idsud.each(function(id, i) {
                if(existsState(id)) deleteStateAsync(id);
              })};
              //###############################################################################
              //Alexa DP löschen
              if (!Alexa_Ansage_verwenden && anlegen_in.slice(0, 10) == 'javascript') {
                console.log('Alexa State vom Blockly Steckdosen zählen wird gelöscht')
              const idsjs = $('javascript.*.Geraete_zaehlen.Steckdosen.*.04_Alexa.*');  
              idsjs.each(function(id, i) {
                if(existsState(id)) deleteStateAsync(id);
              })};
              
              if (!Alexa_Ansage_verwenden && anlegen_in.slice(0, 10) == '0_userdata') {
                console.log('Alexa State vom Blockly Steckdosen zählen wird gelöscht')
              const idsud = $('0_userdata.0.Geraete_zaehlen.Steckdosen.*.04_Alexa.*');  
              idsud.each(function(id, i) {
                if(existsState(id)) deleteStateAsync(id);
              })};
              //###############################################################################
              //Telegram DP löschen
              if (!Telegram_verwenden && anlegen_in.slice(0, 10) == 'javascript') {
              const idsjs = $('javascript.*.Geraete_zaehlen.Steckdosen.*.05_Telegram.*'); 
              idsjs.each(function(id, i) {
                if(existsState(id)) deleteStateAsync(id);
              })};
              
              if (!Telegram_verwenden && anlegen_in.slice(0, 10) == '0_userdata') {
              const idsud = $('0_userdata.0.Geraete_zaehlen.Steckdosen.*.05_Telegram.*'); 
              idsud.each(function(id, i) {
                if(existsState(id)) deleteStateAsync(id);
              })};
              //###############################################################################
              //E-Mail DP löschen
              if (!Email_verwenden && anlegen_in.slice(0, 10) == 'javascript') {
              const idsjs = $('javascript.*.Geraete_zaehlen.Steckdosen.*.06_E-Mail.*'); 
              idsjs.each(function(id, i) {
                if(existsState(id)) deleteStateAsync(id);
              })};
              
              if (!Email_verwenden && anlegen_in.slice(0, 10) == '0_userdata') {
              const idsud = $('0_userdata.0.Geraete_zaehlen.Steckdosen.*.06_E-Mail.*'); 
              idsud.each(function(id, i) {
                if(existsState(id)) deleteStateAsync(id);
              })};
              //###############################################################################
              
              
              
              

              EDIT: JS-Adapter 5.2.18 (aber auch latest probiert)

              EDIT2: oder hat der Fehler damit zu tun ? https://github.com/ioBroker/ioBroker.javascript/issues/924

              F 1 Antwort Letzte Antwort
              0
              • dslraserD dslraser

                @hendrick
                Ich beschäftige mich aktuell auch gerade mit diesem Thema und hänge mich hier mal drann, ich hoffe das ist okay.

                Bisher arbeite ich fast ausschließlich mit Blockly, und erstelle mit einer Javascript Funktion meine benötigten Datenpunkte. Hier im Blockly können Variablen auf true/false gestellt werden, dann werden die benötigten Datenpunkte erstellt oder bei Abwahl auch wieder gelöscht, falls die existieren. Das hat lange so funktioniert, geht nun aber nicht mehr bzw. manchmal nicht mehr. Es wird angeblich ein DP nicht gefunden, der ist aber da, das endet dann immer im Absturz der Instanz. (Fehlermeldung reiche ich nach)
                Ziel ist es alle benötigten Datenpunkte zu erstellen oder zu löschen, erst wenn das fertig ist soll die Funktion main() aufgerufen werden, darin befindet sich das eigentliche Blockly.

                host.iobroker	2021-12-16 19:47:27.171	info	Restart adapter system.adapter.javascript.0 because enabled
                host.iobroker	2021-12-16 19:47:27.171	error	instance system.adapter.javascript.0 terminated with code 6 (UNCAUGHT_EXCEPTION)
                host.iobroker	2021-12-16 19:47:27.171	error	Caught by controller[1]: at processImmediate (internal/timers.js:466:21)
                host.iobroker	2021-12-16 19:47:27.171	error	Caught by controller[1]: at Immediate.<anonymous> (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1965:33)
                host.iobroker	2021-12-16 19:47:27.171	error	Caught by controller[1]: at setStateHelper (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:390:30)
                host.iobroker	2021-12-16 19:47:27.171	error	Caught by controller[1]: at Object.<anonymous> (/opt/iobroker/node_modules/iobroker.javascript/lib/tools.js:83:39)
                host.iobroker	2021-12-16 19:47:27.171	error	Caught by controller[1]: Error: State "javascript.0.Geraete_zaehlen.Steckdosen.Haus.01_Anzeigen_und_Listen.04_eingeschaltete_Steckdosen_Liste" not found
                host.iobroker	2021-12-16 19:47:27.170	error	Caught by controller[0]: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejecte
                javascript.0	2021-12-16 19:47:26.541	warn	(27359) Terminated (UNCAUGHT_EXCEPTION): Without reason
                javascript.0	2021-12-16 19:47:26.541	info	(27359) terminating
                

                Variablen und der Inhalt der Funktion bisher:

                Bildschirmfoto 2021-12-16 um 19.21.33.png

                async function createUserStates(where, statesToCreate) {
                  let dp, idKey;
                  for(let key of statesToCreate){
                  	idKey = where + '.' + key[0];
                      dp = key[1];
                  	if (!(await existsStateAsync(idKey))) {
                  		await createStateAsync(idKey, dp);
                  	}
                  }
                }
                
                //let iqontrol_vorhanden =  'system.adapter.iqontrol'; //prüfen ob iqontol installiert ist
                //let iot_vorhanden =  'system.adapter.iot'; //prüfen ob iot installiert ist
                
                //#####################################################################################################################################################################################################################################################################################################################################################################################
                
                //Ansage Button Steckdosenansage anlegen
                if (Alexa_Ansage_verwenden == true && Steckdosen_verwenden == true){
                let statesToCreate = [
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.04_Alexa.01_Alexa_Routinebutton', {'name': '01_Alexa_Routinebutton','type': 'boolean', 'read': false, 'write': true, 'role': 'button','def':true, "smartName": {"de": 'Steckdosenansage '+[etage],"smartType": "SWITCH"} }], 
                ];
                await createUserStates(anlegen_in, statesToCreate)};
                
                //Steckdosen  Datenpunkte anlegen
                if (Steckdosen_verwenden == true){
                let statesToCreate = [
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.01_Steckdosen_Anzahl_gesamt', {'name':'01_Steckdosen_Anzahl_gesamt', 'type':'number', 'read':true, 'write':false, 'role':'value', 'unit': 'Steckdosen', 'def':0 }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.02_Steckdosen_Anzahl_eingeschaltet', {'name':'02_Steckdosen_Anzahl_eingeschaltet', 'type':'number', 'read':true, 'write':false, 'role':'value', 'unit': 'Steckdosen', 'def':0 }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.03_Steckdosen_Anzahl_ausgeschaltet', {'name':'03_Steckdosen_Anzahl_ausgeschaltet', 'type':'number', 'read':true, 'write':false, 'role':'value', 'unit': 'Steckdosen', 'def':0 }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.04_eingeschaltete_Steckdosen_Liste', {'name': '04_eingeschaltete_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'noch leer' }],    
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.05_gesamte_Steckdosen_Liste', {'name': '05_gesamte_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'noch leer' }],
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.06_html_Steckdosen_Liste', {'name':'06_html_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'html', 'def':'noch leer' }],
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.07_Steckdosen_Liste_mit_Emojis', {'name':'07_Steckdosen_Liste_mit_Emojis', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'noch leer' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.08_Steckdosen_Emoji_eingeschaltet', {'name':'08_Steckdosen_Emoji_eingeschaltet', 'type':'mixed', 'read':true, 'write':true, 'role':'mixed' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.09_Steckdosen_Emoji_ausgeschaltet', {'name':'09_Steckdosen_Emoji_ausgeschaltet', 'type':'mixed', 'read':true, 'write':true, 'role':'mixed' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.10_html_nur_eingeschaltete_Steckdosen_Liste', {'name':'10_html_nur_eingeschaltete_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'html', 'def':'noch leer' }],
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.Version', {'name':'Version', 'type':'string', 'read':false, 'write':false, 'role':'text', 'def':'' }],   
                   ///////////////////////////////////
                   // iQontrol Trigger und Schalter //
                   /////////////////////////////////// 
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.01_Thema_hell_Steckdosen_Liste', {'name':'01_Thema_hell_Steckdosen_Liste', 'type':'boolean', 'read':true, 'write':true, 'role':'switch','def':true}],
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.02_Thema_dunkel_Steckdosen_Liste', {'name':'02_Thema_dunkel_Steckdosen_Liste', 'type':'boolean', 'read':true, 'write':true, 'role':'switch','def':false}],
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.03_Thema_eigenes_Steckdosen_Liste', {'name':'03_Thema_eigenes_Steckdosen_Liste', 'type':'boolean', 'read':true, 'write':true, 'role':'switch','def':false}],
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.04_Trigger_Tabelle_iQontrol_Steckdosen_Liste', {'name': '04_Trigger_Tabelle_iQontrol_Steckdosen_Liste','type': 'boolean', 'read': false, 'write': true, 'role': 'button','def':true}], 
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.05_Schalter_fuer_Button_Tabelle_Steckdosen_Liste', {'name': '05_Schalter_fuer_Button_Tabelle_Steckdosen_Liste','type': 'boolean', 'read': true, 'write': true, 'role': 'switch','def':false}], 
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.06_Trigger_Farbe_iQontrol_Steckdosen_Liste', {'name': '06_Trigger_Farbe_iQontrol_Steckdosen_Liste','type': 'boolean', 'read': false, 'write': true, 'role': 'button','def':true}], 
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.07_Umschalter_Farbe_Steckdosen_Liste', {'name': '07_Umschalter_Farbe_Steckdosen_Liste','type': 'number', 'read': true, 'write': false, 'role': 'value','def':0}], 
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.08_Geraetestatus_in_Ueberschrift_an_aus', {'name': '08_Geraetestatus_in_Ueberschrift_an_aus','type': 'boolean', 'read': true, 'write': true, 'role': 'switch','def':true}], 
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.09_Geraete_in_HTML_Liste_schaltbar', {'name': '09_Geraete_in_HTML_Liste_schaltbar','type': 'boolean', 'read': true, 'write': true, 'role': 'switch','def':true}], 
                   ///////////////////////////////////////////////
                   // HTML Daten Hell-Dunkel nicht beschreibbar //
                   ///////////////////////////////////////////////
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.01_Hintergrundfarbe_Steckdosen_Liste', {'name':'01_Hintergrundfarbe_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'white' }],       
                   //Rahmen Kopf
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.02_Rahmenbreite_Kopf_Steckdosen_Liste', {'name':'02_Rahmenbreite_Kopf_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'0' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.03_Rahmenstyle_Kopf_Steckdosen_Liste', {'name':'03_Rahmenstyle_Kopf_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'solid' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.04_Rahmenfarbe_Kopf_Steckdosen_Liste', {'name':'04_Rahmenfarbe_Kopf_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'black' }],   
                   //Rahmen Überschrift
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.05_Rahmenbreite_Ueberschrift_Steckdosen_Liste', {'name':'05_Rahmenbreite_Ueberschrift_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'0' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.06_Rahmenstyle_Ueberschrift_Steckdosen_Liste', {'name':'06_Rahmenstyle_Ueberschrift_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'solid' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.07_Rahmenfarbe_Ueberschrift_Steckdosen_Liste', {'name':'07_Rahmenfarbe_Ueberschrift_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'black' }],   
                   //Rahmen Tabelle aussen
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.08_Rahmenbreite_Tabelle_aussen_Steckdosen_Liste', {'name':'08_Rahmenbreite_Tabelle_aussen_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'5' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.09_Rahmenstyle_Tabelle_aussen_Steckdosen_Liste', {'name':'09_Rahmenstyle_Tabelle_aussen_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'solid' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.10_Rahmenfarbe_Tabelle_aussen_Steckdosen_Liste', {'name':'10_Rahmenfarbe_Tabelle_aussen_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'black' }],   
                   //Ueberschrift
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.11_Ueberschrift_Schriftgroesse_Steckdosen_Liste', {'name':'11_Ueberschrift_Schriftgroesse_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'4' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.12_Ueberschrift_Farbe_Steckdosen_Liste', {'name':'12_Ueberschrift_Farbe_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'black' }],       
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.13_Ueberschrift_Schriftart_Steckdosen_Liste', {'name':'13_Ueberschrift_Schriftart_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'apple' }],           
                   //Bild links
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.14_Bild_links_Steckdosen_Liste', {'name':'14_Bild_links_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':' data:image/png;base64,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'}], 
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.15_Bild_links_Hoehe_Steckdosen_Liste', {'name':'15_Bild_links_Hoehe_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'8' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.16_Bild_links_Breite_Steckdosen_Liste', {'name':'16_Bild_links_Breite_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'8' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.17_Bild_links_Abstand_links_Steckdosen_Liste', {'name':'17_Bild_links_Abstand_links_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'0' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.18_Bild_links_Abstand_oben_Steckdosen_Liste', {'name':'18_Bild_links_Abstand_oben_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'0' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.19_Bild_links_Abstand_unten_Steckdosen_Liste', {'name':'19_Bild_links_Abstand_unten_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'0' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.20_Bild_links_Abstand_rechts_Steckdosen_Liste', {'name':'20_Bild_links_Abstand_rechts_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'0' }],   
                   //Bild rechts
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.21_Bild_rechts_Steckdosen_Liste', {'name':'21_Bild_rechts_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':' data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAUVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcqRVCAAAAGnRSTlMAECAwP0BQYG9wf4CPkJ+gr7C/wM/Q3+Dv8DtSRt8AAAMESURBVGje7ZndkqMgEEbBhIzEmfgvet7/QfdCM7uKBlBi1Val79JWOEIj/XUjxMc+dobJtOqIYl2VynXGvSei9fe1aRREtsKeTHQGFEtGBmB0Eie6iTYA2WKxeqCVETdRC/TzATVgZNStOgB65qotz2HTQDnzdEASF5IA3cwDEPvbtsb8QP5TyPX+GI/prnrcr2+AyLRaHk2bx/lOiNo4PgsVDaKq7ZO2UlEg8vEc0ORaJUIIkSidm6f3IY9DblO+bJdpINHtlANvRyHf40D16qqoenz6fQgy5eR2c+FVu71knhDZgCsHaAAauRcyMszl9Td3MRsUP0iBV06WLcBjH+QHz7w/Un72QG54a4uRcguHyD5AW0hjaxMfSA5w8T3WLwB5KEQRpl80gAqEVEAbkqJaoAqDKPvFHGb/wwkpgTos29ZLMeeCyOCJTFORARAdGhEhhDDAVwBklzTWiyV2QdgjjZOVQV5AFGDChZaZB9IByezP18fyeXHlgOT7qhU9fzcHpJ7POym6rlgJ0dKv5pF3QOYlUdID9BbF8i/KHgdk/qscJUm5hNj+V6M4Hk/Cq1tCbP8ByDDpxyXE9h+AvGm5zDzwA8BgB37pT17Ny7mFS2PKtS288Idt4VM+xlOOFbW2Y93WBR2Qpxz15yQtDTR7Visk/Z4iJERpSTWnVaGS6BxxJ+rQqDSWHIwvuLM9gntP6fATXgQNQOdbBHXAEF4EjeVc41fONWv7xL8w9aGMjGxfiZ37UUZGvrdZ0AJ0rmZBt1Em+7Y9xs5J+oqRslWKezdwRrHQbDdwxu5LfqCB84z+VoPu2dLLDjfVJnnVpcumWjpdgA0qQnsw/70Oe6TXsT14TR+/V2x5hPbgPw26NavjNDqFEEKV64gyXstWCCHklzWd+itu83maT5bXBsDUeebOaJ+rjQ/kb2n2hitAYymgt19m6gDV4Kkteuu95eCtGjwZzYp+yQD6NNZVedqv5pky/qV/uZVpYzLWVj8bYiKGbCNYujRxCKbUUnzsY2fYH0Cu0ke796XoAAAAAElFTkSuQmCC'}], 
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.22_Bild_rechts_Hoehe_Steckdosen_Liste', {'name':'22_Bild_rechts_Hoehe_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'8' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.23_Bild_rechts_Breite_Steckdosen_Liste', {'name':'23_Bild_rechts_Breite_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'8' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.24_Bild_rechts_Abstand_links_Steckdosen_Liste', {'name':'24_Bild_rechts_Abstand_links_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'0' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.25_Bild_rechts_Abstand_oben_Steckdosen_Liste', {'name':'25_Bild_rechts_Abstand_oben_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'0' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.26_Bild_rechts_Abstand_unten_Steckdosen_Liste', {'name':'26_Bild_rechts_Abstand_unten_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'0' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.27_Bild_rechts_Abstand_rechts_Steckdosen_Liste', {'name':'27_Bild_rechts_Abstand_rechts_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'0' }],   
                   //Abstand Kopf zur Tabelle
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.28_Abstand_Tabelle_zum_Kopf_Steckdosen_Liste', {'name':'28_Abstand_Tabelle_zum_Kopf_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'4' }],   
                   //Rahmen Tabelle
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.29_Rahmenbreite_Tabelle_innen_Steckdosen_Liste', {'name':'29_Rahmenbreite_Tabelle_innen_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'1' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.30_Rahmenfarbe_Tabelle_innen_Steckdosen_Liste', {'name':'30_Rahmenfarbe_Tabelle_innen_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'black' }],           
                   //Schrift in der Tabelle aktive Geräte
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.31_Tabelle_Schriftart_Steckdosen_Liste', {'name':'31_Tabelle_Schriftart_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'apple' }],
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.32_Tabelle_Schriftfarbe_aktives_Geraet_Steckdosen_Liste', {'name':'32_Tabelle_Schriftfarbe_aktives_Geraet_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'red' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.33_Tabelle_Schriftgroesse_aktives_Geraet_Steckdosen_Liste', {'name':'33_Tabelle_Schriftgroesse_aktives_Geraet_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'3.5' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.34_Tabelle_Schriftfarbe_aktives_Geraet_Status_Steckdosen_Liste', {'name':'34_Tabelle_Schriftfarbe_aktives_Geraet_Status_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'red' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.35_Tabelle_Schriftgroesse_aktives_Geraet_Status_Steckdosen_Liste', {'name':'35_Tabelle_Schriftgroesse_aktives_Geraet_Status_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'3.5' }],        
                   //Schrift in der Tabelle inaktive Geräte
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.36_Tabelle_Schriftfarbe_inaktives_Geraet_Steckdosen_Liste', {'name':'36_Tabelle_Schriftfarbe_inaktives_Geraet_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'black' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.37_Tabelle_Schriftgroesse_inaktives_Geraet_Steckdosen_Liste', {'name':'37_Tabelle_Schriftgroesse_inaktives_Geraet_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'3.5' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.38_Tabelle_Schriftfarbe_inaktives_Geraet_Status_Steckdosen_Liste', {'name':'38_Tabelle_Schriftfarbe_inaktives_Geraet_Status_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'black' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.39_Tabelle_Schriftgroesse_inaktives_Geraet_Status_Steckdosen_Liste', {'name':'39_Tabelle_Schriftgroesse_inaktives_Geraet_Status_Steckdosen_Liste', 'type':'string', 'read':true, 'write':false, 'role':'text', 'def':'3.5' }],        
                   //Schriftgroesse Status Geräte Ueberschrift
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.40_Ueberschrift_Schriftgroesse_aktive_Geraete', {'name':'40_Ueberschrift_Schriftgroesse_aktive_Geraete', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':'3' }],        
                   //Groesse Schaltfeld    
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.41_Schaltfeld_Groesse_Steckdosen_Liste', {'name':'41_Schaltfeld_Groesse_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':'4' }],        
                   //////////////////////////////////////////////////
                   // HTML Daten eigene Einstellungen beschreibbar // 
                   //////////////////////////////////////////////////
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.01_Hintergrundfarbe_Steckdosen_Liste', {'name':'01_Hintergrundfarbe_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],      
                   //Rahmen Kopf
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.02_Rahmenbreite_Kopf_Steckdosen_Liste', {'name':'02_Rahmenbreite_Kopf_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.03_Rahmenstyle_Kopf_Steckdosen_Liste', {'name':'03_Rahmenstyle_Kopf_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.04_Rahmenfarbe_Kopf_Steckdosen_Liste', {'name':'04_Rahmenfarbe_Kopf_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   //Rahmen Überschrift
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.05_Rahmenbreite_Ueberschrift_Steckdosen_Liste', {'name':'05_Rahmenbreite_Ueberschrift_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.06_Rahmenstyle_Ueberschrift_Steckdosen_Liste', {'name':'06_Rahmenstyle_Ueberschrift_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.07_Rahmenfarbe_Ueberschrift_Steckdosen_Liste', {'name':'07_Rahmenfarbe_Ueberschrift_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   //Rahmen Tabelle aussen
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.08_Rahmenbreite_Tabelle_aussen_Steckdosen_Liste', {'name':'08_Rahmenbreite_Tabelle_aussen_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.09_Rahmenstyle_Tabelle_aussen_Steckdosen_Liste', {'name':'09_Rahmenstyle_Tabelle_aussen_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.10_Rahmenfarbe_Tabelle_aussen_Steckdosen_Liste', {'name':'10_Rahmenfarbe_Tabelle_aussen_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   //Ueberschrift
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.11_Ueberschrift_Schriftgroesse_Steckdosen_Liste', {'name':'11_Ueberschrift_Schriftgroesse_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.12_Ueberschrift_Farbe_Steckdosen_Liste', {'name':'12_Ueberschrift_Farbe_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],       
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.13_Ueberschrift_Schriftart_Steckdosen_Liste', {'name':'13_Ueberschrift_Schriftart_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],           
                   //Bild links
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.14_Bild_links_Steckdosen_Liste', {'name':'14_Bild_links_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }], 
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.15_Bild_links_Hoehe_Steckdosen_Liste', {'name':'15_Bild_links_Hoehe_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.16_Bild_links_Breite_Steckdosen_Liste', {'name':'16_Bild_links_Breite_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.17_Bild_links_Abstand_links_Steckdosen_Liste', {'name':'17_Bild_links_Abstand_links_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.18_Bild_links_Abstand_oben_Steckdosen_Liste', {'name':'18_Bild_links_Abstand_oben_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.19_Bild_links_Abstand_unten_Steckdosen_Liste', {'name':'19_Bild_links_Abstand_unten_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.20_Bild_links_Abstand_rechts_Steckdosen_Liste', {'name':'20_Bild_links_Abstand_rechts_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   //Bild rechts
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.21_Bild_rechts_Steckdosen_Liste', {'name':'21_Bild_rechts_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }], 
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.22_Bild_rechts_Hoehe_Steckdosen_Liste', {'name':'22_Bild_rechts_Hoehe_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.23_Bild_rechts_Breite_Steckdosen_Liste', {'name':'23_Bild_rechts_Breite_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.24_Bild_rechts_Abstand_links_Steckdosen_Liste', {'name':'24_Bild_rechts_Abstand_links_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.25_Bild_rechts_Abstand_oben_Steckdosen_Liste', {'name':'25_Bild_rechts_Abstand_oben_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.26_Bild_rechts_Abstand_unten_Steckdosen_Liste', {'name':'26_Bild_rechts_Abstand_unten_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.27_Bild_rechts_Abstand_rechts_Steckdosen_Liste', {'name':'27_Bild_rechts_Abstand_rechts_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   //Abstand Kopf zur Tabelle
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.28_Abstand_Tabelle_zum_Kopf_Steckdosen_Liste', {'name':'28_Abstand_Tabelle_zum_Kopf_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   //Rahmen Tabelle
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.29_Rahmenbreite_Tabelle_innen_Steckdosen_Liste', {'name':'29_Rahmenbreite_Tabelle_innen_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.30_Rahmenfarbe_Tabelle_innen_Steckdosen_Liste', {'name':'30_Rahmenfarbe_Tabelle_innen_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],           
                   //Schrift in der Tabelle aktive Gerätte
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.31_Tabelle_Schriftart_Steckdosen_Liste', {'name':'31_Tabelle_Schriftart_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.32_Tabelle_Schriftfarbe_aktives_Geraet_Steckdosen_Liste', {'name':'32_Tabelle_Schriftfarbe_aktives_Geraet_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.33_Tabelle_Schriftgroesse_aktives_Geraet_Steckdosen_Liste', {'name':'33_Tabelle_Schriftgroesse_aktives_Geraet_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.34_Tabelle_Schriftfarbe_aktives_Geraet_Status_Steckdosen_Liste', {'name':'34_Tabelle_Schriftfarbe_aktives_Geraet_Status_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.35_Tabelle_Schriftgroesse_aktives_Geraet_Status_Steckdosen_Liste', {'name':'35_Tabelle_Schriftgroesse_aktives_Geraet_Status_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],        
                   //Schrift in der Tabelle inaktive Gerätte
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.36_Tabelle_Schriftfarbe_inaktives_Geraet_Steckdosen_Liste', {'name':'36_Tabelle_Schriftfarbe_inaktives_Geraet_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.37_Tabelle_Schriftgroesse_inaktives_Geraet_Steckdosen_Liste', {'name':'37_Tabelle_Schriftgroesse_inaktives_Geraet_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.38_Tabelle_Schriftfarbe_inaktives_Geraet_Status_Steckdosen_Liste', {'name':'38_Tabelle_Schriftfarbe_inaktives_Geraet_Status_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],   
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.39_Tabelle_Schriftgroesse_inaktives_Geraet_Status_Steckdosen_Liste', {'name':'39_Tabelle_Schriftgroesse_inaktives_Geraet_Status_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],        
                   //Schriftgroesse Status Geräte Ueberschrift
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.40_Ueberschrift_Schriftgroesse_aktive_Geraete', {'name':'40_Ueberschrift_Schriftgroesse_aktive_Geraete', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],        
                   //Groesse Schaltfeld    
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.02_HTML_Eigene_Einstellungen.41_Schaltfeld_Groesse_Steckdosen_Liste', {'name':'41_Schaltfeld_Groesse_Steckdosen_Liste', 'type':'string', 'read':true, 'write':true, 'role':'text', 'def':' ' }],            
                ];
                await createUserStates(anlegen_in, statesToCreate)};
                
                //Telegram Steckdosen  Nachrichtenversand anlegen mit SmartNamen
                if (Steckdosen_verwenden == true && Telegram_verwenden == true && Alexa_Ansage_verwenden == true){
                let statesToCreate = [
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.05_Telegram.Telegram_Steckdosen_'+[etage]+'_Versand_an_aus', {'name':'Telegram_Steckdosen_'+[etage]+'_Versand_an_aus', 'type':'boolean', 'read':true, 'write':true, 'role':'switch', 'def':false }],
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.05_Telegram.Telegram_Steckdosenstatus_'+[etage]+'_senden', {'name':'Telegram_Steckdosenstatus_'+[etage]+'_senden', 'type':'boolean', 'read':false, 'write':true, 'role':'button', 'def':true, "smartName": {"de": 'Telegram Steckdosenstatus '+[etage]+' senden',"smartType": "SWITCH"} }],   
                ];
                await createUserStates(anlegen_in, statesToCreate)};
                
                //Telegram Steckdosen  Nachrichtenversand anlegen ohne SmartNamen
                if (Steckdosen_verwenden == true && Telegram_verwenden == true && Alexa_Ansage_verwenden == false){
                let statesToCreate = [
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.05_Telegram.Telegram_Steckdosen_'+[etage]+'_Versand_an_aus', {'name':'Telegram_Steckdosen_'+[etage]+'_Versand_an_aus', 'type':'boolean', 'read':true, 'write':true, 'role':'switch', 'def':false }],
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.05_Telegram.Telegram_Steckdosenstatus_'+[etage]+'_senden', {'name':'Telegram_Steckdosenstatus_'+[etage]+'_senden', 'type':'boolean', 'read':false, 'write':true, 'role':'button', 'def':true, "smartName": false }],   
                ];
                await createUserStates(anlegen_in, statesToCreate)};
                
                //E-Mail Steckdosen Nachrichtenversand anlegen mit SmartNamen
                if (Steckdosen_verwenden == true && Email_verwenden == true && Alexa_Ansage_verwenden == true){
                let statesToCreate = [
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.06_E-Mail.EMAIL_Steckdosen_'+[etage]+'_Versand_an_aus', {'name':'EMAIL_Steckdosen_'+[etage]+'_Versand_an_aus', 'type':'boolean', 'read':true, 'write':true, 'role':'switch', 'def':false }],
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.06_E-Mail.EMAIL_Steckdosenstatus_'+[etage]+'_senden', {'name':'EMAIL_Steckdosenstatus_'+[etage]+'_senden', 'type':'boolean', 'read':false, 'write':true, 'role':'button', 'def':true, "smartName": {"de": 'EMAIL Steckdosenstatus '+[etage]+' senden',"smartType": "SWITCH"} }],   
                ];
                await createUserStates(anlegen_in, statesToCreate)};
                
                //E-Mail Steckdosen Nachrichtenversand anlegen mit SmartNamen
                if (Steckdosen_verwenden == true && Email_verwenden == true && Alexa_Ansage_verwenden == false){
                let statesToCreate = [
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.06_E-Mail.EMAIL_Steckdosen_'+[etage]+'_Versand_an_aus', {'name':'EMAIL_Steckdosen_'+[etage]+'_Versand_an_aus', 'type':'boolean', 'read':true, 'write':true, 'role':'switch', 'def':false }],
                   ['Geraete_zaehlen.Steckdosen.'+[etage]+'.06_E-Mail.EMAIL_Steckdosenstatus_'+[etage]+'_senden', {'name':'EMAIL_Steckdosenstatus_'+[etage]+'_senden', 'type':'boolean', 'read':false, 'write':true, 'role':'button', 'def':true, "smartName": false }],   
                ];
                await createUserStates(anlegen_in, statesToCreate)};
                
                //#####################################################################################################################################################################################################################################################################################################################################################################################
                
                //Ab hier Datenpunkte löschen
                //###############################################################################
                
                if (!Steckdosen_verwenden && anlegen_in.slice(0, 10) == 'javascript') {
                const idsjs = $('javascript.*.Geraete_zaehlen.Steckdosen*');
                idsjs.each(function(id, i) {
                  if(existsState(id)) deleteState(id);
                })};
                
                if (!Steckdosen_verwenden && anlegen_in.slice(0, 10) == '0_userdata') {
                const idsud = $('0_userdata.0.Geraete_zaehlen.Steckdosen*');
                idsud.each(function(id, i) {
                  if(existsState(id)) deleteState(id);
                })};
                
                //###############################################################################
                
                if (!Alexa_Ansage_verwenden && anlegen_in.slice(0, 10) == 'javascript') {
                const idsjs = $('javascript.*.Geraete_zaehlen.Steckdosen.*.04_Alexa.*');  
                idsjs.each(function(id, i) {
                  if(existsState(id)) deleteState(id);
                })};
                
                if (!Alexa_Ansage_verwenden && anlegen_in.slice(0, 10) == '0_userdata') {
                const idsud = $('0_userdata.0.Geraete_zaehlen.Steckdosen.*.04_Alexa.*');  
                idsud.each(function(id, i) {
                  if(existsState(id)) deleteState(id);
                })};
                
                //###############################################################################
                
                if (!Telegram_verwenden && anlegen_in.slice(0, 10) == 'javascript') {
                const idsjs = $('javascript.*.Geraete_zaehlen.Steckdosen.*.05_Telegram.*'); 
                idsjs.each(function(id, i) {
                  if(existsState(id)) deleteState(id);
                })};
                
                if (!Telegram_verwenden && anlegen_in.slice(0, 10) == '0_userdata') {
                const idsud = $('0_userdata.0.Geraete_zaehlen.Steckdosen.*.05_Telegram.*'); 
                idsud.each(function(id, i) {
                  if(existsState(id)) deleteState(id);
                })};
                
                //###############################################################################
                
                if (!Email_verwenden && anlegen_in.slice(0, 10) == 'javascript') {
                const idsjs = $('javascript.*.Geraete_zaehlen.Steckdosen.*.06_E-Mail.*'); 
                idsjs.each(function(id, i) {
                  if(existsState(id)) deleteState(id);
                })};
                
                if (!Email_verwenden && anlegen_in.slice(0, 10) == '0_userdata') {
                const idsud = $('0_userdata.0.Geraete_zaehlen.Steckdosen.*.06_E-Mail.*'); 
                idsud.each(function(id, i) {
                  if(existsState(id)) deleteState(id);
                })};
                
                //###############################################################################
                
                //Funktion main mit Verzögerung aufrufen
                //timeout = setTimeout(function () {
                //  main();
                //}, 5000);
                main()
                

                Mein aktueller Versuch: (endet aber auch manchmal im Fehler, manchmal geht es aber auch x Mal ohne Fehler ? Wie müßte sowas "richtig" gemacht werden ? In dieser Testfunktion habe ich die Variablen, die sonst im Blockly sind, oben eingefügt. Die Datenpunkte sind nicht vollständig, sonder nur der Anfang. (der Aufruf von main() ist auch noch nicht drinn.
                Über Hilfe würde ich mich freuen.

                var Steckdosen_verwenden,Alexa_Ansage_verwenden,Telegram_verwenden,Email_verwenden,anlegen_in,etage;
                anlegen_in = 'javascript.0'
                etage = 'Haus'
                Steckdosen_verwenden = true;
                Alexa_Ansage_verwenden = true;
                Telegram_verwenden = false;
                Email_verwenden = false;
                
                
                mainAsync();
                async function mainAsync() {
                
                if(Steckdosen_verwenden){ 
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.01_Steckdosen_Anzahl_gesamt', {name:'01_Steckdosen_Anzahl_gesamt', type:'number', read:true, write:false, role:'value', unit:'Steckdosen', def:0 });
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.02_Steckdosen_Anzahl_eingeschaltet', {name:'02_Steckdosen_Anzahl_eingeschaltet',type:'number', read:true, write:false, role:'value',unit:'Steckdosen', def:0});
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.03_Steckdosen_Anzahl_ausgeschaltet', {name:'03_Steckdosen_Anzahl_ausgeschaltet',type:'number', read:true, write:false, role:'value',unit:'Steckdosen', def:0});
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.04_eingeschaltete_Steckdosen_Liste', {name:'04_eingeschaltete_Steckdosen_Liste',type:'string', read:true, write:false, role:'text', def:'noch leer'});
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.05_gesamte_Steckdosen_Liste', {name:'05_gesamte_Steckdosen_Liste',type:'string', read:true, write:false, role:'text', def:'noch leer'});
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.06_html_Steckdosen_Liste', {name:'06_html_Steckdosen_Liste',type:'string', read:true, write:false, role:'html', def:'noch leer'}); 
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.07_Steckdosen_Liste_mit_Emojis', {name:'07_Steckdosen_Liste_mit_Emojis',type:'string', read:true, write:false, role:'text', def:'noch leer'});
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.08_Steckdosen_Emoji_eingeschaltet', {name:'08_Steckdosen_Emoji_eingeschaltet',type:'mixed', read:true, write:true, role:'mixed'});
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.09_Steckdosen_Emoji_ausgeschaltet', {name:'09_Steckdosen_Emoji_ausgeschaltet',type:'mixed', read:true, write:true, role:'mixed'});
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.01_Anzeigen_und_Listen.10_html_nur_eingeschaltete_Steckdosen_Liste', {name:'10_html_nur_eingeschaltete_Steckdosen_Liste',type:'string', read:true, write:false, role:'html', def:'noch leer'});
                
                // iQontrol Trigger und Schalter
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.01_Thema_hell_Steckdosen_Liste', {name:'01_Thema_hell_Steckdosen_Liste',type:'boolean', read:true, write:true, role:'switch', def:true});
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.02_Thema_dunkel_Steckdosen_Liste', {name:'02_Thema_dunkel_Steckdosen_Liste',type: 'boolean', read:true, write:true, role:'switch', def:false});
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.03_Thema_eigenes_Steckdosen_Liste', {name:'03_Thema_eigenes_Steckdosen_Liste',type:'boolean', read:true, write:true, role:'switch', def:false});
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.04_Trigger_Tabelle_iQontrol_Steckdosen_Liste', {name:'04_Trigger_Tabelle_iQontrol_Steckdosen_Liste',type:'boolean', read:false, write:true, role:'button', def:true});
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.05_Schalter_fuer_Button_Tabelle_Steckdosen_Liste', {name:'05_Schalter_fuer_Button_Tabelle_Steckdosen_Liste',type:'boolean', read:true, write:true, role:'switch', def:false});
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.06_Trigger_Farbe_iQontrol_Steckdosen_Liste', {name:'06_Trigger_Farbe_iQontrol_Steckdosen_Liste',type:'boolean', read:false, write:true, role:'button', def:true});
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.07_Umschalter_Farbe_Steckdosen_Liste', {name:'07_Umschalter_Farbe_Steckdosen_Liste',type:'number', read:true, write:false, role:'value', def:0});
                await  createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.08_Geraetestatus_in_Ueberschrift_an_aus', {name:'08_Geraetestatus_in_Ueberschrift_an_aus',type:'boolean', read:true, write:true, role:'switch', def:true});
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.02_Trigger_und_Schalter.09_Geraete_in_HTML_Liste_schaltbar', {name:'09_Geraete_in_HTML_Liste_schaltbar',type:'boolean', read:true, write:true, role:'switch', def:true});
                
                // HTML Daten Hell-Dunkel nicht beschreibbar
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.01_Hintergrundfarbe_Steckdosen_Liste', {name:'01_Hintergrundfarbe_Steckdosen_Liste',type:'string', read:true, write:false, role:'text', def:'white'});
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.02_Rahmenbreite_Kopf_Steckdosen_Liste', {name:'02_Rahmenbreite_Kopf_Steckdosen_Liste',type:'string', read:true, write:false, role:'text', def:'0'});
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.03_HTML_Daten.01_HTML_Hell_Dunkel_Festeinstellung.03_Rahmenstyle_Kopf_Steckdosen_Liste', {name:'03_Rahmenstyle_Kopf_Steckdosen_Liste',type:'string', read:true, write:false, role:'text', def:'solid'})
                
                
                
                       // States erstellt   
                       console.log('States 1 erfolgreich erstellt.');
                   }} 
                
                
                
                alexa_dp_Async();
                async function alexa_dp_Async() {
                if(Alexa_Ansage_verwenden && Steckdosen_verwenden){ 
                
                await createStateAsync([anlegen_in]+'.Geraete_zaehlen.Steckdosen.'+[etage]+'.04_Alexa.01_Alexa_Routinebutton', {name:'01_Alexa_Routinebutton',type: 'boolean', read:false, write:true, role:'button',def:true, smartName: {'de': 'Steckdosenansage '+[etage],smartType:'SWITCH'}})
                
                       // States erstellt    
                       console.log('States 2 erfolgreich erstellt.')
                
                   }} 
                
                
                //Ab hier Datenpunkte löschen falls abgewählt
                //###############################################################################
                //alle DP löschen
                if (!Steckdosen_verwenden && anlegen_in.slice(0, 10) == 'javascript') {
                      console.log('alle States vom Blockly Steckdosen zählen werden gelöscht')
                const idsjs = $('javascript.*.Geraete_zaehlen.Steckdosen*');
                idsjs.each(function(id, i) {
                  if(existsState(id)) deleteStateAsync(id);
                })};
                
                if (!Steckdosen_verwenden && anlegen_in.slice(0, 10) == '0_userdata') {
                       console.log('alle States vom Blockly Steckdosen zählen werden gelöscht')
                const idsud = $('0_userdata.0.Geraete_zaehlen.Steckdosen*');
                idsud.each(function(id, i) {
                  if(existsState(id)) deleteStateAsync(id);
                })};
                //###############################################################################
                //Alexa DP löschen
                if (!Alexa_Ansage_verwenden && anlegen_in.slice(0, 10) == 'javascript') {
                  console.log('Alexa State vom Blockly Steckdosen zählen wird gelöscht')
                const idsjs = $('javascript.*.Geraete_zaehlen.Steckdosen.*.04_Alexa.*');  
                idsjs.each(function(id, i) {
                  if(existsState(id)) deleteStateAsync(id);
                })};
                
                if (!Alexa_Ansage_verwenden && anlegen_in.slice(0, 10) == '0_userdata') {
                  console.log('Alexa State vom Blockly Steckdosen zählen wird gelöscht')
                const idsud = $('0_userdata.0.Geraete_zaehlen.Steckdosen.*.04_Alexa.*');  
                idsud.each(function(id, i) {
                  if(existsState(id)) deleteStateAsync(id);
                })};
                //###############################################################################
                //Telegram DP löschen
                if (!Telegram_verwenden && anlegen_in.slice(0, 10) == 'javascript') {
                const idsjs = $('javascript.*.Geraete_zaehlen.Steckdosen.*.05_Telegram.*'); 
                idsjs.each(function(id, i) {
                  if(existsState(id)) deleteStateAsync(id);
                })};
                
                if (!Telegram_verwenden && anlegen_in.slice(0, 10) == '0_userdata') {
                const idsud = $('0_userdata.0.Geraete_zaehlen.Steckdosen.*.05_Telegram.*'); 
                idsud.each(function(id, i) {
                  if(existsState(id)) deleteStateAsync(id);
                })};
                //###############################################################################
                //E-Mail DP löschen
                if (!Email_verwenden && anlegen_in.slice(0, 10) == 'javascript') {
                const idsjs = $('javascript.*.Geraete_zaehlen.Steckdosen.*.06_E-Mail.*'); 
                idsjs.each(function(id, i) {
                  if(existsState(id)) deleteStateAsync(id);
                })};
                
                if (!Email_verwenden && anlegen_in.slice(0, 10) == '0_userdata') {
                const idsud = $('0_userdata.0.Geraete_zaehlen.Steckdosen.*.06_E-Mail.*'); 
                idsud.each(function(id, i) {
                  if(existsState(id)) deleteStateAsync(id);
                })};
                //###############################################################################
                
                
                
                

                EDIT: JS-Adapter 5.2.18 (aber auch latest probiert)

                EDIT2: oder hat der Fehler damit zu tun ? https://github.com/ioBroker/ioBroker.javascript/issues/924

                F Offline
                F Offline
                fastfoot
                schrieb am zuletzt editiert von
                #25

                @dslraser sagte in async / await -> Muster Anleitung gesucht:

                State "javascript.0.Geraete_zaehlen.Steckdosen.Haus.01_Anzeigen_und_Listen.04_eingeschaltete_Steckdosen_Liste"

                was ist mit diesem DP wenn du nach der Fehlermeldung in den Objekten schaust? Evtl. nach Refresh oder testweise Adapter-Neustart. Wenn der State dann da ist würde ich auf das im issue genannte Timing Problem tippen. Allerdings wird dort der Fehler nur genannt wenn ein init Wert besteht, nicht wenn man diesen in common.def definiert. Das ist aber bei dir so. Das issue habe ich selbst auch nicht, evtl. weil ich etwas schnellere Hardware nutze

                iobroker läuft unter Docker auf QNAP TS-451+
                SkriptRecovery: https://forum.iobroker.net/post/930558

                dslraserD 1 Antwort Letzte Antwort
                0
                • F fastfoot

                  @dslraser sagte in async / await -> Muster Anleitung gesucht:

                  State "javascript.0.Geraete_zaehlen.Steckdosen.Haus.01_Anzeigen_und_Listen.04_eingeschaltete_Steckdosen_Liste"

                  was ist mit diesem DP wenn du nach der Fehlermeldung in den Objekten schaust? Evtl. nach Refresh oder testweise Adapter-Neustart. Wenn der State dann da ist würde ich auf das im issue genannte Timing Problem tippen. Allerdings wird dort der Fehler nur genannt wenn ein init Wert besteht, nicht wenn man diesen in common.def definiert. Das ist aber bei dir so. Das issue habe ich selbst auch nicht, evtl. weil ich etwas schnellere Hardware nutze

                  dslraserD Offline
                  dslraserD Offline
                  dslraser
                  Forum Testing Most Active
                  schrieb am zuletzt editiert von
                  #26

                  @fastfoot
                  der DP aus der Fehlermeldung ist immer da.

                  F 1 Antwort Letzte Antwort
                  0
                  • dslraserD dslraser

                    @fastfoot
                    der DP aus der Fehlermeldung ist immer da.

                    F Offline
                    F Offline
                    fastfoot
                    schrieb am zuletzt editiert von
                    #27

                    @dslraser sagte in async / await -> Muster Anleitung gesucht:

                    @fastfoot
                    der DP aus der Fehlermeldung ist immer da.

                    dann ist es wohl ein Timing problem. Das async/await ist schon ok und kann auch nicht 'verbessert' werden. Ich würde als Workaround ein await wait(1000) hinter den Aufruf von createStates() setzen. Eigentlich sollte aber genau das ja durch await vermieden werden. Im issue wurde es als enhancement markiert, in meinen Augen wäre das dann aber ein Bug. @apollon77 hast du dazu eine Antwort?

                    iobroker läuft unter Docker auf QNAP TS-451+
                    SkriptRecovery: https://forum.iobroker.net/post/930558

                    dslraserD apollon77A 2 Antworten Letzte Antwort
                    0
                    • F fastfoot

                      @dslraser sagte in async / await -> Muster Anleitung gesucht:

                      @fastfoot
                      der DP aus der Fehlermeldung ist immer da.

                      dann ist es wohl ein Timing problem. Das async/await ist schon ok und kann auch nicht 'verbessert' werden. Ich würde als Workaround ein await wait(1000) hinter den Aufruf von createStates() setzen. Eigentlich sollte aber genau das ja durch await vermieden werden. Im issue wurde es als enhancement markiert, in meinen Augen wäre das dann aber ein Bug. @apollon77 hast du dazu eine Antwort?

                      dslraserD Offline
                      dslraserD Offline
                      dslraser
                      Forum Testing Most Active
                      schrieb am zuletzt editiert von
                      #28

                      @fastfoot sagte in async / await -> Muster Anleitung gesucht:

                      await wait(1000)

                      damit lief es eben sauber durch. Mal sehen wie weit ich mit der Zeit runter gehen kann.

                      F 1 Antwort Letzte Antwort
                      0
                      • dslraserD dslraser

                        @fastfoot sagte in async / await -> Muster Anleitung gesucht:

                        await wait(1000)

                        damit lief es eben sauber durch. Mal sehen wie weit ich mit der Zeit runter gehen kann.

                        F Offline
                        F Offline
                        fastfoot
                        schrieb am zuletzt editiert von
                        #29

                        @dslraser sagte in async / await -> Muster Anleitung gesucht:

                        @fastfoot sagte in async / await -> Muster Anleitung gesucht:

                        await wait(1000)

                        damit lief es eben sauber durch. Mal sehen wie weit ich mit der Zeit runter gehen kann.

                        das tat es ja vorher auch schon ohne das Warten :-) Ich würde es erst mal so lassen, da es nur ein Workaround sein kann bis der eigentliche Fehler gefunden und gefixt ist. Mir ist es noch nicht ganz klar weil ich von await erwartet hätte dass die Funktion dann auch wirklich fertig ist und nicht noch etwas im Hintergrund rumtrödelt. Aber mal sehen was apollon77 dazu sagt falls er die Zeit findet

                        iobroker läuft unter Docker auf QNAP TS-451+
                        SkriptRecovery: https://forum.iobroker.net/post/930558

                        dslraserD 1 Antwort Letzte Antwort
                        0
                        • F fastfoot

                          @dslraser sagte in async / await -> Muster Anleitung gesucht:

                          @fastfoot sagte in async / await -> Muster Anleitung gesucht:

                          await wait(1000)

                          damit lief es eben sauber durch. Mal sehen wie weit ich mit der Zeit runter gehen kann.

                          das tat es ja vorher auch schon ohne das Warten :-) Ich würde es erst mal so lassen, da es nur ein Workaround sein kann bis der eigentliche Fehler gefunden und gefixt ist. Mir ist es noch nicht ganz klar weil ich von await erwartet hätte dass die Funktion dann auch wirklich fertig ist und nicht noch etwas im Hintergrund rumtrödelt. Aber mal sehen was apollon77 dazu sagt falls er die Zeit findet

                          dslraserD Offline
                          dslraserD Offline
                          dslraser
                          Forum Testing Most Active
                          schrieb am zuletzt editiert von
                          #30

                          @fastfoot
                          selbst mit await wait(100)lief es jetzt x Mal sauber und ohne Absturz durch, also wirklich irgendein Timing Problem.

                          1 Antwort Letzte Antwort
                          0
                          • F fastfoot

                            @dslraser sagte in async / await -> Muster Anleitung gesucht:

                            @fastfoot
                            der DP aus der Fehlermeldung ist immer da.

                            dann ist es wohl ein Timing problem. Das async/await ist schon ok und kann auch nicht 'verbessert' werden. Ich würde als Workaround ein await wait(1000) hinter den Aufruf von createStates() setzen. Eigentlich sollte aber genau das ja durch await vermieden werden. Im issue wurde es als enhancement markiert, in meinen Augen wäre das dann aber ein Bug. @apollon77 hast du dazu eine Antwort?

                            apollon77A Offline
                            apollon77A Offline
                            apollon77
                            schrieb am zuletzt editiert von
                            #31

                            @fastfoot Naja das await stellt in dem Augenblick nur sicher das das Objekt angelegt und der Wert gesetzt wurde ... Ich hab auch überlegt ob bug oder enhancement :-)) ist so ne sache ... ja es ist ... ... unerwartet das es ist wie es ist :-) ALso ja man kann auch sagen es ist ein Bug ...

                            Der JavaScript Adapter versucht viele Dinge für den User zu vereinfachen und die "komplexität durch asynchronität" wegzunehmen ... und das ist nicht ganz so simpel wie man hier sieht :-)

                            Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                            • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                            • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                            F 1 Antwort Letzte Antwort
                            0
                            • apollon77A apollon77

                              @fastfoot Naja das await stellt in dem Augenblick nur sicher das das Objekt angelegt und der Wert gesetzt wurde ... Ich hab auch überlegt ob bug oder enhancement :-)) ist so ne sache ... ja es ist ... ... unerwartet das es ist wie es ist :-) ALso ja man kann auch sagen es ist ein Bug ...

                              Der JavaScript Adapter versucht viele Dinge für den User zu vereinfachen und die "komplexität durch asynchronität" wegzunehmen ... und das ist nicht ganz so simpel wie man hier sieht :-)

                              F Offline
                              F Offline
                              fastfoot
                              schrieb am zuletzt editiert von
                              #32

                              @apollon77 Danke für deine hilfreiche Antwort, das hilft (mir) sehr bei der Einordnung. Einen Workaround gibt es ja immerhin und damit kann/muss man jetzt erstmal leben.

                              iobroker läuft unter Docker auf QNAP TS-451+
                              SkriptRecovery: https://forum.iobroker.net/post/930558

                              apollon77A 1 Antwort Letzte Antwort
                              0
                              • F fastfoot

                                @apollon77 Danke für deine hilfreiche Antwort, das hilft (mir) sehr bei der Einordnung. Einen Workaround gibt es ja immerhin und damit kann/muss man jetzt erstmal leben.

                                apollon77A Offline
                                apollon77A Offline
                                apollon77
                                schrieb am zuletzt editiert von
                                #33

                                @fastfoot Ich denke die echte warte zeit sind eher maximal 100ms ... aber naja :-)

                                Beitrag hat geholfen? Votet rechts unten im Beitrag :-) https://paypal.me/Apollon77 / https://github.com/sponsors/Apollon77

                                • Debug-Log für Instanz einschalten? Admin -> Instanzen -> Expertenmodus -> Instanz aufklappen - Loglevel ändern
                                • Logfiles auf Platte /opt/iobroker/log/… nutzen, Admin schneidet Zeilen ab
                                F 1 Antwort Letzte Antwort
                                0
                                • apollon77A apollon77

                                  @fastfoot Ich denke die echte warte zeit sind eher maximal 100ms ... aber naja :-)

                                  F Offline
                                  F Offline
                                  fastfoot
                                  schrieb am zuletzt editiert von
                                  #34

                                  @apollon77 ich gehe da immer sehr konservativ ran :-) @dslraser hat es ja schon auf 100ms runter gedrückt. Bevor ich mich dann endlich mal mit async/await beschäftigt hatte hat auch schon mal ein await wait(0) definitiv geholfen, in anderem Kontext allerdings :-)

                                  iobroker läuft unter Docker auf QNAP TS-451+
                                  SkriptRecovery: https://forum.iobroker.net/post/930558

                                  dslraserD 1 Antwort Letzte Antwort
                                  0
                                  • F fastfoot

                                    @apollon77 ich gehe da immer sehr konservativ ran :-) @dslraser hat es ja schon auf 100ms runter gedrückt. Bevor ich mich dann endlich mal mit async/await beschäftigt hatte hat auch schon mal ein await wait(0) definitiv geholfen, in anderem Kontext allerdings :-)

                                    dslraserD Offline
                                    dslraserD Offline
                                    dslraser
                                    Forum Testing Most Active
                                    schrieb am zuletzt editiert von
                                    #35

                                    @fastfoot sagte in async / await -> Muster Anleitung gesucht:

                                    @apollon77 ich gehe da immer sehr konservativ ran :-) @dslraser hat es ja schon auf 100ms runter gedrückt. Bevor ich mich dann endlich mal mit async/await beschäftigt hatte hat auch schon mal ein await wait(0) definitiv geholfen, in anderem Kontext allerdings :-)

                                    50ms reichen auch, damit läuft es bei mir auch. Testweise 10ms, das ging dann schief und der Fehler kam wieder.

                                    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

                                    331

                                    Online

                                    32.5k

                                    Benutzer

                                    81.8k

                                    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