Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Fragen zu createState.

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Fragen zu createState.

    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      ChristianG last edited by 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.

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @ChristianG last edited by

        @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 1 Reply Last reply Reply Quote 0
        • C
          ChristianG @paul53 last edited by 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.

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @ChristianG last edited by

            @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 1 Reply Last reply Reply Quote 0
            • C
              ChristianG @paul53 last edited by

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

              paul53 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @ChristianG last edited by

                @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 AlCalzone 3 Replies Last reply Reply Quote 0
                • C
                  ChristianG @paul53 last edited by 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

                  paul53 1 Reply Last reply Reply Quote 1
                  • C
                    ChristianG @paul53 last edited by 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 1 Reply Last reply Reply Quote 0
                    • C
                      ChristianG @ChristianG last edited by ChristianG

                      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 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @ChristianG last edited by 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 1 Reply Last reply Reply Quote 0
                        • AlCalzone
                          AlCalzone Developer @paul53 last edited by

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

                          1 Reply Last reply Reply Quote 0
                          • C
                            ChristianG @paul53 last edited by 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 });
                            
                            AlCalzone paul53 2 Replies Last reply Reply Quote 0
                            • AlCalzone
                              AlCalzone Developer @ChristianG last edited by

                              @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 1 Reply Last reply Reply Quote 0
                              • C
                                ChristianG @AlCalzone last edited by

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

                                1 Reply Last reply Reply Quote 0
                                • paul53
                                  paul53 @ChristianG last edited by

                                  @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 1 Reply Last reply Reply Quote 0
                                  • C
                                    ChristianG @paul53 last edited by

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

                                    AlCalzone 1 Reply Last reply Reply Quote 0
                                    • AlCalzone
                                      AlCalzone Developer @ChristianG last edited by

                                      @ChristianG Warum ist dein Skript auf TypeScript eingestellt?

                                      C 1 Reply Last reply Reply Quote 0
                                      • C
                                        ChristianG @AlCalzone last edited by ChristianG

                                        @AlCalzone weil ich sonst den import von

                                        var axios = require('axios');
                                        

                                        nicht machen kann.

                                        AlCalzone 1 Reply Last reply Reply Quote 0
                                        • AlCalzone
                                          AlCalzone Developer @ChristianG last edited by

                                          @ChristianG natürlich kannst du das.

                                          C 2 Replies Last reply Reply Quote 0
                                          • C
                                            ChristianG @AlCalzone last edited by

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

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            925
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            3
                                            31
                                            3277
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo