Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. CreateState Frage was automatisch angelegt wird?

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    CreateState Frage was automatisch angelegt wird?

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

      Hi,

      ich überlege gerade an einem Adapter für die Einbindung von "nut" - also USV Daten.

      Von nut kommen Daten in keys ala "battery.voltage.nominal" und dem entsprechenden Wert zurück. Diese wollte ich am liebsten auch in dieser Struktur ins iobroker bekommen. Frage: kynn ich ein "createState" mit dem Key machen und die Channels werden automatisch angelegt oder muss ich was basteln um diese "." notation wieder auseinanderzunehmen um die Cheánnels alle einzeln manuell anlegen zu lassen?

      Hat ein anderer Adapter sowas schon gemacht?

      Danke für Tips

      1 Reply Last reply Reply Quote 0
      • P
        pix last edited by

        Auf die Schnelle:

        Im Skript geht es.

        createState('oben.mitte.unten', 0);
        ```` ![261_bildschirmfoto_2016-07-02_um_13.13.13.jpg](/assets/uploads/files/261_bildschirmfoto_2016-07-02_um_13.13.13.jpg) 
        
        Gruß
        
        Pix
        1 Reply Last reply Reply Quote 0
        • apollon77
          apollon77 last edited by

          Cool, Danke, Das wollte ich wissen 🙂

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

            setzt "createState" den Wert auch wenn der Key das schon angelegt war?

            also:

            createState("key.name",0);

            createState("key.name",1);

            Ist der Wert danach 1?

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

              Für das Ändern des Wertes ist

              setState("key.name", 1);
              

              zuständig. Es funktioniert allerdings nicht unmittelbar nach createstate(), da createstate() etwas Zeit braucht.

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

                hm … wie findet man raus ob ein State schon existiert oder nicht?

                Das Problem ist: Jeder NUT-Treiber liefert pot. andere Werte zurück. Bedeutet: die anzulegenden States kommen quasi aus dem Response.

                Also müsste ich checken ob ein State da ist oder ob er angelegt werden muss wenn ich die Daten durchgehe ...

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

                  Du solltest schon wissen, welche Werte / Ereignisse in Datenpunkten angezeigt werden sollen. Alle anderen Werte werden ignoriert.

                  Eine ähnliche Aufgabenstellung wird http://forum.iobroker.net/viewtopic.php?f=23&t=3048&start=20#p29650 behandelt.

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

                    Das ist in meinen Augen nicht so einfach:Ich habe zwei verschienene APC-USVs und die liefern unterschiedliche Werte. "NUT" als Protokoll unterstützt noch einen Haufen weiterer USVs von allen möglichen Herstellern.

                    Wenn ich jetzt eine Auswahl mache limitiere ich mögliche andere Adapter-Nutzer die ggf ganz andere Werte interessant finden.

                    Also hätte ich aktuell den Ansatz gewählt die Daten die NUT zurückliefert auch in ioBroker bereitzustellen - und damit ist es nun mal dynamisch je nach USV.

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

                      Bei einem Adapter sieht es natürlich anders aus - das Beispiel von Pix war für den Javascript-Adapter. Für die Adapter-Entwicklung gibt es abweichende https://github.com/ioBroker/ioBroker/wiki/Adapter-Development-Documentation#functions (z.B. createDevice, createChannel, createState), die dann anzuwenden wären.

                      Ich vermute mal, dass es eine Möglichkeit zur Abfrage gibt, welche "keys" vorhanden sind ?

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

                        Jupp, diese Funktionsliste hatte ich auch gefunden … aber dann waren genau diese Fragen offen 🙂

                        1 Reply Last reply Reply Quote 0
                        • P
                          pix last edited by

                          @apollon77:

                          Hat ein anderer Adapter sowas schon gemacht? `
                          Hab es (wie andere auch) mal beim homepilot Adapter verwendet.

                          https://github.com/Pix---/ioBroker.home ... er/main.js

                          Das gibt es den Befehl adapter.setObjectNotExists

                          // create Channel DeviceID
                              adapter.setObjectNotExists(path, {
                                  type: 'channel',
                                  role: '',
                                  common: {
                                      name: devicename + ' (Device ID ' + deviceid + ')'
                                  },
                                  native: {}
                              });
                              // create States
                              adapter.setObjectNotExists(path + '.name', {
                                  type: 'state',
                                  common: {
                                      name: 'name ' + devicename,
                                      desc: 'name stored in homepilot for device ' + deviceid,
                                      type: 'string',
                                      read: true,
                                      write: false
                                  },
                                  native: {}
                              });
                          
                          

                          Erst wird geprüft, ob das Objekt schon existiert und dann erst angelegt (auch mit Rückmeldung).

                          adapter.setObjectNotExists(path + '.level', {
                                  type: 'state',
                                  common: {
                                      name: 'level ' + devicename,
                                      desc: 'level of device ' + deviceid,
                                      type: 'number',
                                      min: 0,
                                      max: 100,
                                      unit: '%',
                                      read: true,
                                      write: false
                                  },
                                  native: {}
                              }, function(err, obj) {
                                  if (!err && obj) adapter.log.info('Objects for ' + product + '(' + deviceid + ') created');
                              });
                          

                          Danach kannst du mit adapter.setState die Objekte füllen.

                          Gruß

                          Pix

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

                            @apollon77:

                            Frage: kynn ich ein "createState" mit dem Key machen und die Channels werden automatisch angelegt oder muss ich was basteln um diese "." notation wieder auseinanderzunehmen um die Cheánnels alle einzeln manuell anlegen zu lassen? `
                            Das "createState" des JS-Adapters erzeugt kein "device" und auch keinen "channel", sondern erzeugt bei einem Punkt im Namen nur eine optische Trennung (Ordnerstruktur). Es wird also nichts weiter übrig bleiben, als diese "." notation wieder auseinanderzunehmen.

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

                              @pix:

                              @apollon77:

                              Hat ein anderer Adapter sowas schon gemacht? `
                              Hab es (wie andere auch) mal beim homepilot Adapter verwendet.

                              https://github.com/Pix---/ioBroker.home ... er/main.js

                              Das gibt es den Befehl adapter.setObjectNotExists `

                              Heisst ich muss ein "battery.blubb.bla" über Schleifen/Rekurion auseinandernehmen um jeweils die Pfadteile nacheinander anzulegen und dann zu füllen … 😞

                              Ok, dann muss ich doch etwas tiefer rein und vllt doch was kleines Rekursives basteln 🙂

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              685
                              Online

                              31.7k
                              Users

                              79.8k
                              Topics

                              1.3m
                              Posts

                              3
                              13
                              3459
                              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