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

      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

                          679
                          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