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. ioBroker Allgemein
  4. setObject() setzt keinen Default-Wert

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.4k

setObject() setzt keinen Default-Wert

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
setobject
13 Beiträge 4 Kommentatoren 1.6k Aufrufe 4 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.
  • OliverIOO Offline
    OliverIOO Offline
    OliverIO
    schrieb am zuletzt editiert von
    #2

    bin nicht ganz sicher, aber ich glaube das attribut heißt def.

    Also

    aObj.type = 'state';
    aObj.def = 'abc';
    aObj.common = aCommon;
    aObj.common.name = aObj.common.desc;
    

    Meine Adapter und Widgets
    TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
    Links im Profil

    N 1 Antwort Letzte Antwort
    0
    • OliverIOO OliverIO

      bin nicht ganz sicher, aber ich glaube das attribut heißt def.

      Also

      aObj.type = 'state';
      aObj.def = 'abc';
      aObj.common = aCommon;
      aObj.common.name = aObj.common.desc;
      
      N Offline
      N Offline
      neo4a
      schrieb am zuletzt editiert von
      #3

      @OliverIO sagte in setObject() setzt keinen Default-Wert:

      bin nicht ganz sicher, aber ich glaube das attribut heißt def.

      Genau. Das habe ich auch in der Struktur mitgegeben (im Script mit dem Wert "empty"). Es wird mir sogar in der Detail-Ansicht des Datenpunkts als Standardwert angezeigt. Nur wird der Wert bei der Neuanlage nicht eingetragen.

      OliverIOO 1 Antwort Letzte Antwort
      0
      • StabilostickS Offline
        StabilostickS Offline
        Stabilostick
        schrieb am zuletzt editiert von Stabilostick
        #4

        Schreibt man das nicht so?

        createState(aFolder + ".Schaltzeit2", {
                                        name: "küche",
                                        type: "string",
                                        role: "state.blind",
                                        def:  "empty"
                                    });
        
        N 1 Antwort Letzte Antwort
        0
        • StabilostickS Stabilostick

          Schreibt man das nicht so?

          createState(aFolder + ".Schaltzeit2", {
                                          name: "küche",
                                          type: "string",
                                          role: "state.blind",
                                          def:  "empty"
                                      });
          
          N Offline
          N Offline
          neo4a
          schrieb am zuletzt editiert von
          #5

          @Stabilostickin
          createState erzeugt den Datenpunkt in die Adapter-Hierarchie (z.B. "javascript.0"). Weil ich aber eine Adapter-unabhängige Struktur benutze, habe ich das mit setObject umsetzen müssen.

          Die Syntax aus meinem Demo-Script eignet sich für die Auslagerung in ein globales Script.

          1 Antwort Letzte Antwort
          0
          • N neo4a

            @OliverIO sagte in setObject() setzt keinen Default-Wert:

            bin nicht ganz sicher, aber ich glaube das attribut heißt def.

            Genau. Das habe ich auch in der Struktur mitgegeben (im Script mit dem Wert "empty"). Es wird mir sogar in der Detail-Ansicht des Datenpunkts als Standardwert angezeigt. Nur wird der Wert bei der Neuanlage nicht eingetragen.

            OliverIOO Offline
            OliverIOO Offline
            OliverIO
            schrieb am zuletzt editiert von
            #6

            @neo4a das sehe ich in deinem Code Beispiel aber nicht. Das einzige Mal sehe ich das bei setstate und nicht bei setobject

            Meine Adapter und Widgets
            TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
            Links im Profil

            1 Antwort Letzte Antwort
            0
            • N neo4a

              Im folgenden Demo-Script benutze ich setObject(), um einen Datenpunkt in meiner eigenen Hierarchie zu erzeugen. Leider wird dabei nicht der Default-Wert eingetragen. Es gibt aus 2018 dazu einen entsprechenden Eintrag im Github, der später als gelöst markiert wurde.

              Leider komme ich auch nicht mit der Alternative weiter, indem ich im Callback setState() benutze. Hier scheitere ich daran, dass die ID automatisch um die Adapter-Instanz ("javascript.0") erweitert wird.

              Wie schaffe ich es nun, einem neuen Datenpunkt nach der Anlage einem Initialwert mitzugeben?

              const aFolder  = "Rollo.Erdgeschoss.Kueche";
              
              function create_State(aID, aRoomName, aFunctionName, aCommon)
              {
                  var aExtObj = getObject(aID);
                  const aRoomID = 'enum.rooms.' + aRoomName;
                  var aRoom = getObject(aRoomID);
                  const aFuncID = 'enum.functions.' + aFunctionName;
                  var aFunc = getObject(aFuncID);
                  var aObj = {};
              
                  aObj.type = 'state';
                  aObj.common = aCommon;
                  aObj.common.name = aObj.common.desc;
                  if (!aExtObj)
                  {
                  setObject(aID, aObj, function (err) {
                      if (err) 
                      {
                          log('Cannot write object: ' + err)
                      }
                      else
                      { 
                          this.setState(aID, aCommon.def);
                          //aID beginnt mit "javascript.0." 
                          log(aCommon.def);
                      }    
                  });
                  }
                  else
                  {
                      extendObject(aID, aObj); 
                  }
                  if (aRoom)
                  {
                      const aPos = aRoom.common.members.indexOf(aID);
                      if (aPos === -1) 
                      {
                          aRoom.common.members.push(aID);
                          aRoom.from = 'system.adapter.' + this.namespace;
                          aRoom.ts = Date.now();
                          setObject(aRoomID, aRoom);
                      }        
                  }
                  if (aFunc)
                  {
                      const aPosFunc = aFunc.common.members.indexOf(aID);
                      if (aPosFunc === -1) 
                      {
                          aFunc.common.members.push(aID);
                          aFunc.from = 'system.adapter.' + this.namespace;
                          aFunc.ts = Date.now();
                          setObject(aFuncID, aFunc);
                      }        
                  }
              }
              create_State(aFolder + ".Schaltzeit2", 'küche', 'rollladen', {read: true, write: true, role: "state.blind", 
                              desc: "Schaltzeit2", type: "string", def: "empty" }); 
              
              stopScript();
              
              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #7

              @neo4a sagte:

              const aFolder  = "Rollo.Erdgeschoss.Kueche";
              

              Das funktioniert nicht, da zwischen dem ersten und dem zweiten Punkt eine Ziffer stehen muss, z.B. so

              const aFolder  = "meineDatenpunkte.0.Rollo.Erdgeschoss.Kueche";
              

              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
              0
              • N neo4a

                Im folgenden Demo-Script benutze ich setObject(), um einen Datenpunkt in meiner eigenen Hierarchie zu erzeugen. Leider wird dabei nicht der Default-Wert eingetragen. Es gibt aus 2018 dazu einen entsprechenden Eintrag im Github, der später als gelöst markiert wurde.

                Leider komme ich auch nicht mit der Alternative weiter, indem ich im Callback setState() benutze. Hier scheitere ich daran, dass die ID automatisch um die Adapter-Instanz ("javascript.0") erweitert wird.

                Wie schaffe ich es nun, einem neuen Datenpunkt nach der Anlage einem Initialwert mitzugeben?

                const aFolder  = "Rollo.Erdgeschoss.Kueche";
                
                function create_State(aID, aRoomName, aFunctionName, aCommon)
                {
                    var aExtObj = getObject(aID);
                    const aRoomID = 'enum.rooms.' + aRoomName;
                    var aRoom = getObject(aRoomID);
                    const aFuncID = 'enum.functions.' + aFunctionName;
                    var aFunc = getObject(aFuncID);
                    var aObj = {};
                
                    aObj.type = 'state';
                    aObj.common = aCommon;
                    aObj.common.name = aObj.common.desc;
                    if (!aExtObj)
                    {
                    setObject(aID, aObj, function (err) {
                        if (err) 
                        {
                            log('Cannot write object: ' + err)
                        }
                        else
                        { 
                            this.setState(aID, aCommon.def);
                            //aID beginnt mit "javascript.0." 
                            log(aCommon.def);
                        }    
                    });
                    }
                    else
                    {
                        extendObject(aID, aObj); 
                    }
                    if (aRoom)
                    {
                        const aPos = aRoom.common.members.indexOf(aID);
                        if (aPos === -1) 
                        {
                            aRoom.common.members.push(aID);
                            aRoom.from = 'system.adapter.' + this.namespace;
                            aRoom.ts = Date.now();
                            setObject(aRoomID, aRoom);
                        }        
                    }
                    if (aFunc)
                    {
                        const aPosFunc = aFunc.common.members.indexOf(aID);
                        if (aPosFunc === -1) 
                        {
                            aFunc.common.members.push(aID);
                            aFunc.from = 'system.adapter.' + this.namespace;
                            aFunc.ts = Date.now();
                            setObject(aFuncID, aFunc);
                        }        
                    }
                }
                create_State(aFolder + ".Schaltzeit2", 'küche', 'rollladen', {read: true, write: true, role: "state.blind", 
                                desc: "Schaltzeit2", type: "string", def: "empty" }); 
                
                stopScript();
                
                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von paul53
                #8

                @neo4a Dieses vereinfachte Skript (ohne enums)

                function createDp(id, common) {
                    if(!existsState(id)) {
                        var obj = {};
                        obj.type = 'state';
                        obj.native = {};
                        obj.common = common;
                        setObject(id, obj, function (err) {
                            if (err) log('Cannot write object: ' + err)
                            else {
                                var init = null;
                                if(common.def === undefined) {
                                    if(common.type === 'number') init = 0;
                                    if(common.type === 'boolean') init = false;
                                    if(common.type === 'string') init = '';
                                } else init = common.def;
                                setState(id, init);
                            }
                        });
                    }
                }
                
                const idDp = 'dp.0.Rollo.Erdgeschoss.Kueche';
                createDp(idDp + ".Schaltzeit2", {read: true, write: true, role: "state.blind", desc: "Schaltzeit2", type: "string", def: "empty" });
                

                funktioniert bei mir.

                createDP_Rollo.JPG

                EDIT(06.07.2020): Abfrage auf existsState(id) geändert.

                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

                OliverIOO N 2 Antworten Letzte Antwort
                0
                • paul53P paul53

                  @neo4a Dieses vereinfachte Skript (ohne enums)

                  function createDp(id, common) {
                      if(!existsState(id)) {
                          var obj = {};
                          obj.type = 'state';
                          obj.native = {};
                          obj.common = common;
                          setObject(id, obj, function (err) {
                              if (err) log('Cannot write object: ' + err)
                              else {
                                  var init = null;
                                  if(common.def === undefined) {
                                      if(common.type === 'number') init = 0;
                                      if(common.type === 'boolean') init = false;
                                      if(common.type === 'string') init = '';
                                  } else init = common.def;
                                  setState(id, init);
                              }
                          });
                      }
                  }
                  
                  const idDp = 'dp.0.Rollo.Erdgeschoss.Kueche';
                  createDp(idDp + ".Schaltzeit2", {read: true, write: true, role: "state.blind", desc: "Schaltzeit2", type: "string", def: "empty" });
                  

                  funktioniert bei mir.

                  createDP_Rollo.JPG

                  EDIT(06.07.2020): Abfrage auf existsState(id) geändert.

                  OliverIOO Offline
                  OliverIOO Offline
                  OliverIO
                  schrieb am zuletzt editiert von
                  #9

                  @paul53 ist getObject nicht asynchron? dann müsste alles nach getObject noch in den Callback von getObject gepackt werden.

                  Meine Adapter und Widgets
                  TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                  Links im Profil

                  paul53P 1 Antwort Letzte Antwort
                  0
                  • OliverIOO OliverIO

                    @paul53 ist getObject nicht asynchron? dann müsste alles nach getObject noch in den Callback von getObject gepackt werden.

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

                    @OliverIO sagte:

                    ist getObject nicht asynchron?

                    getObject() des JS-Adapters arbeitet synchron, wenn keine Callback-Funktion übergeben wird.

                    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
                    0
                    • paul53P paul53

                      @neo4a Dieses vereinfachte Skript (ohne enums)

                      function createDp(id, common) {
                          if(!existsState(id)) {
                              var obj = {};
                              obj.type = 'state';
                              obj.native = {};
                              obj.common = common;
                              setObject(id, obj, function (err) {
                                  if (err) log('Cannot write object: ' + err)
                                  else {
                                      var init = null;
                                      if(common.def === undefined) {
                                          if(common.type === 'number') init = 0;
                                          if(common.type === 'boolean') init = false;
                                          if(common.type === 'string') init = '';
                                      } else init = common.def;
                                      setState(id, init);
                                  }
                              });
                          }
                      }
                      
                      const idDp = 'dp.0.Rollo.Erdgeschoss.Kueche';
                      createDp(idDp + ".Schaltzeit2", {read: true, write: true, role: "state.blind", desc: "Schaltzeit2", type: "string", def: "empty" });
                      

                      funktioniert bei mir.

                      createDP_Rollo.JPG

                      EDIT(06.07.2020): Abfrage auf existsState(id) geändert.

                      N Offline
                      N Offline
                      neo4a
                      schrieb am zuletzt editiert von neo4a
                      #11

                      @paul53
                      Nachdem ich keinen prinzipiellen Unterschied zwischen unseren Scripten erkennen konnte (bezogen auf den geschilderten Fehlerfall), habe ich mein Script noch einmal laufen lassen und musste feststellen, dass ohne jegliche Änderung das Problem verschwunden ist.

                      Mein Fehler:

                      // falsch:
                                  this.setState(aID, aCommon.def);
                      // richtig
                                  setState(aID, aCommon.def);
                      
                      paul53P 1 Antwort Letzte Antwort
                      0
                      • N neo4a

                        @paul53
                        Nachdem ich keinen prinzipiellen Unterschied zwischen unseren Scripten erkennen konnte (bezogen auf den geschilderten Fehlerfall), habe ich mein Script noch einmal laufen lassen und musste feststellen, dass ohne jegliche Änderung das Problem verschwunden ist.

                        Mein Fehler:

                        // falsch:
                                    this.setState(aID, aCommon.def);
                        // richtig
                                    setState(aID, aCommon.def);
                        
                        paul53P Offline
                        paul53P Offline
                        paul53
                        schrieb am zuletzt editiert von
                        #12

                        @neo4a sagte:

                        Nachdem ich keinen prinzipiellen Unterschied zwischen unseren Scripten erkennen konnte

                        Der prinzipielle Unterschied ist die ID: Wenn zwischen dem ersten und zweiten Punkt keine Ziffer steht, gibt es regelmäßig Probleme.

                        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

                        N 1 Antwort Letzte Antwort
                        0
                        • paul53P paul53

                          @neo4a sagte:

                          Nachdem ich keinen prinzipiellen Unterschied zwischen unseren Scripten erkennen konnte

                          Der prinzipielle Unterschied ist die ID: Wenn zwischen dem ersten und zweiten Punkt keine Ziffer steht, gibt es regelmäßig Probleme.

                          N Offline
                          N Offline
                          neo4a
                          schrieb am zuletzt editiert von
                          #13

                          @paul53
                          Danke für den Hinweis. Ich benutze diese "ohne-Punkt-Hierarchie" nun seit mehreren Jahren. Wahrscheinlich habe ich nur Glückgehabt...

                          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
                          FAQ Cloud / IOT
                          HowTo: Node.js-Update
                          HowTo: Backup/Restore
                          Downloads
                          BLOG

                          443

                          Online

                          32.4k

                          Benutzer

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