Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Wert nur schreiben, wenn sich dieser geändert hat

    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

    [gelöst] Wert nur schreiben, wenn sich dieser geändert hat

    This topic has been deleted. Only users with topic management privileges can see it.
    • mickym
      mickym Most Active @Ro75 last edited by mickym

      @ro75 man fragt nicht einen Wert ab, sondern läßt diesen triggern.Schau die mal die Syntax von on(id,…) an.

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

        @mickym das ist mir bekannt und mache ich auch so. Mir ging es um diesen Code-Schnipsel und die Frage ob es eleganter geht.

        mickym 1 Reply Last reply Reply Quote 0
        • mickym
          mickym Most Active @Ro75 last edited by mickym

          @ro75 verstehe ich nicht, hab ich doch gerade gesagt, statt if getState - den DP triggern lassen, wenn sich der geändert hat.

          on({
                     id: 0_userdata.0.test,
                    change: ne}, 
                   function () {
                            setState(ValueNoiseFarbe, sFarbe, true)})
          

          https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#on---subscribe-on-changes-or-updates-of-some-state

          f84c0ee5-092c-4cde-9a91-1bd4a5ce3ce2-image.png

          Ro75 1 Reply Last reply Reply Quote 0
          • Ro75
            Ro75 @mickym last edited by

            @mickym Und nochmal. Es ist ein Beispiel. Ursprung ist kein Wert der getriggert wird, sondern (z.B.) aus einer Berechnung kommt.

            Ich wollte nur wissen ob es eine kürzere Möglichkeit gibt zu erkennen, ob der Wert tatsächlich geschrieben werden muss. getState, setState irgend ein anderes ...State.

            mickym 1 Reply Last reply Reply Quote 0
            • mickym
              mickym Most Active @Ro75 last edited by mickym

              @ro75 sagte in Wert nur schreiben, wenn sich dieser geändert hat:

              @mickym Und nochmal. Es ist ein Beispiel. Ursprung ist kein Wert der getriggert wird, sondern (z.B.) aus einer Berechnung kommt.

              Ich wollte nur wissen ob es eine kürzere Möglichkeit gibt zu erkennen, ob der Wert tatsächlich geschrieben werden muss. getState, setState irgend ein anderes ...State.

              OK - dann wenn Du eine Variable mit dem Wert eines DP vergleichst, dann weiß ich nichts anders. Dann entschuldige mein Missverstehen.

              Ro75 1 Reply Last reply Reply Quote 0
              • Ro75
                Ro75 @mickym last edited by

                @mickym Kein Problem. Hab das hier schon gesehen. 😕 Wenn man sich eben nicht gleich alles merkt.

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

                  @ro75 sagte: Gibt es eine elegantere / kürzere Lösung?

                  Man kann anstelle von getState(id).val auch eine Variable verwenden.

                      if (lastFarbe != sFarbe) {
                          setState(ValueNoiseFarbe, sFarbe, true);
                          lastFarbe = sFarbe;
                      }
                  

                  Wird die Variable lastFarbe nicht initialisiert, wird allerdings nach Skriptstart geschrieben.

                  Ro75 1 Reply Last reply Reply Quote 1
                  • Ro75
                    Ro75 @paul53 last edited by

                    @paul53 ja, diese Variante praktiziere ich schon an einigen Stellen. Damit erspare ich mir die Abfrage auf die "DB".

                    Gibt es keine "Change State"?

                    T 1 Reply Last reply Reply Quote 0
                    • T
                      ticaki Developer @Ro75 last edited by ticaki

                      @ro75
                      Nein hat mich jetzt aber interessiert folgender Code:

                      let a = getState('0_userdata.0.MQTT.shellyplus1pm-sadf.temperature:102.tC').val
                      
                      var us = require('microtime');
                      let x = 0
                      let b = 0
                      var start = us.now();
                      while (b++ < 1000) {
                          if (a > 0) {
                              x++
                          }
                      }
                      var stop =us.now()
                      b=0
                      var start2 = us.now()
                      while (b++ < 1000) {
                          if (getState('0_userdata.0.MQTT.shellyplus1pm-dfg.temperature:102.tC').val >0) {
                              x++
                          }
                      }
                      var stop2 = us.now()
                      
                      log('variable dauert: ' +(stop - start) + 'ms')
                      log('getState dauert: ' +(stop2 - start2) + 'ms')
                      

                      gibt dieses Ergebnis:

                      18:38:01.850	info	javascript.0 (4864) script.js.Test.Skript_122: variable dauert: 48µs
                      18:38:01.850	info	javascript.0 (4864) script.js.Test.Skript_122: getState dauert: 250µs
                      
                      paul53 1 Reply Last reply Reply Quote 1
                      • Ro75
                        Ro75 last edited by

                        @ticaki Danke. Also auf ein besonderes State brauche ich also nicht bauen. Keine Ahnung was ich da gelesen hab. Egal, aber deine Zeiten sind interessant. Für mich also ganz klar. Auf Variable statt getState umstellen - systemweit.

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

                          @ticaki sagte: gibt dieses Ergebnis:

                          Die Verwendung von Variablen ist immer effizienter als der Aufruf einer komplexen Funktion.

                          T 1 Reply Last reply Reply Quote 0
                          • T
                            ticaki Developer @paul53 last edited by ticaki

                            @paul53 sagte in [gelöst] Wert nur schreiben, wenn sich dieser geändert hat:

                            @ticaki sagte: gibt dieses Ergebnis:

                            Die Verwendung von Variablen ist immer effizienter als der Aufruf einer komplexen Funktion.

                            Das ist klar, aber 5 mal effizienter ist dann doch ne Ansage. 🙂 wobei es zwischen 2 mal schneller und 12 mal schneller schwankt. Bei 10000 Durchläufen ist es Faktor 7

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

                            Support us

                            ioBroker
                            Community Adapters
                            Donate

                            900
                            Online

                            31.9k
                            Users

                            80.1k
                            Topics

                            1.3m
                            Posts

                            4
                            13
                            492
                            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