Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Error/Bug
    4. [gelöst] Zweite javascript Instanz

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    [gelöst] Zweite javascript Instanz

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

      @apollon77:

      Ich persönlcih gehe immer so vor das ich mir alle State-Werte quasi als Lokale Variablen hole. Damit entkoppelst Du das holen der Werte und die Skript-Logik. `
      Genau so halte ich es auch. Damit vermeidet man auch unnötige Aufrufe der komplexen Funktion getState(id). Prinzip:

      // ID als String eingeben oder mittels getIdByName('name') ermitteln.
      var id1 = '...';
      var id2 = '...';
      ...
      
      // getState für den Skriptstart, falls erforderlich
      var v1 = getState(id1).val;
      var v2 = getState(id2).val;
      ...
      
      function auswertung() {
          Hier werden v1, v2, ... ausgewertet;
      }
      
      auswertung();  // Skriptstart
      
      on(id1, function(dp) {  // Änderung des Wertes von id1
          v1 = dp.state.val;
          auswertung();
      });
      on(id2, function(dp) {
          v2 = dp.state.val;
          auswertung();
      });
      ...
      
      
      1 Reply Last reply Reply Quote 0
      • Goersch
        Goersch last edited by

        das geht sicherlich prinzipiell - funktioniert aber nicht, wenn man die ids zur Laufzeit erst zusammenbaut (bzw. wie in meinem Fall den Zugriff auf die Homematic Geräte via getIdByName macht und den Namen des Gerätes zur Laufzeit zusammenbaut).

        Ich habe es häufig, dass ich einer Funktion z.B. den Raumnamen übergebe und die Funktion dann die ids selber zusammenbaut, um das setState/getState zu machen. Das ersparrt mir jede Menge gleichen Code, der sich nur durch die ids unterscheiden würde (bzw. wenn ich es so machen würde wie ihr, durch die unterschiedliche Verwendung von Variablen unterscheiden würde).

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

          Dann hast Du recht … und musst aber ggf mit dem asynchronen leben ... that's JavaScript ;-(

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

            8-) hab ich befürchtet 😐

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

              mh, ich könnt mir ja auch ein array anlegen, in das die Werte geschrieben werden

              var values = [];
              on(....., function(obj) {values[obj.common.name] = obj.state.val;....
              
              

              Dann könnte ich weitermachen wie bisher und müsste das getState nur durch ein value[name] ersetzen (und natürlich für jedes zu lesende Objekt ein on(…) programmieren).

              Muss ich mal drüber nachdenken tun :geek:

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

                8-) mal ganz abgesehen davon, dass mir nicht wirklich klar ist, warum ein getState auf dem neben-Raspi nicht funktioniert oder nicht funktionieren könnte, ohne dass ich die callbacks nutzen muss.

                Aber das kann an meinem wenig vorhandenen javascript wissen liegen….

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

                  @Goersch:

                  8-) mal ganz abgesehen davon, dass mir nicht wirklich klar ist, warum ein getState auf dem neben-Raspi nicht funktioniert oder nicht funktionieren könnte, ohne dass ich die callbacks nutzen muss.

                  Aber das kann an meinem wenig vorhandenen javascript wissen liegen…. `
                  Wie sieht es bei dir aus?

                  Nicht auf alle Zustände beim Start abonnieren: - AN oder AUS?
                  
                  1 Reply Last reply Reply Quote 0
                  • Goersch
                    Goersch last edited by

                    mh, unterschiedlich

                    Haupt-Raspi AUS

                    Neben-Rasp EIN

                    Also bei der Instanz, wo das Problem besteht, ist die Option eingeschaltet

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

                      Dann schalte das auf dem Neben-Raspi mal auch aus … gehts dann wieder ohne asynchron?

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

                        wie nicht anders zu erwarten: das getState funzt jetzt ohne irgendwelche beschwerden 😄

                        Danke, bluefox + apollon77 🙂

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        1.0k
                        Online

                        31.6k
                        Users

                        79.4k
                        Topics

                        1.3m
                        Posts

                        6
                        20
                        1618
                        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