Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [GELÖST]Variablen außerhalb einer Funktion?

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [GELÖST]Variablen außerhalb einer Funktion?

    This topic has been deleted. Only users with topic management privileges can see it.
    • blauholsten
      blauholsten Developer last edited by

      Anfängerfrage:#

      Sollte es nicht möglich sein Variablen außerhalb von function zu deklarieren, und diese dann in einer function zu benutzen?

      das geht nicht, es funktioniert nur so…

      createState('zustände.fenstererd', 0);
      
      var timere = null;
      
      //Function zur Abfrage der Zustände
      function zustanderd()
      {
          var b = getState("hm-rpc.0.MEQ0751783.1.STATE").val;//Stube rechts
          var c = getState("hm-rpc.0.MEQ0751896.1.STATE").val;//Stube mitte
          var d = getState("hm-rpc.0.MEQ0752856.1.STATE").val;//Stube links
      
          if(b || c || d)
          {
               if (!timere) {
               timere = setTimeout(function () {
                  timere = null;
                  setState('zustände.fenstererd', 1);
              toLog("Fenster Erdgeschoss geöffnet!", true);
              }, 1000);//eine Sekunde Verzögerung 
            }  
          }
          else
          {
              if (timere) {
               clearTimeout(timere);
               timere = null;
               }
              setState('zustände.fenstererd', 0);
              toLog("Fenster Erdgeschoss geschlossen!", true);
          }
      }
      
      // Bei Änderrung der Zustände aufruf der Functionen
      //*******************ERDGESCHOSS**************************
      on({id: "hm-rpc.0.MEQ0751783.1.STATE"}, function()
      {
          zustanderd();
      });
      on({id: "hm-rpc.0.MEQ0751896.1.STATE"}, function()
      {
          zustanderd();
      });
      on({id: "hm-rpc.0.MEQ0752856.1.STATE"}, function()
      {
          zustanderd();
      });
      

      wobei die "timere" Variable funktioniert.

      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        So funktioniert es auch und ist die bessere Lösung (geringere CPU-Belastung):

        var timere = null;
        var b;
        var c;
        var d;
        
        //Function zur Abfrage der Zustände
        function zustanderd()
        {
            if(b || c || d)
            {
                 if (!timere) {
                 timere = setTimeout(function () {
                    timere = null;
                    setState('zustände.fenstererd', 1);
                toLog("Fenster Erdgeschoss geöffnet!", true);
                }, 1000);//eine Sekunde Verzögerung
              } 
            }
            else
            {
                if (timere) {
                 clearTimeout(timere);
                 timere = null;
                 }
                setState('zustände.fenstererd', 0);
                toLog("Fenster Erdgeschoss geschlossen!", true);
            }
        }
        
        // Bei Änderrung der Zustände aufruf der Functionen
        //*******************ERDGESCHOSS**************************
        on({id: "hm-rpc.0.MEQ0751783.1.STATE"}, function(dp)
        {
           b = dp.newState.val;
            zustanderd();
        });
        on({id: "hm-rpc.0.MEQ0751896.1.STATE"}, function(dp)
        {
           c = dp.newState.val;
            zustanderd();
        });
        on({id: "hm-rpc.0.MEQ0752856.1.STATE"}, function(dp)
        {
           d = dp.newState.val;
            zustanderd();
        });
        
        
        1 Reply Last reply Reply Quote 0
        • blauholsten
          blauholsten Developer last edited by

          Perfekt!

          Viel weniger Schreibaufwand!

          Aber eine Erklärung steht noch aus, warum man nicht getState() außerhalb einer Funktion an einer Variable übergeben kann und diese dann in der Funktion benutzen? :oops:

          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 last edited by

            @blauholsten:

            …warum man nicht getState() außerhalb einer Funktion an einer Variable übergeben kann und diese dann in der Funktion benutzen? `
            Die Programmteile außerhalb der Funktion werden nur einmal bei Scriptstart ausgeführt. Die per getState() außerhalb der Funktion eingelesenen Werte würden sich also nie wieder ändern (außer bei erneutem Scriptstart).

            Will man sich ändernde Werte einlesen, muss man das innerhalb der durch on(id, function) aufgerufenen Funktion(en) machen.

            1 Reply Last reply Reply Quote 0
            • blauholsten
              blauholsten Developer last edited by

              Okay…..jetzt hab ich es verstanden. Danke :!:

              1 Reply Last reply Reply Quote 0
              • paul53
                paul53 last edited by

                Möchte man sofort nach Scriptstart ein gültges Ergebnis, dann deklariert man die Variablen nicht nur außerhalb der Funktion, sondern initialisiert sie auch und führt die Funktion bei Scriptstart aus:

                // Deklaration und Initialsierung von Variablen
                var timere = null;
                var b = getState("hm-rpc.0.MEQ0751783.1.STATE").val;//Stube rechts
                var c = getState("hm-rpc.0.MEQ0751896.1.STATE").val;//Stube mitte
                var d = getState("hm-rpc.0.MEQ0752856.1.STATE").val;//Stube links
                
                //Function zur Abfrage der Zustände
                function zustanderd()
                {
                    if(b || c || d)
                    {
                         if (!timere) {
                         timere = setTimeout(function () {
                            timere = null;
                            setState('zustände.fenstererd', 1);
                        toLog("Fenster Erdgeschoss geöffnet!", true);
                        }, 1000);//eine Sekunde Verzögerung
                      }
                    }
                    else
                    {
                        if (timere) {
                         clearTimeout(timere);
                         timere = null;
                         }
                        setState('zustände.fenstererd', 0);
                        toLog("Fenster Erdgeschoss geschlossen!", true);
                    }
                }
                
                // Bei Änderrung der Zustände aufruf der Functionen
                //*******************ERDGESCHOSS**************************
                on({id: "hm-rpc.0.MEQ0751783.1.STATE"}, function(dp)
                {
                   b = dp.newState.val;
                    zustanderd();
                });
                on({id: "hm-rpc.0.MEQ0751896.1.STATE"}, function(dp)
                {
                   c = dp.newState.val;
                    zustanderd();
                });
                on({id: "hm-rpc.0.MEQ0752856.1.STATE"}, function(dp)
                {
                   d = dp.newState.val;
                    zustanderd();
                });
                
                // Scriptstart mit Initialwerten
                zustanderd();
                
                
                1 Reply Last reply Reply Quote 0
                • blauholsten
                  blauholsten Developer last edited by

                  Hi,

                  das unterstreicht das, was du vorher erklärt hast. Danke

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

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  718
                  Online

                  31.7k
                  Users

                  79.7k
                  Topics

                  1.3m
                  Posts

                  2
                  7
                  1055
                  Loading More Posts
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes
                  Reply
                  • Reply as topic
                  Log in to reply
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                  The ioBroker Community 2014-2023
                  logo