Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Datenpunkt per JavaScript bearbeiten - Ordner

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Datenpunkt per JavaScript bearbeiten - Ordner

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

      @bananajoe sagte: var tempobj = getObject(s_state_rootpath + s_DeviceName);

      ... funktioniert nicht, da es nur ein Ordner ohne Objekt ist. Du musst das komplette Device-Objekt erstellen.

      BananaJoe 1 Reply Last reply Reply Quote 0
      • BananaJoe
        BananaJoe Most Active @paul53 last edited by

        @paul53 in der neuen Adminoberfläche unter 0_userdata.0 kann ich gezielt Ordner erstellen - geht das auch per JavaSkript? Wenn es schon keine Objekte sind?

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

          @bananajoe sagte: geht das auch per JavaSkript? Wenn es schon keine Objekte sind?

          Ja, aber Du musst das gesamte Objekt mit type, common, native im Skript erstellen.

          const tempobj = {
             type: 'device',
             common: {
                 name: 'Sicherungskasten ESP32 Stromversorgung'
             },
             native: {}
          };
          

          anstelle von Zeilen 13, 14.

          BananaJoe 1 Reply Last reply Reply Quote 0
          • BananaJoe
            BananaJoe Most Active @paul53 last edited by

            @paul53 irgendwie bin ich zu blöd ...

            Hättest du mal ein funktionierendes Mini-Beispiel welches mir einen Datenpunkt( aka Ordner) erzeugt vom Typ Gerät?
            Unterhalb dessen ich dann meine Eigentlichen Datenpunkte anlegen kann?

            Eigentlich würde ich gerne in meinem Skripten

            • einen Ordner unterhalb von 0_userdata.0 anlegen, also das der Typ auch Ordner ist. Und ich es auch im neuen Admin bearbeiten kann. Irgendwie kann ich das bei all meinen Datenpunkten die ich per Skript anlegen nicht. Ich kann dann dort auch nur noch Verzeichnisse anlegen aber z.B. nicht direkt einen Datenpunkt Bei allen die ich mit dem neuen Admin von Hand anlege geht das ohne Probleme
            • Ein Gerät darunter anlegen was auch wirklich vom Typ Gerät ist
            Sokomoto paul53 2 Replies Last reply Reply Quote 0
            • Sokomoto
              Sokomoto @BananaJoe last edited by

              @bananajoe sagte in Datenpunkt per JavaScript bearbeiten - Ordner:

              irgendwie bin ich zu blöd ...

              Das ging mir auch so, bis mir @paul53 den entscheidenden Tipp gab. Allerdings habe ich mir dann die Ordnerstruktur genauer angeschaut und gesehen, dass bei mir die Systemordner von den Adaptern auch ohne Objekt angelegt worden sind. Auf dem Bild sieht man es an den Berechtigungen 644. Irgendwie habe ich die Zugriffsberechtigungen noch nicht begriffen. Vielleicht liegt es daran, weil ich das immer mit einem Filesystem vergleiche.

              1b4db741-8706-4280-bee9-2e1f9c837e54-image.png

              tschuess

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

                @bananajoe sagte: Hättest du mal ein funktionierendes Mini-Beispiel welches mir einen Datenpunkt( aka Ordner) erzeugt vom Typ Gerät?

                const idDevice = '0_userdata.0.Blitzwolf099';
                const idPower = idDevice + '.POWER';
                const obj = {
                    type: 'device',
                    common: {
                        name: 'Sicherungskasten ESP32 Stromversorgung'
                    },
                    native: {}
                };
                const common = {
                    type: 'boolean',
                    role: 'switch',
                    read: true, 
                    write: true, 
                    name: 'Blitzwolf099: AN (=true) oder AUS (=false)'
                };
                
                setObject(idDevice, obj, function() {
                    createState(idPower, false, common);
                });
                
                BananaJoe 1 Reply Last reply Reply Quote 0
                • OliverIO
                  OliverIO @BananaJoe last edited by OliverIO

                  @bananajoe
                  Nicht alles was im Objekt-Tab wie ein Ordner aussieht ist ein eigenes Objekt.
                  Manche sind echte eigene Objekte (da wo bei Type was drin steht)
                  Dort wo bei typ nix drin steht ist der Ordner nur eine Darstellung eines Ordners

                  In dieser Grafik siehst du 2 Datenpunkte, welche unterschiedlich angelegt worden ist (ausgehend von einem Ordner vom Type channel)

                  Beispiel
                  2de6897e-c6e0-4bd2-bd1e-4ddfffdbabe5-image.png

                  javascript.0.test.ordner1.order2.datenpunkt
                  

                  Test markieren, das plus drücken und dann den folgenden Namen eingeben:
                  ordner1.order2.datenpunkt
                  und als Type detenpunkt wählen

                  javascript.0.test.ordner3.order4.datenpunkt
                  

                  a) Test markieren, das plus drücken und dann den folgenden Namen eingeben:
                  ordner3
                  mit Type channel
                  b) ordner 3 markieren, das plus drücken und dann den folgenden Namen eingeben:
                  ordner4
                  mit Type channel
                  c) ordner 4 markieren, das plus drücken und dann den folgenden Namen eingeben:
                  datenpunkt
                  mit Type datenpunkt

                  Beides sieht gleich aus, bis auf den Angaben in der Spalte Typ

                  Wenn du per Script drauf zugreifen willst, dann musst du das richtige Objekt wählen.
                  Im ersten Beispiel gibt es da nur das Objekt mit dem Type Datenpunkt

                  Alternativ zu channel geht auch device/Gerät.

                  Sokomoto 1 Reply Last reply Reply Quote 1
                  • Sokomoto
                    Sokomoto @OliverIO last edited by

                    @oliverio sagte in Datenpunkt per JavaScript bearbeiten - Ordner:

                    Dort wo bei typ nix drin steht ist der Ordner nur eine Darstellung eines Ordners

                    ok...dann kann man ja ruhig, seinen Ordner.Datenpunkt mit createState() anlegen. Das hat nur den Nachteil, der Ordner hat keinen Type zugewiesen. Das einzige negative, man kann den Ordnerinhalt manuell nicht bearbeiten, aber das ist ja dann kein Fehler in den Okjekten der das System beeinträchtigt.

                    Danke für die Info,
                    tschuess

                    OliverIO 1 Reply Last reply Reply Quote 0
                    • OliverIO
                      OliverIO @Sokomoto last edited by

                      @sokomoto
                      ja so lege ich in meinen adaptern alle meine datenpunkte an.
                      es kann aber sein, das das irgendwann nicht mehr erwünscht ist, wenn ich es richtig verstanden habe, es gab da mal eine diskussion darüber.
                      aber aktuell meckert der iobroker noch nicht.

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

                        @oliverio sagte: es kann aber sein, das das irgendwann nicht mehr erwünscht ist

                        Nein, es ist kein Problem, solange Du nicht später weitere Datenpunkte manuell im Admin anlegen möchtest.

                        1 Reply Last reply Reply Quote 0
                        • BananaJoe
                          BananaJoe Most Active @paul53 last edited by

                          @paul53 ok ok, jetzt habe ich meinen Fehler, die Verschachtelung von von setObject und createState fehlte mir.
                          Folgendes hat jetzt funktioniert: (ich hoffe alles notwendige zusammenkopiert zu haben)

                          // Setup ##########################################################
                          var s_DeviceName = "K58-Buero-Steckdose-oben";
                          var s_state_rootpath = "0_userdata.0.tasmota2.";
                          
                          // Funktionen ##########################################################
                          async function CreateMyStatesAndStartup(){
                              try {
                                  DebugWarning("Startup: Erstelle ggf. Datenpunkte ...");
                          
                                  await setObjectAsync(s_state_rootpath + s_DeviceName, {
                                          type: 'device',
                                          common: {
                                              name: s_DeviceName
                                          },
                                          native: {}
                                      }, function() {
                                          createState(s_state_rootpath + s_DeviceName + ".POWER", false, {
                                              type: 'boolean',
                                              role: 'switch',
                                              read: true,
                                              write: true,
                                              name: s_DeviceName + ': AN (=true) oder AUS (=false)'
                                          });
                                  });
                          }
                              catch(error) {
                                  DebugWarning(error);
                                  log(error);
                              }
                          }
                          
                          // Startup ###########################################################
                          CreateMyStatesAndStartup();
                          

                          a7f565ad-0be0-4cad-b779-a426f7304734-image.png
                          Und meine anderen Datenpunkte hänge ich einfach zwischen Zeile 23 und 24, richtig?

                          Einzig den tasmota2 habe ich nun einmal vorher von Hand erzeugt, daran arbeite ich.

                          Zum einen weil ich gerade mal alles von javascript.0 auf 0_userdata.0 umstellen will.
                          Zum anderen für mein langfristiges Ziel daraus mal einen Adapter zu bauen und dann soll das natürlich alles ordentlich sein.

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          741
                          Online

                          31.8k
                          Users

                          80.0k
                          Topics

                          1.3m
                          Posts

                          4
                          12
                          550
                          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