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

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

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

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.
  • N Offline
    N Offline
    neo4a
    schrieb am zuletzt editiert von
    #1

    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 2 Antworten Letzte Antwort
    0
    • 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 Online
          StabilostickS Online
          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

                            805

                            Online

                            32.4k

                            Benutzer

                            81.5k

                            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