Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Frage zu type: 'folder' und createState() + setObject()

    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

    Frage zu type: 'folder' und createState() + setObject()

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

      Gibt soweit ich weiß keine Möglichkeit etwas anderes als einen type: 'state' zu erzeugen, deshalb frage ich mich ob der folgende Code zum Erstellen eines type: 'folder' keine Probleme bereitet.

      async function init() {
          try {
              if (!existsObject(path)) await createStateAsync(path)
              let o = await getObjectAsync(path)
              if (o.type !== 'hier soll folder stehen') {
                  o.type = 'folder'
                  o.common.name = 'Geräteüberwachung'
                  delete o.common.type
                  delete o.common.role
                  await setObjectAsync(path,o)
              }
          //work()
          } catch(e) {log(e)}
          return Promise.resolve(true);
      }
      
      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @ticaki last edited by paul53

        @ticaki sagte: keine Möglichkeit etwas anderes als einen type: 'state' zu erzeugen

        Mit setObject(id, obj) kann man beliebige (zulässige) Objekt-Typen erzeugen. setObject() überschreibt bestehende Objekte. Einzelne Objekt-Eigenschaften kann man mit extendObject() ändern.
        Zeile 3 ist macht keinen Sinn.

        T 1 Reply Last reply Reply Quote 0
        • T
          ticaki Developer @paul53 last edited by

          @paul53 sagte in Frage zu type: 'folder' und createState() + setObject():

          @ticaki sagte: keine Möglichkeit etwas anderes als einen type: 'state' zu erzeugen

          Mit setObject(id, obj) kann man beliebige (zulässige) Objekt-Typen erzeugen. setObject() überschreibt bestehende Objekte. Einzelne Objekt-Eigenschaften kann man mit extendObject() ändern.

          Danke, da ich gerade nen vollseitige Fehlermeldung bekommen habe, was sind die Mindestangabe zum erzeugen eines objectes? 😁

          Zeile 3 ist macht keinen Sinn.

          war am rumprobieren 🙂

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

            @ticaki sagte: was sind die Mindestangabe zum erzeugen eines objectes?

            Das sind type (string), common (object) und native (object). Eine (globale) Funktion könnte z.B. so aussehen:

            function createFolder(id, name) {
                if(existsObject(id)) log('Objekt: ' + id + ' existiert bereits!', 'warn');
                else {
                    const obj = {
                        type: 'folder',
                        common: {
                            name: name
                        },
                        native: {}
                    };
                    setObject(id, obj);
                } 
            }
            
            1 Reply Last reply Reply Quote 1
            • T
              ticaki Developer last edited by ticaki

              @paul53
              Danke

              Und falls es jemand gebrauchen kann, die fertigen Funktionen nach Pauls Beispiel:

              // 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);
              }
              
              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @ticaki last edited by

                @ticaki
                Da setObject() von sich aus keine Einschränkungen hat, sollte man vielleicht Zeile 26 ergänzen:

                if(id.startsWith('alias.0') || id.startsWith('0_userdata.0') || id.startsWith('mqtt')) await setObjectAsync(id, obj);
                else log('ID ist ungültig!', 'warn');
                
                T 1 Reply Last reply Reply Quote 0
                • T
                  ticaki Developer @paul53 last edited by ticaki

                  @paul53

                  ergänzt

                  // id muß ein gültiger String sein und mit 0_userdata.0, alias.0 oder mqtt anfangen, 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
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  891
                  Online

                  31.8k
                  Users

                  80.0k
                  Topics

                  1.3m
                  Posts

                  2
                  7
                  469
                  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