Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. setState nur wenn Wert noch nicht gesetzt ist?

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.8k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    884

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

setState nur wenn Wert noch nicht gesetzt ist?

Geplant Angeheftet Gesperrt Verschoben JavaScript
12 Beiträge 6 Kommentatoren 859 Aufrufe 6 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • SchmakusS Schmakus

    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

    OliverIOO Offline
    OliverIOO Offline
    OliverIO
    schrieb am zuletzt editiert von
    #2

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

    Meine Adapter und Widgets
    TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
    Links im Profil

    1 Antwort Letzte Antwort
    0
    • SchmakusS Schmakus

      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

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #3

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

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Antwort Letzte Antwort
      0
      • SchmakusS Schmakus

        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

        UncleSamU Offline
        UncleSamU Offline
        UncleSam
        Developer
        schrieb am zuletzt editiert von
        #4

        @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".

        Bitte bei Problemen mit meinen Adaptern, Issue auf GitHub erfassen: Loxone | I2C | Luxtronik2
        ♡-lichen Dank an meine Sponsoren

        paul53P 1 Antwort Letzte Antwort
        0
        • UncleSamU UncleSam

          @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".

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #5

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

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

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          SchmakusS 1 Antwort Letzte Antwort
          0
          • paul53P paul53

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

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

            SchmakusS Offline
            SchmakusS Offline
            Schmakus
            Developer
            schrieb am zuletzt editiert von
            #6

            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.

            Dev of LightControl Adapter, Contributor of HUE and DoorBird Adapter

            arteckA 1 Antwort Letzte Antwort
            0
            • SchmakusS Schmakus

              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.

              arteckA Offline
              arteckA Offline
              arteck
              Developer Most Active
              schrieb am zuletzt editiert von
              #7

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

              zigbee hab ich, zwave auch, nuc's genauso und HA auch

              1 Antwort Letzte Antwort
              0
              • SchmakusS Schmakus

                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

                ? Offline
                ? Offline
                Ein ehemaliger Benutzer
                schrieb am zuletzt editiert von
                #8

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

                OliverIOO 1 Antwort Letzte Antwort
                0
                • ? Ein ehemaliger Benutzer

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

                  OliverIOO Offline
                  OliverIOO Offline
                  OliverIO
                  schrieb am zuletzt editiert von
                  #9

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

                  Meine Adapter und Widgets
                  TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                  Links im Profil

                  ? 1 Antwort Letzte Antwort
                  0
                  • OliverIOO OliverIO

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

                    ? Offline
                    ? Offline
                    Ein ehemaliger Benutzer
                    schrieb am zuletzt editiert von
                    #10

                    @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 Antwort Letzte Antwort
                    0
                    • OliverIOO Offline
                      OliverIOO Offline
                      OliverIO
                      schrieb am zuletzt editiert von
                      #11

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

                      Meine Adapter und Widgets
                      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                      Links im Profil

                      ? 1 Antwort Letzte Antwort
                      0
                      • OliverIOO OliverIO

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

                        ? Offline
                        ? Offline
                        Ein ehemaliger Benutzer
                        schrieb am zuletzt editiert von
                        #12

                        @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 Antwort Letzte Antwort
                        0
                        Antworten
                        • In einem neuen Thema antworten
                        Anmelden zum Antworten
                        • Älteste zuerst
                        • Neuste zuerst
                        • Meiste Stimmen


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        485

                        Online

                        32.6k

                        Benutzer

                        82.1k

                        Themen

                        1.3m

                        Beiträge
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                        ioBroker Community 2014-2025
                        logo
                        • Anmelden

                        • Du hast noch kein Konto? Registrieren

                        • Anmelden oder registrieren, um zu suchen
                        • Erster Beitrag
                          Letzter Beitrag
                        0
                        • Home
                        • Aktuell
                        • Tags
                        • Ungelesen 0
                        • Kategorien
                        • Unreplied
                        • Beliebt
                        • GitHub
                        • Docu
                        • Hilfe