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 als Schrittkette ausführen

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
    883

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

setState als Schrittkette ausführen

Geplant Angeheftet Gesperrt Verschoben JavaScript
3 Beiträge 2 Kommentatoren 256 Aufrufe 3 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 Offline
    SchmakusS Offline
    Schmakus
    Developer
    schrieb am zuletzt editiert von
    #1

    Hi,

    wie bekomme ich es elegant hin, dass die States nacheinander abgearbeitet werden, auch wenn einer der States aufgrund der Bedingungen nicht ausgeführt wird?
    Mit dem Callback tue ich mir schwer, da ja SetState teilweise nicht ausgeführt wird, wenn es sich nicht um einen neuen Wert handelt.
    Die Abfrage, ob der alte Wert dem Neuen entspricht habe ich eingebaut, um keine unnötige Befehle über Zigbee und Homeatic zu senden.

    Im Grunde genommen soll das letzte SetState (pathControl) erst ausgeführt werden, wenn alle Vorgegangene durchgeführt sind.

    arrLights[i].setLightOn = async function(group){
            if (group.buttonPress == this.buttonPress) {
                if (this.pathTransistion) {
                    var oldVal =  await getState(this.pathTransistion).val;
                    (oldVal != this.defaultTransition) 
                    setState(this.pathTransistion, this.defaultTransition);
                }
                if (this.pathColortemp) {
                    var oldVal = await getState(this.pathColortemp).val;
                    if(oldVal != this.defaultColorTemp) 
                    setState(this.pathColortemp, this.defaultColorTemp);
                }
                if (this.pathColor) {
                    var oldVal = await getState(this.pathColor).val;
                    //if(oldVal != this.defaultColor)
                    setState(this.pathColor, this.defaultColor);
                }
                if (this.pathControl) {
                    var oldVal = await getState(this.pathControl).val;
                    if(oldVal != (this.pathControlType == 'number') ? this.defaultLevel : true) {
                        setState(this.pathControl, (this.pathControlType == 'number') ? this.defaultLevel : true);
                        if (extLogging) console.log(`${scriptname}: Licht wird eingeschaltet: ${this.name} // Pfad: ${this.pathControl} // Wert: ${(this.pathControlType == 'number') ? this.defaultLevel : true}`);
                    }
                }
    

    Grüße
    Schmakus

    Dev of LightControl Adapter, Contributor of HUE and DoorBird Adapter

    E 1 Antwort Letzte Antwort
    0
    • SchmakusS Schmakus

      Hi,

      wie bekomme ich es elegant hin, dass die States nacheinander abgearbeitet werden, auch wenn einer der States aufgrund der Bedingungen nicht ausgeführt wird?
      Mit dem Callback tue ich mir schwer, da ja SetState teilweise nicht ausgeführt wird, wenn es sich nicht um einen neuen Wert handelt.
      Die Abfrage, ob der alte Wert dem Neuen entspricht habe ich eingebaut, um keine unnötige Befehle über Zigbee und Homeatic zu senden.

      Im Grunde genommen soll das letzte SetState (pathControl) erst ausgeführt werden, wenn alle Vorgegangene durchgeführt sind.

      arrLights[i].setLightOn = async function(group){
              if (group.buttonPress == this.buttonPress) {
                  if (this.pathTransistion) {
                      var oldVal =  await getState(this.pathTransistion).val;
                      (oldVal != this.defaultTransition) 
                      setState(this.pathTransistion, this.defaultTransition);
                  }
                  if (this.pathColortemp) {
                      var oldVal = await getState(this.pathColortemp).val;
                      if(oldVal != this.defaultColorTemp) 
                      setState(this.pathColortemp, this.defaultColorTemp);
                  }
                  if (this.pathColor) {
                      var oldVal = await getState(this.pathColor).val;
                      //if(oldVal != this.defaultColor)
                      setState(this.pathColor, this.defaultColor);
                  }
                  if (this.pathControl) {
                      var oldVal = await getState(this.pathControl).val;
                      if(oldVal != (this.pathControlType == 'number') ? this.defaultLevel : true) {
                          setState(this.pathControl, (this.pathControlType == 'number') ? this.defaultLevel : true);
                          if (extLogging) console.log(`${scriptname}: Licht wird eingeschaltet: ${this.name} // Pfad: ${this.pathControl} // Wert: ${(this.pathControlType == 'number') ? this.defaultLevel : true}`);
                      }
                  }
      

      Grüße
      Schmakus

      E Offline
      E Offline
      ente34
      schrieb am zuletzt editiert von
      #2

      @schmakus
      Muss das nicht "await getStateAsync()" heissen?
      Genauso kannst Du "await setStateAsync()" verwenden

      SchmakusS 1 Antwort Letzte Antwort
      0
      • E ente34

        @schmakus
        Muss das nicht "await getStateAsync()" heissen?
        Genauso kannst Du "await setStateAsync()" verwenden

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

        @ente34 Ich stelle keinen Unterschied fest. Egal ob SetState oder setStateAsync

        Hab nun folgendes Code und laut Log wird alles nacheinander abgearbeitet so wie ich es gerne hätte.
        Gibt es vielleicht eine elegantere Lösung?

        if(this.pathColortemp) {  
            await setState(this.pathTransistion, this.defaultTransition)
            console.warn('1: Set Transition')
        }
        if(this.pathColortemp) {  
            await setState(this.pathColortemp, this.defaultColorTemp)
            console.warn('2: Set Colortemp')
        }
        if(this.pathColor) {    
            await setState(this.pathColor, this.defaultColor)
            console.warn('3: Set Color')
        }
        if(this.pathControl) {
            await setState(this.pathControl, (this.pathControlType == 'number') ? this.defaultLevel : true)
            console.warn('4: Set Control')
            setState(this.pathLastValue, (this.pathControlType == 'number') ? this.defaultLevel : true, true);
            console.warn('5: Set Light State')
            setState(this.pathLightState, true, true);  
            console.warn('6: Set Group Light State')    
            if (extLogging) console.log(`${scriptname}: Licht wird eingeschaltet: ${this.name} // Pfad: ${this.pathControl} // Wert: ${(this.pathControlType == 'number') ? this.defaultLevel : true}`);
        } 
        

        Dev of LightControl Adapter, Contributor of HUE and DoorBird Adapter

        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

        733

        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