Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. Entwicklung
  4. Adapter-Entwicklung / getState / Callback Fehler

NEWS

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    13
    1
    750

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    2.0k

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    11
    1
    922

Adapter-Entwicklung / getState / Callback Fehler

Geplant Angeheftet Gesperrt Verschoben Entwicklung
6 Beiträge 3 Kommentatoren 1.2k Aufrufe 3 Beobachtet
  • Ä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.
  • N Offline
    N Offline
    NemoN
    schrieb am zuletzt editiert von
    #1

    Hallo zusammen, ich kämpfe immer noch mit der Adapter-Entwicklung. Insbesondere async/await bzw. Promises machen mir zu schaffen. Ich habe hier folgenden Code Snippet:

    async onReady() {
    
    	await this.getState('lastUpdate', function (err, state) {
    		if (state != null) {
    			let now = new Date().getTime();
    			if (now < (state.ts + 10 * 1000)) {
    				this.log.warn("adapter ran less than 10 minutes earlier. Delaying.");
    				this.stop(); // stop adapter right here (on schedule mode)
    			}
    		}
    	});
    
    	this._queryServer();
    }
    

    Bei der Ausführung bekomme ich folgenden Fehler:

    TypeError: Cannot read property 'warn' of undefined
        at Socket.<anonymous> (/opt/iobroker/node_modules/iobroker.ryd/main.js:98:15)
        at Socket.onack (/opt/iobroker/node_modules/socket.io-client/lib/socket.js:312:9)
        at Socket.onpacket (/opt/iobroker/node_modules/socket.io-client/lib/socket.js:236:12)
        at Manager.<anonymous> (/opt/iobroker/node_modules/component-bind/index.js:21:15)
        at Manager.Emitter.emit (/opt/iobroker/node_modules/socket.io-client/node_modules/component-emitter/index.js:133:20)
        at Manager.ondecoded (/opt/iobroker/node_modules/socket.io-client/lib/manager.js:332:8)
        at Decoder.<anonymous> (/opt/iobroker/node_modules/component-bind/index.js:21:15)
        at Decoder.Emitter.emit (/opt/iobroker/node_modules/component-emitter/index.js:134:20)
        at Decoder.add (/opt/iobroker/node_modules/socket.io-parser/index.js:246:12)
        at Manager.ondata (/opt/iobroker/node_modules/socket.io-client/lib/manager.js:322:16)
    

    Wieso kann ich in dem getState Callback nicht auf die Adapter Funktionen (via this. ...) zugreifen? adapter.log.warn .... klappt auch nicht...

    foxriver76F 1 Antwort Letzte Antwort
    0
    • N Offline
      N Offline
      NemoN
      schrieb am zuletzt editiert von
      #2

      Ich antworte mir mal selber:
      man muss beim adapter init noch folgendes definieren:

      Außerhalb der Klasse, globale Variable:

      var gthis;
      

      im onReady:

      	async onReady() {
      		gthis = this;
      

      im callback dann Zugriff via:

      if (now < (state.ts + 10 * 1000)) {
        gthis.log.warn("adapter ran less than 10 minutes earlier. Delaying.");
        gthis.stop(); // stop adapter right here (on schedule mode)
      }
      
      AlCalzoneA 1 Antwort Letzte Antwort
      0
      • N NemoN

        Hallo zusammen, ich kämpfe immer noch mit der Adapter-Entwicklung. Insbesondere async/await bzw. Promises machen mir zu schaffen. Ich habe hier folgenden Code Snippet:

        async onReady() {
        
        	await this.getState('lastUpdate', function (err, state) {
        		if (state != null) {
        			let now = new Date().getTime();
        			if (now < (state.ts + 10 * 1000)) {
        				this.log.warn("adapter ran less than 10 minutes earlier. Delaying.");
        				this.stop(); // stop adapter right here (on schedule mode)
        			}
        		}
        	});
        
        	this._queryServer();
        }
        

        Bei der Ausführung bekomme ich folgenden Fehler:

        TypeError: Cannot read property 'warn' of undefined
            at Socket.<anonymous> (/opt/iobroker/node_modules/iobroker.ryd/main.js:98:15)
            at Socket.onack (/opt/iobroker/node_modules/socket.io-client/lib/socket.js:312:9)
            at Socket.onpacket (/opt/iobroker/node_modules/socket.io-client/lib/socket.js:236:12)
            at Manager.<anonymous> (/opt/iobroker/node_modules/component-bind/index.js:21:15)
            at Manager.Emitter.emit (/opt/iobroker/node_modules/socket.io-client/node_modules/component-emitter/index.js:133:20)
            at Manager.ondecoded (/opt/iobroker/node_modules/socket.io-client/lib/manager.js:332:8)
            at Decoder.<anonymous> (/opt/iobroker/node_modules/component-bind/index.js:21:15)
            at Decoder.Emitter.emit (/opt/iobroker/node_modules/component-emitter/index.js:134:20)
            at Decoder.add (/opt/iobroker/node_modules/socket.io-parser/index.js:246:12)
            at Manager.ondata (/opt/iobroker/node_modules/socket.io-client/lib/manager.js:322:16)
        

        Wieso kann ich in dem getState Callback nicht auf die Adapter Funktionen (via this. ...) zugreifen? adapter.log.warn .... klappt auch nicht...

        foxriver76F Offline
        foxriver76F Offline
        foxriver76
        Developer
        schrieb am zuletzt editiert von foxriver76
        #3

        @NemoN sagte in Adapter-Entwicklung / getState / Callback Fehler:

        Wieso kann ich in dem getState Callback nicht auf die Adapter Funktionen (via this. ...) zugreifen? adapter.log.warn .... klappt auch nicht...

        Weil du dann innerhalb einer Callback Funktion bist und der this-Kontext sich dann auf die Funktion bezieht. Was du da tust mit dem Mix aus Promises und Callbacks macht wenig Sinn.
        Promises (+ Async/Await was auf Promises basiert) funktioniert nur mit Methoden die auch Promises zurück liefern. getState tut dies nicht... was du brauchst ist getStateAsync zudem tut ein await Block die Asynchronität aus dem Code nehmen und wartet an der Stelle bis das Promsie returned wurde. D. h. es ersetzt Callbacks.

        Dein Code oben:

        async onReady() {
           try {
        	const state = await this.getStateAsync('lastUpdate');
        	const now = new Date().getTime();
        
        	if (now < (state.ts + 10 * 1000)) {
        	    this.log.warn("adapter ran less than 10 minutes earlier. Delaying.");
        	    this.stop(); // stop adapter right here (on schedule mode)
        	}
           } catch (e) {
                // handle error here
           }
        
           this._queryServer();
        }
        

        Videotutorials & mehr

        Hier könnt ihr mich unterstützen.

        1 Antwort Letzte Antwort
        0
        • N NemoN

          Ich antworte mir mal selber:
          man muss beim adapter init noch folgendes definieren:

          Außerhalb der Klasse, globale Variable:

          var gthis;
          

          im onReady:

          	async onReady() {
          		gthis = this;
          

          im callback dann Zugriff via:

          if (now < (state.ts + 10 * 1000)) {
            gthis.log.warn("adapter ran less than 10 minutes earlier. Delaying.");
            gthis.stop(); // stop adapter right here (on schedule mode)
          }
          
          AlCalzoneA Offline
          AlCalzoneA Offline
          AlCalzone
          Developer
          schrieb am zuletzt editiert von AlCalzone
          #4

          @NemoN sagte in Adapter-Entwicklung / getState / Callback Fehler:

          Ich antworte mir mal selber:

          Wenn du unbedingt Callbacks brachst, verwende lieber Arrow-Funktionen anstatt this-Referenzen zu speichern:

          this.getState('lastUpdate', (err, state) => {
          

          anstatt

          this.getState('lastUpdate', function (err, state) {
          

          um dafür zu sorgen, dass this immer das richtige meint.

          Oder nimm direkt die Async-Versionen der Methoden wie @foxriver76 geschrieben hat. Da gibts das Problem gar nicht erst.

          Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

          1 Antwort Letzte Antwort
          0
          • foxriver76F Offline
            foxriver76F Offline
            foxriver76
            Developer
            schrieb am zuletzt editiert von
            #5

            Und wenn du tatsächlich callbacks verwendest wie von @AlCalzone gezeigt, brauchst du kein async vor der Klassenmethode und auch kein await bei deinen Methoden/Funktionsaufrufen.

            Videotutorials & mehr

            Hier könnt ihr mich unterstützen.

            1 Antwort Letzte Antwort
            0
            • N Offline
              N Offline
              NemoN
              schrieb am zuletzt editiert von
              #6

              Danke für die Hinweise, langsam sehe ich klarer ✌

              1 Antwort Letzte Antwort
              0

              Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

              Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

              Mit deinem Input könnte dieser Beitrag noch besser werden 💗

              Registrieren Anmelden
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate

              417

              Online

              32.9k

              Benutzer

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