Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • 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

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

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

Geplant Angeheftet Gesperrt Verschoben JavaScript
7 Beiträge 2 Kommentatoren 759 Aufrufe 1 Watching
  • Ä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? :grin:

        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? :grin:

          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
                Antworten
                • In einem neuen Thema antworten
                Anmelden zum Antworten
                • Älteste zuerst
                • Neuste zuerst
                • Meiste Stimmen


                Support us

                ioBroker
                Community Adapters
                Donate

                704

                Online

                32.6k

                Benutzer

                82.2k

                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