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. Entwicklung
  4. [gelöst]Adapterentwicklung: getState --> undefined

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

[gelöst]Adapterentwicklung: getState --> undefined

Geplant Angeheftet Gesperrt Verschoben Entwicklung
getstate
8 Beiträge 3 Kommentatoren 717 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.
  • R Offline
    R Offline
    rde-master
    Developer
    schrieb am zuletzt editiert von rde-master
    #1

    Hallo Zusammen,

    ich versuche mich gerade daran einen Adapter zu schreiben.
    ich komme auch gut voran.
    Nur schaffe ich es nicht den Wert eines States auszulesen.

    var wert_aktivedelay = this.getState(stateID);
    

    Dieser Code gibt mir im Log ein "undefined" aus. Eigentlich sollte da doch das Objekt ausgegeben werden.
    Sodass ich mit xxx.val einfach den Wert in die Variable bekomme.

    denn this.setState (xxx) funktioniert...

    Den Code aus der Dokumentation:

    this.getState('myState', function (err, state) {
        
        this.log.info(
              'State ' + adapter.namespace + '.myState -' + 
              '  Value: '        + state.val + 
              ', ack: '          + state.ack + 
              ', time stamp: '   + state.ts  + 
              ', last changed: ' + state.lc
        ); 
    
    }); 
    

    Hab ich versucht. Da sagt er mir er kennt "log" nicht. Somit komm ich hier auch nicht weiter.

    Kann mir jemand weiterhelfen?

    Grüße
    Daniel

    AlCalzoneA 1 Antwort Letzte Antwort
    0
    • R rde-master

      Hallo Zusammen,

      ich versuche mich gerade daran einen Adapter zu schreiben.
      ich komme auch gut voran.
      Nur schaffe ich es nicht den Wert eines States auszulesen.

      var wert_aktivedelay = this.getState(stateID);
      

      Dieser Code gibt mir im Log ein "undefined" aus. Eigentlich sollte da doch das Objekt ausgegeben werden.
      Sodass ich mit xxx.val einfach den Wert in die Variable bekomme.

      denn this.setState (xxx) funktioniert...

      Den Code aus der Dokumentation:

      this.getState('myState', function (err, state) {
          
          this.log.info(
                'State ' + adapter.namespace + '.myState -' + 
                '  Value: '        + state.val + 
                ', ack: '          + state.ack + 
                ', time stamp: '   + state.ts  + 
                ', last changed: ' + state.lc
          ); 
      
      }); 
      

      Hab ich versucht. Da sagt er mir er kennt "log" nicht. Somit komm ich hier auch nicht weiter.

      Kann mir jemand weiterhelfen?

      Grüße
      Daniel

      AlCalzoneA Offline
      AlCalzoneA Offline
      AlCalzone
      Developer
      schrieb am zuletzt editiert von
      #2

      @rde-master sagte in Adapterentwicklung: getState --> undefined:

      Da sagt er mir er kennt "log" nicht.

      Welche Doku ist das? Das ist falsch.
      function (err, state) müsste (err, state) => lauten.

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

      R 1 Antwort Letzte Antwort
      0
      • R Offline
        R Offline
        rde-master
        Developer
        schrieb am zuletzt editiert von
        #3

        Diese hier:

        https://github.com/ioBroker/ioBroker/wiki/Adapter-Development-Documentation#structure-of-mainjs

        AlCalzoneA 1 Antwort Letzte Antwort
        0
        • R rde-master

          Diese hier:

          https://github.com/ioBroker/ioBroker/wiki/Adapter-Development-Documentation#structure-of-mainjs

          AlCalzoneA Offline
          AlCalzoneA Offline
          AlCalzone
          Developer
          schrieb am zuletzt editiert von
          #4

          @rde-master Da steht aber nichts von this.log - du scheinst einen Mix aus dem "alten" Stil und dem Klassen-Stil aus dem Template zu haben.

          Prinzipiell kannst du die Doku so verwenden, allerdings musst du überall, wo Callback-Funktionen genutzt werden, Arrow-Funktionen statt "konventionellen" functions einsetzen.

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

          1 Antwort Letzte Antwort
          0
          • GarfonsoG Offline
            GarfonsoG Offline
            Garfonso
            Developer
            schrieb am zuletzt editiert von
            #5

            Oder für die "konventionellen" Funktionen die Umgebung definieren. Also entweder .bind(this) oder als Member übergeben. Wenn man JavaScript nicht gut kennt, ist das aber alles eher verwirrend. Und die Arrow Funktionen haben den Nachteil, dass man die nicht beliebig aufblasen kann (ok, kann auch ein Vorteil sein ;-)). Aber es bleibt das Problem, dass man im "intuitiven" Programmfluss danach den Wert ja immer noch nicht hat.

            Von daher würde ich stark empfehlen das ganze in async / await umzubauen.
            Da würde das, was du willst dann so gehen:

            var wert_aktivedelay = await this.getStateAsync(stateID);
            

            Dafür muss aber die Funktion, in der du das aufrufst selber async sein. Dafür ist es ganz hilfreich ins neue Template zu gucken und den eigenen Code vielleicht in die Richtung zu biegen. Wenn man noch nicht zu viel gemacht hat, dann geht das relativ einfach: https://github.com/ioBroker/ioBroker.template/blob/master/JavaScript/main.js
            (helfe zur Not auch dabei ;-) )

            Ultimativer Lovelace Leitfaden: https://forum.iobroker.net/topic/35937/der-ultimative-iobroker-lovelace-leitfaden-dokumentation

            Lovelace UI Beispiele: https://forum.iobroker.net/topic/35950/zeigt-her-eure-lovelace-visualisierung

            1 Antwort Letzte Antwort
            1
            • AlCalzoneA AlCalzone

              @rde-master sagte in Adapterentwicklung: getState --> undefined:

              Da sagt er mir er kennt "log" nicht.

              Welche Doku ist das? Das ist falsch.
              function (err, state) müsste (err, state) => lauten.

              R Offline
              R Offline
              rde-master
              Developer
              schrieb am zuletzt editiert von
              #6

              @AlCalzone
              DANKE!
              Super jetzt bekomm ich im Log immerhin die Werte geliefert :-) :clap:

              var wert_aktivedelay = this.getState('myState', (err, state) => {this.log.info(state.val)});
              

              Wie bekomme ich das jetzt in die Varialbe "wert_aktivedelay" rein?
              Ich habs mit dem Code versucht:

              var wert_aktivedelay;
              this.getState('myState', (err, state) => {wert_aktivedelay = state.val}); 
                  	this.log.warn("wert_aktivedelay: " + wert_aktivedelay);
              

              Leider kommt hier auch nur "undefined" raus :-(

              Vlt ist noch hilfreich, dass die Abfrage in einer for Schleife lebt, weil ich nacheinander verschiedene States prüfen möchte.
              Meine IDE gibt die Warnung aus, dass in einer for Schleife keine funktionen definiert werden sollen.
              Kann das daran liegen?
              So sieht derzeit der komplette code Schmippsel aus:

              	for (i = 0; i < device.wert; i++){
                  	var wert_aktivedelay;
                  	this.getState(adname + adid + device.name + ".Schwelle" + i + ".AktiveDelay", (err, state) => {wert_aktivedelay = state.val}); 
                  	 this.log.warn("wert_aktivedelay: " + wert_aktivedelay);
                  	
                  	
                  	if (wert_aktivedelay === true){
                  		
              			//mach was.....
              	}
              

              @Garfonso
              Danke für den Tipp!
              Ich hab mich mit "async" noch gar nicht beschäftigt,.....
              Der Code wird (hoffenltich) net so komplex, sobald ich mal die Grundfunktion am laufen habe werde ich mich damit mal beschäftigten,... momentan läuft alles ohne "async"

              GarfonsoG 1 Antwort Letzte Antwort
              0
              • R rde-master

                @AlCalzone
                DANKE!
                Super jetzt bekomm ich im Log immerhin die Werte geliefert :-) :clap:

                var wert_aktivedelay = this.getState('myState', (err, state) => {this.log.info(state.val)});
                

                Wie bekomme ich das jetzt in die Varialbe "wert_aktivedelay" rein?
                Ich habs mit dem Code versucht:

                var wert_aktivedelay;
                this.getState('myState', (err, state) => {wert_aktivedelay = state.val}); 
                    	this.log.warn("wert_aktivedelay: " + wert_aktivedelay);
                

                Leider kommt hier auch nur "undefined" raus :-(

                Vlt ist noch hilfreich, dass die Abfrage in einer for Schleife lebt, weil ich nacheinander verschiedene States prüfen möchte.
                Meine IDE gibt die Warnung aus, dass in einer for Schleife keine funktionen definiert werden sollen.
                Kann das daran liegen?
                So sieht derzeit der komplette code Schmippsel aus:

                	for (i = 0; i < device.wert; i++){
                    	var wert_aktivedelay;
                    	this.getState(adname + adid + device.name + ".Schwelle" + i + ".AktiveDelay", (err, state) => {wert_aktivedelay = state.val}); 
                    	 this.log.warn("wert_aktivedelay: " + wert_aktivedelay);
                    	
                    	
                    	if (wert_aktivedelay === true){
                    		
                			//mach was.....
                	}
                

                @Garfonso
                Danke für den Tipp!
                Ich hab mich mit "async" noch gar nicht beschäftigt,.....
                Der Code wird (hoffenltich) net so komplex, sobald ich mal die Grundfunktion am laufen habe werde ich mich damit mal beschäftigten,... momentan läuft alles ohne "async"

                GarfonsoG Offline
                GarfonsoG Offline
                Garfonso
                Developer
                schrieb am zuletzt editiert von
                #7

                @rde-master said in Adapterentwicklung: getState --> undefined:

                momentan läuft alles ohne "async"

                Aber es läuft trotzdem asynchron und genau da ist dein Denkfehler. :-)
                Der Wert wird schon irgendwann in deiner Variablen gespeichert. Aber eben erst "irgenwann", nämlich, wenn der getState Aufruf ein Ergebnis bekommen hat (halt asynchron). Dann wird die Klammerfunktion aufgerufen und der Wert zugewiesen. Wenn du das log noch mit in die Funktion tust, dann müsste es auch den richtigen Wert haben.

                Das getState startet eine Anfrage, der Ablauf wartet da aber nicht auf das Ergebnis, sondern es werden direkt die nächsten Zeilen ausgeführt. Daher muss man seinen Codefluss da deutlich anpassen.

                Oder man beschäftigt sich mit async, dann kann man mit dem Codewort "await" dafür sorgen, dass der Code an einer Stelle auf das Ergebnis wartet und es erst danach weiter geht. :-) Das ist gerade, wenn man es noch nicht so oft gemacht hat, deutlich intuitiver, daher würde ich das schon stark empfehlen.

                Ultimativer Lovelace Leitfaden: https://forum.iobroker.net/topic/35937/der-ultimative-iobroker-lovelace-leitfaden-dokumentation

                Lovelace UI Beispiele: https://forum.iobroker.net/topic/35950/zeigt-her-eure-lovelace-visualisierung

                1 Antwort Letzte Antwort
                0
                • R Offline
                  R Offline
                  rde-master
                  Developer
                  schrieb am zuletzt editiert von
                  #8

                  ahhhhhhhhhhh

                  DANKE,.. jetzt hat es klick gemacht. :grin: :grin:

                  Dann werd ich mir das Thema mal rein ziehen. Und den kompletten Code darauf aufbauen.

                  Nochmals DANKE!

                  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

                  758

                  Online

                  32.7k

                  Benutzer

                  82.3k

                  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