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.
    • BananaJoe
      BananaJoe Most Active last edited by

      @paul53 hat hier mal eine Lösung beschreiben wie man die Eigenschaften von Datenpunkten nachträglich anpassen kann:
      Re: [gelöst] Eigenschaft von Datenpunkt per Script bearbeiten

      Das habe ich erfolgreich genutzt um bereits erstellte Datenpunkte meiner Skripte im Nachhinein anzupassen.

      Ich möchte nun vorhandene Datenpunkte ändern, und zwar das überliegende Objekt:
      df16efeb-cb46-40cd-8695-b8942b4e85b9-image.png
      Bei Blitzwolf099möchte ich etwas in die Spalte Namen eintragen - nachträglich

      Der "Ordner" ist damals automatisch entstanden als ich darunter einen Datenpunkt angelegt habe:

      // Kommentar anpassen
      var s_state_rootpath = "javascript.0.tasmota.";
      var s_DeviceName = "Blitzwolf099";
      var s_state_power_path = s_state_rootpath + s_DeviceName + ".POWER";
      createState(s_state_rootpath + s_DeviceName + ".POWER", false, {
                  type: 'boolean',
                  read: true, 
                  write: true, 
                  name: s_DeviceName + ': AN (=true) oder AUS (=false)'
      });
        // Namensschema nachträglich ändern:
          // https://forum.iobroker.net/topic/14115/gel%C3%B6st-eigenschaft-von-datenpunkt-per-script-bearbeiten/2
      var tempobj = getObject(s_state_rootpath + s_DeviceName);
      tempobj.common.name = "Sicherungskasten ESP32 Stromversorgung";
      setObject(s_state_rootpath + s_DeviceName, tempobj);
      

      Jepp, Skript muss man 2x starten

      Bei dem "Ordner funktioniert das aber nicht, auch wenn neu unter 0_userdata.0angelegte Ordner diese Eigenschaft haben (wie wahrscheinlich alle).

      Also Frage 1: Wie kann ich da was im nachhinein tun?
      Frage 2: Wenn das nicht geht, wie erstelle ich Ordner mit der Eigenschaft?

      paul53 OliverIO 2 Replies Last reply Reply Quote 0
      • 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

                            771
                            Online

                            31.8k
                            Users

                            80.0k
                            Topics

                            1.3m
                            Posts

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