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 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

                        927
                        Online

                        31.9k
                        Users

                        80.1k
                        Topics

                        1.3m
                        Posts

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