Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

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

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    254

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.6k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

async / await -> Muster Anleitung gesucht

Scheduled Pinned Locked Moved JavaScript
35 Posts 10 Posters 3.6k Views 13 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • 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 Online
    bahnuhrB Online
    bahnuhr
    Forum Testing Most Active
    wrote on last edited by
    #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 Reply Last reply
    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
      wrote on last edited by
      #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 Reply Last reply
      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
        wrote on last edited by
        #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 Reply Last reply
        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
          wrote on last edited by 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 Reply Last reply
          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
            wrote on last edited by
            #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 Reply Last reply
            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
              wrote on last edited by
              #26

              @fastfoot
              der DP aus der Fehlermeldung ist immer da.

              F 1 Reply Last reply
              0
              • dslraserD dslraser

                @fastfoot
                der DP aus der Fehlermeldung ist immer da.

                F Offline
                F Offline
                fastfoot
                wrote on last edited by
                #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 Replies Last reply
                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
                  wrote on last edited by
                  #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 Reply Last reply
                  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
                    wrote on last edited by
                    #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 Reply Last reply
                    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
                      wrote on last edited by
                      #30

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

                      1 Reply Last reply
                      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 Online
                        apollon77A Online
                        apollon77
                        wrote on last edited by
                        #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 Reply Last reply
                        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
                          wrote on last edited by
                          #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 Reply Last reply
                          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 Online
                            apollon77A Online
                            apollon77
                            wrote on last edited by
                            #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 Reply Last reply
                            0
                            • apollon77A apollon77

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

                              F Offline
                              F Offline
                              fastfoot
                              wrote on last edited by
                              #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 Reply Last reply
                              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
                                wrote on last edited by
                                #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 Reply Last reply
                                0
                                Reply
                                • Reply as topic
                                Log in to reply
                                • Oldest to Newest
                                • Newest to Oldest
                                • Most Votes


                                Support us

                                ioBroker
                                Community Adapters
                                Donate

                                603

                                Online

                                32.7k

                                Users

                                82.5k

                                Topics

                                1.3m

                                Posts
                                Community
                                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                ioBroker Community 2014-2025
                                logo
                                • Login

                                • Don't have an account? Register

                                • Login or register to search.
                                • First post
                                  Last post
                                0
                                • Home
                                • Recent
                                • Tags
                                • Unread 0
                                • Categories
                                • Unreplied
                                • Popular
                                • GitHub
                                • Docu
                                • Hilfe