Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. (beantwortet) JS-variable mit sich selbst aktualisieren?

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    (beantwortet) JS-variable mit sich selbst aktualisieren?

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

      Eine Anfängerfrage in die Runde (ich brauche hier einen kurzen Denkanstoss).

      Ich möchte jede 1/4h eine Javascriptvariable mit sich selbst aktualisieren.

      Die Zeile:

      setState("AnwesendMicha","javascript.0.AnwesendMicha");

      Sorgt ja dafür, dass ich den Variablennamen in die Variable schreibe und nicht den Inhalt.

      Kann mir da bitte jemand kurz helfen.

      1 Reply Last reply Reply Quote 0
      • T
        tschombe last edited by

        ja erst einlesen:

        var result = getState("javascript.0.AnwesendMicha");
        setState("javascript.0.AnwesendMicha", result);
        
        

        aber was soll das eigentlich bringen???

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

          .

          Ich danke Dir für die Antwort und Hilfe!

          Werde das gleich ausprobieren 🙂

          @tschombe:

          aber was soll das eigentlich bringen??? `

          Ich visualisiere mit Rickshaw ein paar Zustände (Interpolation: step-after) um Progammlogiken, die mit Node-red erstellt wurden, zu überprüfen und zu verfeinern.

          Rickshaw zieht bei mir den Strich vom letzten Zustand bis zum aktuellen Zeitpunkt nicht durch (was ja bei der eingestellten Interpolation logisch kein Problem sein sollte).

          Von drei Zuständen brauche ich den Strich bis rechts durchgezogen. Dies wollte ich nun realisieren, in dem ich den Zustand einfach von Zeit zu Zeit aktualisiere.

          327_rickshaw_logik.jpg

          Es geht mir um die markierten Zustände.

          Der Strich erscheint sonst erst, wenn sich der Zustand wieder ändert und ich denke an Rickshaw selbst kann niemand was ändern.

          1 Reply Last reply Reply Quote 0
          • T
            tschombe last edited by

            hatte ich vermutet, das es etwas mit datenlogging zu tun hat.

            man sollte versuchen das logging an der Stelle zu ändern

            Ich hab mich mit logging nicht beschäftigt, da wäre meiner Meinung nach entweder

            ein fix in der Rickshaw darstellung notwendig, oder man erlaubt so etwas wie ein

            "zyklisches" loggen.

            Ich weis nicht wie setValue() implementiert ist, aber da setValue() ja eine Kommunikation

            zu CCU triggert würde ich als entwickler die setValue() Funktion so implementieren, das ich

            den wert nur dann setze, wenn er sich auch tatsächlich verändert hat um unnötige kommunikation

            zu vermeiden.

            Dann würde dein "Workaround" überhaupt nichts bringen…

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

              @tschombe:

              Ich weis nicht wie setValue() implementiert ist, aber da setValue() ja eine Kommunikation

              zu CCU triggert würde ich als entwickler die setValue() Funktion so implementieren, das ich

              den wert nur dann setze, wenn er sich auch tatsächlich verändert hat um unnötige kommunikation

              zu vermeiden.

              Dann würde dein "Workaround" überhaupt nichts bringen… `

              Ja, mir wäre auch lieber, wenn Rickshaw das anders darstellen würde.

              Die CCU dürfte doch gar nicht beteiligt sein oder?

              Es handelt sich doch um Javascript-Variablen aus ioBroker und nicht um Variablen aus der CCU.

              Ich werde berichten… danke noch einmal

              1 Reply Last reply Reply Quote 0
              • T
                tschombe last edited by

                ja richtig, ist ja eine reine script-variable.

                da ist die ccu natürlich nicht involviert.

                ich wollte nur andeuten, wie setValue vermutlich implementiert ist.

                Musst du einfach mal ausprobieren, aber daran denken das dieser Workaround

                dann in zukunft evtl nicht mehr funktioniert, wenn jemand an setValue z.B. optimiert.

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

                  Schade…

                  Ich habe zum Test die Variable jede Minute aktualisiert:

                  schedule("*/1 * * * *", function () {
                      var result = getState("javascript.0.AnwesendMicha");
                      setState("javascript.0.AnwesendMicha", result);
                  });
                  

                  Es läuft auch durch und History trägt auch jede Minute den neuen Wert ein.

                  Allerdings mit der alten Zeit 😞

                  D.h. "Zeit" und "geändert" beim Ereignis und im Objekt sind immer noch die alten, dafür x-mal.

                  Im Rickshawdiagramm hat sich daher auch nichts geändert.

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

                    Große Anfängerfrage als kleine Ergänzung zu meinem Problem.

                    Ist das denn eine "normale" Variable oder ist das ein Objekt?

                    Ich frage mich vorher denn die alten Zeiten herkommen.

                    Wenn die in dem "Objekt" stehen, müsste ich die beim neu Schreiben doch auch irgendwie aktualisieren können oder?

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

                      @ruhr70:

                      Große Anfängerfrage als kleine Ergänzung zu meinem Problem.

                      Ist das denn eine "normale" Variable oder ist das ein Objekt?

                      Ich frage mich vorher denn die alten Zeiten herkommen.

                      Wenn die in dem "Objekt" stehen, müsste ich die beim neu Schreiben doch auch irgendwie aktualisieren können oder? `
                      probiere mal:

                      var result = getState("javascript.0.AnwesendMicha");
                      setState("javascript.0.AnwesendMicha", result ? result.val : false, true);
                      
                      

                      result ist {val: value, ts: timestamp, ack: true, lc: lastchange}

                      Damit gibst du alte Zeit immer mit und deswegen gibt es keine neue Zeit.

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

                        @Bluefox:

                        probiere mal:

                        var result = getState("javascript.0.AnwesendMicha");
                        setState("javascript.0.AnwesendMicha", result ? result.val : false, true);
                        
                        

                        result ist {val: value, ts: timestamp, ack: true, lc: lastchange}

                        Damit gibst du alte Zeit immer mit und deswegen gibt es keine neue Zeit. `

                        Schon einen Schritt weiter.

                        Die Erklärung für result habe ich verstanden. Danke! Das SetState noch nicht. Aber ich habe es direkt versucht.

                        Nun steht bei Zeit: die aktuelle Zeit des Eintrags

                        bei geändert die alte lastchange Zeit.

                        Unter Ereignisse sehe ich das auch so.

                        In History taucht kein Eintrag mit der neuen Zeit auf.

                        Kann ich noch Lastchange ändern?

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

                          Nachtrag 🙂

                          In History sehe ich den Eintrag nicht.

                          Im Rickshaw wird die Linie aber gezeichnet und wenn ich mit der Maus auf den letzten Datenpunkt gehe steht dort auch die letzte Zeit 🙂

                          Danke!!!

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          401
                          Online

                          31.8k
                          Users

                          80.0k
                          Topics

                          1.3m
                          Posts

                          3
                          11
                          3070
                          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