Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. Adapter.setObjectNotExists - Objekt wird nicht angelegt…

    NEWS

    • 15. 05. Wartungsarbeiten am ioBroker Forum

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    Adapter.setObjectNotExists - Objekt wird nicht angelegt…

    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      catnipper last edited by

      Hallo,

      Ich mache irgendetwas falsch wenn ich in meinem Adapter ein Objekt anlegen will. Es gibt weder ein Objekt zur Adapter Instanz "etamon.0" noch das Testobjekt. Einen Fehler sehe ich aber auch nicht im Log. Vielleicht kann mir jemand helfen was ich hier falsch mache?

      Die Syntax ist

      adapter.setObjectNotExists("test", {
          type: 'channel',
          common: {
              name: "test"
          },
          native: {}
      });
      

      Der gesamte Sourcode der main.js wäre hier zu lesen:

      https://github.com/frankhirsch/ioBroker … er/main.js

      Komischerweise hatte das schon mal funktioniert...

      1 Reply Last reply Reply Quote 0
      • C
        catnipper last edited by

        Komisch - er hat jetzt EINEN Knoten angelegt - ich hätte aber insgesamt 5 auf der obersten Ebene (etamon.0.xxx) erwartet…

        Stattdessen gabe es jetzt einen Fehler

        2019-01-12 21:09:40.210 - debug: etamon.0 ** Try to add ETA menu node [220/222]: /40/10241/0/0/12256
        2019-01-12 21:09:40.491 - silly: etamon.0 outUri : _40_10241._40_10241_0_0_12256
        2019-01-12 21:09:40.492 - silly: etamon.0 strValue :
        2019-01-12 21:09:40.492 - silly: etamon.0 unit :
        2019-01-12 21:09:40.492 - silly: etamon.0 decPlaces : 0
        2019-01-12 21:09:40.492 - silly: etamon.0 scaleFactor : 0
        2019-01-12 21:09:40.492 - silly: etamon.0 advTextOffset: 0
        2019-01-12 21:09:40.492 - silly: etamon.0 text() : 0
        2019-01-12 21:09:40.492 - silly: etamon.0 outType : text
        2019-01-12 21:09:40.492 - silly: etamon.0 outValue :
        2019-01-12 21:09:40.492 - silly: etamon.0 outUnit :
        2019-01-12 21:09:40.492 - silly: etamon.0 outRole : state
        2019-01-12 21:09:40.493 - debug: etamon.0 ** Try to add ETA menu node [221/222]: /40/10241/0/0/12197
        2019-01-12 21:09:40.774 - silly: etamon.0 outUri : _40_10241._40_10241_0_0_12256._40_10241_0_0_12197
        2019-01-12 21:09:40.774 - silly: etamon.0 strValue : 4,0
        2019-01-12 21:09:40.774 - silly: etamon.0 unit : °C
        2019-01-12 21:09:40.774 - silly: etamon.0 decPlaces : 1
        2019-01-12 21:09:40.774 - silly: etamon.0 scaleFactor : 10
        2019-01-12 21:09:40.774 - silly: etamon.0 advTextOffset: 0
        2019-01-12 21:09:40.775 - silly: etamon.0 text() : 40
        2019-01-12 21:09:40.775 - silly: etamon.0 outType : number
        2019-01-12 21:09:40.775 - silly: etamon.0 outValue : 40
        2019-01-12 21:09:40.775 - silly: etamon.0 outUnit : °C
        2019-01-12 21:09:40.775 - silly: etamon.0 outRole : value.temperature
        2019-01-12 21:09:40.850 - error: etamon.0 websocket error
        2019-01-12 21:09:40.851 - error: etamon.0 Error: websocket error
        at WS.Transport.onError (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/engine.io-client/lib/transport.js:64:13)
        at WebSocket.ws.onerror (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/engine.io-client/lib/transports/websocket.js:150:10)
        at WebSocket.onError (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/ws/lib/EventTarget.js:109:16)
        at emitOne (events.js:96:13)
        at WebSocket.emit (events.js:188:7)
        at WebSocket.finalize (/opt/iobroker/node_modules/iobroker.js-controller/node_modules/ws/lib/WebSocket.js:182:41)
        at emitOne (events.js:96:13)
        at Socket.emit (events.js:188:7)
        at onwriteError (_stream_writable.js:345:10)
        at onwrite (_stream_writable.js:363:5)
        at WritableState.onwrite (_stream_writable.js:90:5)
        at fireErrorCallbacks (net.js:479:13)
        at Socket._destroy (net.js:520:3)
        at WriteWrap.afterWrite (net.js:808:10)
        2019-01-12 21:09:40.852 - silly: etamon.0 transport error
        2019-01-12 21:09:41.422 - debug: etamon.0 statesDB connected
        2019-01-12 21:09:41.428 - debug: etamon.0 statesDB connected
        
        1 Reply Last reply Reply Quote 0
        • apollon77
          apollon77 last edited by

          Also der Code ist an sich ok, du kannst einen Callback an die Methode übergeben die bekommt als ersten einen "err" Parameter. den kannst Du mal loggen falls irgendwas passiert, siehst Du es dann.

          Ggf im Admin auch mal neu laden (unter Objekte der Button mit den zwei Pfeilen), nicht das die neuen Objekte nicht an Admin gemeldet wurden. Und auch im Admin die gesetzten Filter checken 🙂

          Rein Formal ist jede setObjectNotExist Aktion asynchron, du arbeitest hier aber sequenziell in einer Schleife. Das ist erstmal nicht ganz so wichtig, bedeutet nur das ggf erste Werte die Du setzt nicht angelegt werden wiel das Objekt noch gar nicht da ist oder so.

          1 Reply Last reply Reply Quote 0
          • C
            catnipper last edited by

            Ok - ich vermute als Nodejs Anfänger habe ich hier am ehesten ein klassisches Problem mit der “hell of callback”…

            1. Ich hatte Anfangs schon Probleme dass meine XML Rest calls noch liefen während ich das Ergebnis aber schon verarbeiten wollte. Aus diesem Grund habe ich dann “request-promise” verwendet

            2. In einer früheren Version hatte ich dann schon mal eine manuelle asynchrone Schleife gebaut (Rekursive Funktion die nicht mehr aufgerufen wird wenn die Liste der zu verarbeitenden Objekte leer ist…)

            3. Ich würde es jetzt mal mit dem “async” Modul probieren, aber den ganzen Code wieder auf async.waterfall oder async.series umzubauen...

            Spezielle Fragen hätte ich noch zum Verständnis von ioBroker die Du mir bestimmt beantworten kannst:

            1. Wenn der Apater gestartet wird (auch manuell in CLI) und der Code so gebaut ist wie bei mir mit einzelnen Funktionen, wird die Instanz dann automatisch beendet oder muss ich den Apapter dann explizit mit adapter.stop() in meiner letzten Funktion beenden?

            2. Angenommen die Instanz wird mit adapter.stop() beendet oder läuft in den Timeout, kann dann ein vorher abgesetztes adapter.setObject… überhaupt noch funktionieren?

            Scheinbar stellt sich das weniger als Problem dar wenn man nur kleinere Datenmengen verarbeitet, bei mir sind das aber immer gleich ca. 200 Werte die ich schreiben will?

            1 Reply Last reply Reply Quote 0
            • C
              catnipper last edited by

              Könnte mir jemand bei der Funktion mit dem Callback helfen?

              Irgendwie will der bei mir nicht…

              1. channels sei ein Array mit n-Einträgen

              2. createChannel() soll das Objekt anlegen

              3. Als Callback von adapter.setObject soll das angelegte Objekt aus der Liste geslöscht werden und createChannels() erneut aufgerufen werden

              Leider bekomme ich den Callback aber <u>gar nicht</u> dazu eine Ausgabe im Log oder der Console zu erzeugen… weder für adapter.setObject noch adapter.setObjectNotExists

              function createChannels() {
              	console.log("** Channels to create: "+channels.length);
              	if(channels.length>0) {	
              		createChannel();
              	} else {
              		adapter.log.debug("** Channels created - next: setObjects");
              		//createObjects();
              		adapter.stop();
              	}
              }
              
              function createChannel() {
              	console.log("setChannel 01 - " + channels[0][0]);
                  adapter.setObject(channels[0][0], {
                      type: 'channel',
                      common: {
                          name: channels[0][1]
                      },
                      native: {}
                  }, function(err) {
                  	adapter.log.debug("callback createChannel...");
                  });
              
                  console.log("setChannel 02 - " + channels[0][0]);
                  channels.shift();
              
                  createChannels();
              }
              
              1 Reply Last reply Reply Quote 0
              • jogibear9988
                jogibear9988 last edited by

                Schau mal wie ich das im Oilfox drin habe:

                https://github.com/iobroker-community-a … in.js#L102

                1 Reply Last reply Reply Quote 0
                • C
                  catnipper last edited by

                  Ein bisschen Glück… aber nachdem ich mal etwas tiefer gegraben habe und die Fehlermeldung gegoogelt habe fand ich dann hier im Forum Hinweise dass ioBroker immer mal wieder abstürzt, abhängig von der verwendeten NodeJS Version...

                  viewtopic.php?t=18555

                  https://www.forum.iobroker.net/viewtopic.php?t=17499

                  Ich habe mich dann dazu entschlossen mal die Version von NodeJS und npm zu prüfen - ich verwende das <u>buanet-iobroker</u> Docker Image auf einer Synology. Siehe da - die installierten Versionen waren noch npm 3.10.10 und node v6.14.4

                  Einfach mal aktualisiert und Neustart.. voila - die Channels werden sofort angelegt. 😮

                  Ich habe dann node der Einfachheit mit NVM aktualisiert und npm auf der Kommandozeile: npm install npm -g (node v8.15.0 und npm 6.5.0).

                  1 Reply Last reply Reply Quote 0
                  • apollon77
                    apollon77 last edited by

                    Also das hat nichts mit der nodejs Version zu tun. ich nuzue nahezu die gleiche Kombi wie du (node 6 und npm3) in meinem Produktivsystem … und es geht alles 🙂

                    Aber super das jetzt gelöst.

                    Je nach Geschwindigkeit des Systems können 200 Objekte schon kurz dauern

                    1 Reply Last reply Reply Quote 0
                    • C
                      catnipper last edited by

                      Ich werde es beobachten wenn ich den Apapter dann auf dem produktiven (nicht aktualisierten) System installiere… vielleicht ergibt sich dann da noch etwas. Danke für die Unterstützung!

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      956
                      Online

                      31.6k
                      Users

                      79.4k
                      Topics

                      1.3m
                      Posts

                      3
                      9
                      1121
                      Loading More Posts
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes
                      Reply
                      • Reply as topic
                      Log in to reply
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                      The ioBroker Community 2014-2023
                      logo