Skip to content
  • 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
Logo
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Dynamisch erstellte Variablen.

NEWS

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

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

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

Dynamisch erstellte Variablen.

Dynamisch erstellte Variablen.

Scheduled Pinned Locked Moved JavaScript
43 Posts 7 Posters 2.8k Views 5 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.
  • OliverIOO OliverIO

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

    P Offline
    P Offline
    ptr
    wrote on last edited by
    #41

    @oliverio danke. ich schaue es mir an!

    P 1 Reply Last reply
    0
    • P ptr

      @oliverio danke. ich schaue es mir an!

      P Offline
      P Offline
      ptr
      wrote on last edited by
      #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 Reply Last reply
      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
        wrote on last edited by
        #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 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

        618

        Online

        32.4k

        Users

        81.3k

        Topics

        1.3m

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

        • Don't have an account? Register

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