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. Adapterentwicklung Daten und weiteres

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

Adapterentwicklung Daten und weiteres

Geplant Angeheftet Gesperrt Verschoben Entwicklung
cross originspeicherort
11 Beiträge 3 Kommentatoren 1.1k 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.
  • dbwebD Offline
    dbwebD Offline
    dbweb
    schrieb am zuletzt editiert von
    #1

    Hallo Zusammen,

    Habe damit begonnen, meinen ersten Adapter zu entwickeln. Werde ihn dann vorstellen, sobald er "alpha"-Status verlassen hat.
    Ich konnte mithilfe der Doku, des Forums und anderen Adaptern schon so einiges machen, ein paar Fragen hätte ich aber trotzdem noch, um das ganze "sauberer" zu implementieren. Ich schreibe jeweils wie ich was verstanden habe, korrigiert mich wenn ich falsch liege.
    1. Speicherorte für Daten:
    Einstellungsdaten aus der index_m.html werden in "native" gespeichert und können über Adapter.config.x ausgelesen werden. Zwar könnte man diese auch setzen, sollte man aber nicht tun da dies einen Adapterneustart zur Folge hat.
    Weitere Daten werden in den normalen "Datenpunkten" abgelegt (setState), die man entweder im Code erstellt (setObject) oder in der io-package unter "instanceObjects" vordefiniert.
    Frage: Wo könnte ich Daten ablegen, die wie die "native" nicht sichtbar sind? Konkret geht es um ein API-Token welches ich nicht unbedingt in den States ablegen möchte, der user soll nur die States sehen, die für ihn von Interesse sind.

    2. CrossOrigin-Problem:
    Ich möchte den User in der index_m.html gewisse Einstellungen vornehmen lassen, dann eine API abfragen, und nochmals eine Einstellung vom Benutzer vornehmen. Die API muss ich serverseitig abfragen, da ich vom Browser auch die Cors-Probleme nicht umgehen kann.
    Frage: Habe bisher nur die Lösung wie "message" und "sendTo" gesehen (beim sql-Adapter), ist das die Korrekte vorgehensweise, also brauche ich dazu wirklich die "message"-Funktionalität?

    Vielen Dank schon mal für eure Hilfe im Voraus.

    1 Antwort Letzte Antwort
    0
    • dbwebD Offline
      dbwebD Offline
      dbweb
      schrieb am zuletzt editiert von
      #2

      Noch ne kleine Zusatzfrage:
      Mir passiert immer mal wieder, dass der Adapter irgendwo im Code hängen bleibt (z.B. falscher Zugriff auf nicht existierenden State oder so). Manchmal kommt die entsprechende Meldung im Log, oft kommt aber gar nichts und ich weis nicht wo er hängen geblieben ist.
      Wie komme ich an alle Ausgaben, also auch an "RunTimeErrors"?
      Aktuell bleibt er mir nach einem await einfach hängen und ich sehe nicht wieso...

      AlCalzoneA 1 Antwort Letzte Antwort
      0
      • Jey CeeJ Online
        Jey CeeJ Online
        Jey Cee
        Developer
        schrieb am zuletzt editiert von
        #3
        1. Wenn native im Adapter keine option kannst du es ja auchbim Info objekt als native ablegen. Das geht ohne neustart.

        2. ja sendto/message ist die richtige vorgehensweise.

        3. du müsstest dich per remote in die nodejs instanz des Adapters mit deiner IDE einhängen. Sonst kannst du nur überall logs einbauen.

        Persönlicher Support
        Spenden -> paypal.me/J3YC33

        1 Antwort Letzte Antwort
        1
        • dbwebD dbweb

          Noch ne kleine Zusatzfrage:
          Mir passiert immer mal wieder, dass der Adapter irgendwo im Code hängen bleibt (z.B. falscher Zugriff auf nicht existierenden State oder so). Manchmal kommt die entsprechende Meldung im Log, oft kommt aber gar nichts und ich weis nicht wo er hängen geblieben ist.
          Wie komme ich an alle Ausgaben, also auch an "RunTimeErrors"?
          Aktuell bleibt er mir nach einem await einfach hängen und ich sehe nicht wieso...

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

          @dbweb
          Vorher: Richte in VSCode die Debug-Konfiguration "Node.js: Attach to Remote ein", wobei du den Hostnamen/IP des Test-Rechners sowie den dortigen Pfad zum Adapter eintragen musst.

          Debuggen geht jetzt wie folgt:

          1. Stoppe auf dem Test-Rechner deinen Adapter und führe ihn per Kommandozeile folgendermaßen aus:

            node --inspect-brk=0.0.0.0:9229 pfad/zur/main.js --force --logs
            
          2. Drücke in VSCode F5

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

          1 Antwort Letzte Antwort
          1
          • dbwebD Offline
            dbwebD Offline
            dbweb
            schrieb am zuletzt editiert von
            #5

            Dankeschön, habs mit PHPStorm hingekreigt. Debugging inkl. Breakpoints geht wunderbar, sendto/message klappt auch schon, komme gut voran :)

            1 Antwort Letzte Antwort
            0
            • dbwebD Offline
              dbwebD Offline
              dbweb
              schrieb am zuletzt editiert von
              #6

              Jetzt muss ich doch nochmals zu 1 nachfragen: Wie kann ich ein 'native' zum Adapter setzen, also einen wert aus Adapter.config.x? Mit setObject erstelle ich ja nur ein Objekt. Mit setState fnde ich irgendwie den Pfad zu dem Objekt nicht, weder via system.adapter.0. noch sonst irgendwie. Hänge da grad etwas...
              Neustart danach wäre ganz ok, aber ich müsste erst 2 native setzen, erst danach neu starten, geht das?

              AlCalzoneA 1 Antwort Letzte Antwort
              0
              • dbwebD dbweb

                Jetzt muss ich doch nochmals zu 1 nachfragen: Wie kann ich ein 'native' zum Adapter setzen, also einen wert aus Adapter.config.x? Mit setObject erstelle ich ja nur ein Objekt. Mit setState fnde ich irgendwie den Pfad zu dem Objekt nicht, weder via system.adapter.0. noch sonst irgendwie. Hänge da grad etwas...
                Neustart danach wäre ganz ok, aber ich müsste erst 2 native setzen, erst danach neu starten, geht das?

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

                @dbweb
                Objekt mit getObject lesen, dann bearbeiten und mit setObject zurückschreiben

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

                1 Antwort Letzte Antwort
                0
                • dbwebD Offline
                  dbwebD Offline
                  dbweb
                  schrieb am zuletzt editiert von
                  #8

                  Tut mir leid, irgendwie habe ich wohl ein Grundkonzept nicht verstanden.
                  Ein Beispiel:
                  In der io-package habe ich:

                  "native": {
                          "someVar": ""
                  }
                  

                  Diese kann ich in der index_m.html an das callback von save(callback) übergeben / setzen:

                  function save(callback){
                     var obj = {};
                     obj['someVar']¨= 'Some Value';
                     callback(obj);
                  }
                  

                  und wird damit zur Instanz gespeichert.
                  in der main.js kann ich dann über

                  Adapter.config.someVar
                  

                  Darauf zugreifen.

                  Ich schaffe es aber nicht, diesen Wert zu verändern.
                  Versucht habe ich z.B. folgendes:

                  Adapter.getObject('config.someVar',function(err, obj){
                     Adaper.log.info(JSON.stringify(obj);
                  }
                  

                  liefert NULL.

                  Habs auch schon über diverses anderes versucht, absolut kein Erfolg.
                  Zudem:
                  Wenn ich mit Adapter.getObject('existierendes.irgendwas',function(err,obj){}) etwas hole was es gibt (vorher mit setObject erstellt), dann kriege ich ja trotzdem nicht den Wert dieses Objekes.
                  Als Beispiel:

                          Adapter.setObjectNotExists('something', {
                              type: 'state',
                              common: {name: 'something', type: 'number', role: '', read: true, write: true},
                              native: []
                          },function(){
                              Adapter.setState('something',42,function(){
                                  Adapter.getObject('something',function(err,obj){
                                      Adapter.log.info(JSON.stringify(obj)); // Gibt aus: {"type":"state","common":{"name":"something","type":"number","role":"","read":true,"write":true},"native":[],"from":"system.adapter.testadapter.0","user":"system.user.admin","ts":1572639560947,"_id":"testadapter.0.something"}
                                  });
                                  // kann den state nur damit auslesen
                                  Adapter.getState('something',function(err,state){
                                      Adapter.log.info(JSON.stringify(state)); // Gibt aus: {"val":42,"ack":false,"ts":1572639681473,"q":0,"from":"system.adapter.testadapter.0","user":"system.user.admin","lc":1572639558088}
                                  });
                              });
                          });
                  

                  Also irgendwas verstehe ich komplett falsch....könnt ihr mir auf die Sprünge helfen?

                  AlCalzoneA 1 Antwort Letzte Antwort
                  0
                  • dbwebD dbweb

                    Tut mir leid, irgendwie habe ich wohl ein Grundkonzept nicht verstanden.
                    Ein Beispiel:
                    In der io-package habe ich:

                    "native": {
                            "someVar": ""
                    }
                    

                    Diese kann ich in der index_m.html an das callback von save(callback) übergeben / setzen:

                    function save(callback){
                       var obj = {};
                       obj['someVar']¨= 'Some Value';
                       callback(obj);
                    }
                    

                    und wird damit zur Instanz gespeichert.
                    in der main.js kann ich dann über

                    Adapter.config.someVar
                    

                    Darauf zugreifen.

                    Ich schaffe es aber nicht, diesen Wert zu verändern.
                    Versucht habe ich z.B. folgendes:

                    Adapter.getObject('config.someVar',function(err, obj){
                       Adaper.log.info(JSON.stringify(obj);
                    }
                    

                    liefert NULL.

                    Habs auch schon über diverses anderes versucht, absolut kein Erfolg.
                    Zudem:
                    Wenn ich mit Adapter.getObject('existierendes.irgendwas',function(err,obj){}) etwas hole was es gibt (vorher mit setObject erstellt), dann kriege ich ja trotzdem nicht den Wert dieses Objekes.
                    Als Beispiel:

                            Adapter.setObjectNotExists('something', {
                                type: 'state',
                                common: {name: 'something', type: 'number', role: '', read: true, write: true},
                                native: []
                            },function(){
                                Adapter.setState('something',42,function(){
                                    Adapter.getObject('something',function(err,obj){
                                        Adapter.log.info(JSON.stringify(obj)); // Gibt aus: {"type":"state","common":{"name":"something","type":"number","role":"","read":true,"write":true},"native":[],"from":"system.adapter.testadapter.0","user":"system.user.admin","ts":1572639560947,"_id":"testadapter.0.something"}
                                    });
                                    // kann den state nur damit auslesen
                                    Adapter.getState('something',function(err,state){
                                        Adapter.log.info(JSON.stringify(state)); // Gibt aus: {"val":42,"ack":false,"ts":1572639681473,"q":0,"from":"system.adapter.testadapter.0","user":"system.user.admin","lc":1572639558088}
                                    });
                                });
                            });
                    

                    Also irgendwas verstehe ich komplett falsch....könnt ihr mir auf die Sprünge helfen?

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

                    @dbweb Das Objekt das du suchst heißt system.adapter.<adaptername>.<instanznr>. Das kannst du dir mit getObject holen und bearbeiten. Hier ein Beispiel:
                    https://github.com/AlCalzone/ioBroker.tradfri/blob/master/src/main.ts#L573

                    Wenn du jetzt eh mit der Entwicklung beginnst, empfehle ich dir: lass die Callbacks sein und nutze die ...Async-Funktionen mit await. Da sparst du dir die ganze Callback-Hölle und dein Code wird lesbarer.

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

                    1 Antwort Letzte Antwort
                    1
                    • dbwebD Offline
                      dbwebD Offline
                      dbweb
                      schrieb am zuletzt editiert von
                      #10

                      klar, callbacks waren nur rasch für das Beispiel weil ich vergessen hatte, dass die Methoden async sind. Verwende sonst natürlich async dafür, konnte ja sonst keiner mehr lesen.

                      1 Antwort Letzte Antwort
                      0
                      • dbwebD Offline
                        dbwebD Offline
                        dbweb
                        schrieb am zuletzt editiert von
                        #11

                        So, hat alles geklappt. Hatte wohl irgendwie nie die richtige Kombination aus getForeignObject und system.adapter.... ausprobiert, hatte immer nur null oder leere Objekte. Danke für die Hilfe, bin ein ganzes Stück weiter gekommen und werde den Adapter Montag wohl mal vorstellen und auf NPM packen :)

                        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

                        344

                        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