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

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

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Dynamisch erstellte Variablen.

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Dynamisch erstellte Variablen.

Geplant Angeheftet Gesperrt Verschoben JavaScript
43 Beiträge 7 Kommentatoren 2.9k Aufrufe 5 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • OliverIOO OliverIO

    @codierknecht
    ja dann ist alles beieinander und im debuggingfall lässt sich das leicht ausgeben

    P Offline
    P Offline
    ptr
    schrieb am zuletzt editiert von
    #41

    @oliverio danke. ich schaue es mir an!

    P 1 Antwort Letzte Antwort
    0
    • P ptr

      @oliverio danke. ich schaue es mir an!

      P Offline
      P Offline
      ptr
      schrieb am zuletzt editiert von
      #42

      @OliverIO: Warum wird die function ausfuehren_nach-timeout nie ausgeführt? wo liegt der Haken?
      & vielen Dank für das (eigentlich) gemachte Bettchen, dass ich als Vorlage verwendet habe.

      Es ist noch zuviel drin. timer_dp hat z.B. noch keinen Zweck.

      var timer_dauer_in_sek, timer_name, timer_dauer_in_millisek, timer_minuten, timer_sekunden, timer_trigger_array, timer1_name;
      
      async function multitimer_function(timer_name, timer_dauer_in_millisek) {
          console.log('...js-start');
      
          var multitimer = {
              "hobbyraum_timer": {
                  "timer_dp":"0_userdata.0.KG.Hobbyraum.Timer1",
                  "timer": null
              },
              "abstellraum_timer": {
                  "timer_dp":"0_userdata.0.KG.Abstellraum.Timer1",
                  "timer": null
              },
              "hauswirtschaftsraum_timer": {
                  "timer_dp":"0_userdata.0.KG.Hauswirtschaftsraum.Timer1",
                  "timer": null
              },
              "technikraum_timer": {
                  "timer_dp":"0_userdata.0.KG.Technikraum.Timer1",
                  "timer": null
              },
              "kg-flur_timer": {
                  "timer_dp":"0_userdata.0.KG.KG-Flur.Timer1",
                  "timer": null
              },
              "kg-treppe_timer": {
                  "timer_dp":"0_userdata.0.TR.KG-Treppe.Timer1",
                  "timer": null
              },
          }
          function tueroeffnung_ohne_bewegung(timer_name) {
              var timer_parameters = multitimer['hobbyraum_timer'];
              // stoppt den "timer":
              (function () { if (timer_parameters['timer']) { clearTimeout(timer_parameters['timer']); timer_parameters['timer'] = null; } })();
              // "timer" wird gesetzt:
              timer_parameters['timer'] = setTimeout(async function () {
                  await ausfuehren_nach_timeout(timer_name);
                  console.log('.........................');
              }, parseInt(timer_dauer_in_millisek));
          }
      
          console.log('...js-ende');
      }
      
      async function ausfuehren_nach_timeout(timer_name) {
        console.log((String(timer_name) + ' ist abgelaufen'));
      }
      
      
      timer_dauer_in_sek = 0.3;
      timer_dauer_in_millisek = parseFloat(timer_dauer_in_sek) * 1000;
      timer_trigger_array = ['hobbyraum_timer', 'abstellraum_timer', 'hauswirtschaftsraum_timer', 'technikraum_timer', 'kg-flur_timer', 'kg-treppe_timer'];
      for (var timer_name_index in timer_trigger_array) {
        timer_name = timer_trigger_array[timer_name_index];
        console.log(timer_name);
        timer_name = timer_name;
        await multitimer_function(timer_name, timer_dauer_in_sek);
        await wait(1000);
      }
      
      OliverIOO 1 Antwort Letzte Antwort
      0
      • P ptr

        @OliverIO: Warum wird die function ausfuehren_nach-timeout nie ausgeführt? wo liegt der Haken?
        & vielen Dank für das (eigentlich) gemachte Bettchen, dass ich als Vorlage verwendet habe.

        Es ist noch zuviel drin. timer_dp hat z.B. noch keinen Zweck.

        var timer_dauer_in_sek, timer_name, timer_dauer_in_millisek, timer_minuten, timer_sekunden, timer_trigger_array, timer1_name;
        
        async function multitimer_function(timer_name, timer_dauer_in_millisek) {
            console.log('...js-start');
        
            var multitimer = {
                "hobbyraum_timer": {
                    "timer_dp":"0_userdata.0.KG.Hobbyraum.Timer1",
                    "timer": null
                },
                "abstellraum_timer": {
                    "timer_dp":"0_userdata.0.KG.Abstellraum.Timer1",
                    "timer": null
                },
                "hauswirtschaftsraum_timer": {
                    "timer_dp":"0_userdata.0.KG.Hauswirtschaftsraum.Timer1",
                    "timer": null
                },
                "technikraum_timer": {
                    "timer_dp":"0_userdata.0.KG.Technikraum.Timer1",
                    "timer": null
                },
                "kg-flur_timer": {
                    "timer_dp":"0_userdata.0.KG.KG-Flur.Timer1",
                    "timer": null
                },
                "kg-treppe_timer": {
                    "timer_dp":"0_userdata.0.TR.KG-Treppe.Timer1",
                    "timer": null
                },
            }
            function tueroeffnung_ohne_bewegung(timer_name) {
                var timer_parameters = multitimer['hobbyraum_timer'];
                // stoppt den "timer":
                (function () { if (timer_parameters['timer']) { clearTimeout(timer_parameters['timer']); timer_parameters['timer'] = null; } })();
                // "timer" wird gesetzt:
                timer_parameters['timer'] = setTimeout(async function () {
                    await ausfuehren_nach_timeout(timer_name);
                    console.log('.........................');
                }, parseInt(timer_dauer_in_millisek));
            }
        
            console.log('...js-ende');
        }
        
        async function ausfuehren_nach_timeout(timer_name) {
          console.log((String(timer_name) + ' ist abgelaufen'));
        }
        
        
        timer_dauer_in_sek = 0.3;
        timer_dauer_in_millisek = parseFloat(timer_dauer_in_sek) * 1000;
        timer_trigger_array = ['hobbyraum_timer', 'abstellraum_timer', 'hauswirtschaftsraum_timer', 'technikraum_timer', 'kg-flur_timer', 'kg-treppe_timer'];
        for (var timer_name_index in timer_trigger_array) {
          timer_name = timer_trigger_array[timer_name_index];
          console.log(timer_name);
          timer_name = timer_name;
          await multitimer_function(timer_name, timer_dauer_in_sek);
          await wait(1000);
        }
        
        OliverIOO Offline
        OliverIOO Offline
        OliverIO
        schrieb am zuletzt editiert von
        #43

        @ptr
        Im Detail muss ich das morgen mal ausprobieren.
        Generell sehe ich in deinem Code aber 2 Problembereiche zu dem du dir die Konzepte mal nochmal durchlesen solltest

        1. scope
          https://developer.mozilla.org/en-US/docs/Glossary/Scope?retiredLocale=de
          Du definierst manche variablen innerhalb von Funktionen (bspw multitimer) obwohl ich den Eindruck habe das sie außerhalb einer Funktion definiert werden sollte.
          Im verlinkten Artikel liest du, das variablen immer nur sichtbar innerhalb eines scopes sind und von außerhalb nicht adressierst ist.
          Dann gibt es noch den asynchronen Funktionsausfall, der ebenfalls eine andere Art von scope erzeugt, wie man eigentlich so erwartet.
          Wird ein scope verlassen, bspw weil die Funktion abgearbeitet ist, dann wird der scope zerstört und die Daten sind verloren. Beim erneuten Aufruf der Funktion wird ein neuer scope erzeugt. Die früheren darin verfügbaren Daten sind weg.

        Auch deine mehrfach ineinander verschachtelten Funktionen sind schon möglich. Als Anfänger würde ich das aber nicht machen, da sonst der Überblick über die scopes schwierig ist und uU den Kopf zur Explosion bringt.
        Mit einem guten debugger sieht man das (bspw vs Code). Aber die scriptoberfläche von Iobroker ist da nicht sought geeignet.

        1. Verwendung von promises, await und async
          https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise?retiredLocale=de
          https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await
          https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

        Await kann nur bei Funktionen verwendet werden, die auch ein promise zurückgeben. Settimeout gibt aber nur das Timer Handle zurück. Daher funktioniert await da nicht.

        Wenn du eine strikte Reihenfolge bestimmter Schritte als Ergebnis von asynchroner Abarbeitung einhalten willst musst du dich erst recht noch mehr mit promises beschäftigen, da das der Mechanismus der Wahl dafür ist.

        Meine Adapter und Widgets
        TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
        Links im Profil

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


        Support us

        ioBroker
        Community Adapters
        Donate

        443

        Online

        32.6k

        Benutzer

        82.1k

        Themen

        1.3m

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

        • Du hast noch kein Konto? Registrieren

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