Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Datenpunkte einfach erstellen

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Datenpunkte einfach erstellen

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

      Hallo,

      ich bin auf der Suche nach einer Möglichkeit, einfach Datenpunkte anzulegen und zwar mit folgender Struktur:

      Ordner 1
      -Unterordner 1
      --Datenpunkt 1
      --Datenpunkt 2
      -Unterordner 2
      --Datenpunkt 1
      --Datenpunkt 2
      usw...

      Die Datenpunkte sind quasi alle immer gleich, nur der Unterordner ändert seinen Namen. Gibt es hier eine Möglichkeit, ohne diese alle mit Hand zu erstellen?

      Danke schon mal

      B A mickym 3 Replies Last reply Reply Quote 0
      • B
        Blockmove @Mosel 1992 last edited by Blockmove

        @mosel-1992 said in Datenpunkte einfach erstellen:

        Hallo,

        ich bin auf der Suche nach einer Möglichkeit, einfach Datenpunkte anzulegen und zwar mit folgender Struktur:

        Ordner 1
        -Unterordner 1
        --Datenpunkt 1
        --Datenpunkt 2
        -Unterordner 2
        --Datenpunkt 1
        --Datenpunkt 2
        usw...

        Die Datenpunkte sind quasi alle immer gleich, nur der Unterordner ändert seinen Namen. Gibt es hier eine Möglichkeit, ohne diese alle mit Hand zu erstellen?

        Danke schon mal

        Du kannst dir einmal das Grundgerüst erstellen.
        Danach diesen teil des Objektbaumes exportieren.
        Die export-Datei kannst du dann mit einem Editor (z.B. vscode) bearbeiten und um deine neuen Teile ergänzen. Funktioniert mit Suche und Ersetze einfach. Danach die Datei wieder Importieren
        Alternativ kannst du dir auch ein Script im ioBroker dafür erstellen.

        1 Reply Last reply Reply Quote 0
        • A
          Ahnungsbefreit @Mosel 1992 last edited by

          @mosel-1992 Mit einem Script (JavaScript oder Blockly, geht beides)

          Mosel 1992 1 Reply Last reply Reply Quote 0
          • Mosel 1992
            Mosel 1992 @Ahnungsbefreit last edited by

            @ahnungsbefreit
            könntest du mir erklären, wie ich das anstelle?

            grrfield 1 Reply Last reply Reply Quote 0
            • grrfield
              grrfield @Mosel 1992 last edited by

              @mosel-1992 Ich habe mir dafür eine Funktion createBaseFolder gemacht:

              /**
               * Erstellt Basisfolder und stellt den richtigen Typ ein
               * @param   {string}    ID          ID des Folders
               * @param   {any}       type        Typ des Folders
               * @param   {string}    [name]      (optional) Name des Folders
               */ 
              function createBaseFolder(ID, type, name)
              {
                  createState(ID, function() {
                      let obj=getObject(ID);
                      obj.type=type;
                      if(name != undefined) obj.common.name=name;
                      obj.common.role='';
                      setObject(ID, obj);
                  });
              }
              

              Damit kannst Du die Ordner erstellen, z. B.
              createBaseFolder('0_userdata.0.Testfolder', 'folder', 'Das ist ein Testfolder);
              und darunter mit createState die Datenpunkte, z. B.
              createState('0_userdata.0.Testfolder.Datenpunkt1', {type: 'number', name:'Datenpunkt 1', unit: '%', min: 0, max: 100});

              T 1 Reply Last reply Reply Quote 0
              • mickym
                mickym Most Active @Mosel 1992 last edited by

                @mosel-1992 Wenn Du NodeRed nutzt geht das automatisch.

                Mosel 1992 1 Reply Last reply Reply Quote 0
                • T
                  ticaki Developer @grrfield last edited by

                  @grrfield

                  // id muß ein gültiger String sein, alles weitere is optional
                  async function createFolderAsync(id, name='', desc='') {
                      return Promise.resolve(await _createObject(id, 'folder', name, desc))
                  }
                   
                  async function createChannelAsync(id, name='', desc='') {
                      return Promise.resolve(await _createObject(id, 'channel', name, desc))
                  }
                   
                  async function createDeviceAsync(id, name='', desc='') {
                       return Promise.resolve(await _createObject(id, 'device', name, desc))
                  }
                  async function _createObject(id, typ, name='', desc='') {
                      try {
                          if(existsObject(id)) log('Objekt: ' + id + ' existiert bereits!', 'warn');
                          else {
                              const obj = {
                                  type: typ,
                                  common: {
                                      name: name,
                                      desc: desc
                                  },
                                  native: {}
                              }
                              if (!id || typeof id !== 'string') {
                                  throw new Error('Fehler in _createObject Parameter 1 ist kein string')
                              }
                              if (!(id.startsWith('alias.0') || id.startsWith('0_userdata.0') || id.startsWith('mqtt'))) {
                                  throw new Error('Fehler in _createObject Parameter 1: ' + id.split('.').slice(0,2).join('.') + ' nicht erlaubt')
                              } 
                              await setObjectAsync(id, obj);
                          }
                          return Promise.resolve(true);
                      } catch (error) {
                          log(error + '!', 'error')
                      }
                      return Promise.resolve(false);
                  }
                  
                  1 Reply Last reply Reply Quote 0
                  • Mosel 1992
                    Mosel 1992 @mickym last edited by

                    @mickym said in Datenpunkte einfach erstellen:

                    @mosel-1992 Wenn Du NodeRed nutzt geht das automatisch.

                    Ich nutze es zwar, aber hier in der Anwendung geht es um Blockly

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

                      @mosel-1992 sagte: in der Anwendung geht es um Blockly

                      Mit Blockly ist es nicht möglich, Datenpunkte mit konstruierter ID zu erstellen.

                      Im folgenden Skript sind für jeden Unterordner nur die ersten beiden Zeilen anzupassen nachdem das Skript an deine Datenpunkte angepasst wurde:

                      const idFolder = '0_userdata.0.Ordner1.Unterordner1';
                      const Name = 'Ordnername';
                      
                      const obj = {
                          type: 'channel',
                          common: {name: Name},
                          native: {}
                      };
                      
                      if(!existsObject(idFolder)) {
                          setObject(idFolder, obj, function() {
                              createState(idFolder + '.Datenpunkt1', 0, {type: 'number', name: 'Datenpunkt 1 ' + Name, read: true, write: true, role: 'level', def: 0});
                              createState(idFolder + '.Datenpunkt2', 0, {type: 'number', name: 'Datenpunkt 2 ' + Name, read: true, write: true, role: 'level', def: 0});
                              // usw.
                          });
                      } else log('Ordner existiert bereits: ' + idFolder, 'warn');
                      
                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post

                      Support us

                      ioBroker
                      Community Adapters
                      Donate
                      FAQ Cloud / IOT
                      HowTo: Node.js-Update
                      HowTo: Backup/Restore
                      Downloads
                      BLOG

                      886
                      Online

                      32.0k
                      Users

                      80.5k
                      Topics

                      1.3m
                      Posts

                      7
                      9
                      600
                      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