Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Frage zu type: 'folder' und createState() + setObject()

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    709

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    18
    1
    5.9k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.5k

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

Geplant Angeheftet Gesperrt Verschoben JavaScript
7 Beiträge 2 Kommentatoren 815 Aufrufe 1 Beobachtet
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • T Nicht stören
    T Nicht stören
    ticaki
    schrieb am zuletzt editiert von ticaki
    #1

    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);
    }
    

    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

    Spenden

    paul53P 1 Antwort Letzte Antwort
    0
    • T 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);
      }
      
      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

      @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.

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      T 1 Antwort Letzte Antwort
      0
      • paul53P 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 Nicht stören
        T Nicht stören
        ticaki
        schrieb am zuletzt editiert von
        #3

        @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 :)

        Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

        Spenden

        paul53P 1 Antwort Letzte Antwort
        0
        • T ticaki

          @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 :)

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von paul53
          #4

          @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);
              } 
          }
          

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Antwort Letzte Antwort
          1
          • T Nicht stören
            T Nicht stören
            ticaki
            schrieb am zuletzt editiert von ticaki
            #5

            @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);
            }
            

            Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

            Spenden

            paul53P 1 Antwort Letzte Antwort
            0
            • T 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);
              }
              
              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #6

              @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');
              

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              T 1 Antwort Letzte Antwort
              0
              • paul53P paul53

                @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 Nicht stören
                T Nicht stören
                ticaki
                schrieb am zuletzt editiert von ticaki
                #7

                @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);
                }
                

                Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                Spenden

                1 Antwort Letzte Antwort
                0

                Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                Registrieren Anmelden
                Antworten
                • In einem neuen Thema antworten
                Anmelden zum Antworten
                • Älteste zuerst
                • Neuste zuerst
                • Meiste Stimmen


                Support us

                ioBroker
                Community Adapters
                Donate

                568

                Online

                32.7k

                Benutzer

                82.6k

                Themen

                1.3m

                Beiträge
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                ioBroker Community 2014-2025
                logo
                • Anmelden

                • Du hast noch kein Konto? Registrieren

                • Anmelden oder registrieren, um zu suchen
                • Erster Beitrag
                  Letzter Beitrag
                0
                • Home
                • Aktuell
                • Tags
                • Ungelesen 0
                • Kategorien
                • Unreplied
                • Beliebt
                • GitHub
                • Docu
                • Hilfe