Skip to content
  • 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
  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. State auslesen in Adapterentwicklung

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.1k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.8k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.1k

State auslesen in Adapterentwicklung

Geplant Angeheftet Gesperrt Verschoben Entwicklung
state auslesenadapterentwicklunggetstate
22 Beiträge 3 Kommentatoren 1.4k Aufrufe 4 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.
  • J.A.R.V.I.S.J J.A.R.V.I.S.

    @reutli

    Versuch eines der folgenden. Das was du oben versuchst funktioniert nicht, das ist vom JS Adapter.

    Await/Async

    const state = await this.getStateAsync('Dein Dp');
    

    oder

    Callback

    this.getState('Dein Dp', (error, state) => {
    
    });
    

    Bin mir beim unteren gerade nicht sicher, welche Werte alle übergeben werden

    R Online
    R Online
    reutli
    schrieb am zuletzt editiert von
    #12

    @J-A-R-V-I-S sagte in State auslesen in Adapterentwicklung:

    Versuch eines der folgenden. Das was du oben versuchst funktioniert nicht, das ist vom JS Adapter.
    Await/Async
    const state = await this.getStateAsync('Dein Dp');

    Dann müsste ich eine komplette ASYNC Funktion aufbauen, weil ich ja in der 'OnStateChange' keinen await aufrufen kann?!

    BITTE BEACHTET DOCH DAS: https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge
    iobroker in Debian-VM auf Proxmox Server (Ryzen 7 / 32GB / 1TB NVMe SSD) als Master - mehrere Raspberry Pis (3+4) als Slaves. InfluxDB V2 und Grafana auf LXC.

    *Wer freundlich ist, dem wird freundlich geholfen *

    J.A.R.V.I.S.J 1 Antwort Letzte Antwort
    0
    • R reutli

      @J-A-R-V-I-S sagte in State auslesen in Adapterentwicklung:

      Versuch eines der folgenden. Das was du oben versuchst funktioniert nicht, das ist vom JS Adapter.
      Await/Async
      const state = await this.getStateAsync('Dein Dp');

      Dann müsste ich eine komplette ASYNC Funktion aufbauen, weil ich ja in der 'OnStateChange' keinen await aufrufen kann?!

      J.A.R.V.I.S.J Offline
      J.A.R.V.I.S.J Offline
      J.A.R.V.I.S.
      Developer
      schrieb am zuletzt editiert von
      #13

      @reutli du kannst die einfach zu einer Async machen, indem du async davor schreibst.

      async onStateChange(id, state)
      
      R 1 Antwort Letzte Antwort
      0
      • J.A.R.V.I.S.J J.A.R.V.I.S.

        @reutli du kannst die einfach zu einer Async machen, indem du async davor schreibst.

        async onStateChange(id, state)
        
        R Online
        R Online
        reutli
        schrieb am zuletzt editiert von
        #14

        @J-A-R-V-I-S

        Hi,

        nope leider nicht.
        Erhalte mit '.val' einen undefined bei 'time' (und ohne '.val' natürlich ein Object):

        (72098) Variablen für Funktionsaufruf : command: Pause time: undefined mid: 6dcad25a-39f7-4baf-9f44-877302c35c1f
        

        hier der code:

        	async onStateChange(id, state) {
        		if (state) {
        			let mid = id.split('.')[2];
        			let trigger = id.split('.').pop();
        			this.log.info(`state ${id} changed: ${state.val} (ack = ${state.ack})`);
        
        			if (trigger == 'command') { // wenn Befehl an Mower verändert wurde
        				const command = state.val;
        				const time = await this.getStateAsync('husqvarna_mowers.0.6dcad25a-39f7-4baf-9f44-877302c35c1f.Control.duration').val;
        				this.log.info('Variablen für Funktionsaufruf : command: ' + command + ' time: ' + time + ' mid: ' + mid);
        				//this.await.sendCommand(command, time, mid);
        			}
        		} else {
        			// The state was deleted
        			this.log.info(`state ${id} deleted`);
        		}
        	}
        

        BITTE BEACHTET DOCH DAS: https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge
        iobroker in Debian-VM auf Proxmox Server (Ryzen 7 / 32GB / 1TB NVMe SSD) als Master - mehrere Raspberry Pis (3+4) als Slaves. InfluxDB V2 und Grafana auf LXC.

        *Wer freundlich ist, dem wird freundlich geholfen *

        J.A.R.V.I.S.J 1 Antwort Letzte Antwort
        0
        • R reutli

          @J-A-R-V-I-S

          Hi,

          nope leider nicht.
          Erhalte mit '.val' einen undefined bei 'time' (und ohne '.val' natürlich ein Object):

          (72098) Variablen für Funktionsaufruf : command: Pause time: undefined mid: 6dcad25a-39f7-4baf-9f44-877302c35c1f
          

          hier der code:

          	async onStateChange(id, state) {
          		if (state) {
          			let mid = id.split('.')[2];
          			let trigger = id.split('.').pop();
          			this.log.info(`state ${id} changed: ${state.val} (ack = ${state.ack})`);
          
          			if (trigger == 'command') { // wenn Befehl an Mower verändert wurde
          				const command = state.val;
          				const time = await this.getStateAsync('husqvarna_mowers.0.6dcad25a-39f7-4baf-9f44-877302c35c1f.Control.duration').val;
          				this.log.info('Variablen für Funktionsaufruf : command: ' + command + ' time: ' + time + ' mid: ' + mid);
          				//this.await.sendCommand(command, time, mid);
          			}
          		} else {
          			// The state was deleted
          			this.log.info(`state ${id} deleted`);
          		}
          	}
          
          J.A.R.V.I.S.J Offline
          J.A.R.V.I.S.J Offline
          J.A.R.V.I.S.
          Developer
          schrieb am zuletzt editiert von J.A.R.V.I.S.
          #15

          @reutli lass dir mal den ganzen State ausgeben, ohne .val.

          this.log.info(JSON.stringify(time));
          

          Und mach mal einen try/catch Block drum. Damit fängst du die möglichen Fehler ab.

          R 1 Antwort Letzte Antwort
          0
          • J.A.R.V.I.S.J J.A.R.V.I.S.

            @reutli lass dir mal den ganzen State ausgeben, ohne .val.

            this.log.info(JSON.stringify(time));
            

            Und mach mal einen try/catch Block drum. Damit fängst du die möglichen Fehler ab.

            R Online
            R Online
            reutli
            schrieb am zuletzt editiert von
            #16

            @J-A-R-V-I-S sagte in State auslesen in Adapterentwicklung:

            this.log.info(JSON.stringify(time));

            jetzt bekomme ich Werte zurück:

            (72271) {"val":"24","ack":true,"ts":1587366996004,"q":0,"from":"system.adapter.husqvarna_mowers.0","user":"system.user.admin","lc":1587295118488}
            

            Warum bekommen ich diesen nicht in die const?

            BITTE BEACHTET DOCH DAS: https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge
            iobroker in Debian-VM auf Proxmox Server (Ryzen 7 / 32GB / 1TB NVMe SSD) als Master - mehrere Raspberry Pis (3+4) als Slaves. InfluxDB V2 und Grafana auf LXC.

            *Wer freundlich ist, dem wird freundlich geholfen *

            J.A.R.V.I.S.J 1 Antwort Letzte Antwort
            0
            • R reutli

              @J-A-R-V-I-S sagte in State auslesen in Adapterentwicklung:

              this.log.info(JSON.stringify(time));

              jetzt bekomme ich Werte zurück:

              (72271) {"val":"24","ack":true,"ts":1587366996004,"q":0,"from":"system.adapter.husqvarna_mowers.0","user":"system.user.admin","lc":1587295118488}
              

              Warum bekommen ich diesen nicht in die const?

              J.A.R.V.I.S.J Offline
              J.A.R.V.I.S.J Offline
              J.A.R.V.I.S.
              Developer
              schrieb am zuletzt editiert von
              #17

              @reutli dann schreib es in eine neue Zeile;

              const state = await this.getStateAsync('husqvarna_mowers.0.6dcad25a-39f7-4baf-9f44-877302c35c1f.Control.duration');
              const time = state.val;	
              
              R 1 Antwort Letzte Antwort
              0
              • J.A.R.V.I.S.J J.A.R.V.I.S.

                @reutli dann schreib es in eine neue Zeile;

                const state = await this.getStateAsync('husqvarna_mowers.0.6dcad25a-39f7-4baf-9f44-877302c35c1f.Control.duration');
                const time = state.val;	
                
                R Online
                R Online
                reutli
                schrieb am zuletzt editiert von reutli
                #18

                @J-A-R-V-I-S

                ok, danke.
                Jetzt bekomme ich einen Wert:

                (72584) Variablen für Funktionsaufruf : command: Pause time: 24 mid: 6dcad25a-39f7-4baf-9f44-877302c35c1f
                

                mit dem Code:

                async onStateChange(id, state) {
                		if (state) {
                			let mid = id.split('.')[2];
                			let trigger = id.split('.').pop();
                			this.log.info(`state ${id} changed: ${state.val} (ack = ${state.ack})`);
                
                			if (trigger == 'command') { // wenn Befehl an Mower verändert wurde
                				const command = state.val;
                				const state_check = await this.getStateAsync('husqvarna_mowers.0.6dcad25a-39f7-4baf-9f44-877302c35c1f.Control.duration');
                				this.log.info(JSON.stringify(state_check));
                				const time = state_check.val;
                				this.log.info('Variablen für Funktionsaufruf : command: ' + command + ' time: ' + time + ' mid: ' + mid);
                				//this.await.sendCommand(command, time, mid);
                			}
                		} else {
                			// The state was deleted
                			this.log.info(`state ${id} deleted`);
                		}
                	}
                

                Aber: Warum muss ich aus dem ganzen 'onStateChange' eine Async machen? Das habe ich nicht verstanden (und auch noch nirgendwo so gesehen....?

                Ich frage noch anders: Wie muss ich sonst (außerhalb des 'on StateChange') dann einen State abfragen?

                Sorry wenn ich so nachfrage, versuche eben zu lernen...

                Danke!

                PS: kannst Du mir für mein Beispiel ein sauberes "Try/Catch" zeigen, damit ich das korrekt in andere Bereich übernehmen kann? Habe hier schon einiges an Doku gelesen, aber noch nicht so ganz kapiert...

                BITTE BEACHTET DOCH DAS: https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge
                iobroker in Debian-VM auf Proxmox Server (Ryzen 7 / 32GB / 1TB NVMe SSD) als Master - mehrere Raspberry Pis (3+4) als Slaves. InfluxDB V2 und Grafana auf LXC.

                *Wer freundlich ist, dem wird freundlich geholfen *

                J.A.R.V.I.S.J 2 Antworten Letzte Antwort
                0
                • R reutli

                  @J-A-R-V-I-S

                  ok, danke.
                  Jetzt bekomme ich einen Wert:

                  (72584) Variablen für Funktionsaufruf : command: Pause time: 24 mid: 6dcad25a-39f7-4baf-9f44-877302c35c1f
                  

                  mit dem Code:

                  async onStateChange(id, state) {
                  		if (state) {
                  			let mid = id.split('.')[2];
                  			let trigger = id.split('.').pop();
                  			this.log.info(`state ${id} changed: ${state.val} (ack = ${state.ack})`);
                  
                  			if (trigger == 'command') { // wenn Befehl an Mower verändert wurde
                  				const command = state.val;
                  				const state_check = await this.getStateAsync('husqvarna_mowers.0.6dcad25a-39f7-4baf-9f44-877302c35c1f.Control.duration');
                  				this.log.info(JSON.stringify(state_check));
                  				const time = state_check.val;
                  				this.log.info('Variablen für Funktionsaufruf : command: ' + command + ' time: ' + time + ' mid: ' + mid);
                  				//this.await.sendCommand(command, time, mid);
                  			}
                  		} else {
                  			// The state was deleted
                  			this.log.info(`state ${id} deleted`);
                  		}
                  	}
                  

                  Aber: Warum muss ich aus dem ganzen 'onStateChange' eine Async machen? Das habe ich nicht verstanden (und auch noch nirgendwo so gesehen....?

                  Ich frage noch anders: Wie muss ich sonst (außerhalb des 'on StateChange') dann einen State abfragen?

                  Sorry wenn ich so nachfrage, versuche eben zu lernen...

                  Danke!

                  PS: kannst Du mir für mein Beispiel ein sauberes "Try/Catch" zeigen, damit ich das korrekt in andere Bereich übernehmen kann? Habe hier schon einiges an Doku gelesen, aber noch nicht so ganz kapiert...

                  J.A.R.V.I.S.J Offline
                  J.A.R.V.I.S.J Offline
                  J.A.R.V.I.S.
                  Developer
                  schrieb am zuletzt editiert von
                  #19

                  @reutli der Try/Catch sieht wie folgt aus:

                  try {
                  /*
                  Hier all der Code bei dem Fehler abgefangen werden sollen.
                  Sollte ein Fehler geworfen werden, wird der Code, der im Try/Catch steht nicht weiter ausgeführt, Code nach dem Try/Catch wird aber weiter ausgeführt.
                  */
                  } catch(error) {
                      this.log.error(error);
                  }
                  
                  R 1 Antwort Letzte Antwort
                  0
                  • R reutli

                    @J-A-R-V-I-S

                    ok, danke.
                    Jetzt bekomme ich einen Wert:

                    (72584) Variablen für Funktionsaufruf : command: Pause time: 24 mid: 6dcad25a-39f7-4baf-9f44-877302c35c1f
                    

                    mit dem Code:

                    async onStateChange(id, state) {
                    		if (state) {
                    			let mid = id.split('.')[2];
                    			let trigger = id.split('.').pop();
                    			this.log.info(`state ${id} changed: ${state.val} (ack = ${state.ack})`);
                    
                    			if (trigger == 'command') { // wenn Befehl an Mower verändert wurde
                    				const command = state.val;
                    				const state_check = await this.getStateAsync('husqvarna_mowers.0.6dcad25a-39f7-4baf-9f44-877302c35c1f.Control.duration');
                    				this.log.info(JSON.stringify(state_check));
                    				const time = state_check.val;
                    				this.log.info('Variablen für Funktionsaufruf : command: ' + command + ' time: ' + time + ' mid: ' + mid);
                    				//this.await.sendCommand(command, time, mid);
                    			}
                    		} else {
                    			// The state was deleted
                    			this.log.info(`state ${id} deleted`);
                    		}
                    	}
                    

                    Aber: Warum muss ich aus dem ganzen 'onStateChange' eine Async machen? Das habe ich nicht verstanden (und auch noch nirgendwo so gesehen....?

                    Ich frage noch anders: Wie muss ich sonst (außerhalb des 'on StateChange') dann einen State abfragen?

                    Sorry wenn ich so nachfrage, versuche eben zu lernen...

                    Danke!

                    PS: kannst Du mir für mein Beispiel ein sauberes "Try/Catch" zeigen, damit ich das korrekt in andere Bereich übernehmen kann? Habe hier schon einiges an Doku gelesen, aber noch nicht so ganz kapiert...

                    J.A.R.V.I.S.J Offline
                    J.A.R.V.I.S.J Offline
                    J.A.R.V.I.S.
                    Developer
                    schrieb am zuletzt editiert von
                    #20

                    @reutli sagte in State auslesen in Adapterentwicklung:

                    Ich frage noch anders: Wie muss ich sonst (außerhalb des 'on StateChange') dann einen State abfragen?

                    Entweder du machst es dort auch mit Async Methoden oder du verwendest die Möglichkeit mit Callbacks.

                    R 1 Antwort Letzte Antwort
                    0
                    • J.A.R.V.I.S.J J.A.R.V.I.S.

                      @reutli der Try/Catch sieht wie folgt aus:

                      try {
                      /*
                      Hier all der Code bei dem Fehler abgefangen werden sollen.
                      Sollte ein Fehler geworfen werden, wird der Code, der im Try/Catch steht nicht weiter ausgeführt, Code nach dem Try/Catch wird aber weiter ausgeführt.
                      */
                      } catch(error) {
                          this.log.error(error);
                      }
                      
                      R Online
                      R Online
                      reutli
                      schrieb am zuletzt editiert von
                      #21

                      @J-A-R-V-I-S

                      Dann wäre mein try/catch so richtig, oder:

                      			try {
                      				if (trigger == 'command') { // wenn Befehl an Mower verändert wurde
                      					const command = state.val;
                      					const state_check = await this.getStateAsync('husqvarna_mowers.0.6dcad25a-39f7-4baf-9f44-877302c35c1f.Control.duration');
                      					this.log.info(JSON.stringify(state_check));
                      					const time = state_check.val;
                      					this.log.info('Variablen für Funktionsaufruf : command: ' + command + ' time: ' + time + ' mid: ' + mid);
                      					//this.await.sendCommand(command, time, mid);
                      				}
                      			} catch(e) {
                      				this.log.error(e);
                      			}
                      

                      BITTE BEACHTET DOCH DAS: https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge
                      iobroker in Debian-VM auf Proxmox Server (Ryzen 7 / 32GB / 1TB NVMe SSD) als Master - mehrere Raspberry Pis (3+4) als Slaves. InfluxDB V2 und Grafana auf LXC.

                      *Wer freundlich ist, dem wird freundlich geholfen *

                      1 Antwort Letzte Antwort
                      0
                      • J.A.R.V.I.S.J J.A.R.V.I.S.

                        @reutli sagte in State auslesen in Adapterentwicklung:

                        Ich frage noch anders: Wie muss ich sonst (außerhalb des 'on StateChange') dann einen State abfragen?

                        Entweder du machst es dort auch mit Async Methoden oder du verwendest die Möglichkeit mit Callbacks.

                        R Online
                        R Online
                        reutli
                        schrieb am zuletzt editiert von
                        #22

                        @J-A-R-V-I-S sagte in State auslesen in Adapterentwicklung:

                        @reutli sagte in State auslesen in Adapterentwicklung:

                        Ich frage noch anders: Wie muss ich sonst (außerhalb des 'on StateChange') dann einen State abfragen?

                        Entweder du machst es dort auch mit Async Methoden oder du verwendest die Möglichkeit mit Callbacks.

                        ok, aber im 'OnStateChange' muss ich beim Async bleiben, oder wie wäre dort das callback-Szenario zu lösen?

                        BITTE BEACHTET DOCH DAS: https://forum.iobroker.net/topic/51555/hinweise-für-gute-forenbeiträge
                        iobroker in Debian-VM auf Proxmox Server (Ryzen 7 / 32GB / 1TB NVMe SSD) als Master - mehrere Raspberry Pis (3+4) als Slaves. InfluxDB V2 und Grafana auf LXC.

                        *Wer freundlich ist, dem wird freundlich geholfen *

                        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

                        744

                        Online

                        32.4k

                        Benutzer

                        81.4k

                        Themen

                        1.3m

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

                        • Du hast noch kein Konto? Registrieren

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