Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. setState nur wenn Wert noch nicht gesetzt ist?

    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

    setState nur wenn Wert noch nicht gesetzt ist?

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

      @schmakus sagte in setState nur wenn Wert noch nicht gesetzt ist?:

      Hi,
      gibt es einen Befehl für setState, welchen den Wert nur dann setzt, wenn er nicht schon vorhanden ist?
      Aktuell mache ich es über getState und vergleiche den Wert mit dem zu setzenden Wert.

              let oldval = getState(path).val;
              if(oldval != value){
      

      Grüße
      Schmakus

      willst du setstate nur schreiben, wenn noch nie etwas geschrieben wurde?
      dann machst du die Abfrage bei der Objekterstellung und schreibst einen initialwert.

      wenn du nochmal den gleichen wert drüberschreibst ist das ja nicht so schlimm.
      wenn du den datenpunkt mit dem history-adapter aufzeichnest und dort keine gleichen werte haben möchtest, dann kann man da eine Option anklicken "nur Änderungen aufzeichnen"

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

        @schmakus sagte: gibt es einen Befehl für setState, welchen den Wert nur dann setzt, wenn er nicht schon vorhanden ist?

        Du meinst, wenn der neue Wert ungleich dem vorhanden Wert ist?
        Das muss man mit getState(id).val zum Vergleich machen, es sei denn, man hat den Wert aus einem Trigger auf den zu schreibenden Datenpunkt in einer Variablen.

        1 Reply Last reply Reply Quote 0
        • UncleSam
          UncleSam Developer @Schmakus last edited by

          @schmakus Es gibt eigentlich keinen Grund, nur "veränderte" Werte zu schreiben. Alles in ioBroker ist so ausgelegt, dass es mit gleichen Werten umgehen kann. In Skripten kann man auch auf "change" triggern. Und History kann auch filtern. Zudem ist das ja der aktuelle Wert und den mit dem Zeitstempel zu schreiben entspricht der "echten Welt".

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

            @unclesam sagte: Es gibt eigentlich keinen Grund, nur "veränderte" Werte zu schreiben.

            Doch, wenn der Wert gesendet wird: Duty cycle, Störpegel.

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

              Mir geht es hauptsächlich wie @paul53 geschrieben hat, um die Auslastung diverser Protokolle.
              In meinem Fall geht es um Zigbee. Wenn ich z.B. 8 Lampen gleichzeitig ansteuere (über eine Gruppe), dann macht es ja wenig sinn, 8x die TransitionTime, 8x die Farbtemperatur, 8x.... zu senden.

              Oder fängt dies z.b. der Zigbee Adapter ab?

              Bei Homematic z.B. wird dadurch nur unnötiger DutyCicle erzeugt.

              arteck 1 Reply Last reply Reply Quote 0
              • arteck
                arteck Developer Most Active @Schmakus last edited by

                @schmakus hä.. wie jetzt.. verstehe nicht ?? was wird per zigbee behandelt?

                1 Reply Last reply Reply Quote 0
                • ?
                  A Former User @Schmakus last edited by

                  @schmakus die Frage interessiert mich auch. Hab es auch mit if (!getState().Val) gelöst.
                  Bei mir ist der Hauptgrund dieser Abfrage das die BWM Melder immer bei Bewegung die hue Lampen neu auf True gesetzt haben obwohl diese schon an waren. Diese unnötige Senderei wollte ich mir auch sparen.

                  OliverIO 1 Reply Last reply Reply Quote 0
                  • OliverIO
                    OliverIO @Guest last edited by

                    @ciddi89 sagte in setState nur wenn Wert noch nicht gesetzt ist?:

                    @schmakus die Frage interessiert mich auch. Hab es auch mit if (!getState().Val) gelöst.
                    Bei mir ist der Hauptgrund dieser Abfrage das die BWM Melder immer bei Bewegung die hue Lampen neu auf True gesetzt haben obwohl diese schon an waren. Diese unnötige Senderei wollte ich mir auch sparen.

                    Wie es bei zigbee genau ist, weiß ich nicht.
                    Es kommt auch auf die Situation an, wer an den zigbee geräten noch mit steuert.
                    in meinen adaptern führe ich im speicher meist ein abbild der states mit um da nochmal gegen zu checken und mehrfach beschreiben des gleichen wertes zu verhindern.

                    sobald aber der iobroker adapter nicht der einzige controller ist, der steuert musst du entweder immer neu schreiben oder vorher den status immer nochmal checken.
                    bei einem schalter kann ich mir folgendes vorstellen
                    über einen adapter schaltet man den an, jemand anders schaltet den schalter an der wand wieder aus. dann bekommst du den status nur mit wenn du vorher den status abfragst oder wenn der schalter von sich aus informiert, das er sich geändert hat (was meist nicht so passiert).

                    du kannst das ja mal testen, in dem du einen datenpunkt mehrfach mit dem gleichen wert beschreibst und vorher die history aktivierst und "nur Änderung aufzeichnen" ausschaltest.
                    Wenn dann der Wert mehrfach in der Tabelle auftaucht, dann schreibt der Adapter hier auch mehrfach.

                    ? 1 Reply Last reply Reply Quote 0
                    • ?
                      A Former User @OliverIO last edited by

                      @oliverio danke for die ausführliche Antwort. Ich mein, wenn es nichts macht dann ist auch gut. Hab nur in letzter Zeit im log gesehen das zb. Wenn ein BWM auslöst, mein Script bei jeder Bewegung den Wert für setState() neu gesetzt hat obwohl das Objekt diesen Wert schon hatte. Daher passte die Frage von @Schmakus perfekt. Möchte halt das meine Skripte so Ressourcen schonend arbeiten wie es geht und vielleicht hätte man da ja was optimieren können. Aber wenn es egal ist ob er die Werte nochmal setzt oder nicht, dann kann ich ja die getState() Abfrage vorab, die ich deswegen mit eingefügt habe, auch weg lassen.

                      LG

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

                        @ciddi89 sagte in setState nur wenn Wert noch nicht gesetzt ist?:

                        @oliverio danke for die ausführliche Antwort. Ich mein, wenn es nichts macht dann ist auch gut. Hab nur in letzter Zeit im log gesehen das zb. Wenn ein BWM auslöst, mein Script bei jeder Bewegung den Wert für setState() neu gesetzt hat obwohl das Objekt diesen Wert schon hatte. Daher passte die Frage von @Schmakus perfekt. Möchte halt das meine Skripte so Ressourcen schonend arbeiten wie es geht und vielleicht hätte man da ja was optimieren können. Aber wenn es egal ist ob er die Werte nochmal setzt oder nicht, dann kann ich ja die getState() Abfrage vorab, die ich deswegen mit eingefügt habe, auch weg lassen.

                        LG

                        da die autoren hier nicht reagiert haben,
                        kannst du ja mal bei github einen issue einstellen
                        und die frage nochmal dort stellen
                        https://github.com/ioBroker/ioBroker.zigbee/issues
                        ich habe gesehen, das da ganz fleißig dran gearbeitet wird und fast täglich Änderungen in den adapter eingearbeitet werden.

                        ? 1 Reply Last reply Reply Quote 0
                        • ?
                          A Former User @OliverIO last edited by

                          @oliverio said in setState nur wenn Wert noch nicht gesetzt ist?:

                          da die autoren hier nicht reagiert haben,
                          kannst du ja mal bei github einen issue einstellen
                          und die frage nochmal dort stellen
                          https://github.com/ioBroker/ioBroker.zigbee/issues
                          ich habe gesehen, das da ganz fleißig dran gearbeitet wird und fast täglich Änderungen in den adapter eingearbeitet werden.

                          Ja, nur das ich kein Zigbee verwende sondern Hue und HM. Aber werde es nochmal beobachten. Und wenn es nicht nötig ist, nehme ich die vorherige Abfrage, ob schon true oder false gesetzt ist, einfach raus.

                          Lg

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          644
                          Online

                          31.8k
                          Users

                          80.0k
                          Topics

                          1.3m
                          Posts

                          6
                          12
                          589
                          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