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. Fragen zu createState.

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.1k

Fragen zu createState.

Geplant Angeheftet Gesperrt Verschoben JavaScript
javascript
31 Beiträge 3 Kommentatoren 4.4k Aufrufe 3 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.
  • C Offline
    C Offline
    ChristianG
    schrieb am zuletzt editiert von ChristianG
    #1

    Hallo zusammen,

    ich baue mir gerade ein kleines Skript um von einer API einige Daten abzurufen und zu speichern.

    Die Daten habe ich nun vorliegen aber ich bekomme diese leider nicht ioBroker-Baum abgelegt.

    Kann mir bitte jemand sagen wie ich mit createState ein Verzeichnis in erster Ebene anlegen kann?

    Alles was ich mit createState mache landet leider unter javascript.0.

    Was ich also benötige ist:

    1. Prüfen ob ein State schon angelegt und vorhanden ist.
    2. Wenn nicht vorhanden neuen State anlegen.
    3. Wenn vorhanden den Wert updaten.

    Eine kleine Funktion wäre super dafür :)

    Leider werde ich aus den Docs nicht schlau..

    Vielen Dank.

    paul53P 1 Antwort Letzte Antwort
    0
    • C ChristianG

      Hallo zusammen,

      ich baue mir gerade ein kleines Skript um von einer API einige Daten abzurufen und zu speichern.

      Die Daten habe ich nun vorliegen aber ich bekomme diese leider nicht ioBroker-Baum abgelegt.

      Kann mir bitte jemand sagen wie ich mit createState ein Verzeichnis in erster Ebene anlegen kann?

      Alles was ich mit createState mache landet leider unter javascript.0.

      Was ich also benötige ist:

      1. Prüfen ob ein State schon angelegt und vorhanden ist.
      2. Wenn nicht vorhanden neuen State anlegen.
      3. Wenn vorhanden den Wert updaten.

      Eine kleine Funktion wäre super dafür :)

      Leider werde ich aus den Docs nicht schlau..

      Vielen Dank.

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

      @ChristianG sagte:

      mit createState ein Verzeichnis in erster Ebene anlegen kann?

      Eigene Datenpunkte sollen unter "0_userdata.0" angelegt werden. Das kann createState() ab Javascript-Version 4.6.1.

      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

      C 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @ChristianG sagte:

        mit createState ein Verzeichnis in erster Ebene anlegen kann?

        Eigene Datenpunkte sollen unter "0_userdata.0" angelegt werden. Das kann createState() ab Javascript-Version 4.6.1.

        C Offline
        C Offline
        ChristianG
        schrieb am zuletzt editiert von ChristianG
        #3

        @paul53 ich will aber gerne direkt in der ersten Ebene als wenn es ein Adapter macht :) und prüfen und updaten wäre auch schön.

        paul53P 1 Antwort Letzte Antwort
        0
        • C ChristianG

          @paul53 ich will aber gerne direkt in der ersten Ebene als wenn es ein Adapter macht :) und prüfen und updaten wäre auch schön.

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

          @ChristianG sagte:

          @paul53 ich will aber gerne direkt in der ersten Ebene als wenn es ein Adapter macht :)

          Dann musst Du setObject() und setState() verwenden.

          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

          C 1 Antwort Letzte Antwort
          0
          • paul53P paul53

            @ChristianG sagte:

            @paul53 ich will aber gerne direkt in der ersten Ebene als wenn es ein Adapter macht :)

            Dann musst Du setObject() und setState() verwenden.

            C Offline
            C Offline
            ChristianG
            schrieb am zuletzt editiert von
            #5

            @paul53 okay schaue ich mir mal an ob ich das verstehe. und wie prüfe ich ob ein state schon da ist? damit ich den nicht wieder mit object anlegen muss?

            paul53P 1 Antwort Letzte Antwort
            0
            • C ChristianG

              @paul53 okay schaue ich mir mal an ob ich das verstehe. und wie prüfe ich ob ein state schon da ist? damit ich den nicht wieder mit object anlegen muss?

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

              @ChristianG sagte:

              wie prüfe ich ob ein state schon da ist?

              if(!existsState(id)) {
                 setObject(id, obj);
                 setTimeout(function() {setState(id, obj.common.def, true)}, 100);
              }
              

              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

              C AlCalzoneA 3 Antworten Letzte Antwort
              0
              • paul53P paul53

                @ChristianG sagte:

                wie prüfe ich ob ein state schon da ist?

                if(!existsState(id)) {
                   setObject(id, obj);
                   setTimeout(function() {setState(id, obj.common.def, true)}, 100);
                }
                
                C Offline
                C Offline
                ChristianG
                schrieb am zuletzt editiert von ChristianG
                #7

                @paul53 vielen Dank Pail.

                Ich habe nun versucht im Netz zu finden wie ich das obj aufbauen muss, habe aber leider keinen Verweis gefunden. Kannst du mir einen Link schicken.

                Oder noch einfacher wäre vll ein Beispiel anhand dieses Datenpunktes und dann übernehme ich das für alle anderen. Danke :)

                So hatte ich es bis jetzt gemacht gehabt vor meiner Anfrage aber dies landete ja immer im javascript.0 :)

                createState('eufy-security.0.device'+device_count+'.cam_id',device.device_id);

                Vielen Dank!

                Edit:

                ah unter EN gibt es etwas, mal sehen, ob es hilft: https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md

                paul53P 1 Antwort Letzte Antwort
                1
                • paul53P paul53

                  @ChristianG sagte:

                  wie prüfe ich ob ein state schon da ist?

                  if(!existsState(id)) {
                     setObject(id, obj);
                     setTimeout(function() {setState(id, obj.common.def, true)}, 100);
                  }
                  
                  C Offline
                  C Offline
                  ChristianG
                  schrieb am zuletzt editiert von ChristianG
                  #8

                  @paul53 sagte in Fragen zu createState.:

                  setTimeout(function() {setState(id, obj.common.def, true)}, 100);

                  meinst du das wird gehen ? :)

                  function createOrUpdate(object_path,obj_id,object_value,obj_type = 'state',name = '',type = 'string',role = 'value',desc = '',read = true,write = true,def = 0,min = 0,unit = ''){
                      if(!object_path){
                          console.log('Please define a path.');
                          return;
                      }
                      if(!obj_id){
                          console.log('Please define a state endpoint.');
                          return;
                      }
                      const path = object_path;
                      const id = path + '.' + obj_id;
                      var obj;
                      obj["type"] = obj_type;
                      obj["common"] = {};
                      obj["common"]["name"] = name;
                      obj["common"]["type"] = type;
                      obj["common"]["role"] = role;
                      obj["common"]["desc"] = desc;
                      obj["common"]["read"] = read;
                      obj["common"]["write"] = write;
                      obj["common"]["def"] = def;
                      obj["common"]["min"] = min;   
                      obj["common"]["unit"] = unit;
                      if(!existsState(id)) {
                          setObject(id, obj);
                          setTimeout(function() {setState(id, object_value)}, 100);
                      }else{
                          setState(id, object_value);
                      }
                  }
                  
                  C 1 Antwort Letzte Antwort
                  0
                  • C ChristianG

                    @paul53 sagte in Fragen zu createState.:

                    setTimeout(function() {setState(id, obj.common.def, true)}, 100);

                    meinst du das wird gehen ? :)

                    function createOrUpdate(object_path,obj_id,object_value,obj_type = 'state',name = '',type = 'string',role = 'value',desc = '',read = true,write = true,def = 0,min = 0,unit = ''){
                        if(!object_path){
                            console.log('Please define a path.');
                            return;
                        }
                        if(!obj_id){
                            console.log('Please define a state endpoint.');
                            return;
                        }
                        const path = object_path;
                        const id = path + '.' + obj_id;
                        var obj;
                        obj["type"] = obj_type;
                        obj["common"] = {};
                        obj["common"]["name"] = name;
                        obj["common"]["type"] = type;
                        obj["common"]["role"] = role;
                        obj["common"]["desc"] = desc;
                        obj["common"]["read"] = read;
                        obj["common"]["write"] = write;
                        obj["common"]["def"] = def;
                        obj["common"]["min"] = min;   
                        obj["common"]["unit"] = unit;
                        if(!existsState(id)) {
                            setObject(id, obj);
                            setTimeout(function() {setState(id, object_value)}, 100);
                        }else{
                            setState(id, object_value);
                        }
                    }
                    
                    C Offline
                    C Offline
                    ChristianG
                    schrieb am zuletzt editiert von ChristianG
                    #9

                    Also Fehler habe ich jetzt nicht mehr aber leider wird kein Wert geschrieben.

                    createOrUpdate('eufy-security.0.device'+device_count,'cam_id',device.device_id,'state','','string','value','',true,true,0,0,'');
                    
                    1 Antwort Letzte Antwort
                    0
                    • C ChristianG

                      @paul53 vielen Dank Pail.

                      Ich habe nun versucht im Netz zu finden wie ich das obj aufbauen muss, habe aber leider keinen Verweis gefunden. Kannst du mir einen Link schicken.

                      Oder noch einfacher wäre vll ein Beispiel anhand dieses Datenpunktes und dann übernehme ich das für alle anderen. Danke :)

                      So hatte ich es bis jetzt gemacht gehabt vor meiner Anfrage aber dies landete ja immer im javascript.0 :)

                      createState('eufy-security.0.device'+device_count+'.cam_id',device.device_id);

                      Vielen Dank!

                      Edit:

                      ah unter EN gibt es etwas, mal sehen, ob es hilft: https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md

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

                      @ChristianG sagte:

                      Kannst du mir einen Link schicken.

                      Siehe unter Attribute für bestimmte Objekttypen / Datenpunkt.

                      @ChristianG sagte in Fragen zu createState.:

                      ein Beispiel

                      Beispiel. Damals gab es die Funktion existsState(id) noch nicht.

                      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

                      C 1 Antwort Letzte Antwort
                      0
                      • paul53P paul53

                        @ChristianG sagte:

                        wie prüfe ich ob ein state schon da ist?

                        if(!existsState(id)) {
                           setObject(id, obj);
                           setTimeout(function() {setState(id, obj.common.def, true)}, 100);
                        }
                        
                        AlCalzoneA Offline
                        AlCalzoneA Offline
                        AlCalzone
                        Developer
                        schrieb am zuletzt editiert von
                        #11

                        @paul53 sagte in Fragen zu createState.:

                        setTimeout

                        setObject akzeptiert einen Callback:
                        https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#setobject
                        Damit müsste man sofort nach dem Erstellen den Wert schreiben können, ohne künstlich länger zu warten.

                        Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                        1 Antwort Letzte Antwort
                        0
                        • paul53P paul53

                          @ChristianG sagte:

                          Kannst du mir einen Link schicken.

                          Siehe unter Attribute für bestimmte Objekttypen / Datenpunkt.

                          @ChristianG sagte in Fragen zu createState.:

                          ein Beispiel

                          Beispiel. Damals gab es die Funktion existsState(id) noch nicht.

                          C Offline
                          C Offline
                          ChristianG
                          schrieb am zuletzt editiert von ChristianG
                          #12

                          @paul53

                          Danke für die Hilfe aber ich gebe auf ... habe nicht so wirklich den Plan von dem was ich da mache und die Punkte werden einfach nicht angelegt. Werde dann außerhalb von ioBroker die API nutzen und in meine Oberfläche einbauen.

                          Hier für alle die doch noch versuchen wollen es ans laufen zu bekommen:

                          function createOrUpdateDP(object_path,obj_id,common){
                              const path = object_path;
                              const id = path + '.' + obj_id;
                              var obj;
                              obj['type'] = 'state';
                              obj['common'] = common;
                              if(!existsState(id)) {
                                  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);
                                      }
                                  });
                              }else{
                                  setState(id, common.def);
                              }
                          }
                          
                          createOrUpdateDP('eufy-security.0.device'+device_count,'cam_id', {read: true, write: true, role: "state", desc: "", type: "string", def: device.device_id });
                          
                          AlCalzoneA paul53P 2 Antworten Letzte Antwort
                          0
                          • C ChristianG

                            @paul53

                            Danke für die Hilfe aber ich gebe auf ... habe nicht so wirklich den Plan von dem was ich da mache und die Punkte werden einfach nicht angelegt. Werde dann außerhalb von ioBroker die API nutzen und in meine Oberfläche einbauen.

                            Hier für alle die doch noch versuchen wollen es ans laufen zu bekommen:

                            function createOrUpdateDP(object_path,obj_id,common){
                                const path = object_path;
                                const id = path + '.' + obj_id;
                                var obj;
                                obj['type'] = 'state';
                                obj['common'] = common;
                                if(!existsState(id)) {
                                    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);
                                        }
                                    });
                                }else{
                                    setState(id, common.def);
                                }
                            }
                            
                            createOrUpdateDP('eufy-security.0.device'+device_count,'cam_id', {read: true, write: true, role: "state", desc: "", type: "string", def: device.device_id });
                            
                            AlCalzoneA Offline
                            AlCalzoneA Offline
                            AlCalzone
                            Developer
                            schrieb am zuletzt editiert von
                            #13

                            @ChristianG sagte in Fragen zu createState.:

                            die Punkte werden einfach nicht angelegt

                            Bist du 100% sicher, dass die Funktion überhaupt ausgeführt wird? Hast du in den Adaptereinstellungen setObject erlaubt?

                            Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                            C 1 Antwort Letzte Antwort
                            0
                            • AlCalzoneA AlCalzone

                              @ChristianG sagte in Fragen zu createState.:

                              die Punkte werden einfach nicht angelegt

                              Bist du 100% sicher, dass die Funktion überhaupt ausgeführt wird? Hast du in den Adaptereinstellungen setObject erlaubt?

                              C Offline
                              C Offline
                              ChristianG
                              schrieb am zuletzt editiert von
                              #14

                              @AlCalzone Bildschirmfoto 2020-07-06 um 08.48.13.png

                              1 Antwort Letzte Antwort
                              0
                              • C ChristianG

                                @paul53

                                Danke für die Hilfe aber ich gebe auf ... habe nicht so wirklich den Plan von dem was ich da mache und die Punkte werden einfach nicht angelegt. Werde dann außerhalb von ioBroker die API nutzen und in meine Oberfläche einbauen.

                                Hier für alle die doch noch versuchen wollen es ans laufen zu bekommen:

                                function createOrUpdateDP(object_path,obj_id,common){
                                    const path = object_path;
                                    const id = path + '.' + obj_id;
                                    var obj;
                                    obj['type'] = 'state';
                                    obj['common'] = common;
                                    if(!existsState(id)) {
                                        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);
                                            }
                                        });
                                    }else{
                                        setState(id, common.def);
                                    }
                                }
                                
                                createOrUpdateDP('eufy-security.0.device'+device_count,'cam_id', {read: true, write: true, role: "state", desc: "", type: "string", def: device.device_id });
                                
                                paul53P Offline
                                paul53P Offline
                                paul53
                                schrieb am zuletzt editiert von
                                #15

                                @ChristianG sagte:

                                Hier für alle die doch noch versuchen wollen es ans laufen zu bekommen:

                                Ich würde Zeile 4 - so wie im verlinkten Beispiel - ändern in:

                                    var 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

                                C 1 Antwort Letzte Antwort
                                0
                                • paul53P paul53

                                  @ChristianG sagte:

                                  Hier für alle die doch noch versuchen wollen es ans laufen zu bekommen:

                                  Ich würde Zeile 4 - so wie im verlinkten Beispiel - ändern in:

                                      var obj = {};
                                  
                                  C Offline
                                  C Offline
                                  ChristianG
                                  schrieb am zuletzt editiert von
                                  #16

                                  @paul53 geht nicht, dann gibt es einen Fehler.Bildschirmfoto 2020-07-06 um 08.59.56.png

                                  AlCalzoneA 1 Antwort Letzte Antwort
                                  0
                                  • C ChristianG

                                    @paul53 geht nicht, dann gibt es einen Fehler.Bildschirmfoto 2020-07-06 um 08.59.56.png

                                    AlCalzoneA Offline
                                    AlCalzoneA Offline
                                    AlCalzone
                                    Developer
                                    schrieb am zuletzt editiert von
                                    #17

                                    @ChristianG Warum ist dein Skript auf TypeScript eingestellt?

                                    Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                                    C 1 Antwort Letzte Antwort
                                    0
                                    • AlCalzoneA AlCalzone

                                      @ChristianG Warum ist dein Skript auf TypeScript eingestellt?

                                      C Offline
                                      C Offline
                                      ChristianG
                                      schrieb am zuletzt editiert von ChristianG
                                      #18

                                      @AlCalzone weil ich sonst den import von

                                      var axios = require('axios');
                                      

                                      nicht machen kann.

                                      AlCalzoneA 1 Antwort Letzte Antwort
                                      0
                                      • C ChristianG

                                        @AlCalzone weil ich sonst den import von

                                        var axios = require('axios');
                                        

                                        nicht machen kann.

                                        AlCalzoneA Offline
                                        AlCalzoneA Offline
                                        AlCalzone
                                        Developer
                                        schrieb am zuletzt editiert von
                                        #19

                                        @ChristianG natürlich kannst du das.

                                        Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

                                        C 2 Antworten Letzte Antwort
                                        0
                                        • AlCalzoneA AlCalzone

                                          @ChristianG natürlich kannst du das.

                                          C Offline
                                          C Offline
                                          ChristianG
                                          schrieb am zuletzt editiert von
                                          #20

                                          @AlCalzone Okay, war rot hinterlegt aber ausführen geht :) Danke!!! Dann lag es nur an der kleinen Sache :)

                                          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

                                          773

                                          Online

                                          32.6k

                                          Benutzer

                                          82.1k

                                          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