Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. [GELÖST] Objekt (type: channel/device) erzeugen?

    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

    [GELÖST] Objekt (type: channel/device) erzeugen?

    This topic has been deleted. Only users with topic management privileges can see it.
    • Newpicsel
      Newpicsel @paul53 last edited by

      @paul53

      Wie gesagt ich kenne mich damit nicht sehr gut aus, aber hab mir schon sowas in der Richtung gedacht.

      Danke schon mal für deine Hilfe, ein paar Fragen hätte ich noch, um alles besser verstehen zu können, eventuell magst du mir da auch weiter helfen?

      Kann ich direkt setObjectNoExists(id, obj) verwenden?

      Womit füttere ich 'obj' ? Direkt mit den Objektdaten (type)?
      Oder muss ich 'type' separat anhängen (id, obj, type)
      'Common' kann ich zusätzlich als json einspeisen (Name, write, read), wie ich es auch beim Datenpunkt mache JSON.parse(common)?

      z.B. setObjectNoExists(id, obj, type, JSON.parse(common))

      Oder gehört 'type' mit in 'common'?
      Stellt sich mir wieder die Frage was ich bei 'obj' angeben muss?
      Oder hab ich hier grad komplett ein Denkfehler?

      Sollte ich hier in der Überschrift Datenpunkt zu Objekt ändern?

      Vielen Dank 🙏

      paul53 2 Replies Last reply Reply Quote 0
      • paul53
        paul53 @Newpicsel last edited by

        @newpicsel sagte: setObjectNoExists(id, obj) verwenden?

        Das kennt der Javascript-Adapter nicht, sondern wird vom js-controller für Adapter-Entwickler bereit gestellt.

        Beispiel, in dem Objekte vom Typ "folder", "device" und "channel" erstellt werden.

        Newpicsel 1 Reply Last reply Reply Quote 1
        • paul53
          paul53 @Newpicsel last edited by paul53

          @newpicsel sagte: Womit füttere ich 'obj' ?

                 const obj = {
                     type: 'device',
                     common: {
                         name: 'Gerätename'
                     },
                     native: {}
                 }
          

          @newpicsel sagte in Datenpunkt (type: channel/device) erzeugen?:

          Sollte ich hier in der Überschrift Datenpunkt zu Objekt ändern?

          Ja.

          Newpicsel 1 Reply Last reply Reply Quote 1
          • Newpicsel
            Newpicsel @paul53 last edited by

            @paul53

            Ah ok das macht Sinn!

            In deinem Beispiel bildet die var. obj, in einer json die objektdaten (Typ, common, native), sehe ich das richtig?

            Dann müsste es doch theoretisch gehen, wenn ich es so formatiere: setObject(id, {type: type, JSON.parse(common)}; ?

            Die var. type Fülle ich dann mit der Angabe (folder, device, channel)
            Die var. common würde ich dann mit den Angaben {"Name":"xyz","write":false} füllen…
            Die Angabe 'native' kann ich problemlos weglassen, wenn ich nicht vorhabe sie zu füllen?

            Oder sollte ich dennoch mit der var. obj arbeiten und diese mit {type:'folder', common:{name:'xyz', write: false}} füllen?

            Vielen vielen Dank!

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

              @newpicsel sagte: in einer json die objektdaten (Typ, common, native), sehe ich das richtig?

              Nein, in meinem Beispiel ist es direkt als Objekt (nicht als JSON) deklariert. Weshalb sollte man den Umweg über JSON gehen?

              @newpicsel sagte in Datenpunkt (type: channel/device) erzeugen?:

              Die var. common würde ich dann mit den Angaben {"Name":"xyz","write":false} füllen…

              Kein JSON und common.write gibt es nur bei Datenpunkten.

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

                @paul53

                if(existsObject(id) === false) {
                
                    setObject(id, obj);
                
                }
                
                 const obj = {
                           type: type,
                           common: {
                               name: name,
                               write: write,
                               read: read
                           },
                           native: {}
                       }
                

                Wäre das ok? Kann ich obj wieder mit variablen füllen?

                Newpicsel paul53 2 Replies Last reply Reply Quote 0
                • Newpicsel
                  Newpicsel @Newpicsel last edited by

                  @newpicsel

                  Würde dann im block so aussehen...
                  Datenpunkt-5.jpg

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

                    @newpicsel sagte in Datenpunkt (type: channel/device) erzeugen?:

                    Wäre das ok? Kann ich obj wieder mit variablen füllen?

                    const obj = {
                    

                    muss vor

                    setObject(id, obj);
                    

                    erfolgen.
                    Sämtliche Variablen / Konstanten müssen vorher deklariert werden und Werte erhalten.

                    const id = '0_userdata.0.meinGeraet.meinKanal';
                    const type = 'channel';
                    const Name = 'mein Kanalname';
                    const obj = {
                       type: type,
                       common: {
                          name: Name
                       },
                       native: {}
                    }
                    
                    if(existsObject(id) === false) setObject(id, obj);
                    
                    Newpicsel 1 Reply Last reply Reply Quote 1
                    • paul53
                      paul53 @Newpicsel last edited by paul53

                      @newpicsel sagte: Würde dann im block so aussehen...

                      Du möchtest es als Javascript-Funktion in Blockly? Dann bitte ohne write und read, denn die gibt es nur in Datenpunkten.
                      Funktion createObject(id, type, name):

                      if(!existsObject(id)) {
                         const obj = {
                            type: type,
                            common: {name: name},
                            native: {}
                         };
                         setObject(id, obj);
                      }
                      

                      Für Datenpunkte verwende createState().

                      Newpicsel dslraser 3 Replies Last reply Reply Quote 1
                      • Newpicsel
                        Newpicsel @paul53 last edited by

                        @paul53

                        Klar logisch! 🤦‍♂️

                        Mein Fehler, bis auf die Konstante obj, werden alle Variablen am Anfang des Blocks definiert, obj muss natürlich auch direkt im Anschluss definiert werden und dann die Funktion ausgeführt werden 👍

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

                          @paul53

                          Ok das mit den write/read Angaben wusste ich nicht, hab ich nur in den objektdaten bestehender Objekte von Adaptern gesehen, macht aber auch wenig Sinn wenn ich drüber nachdenke…

                          Ich bin dir unendlich dankbar, werde ich gleich testen! 🤗

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

                            @paul53

                            Funktioniert fast astrein, lediglich der Name wird nicht übernommen, hier steht immer der Pfad des Objekts… 🤔

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

                              @newpicsel sagte: der Name wird nicht übernommen, hier steht immer der Pfad des Objekts…

                              name ist eine im Javascript-Adapter vordefinierte Variable und enthält den Namen des Skripts. Wie sieht das Skript aus, das den falschen Namen übergibt? Als globale Variable / Konstante sollte name nicht verwendet werden (ausnahmsweise besser Name).

                              Newpicsel 1 Reply Last reply Reply Quote 1
                              • Newpicsel
                                Newpicsel @paul53 last edited by

                                @paul53

                                Ja das war’s 🤣

                                🤗 🤗 🤗

                                dslraser 1 Reply Last reply Reply Quote 0
                                • dslraser
                                  dslraser Forum Testing Most Active @Newpicsel last edited by

                                  @newpicsel
                                  wie sieht denn jetzt die fertige Funktion bzw. das Blockly mit der Funktion aus. (interessiert mich auch)
                                  Bitte mal als Export hier zur Verfügung stellen.

                                  Newpicsel 1 Reply Last reply Reply Quote 0
                                  • dslraser
                                    dslraser Forum Testing Most Active @paul53 last edited by

                                    @paul53 sagte in [GELÖST] Objekt (type: channel/device) erzeugen?:

                                    @newpicsel sagte: Würde dann im block so aussehen...

                                    Du möchtest es als Javascript-Funktion in Blockly? Dann bitte ohne write und read, denn die gibt es nur in Datenpunkten.
                                    Funktion createObject(id, type, name):

                                    if(!existsObject(id) {
                                       const obj = {
                                          type: type,
                                          common: {name: name},
                                          native: {}
                                       };
                                       setObject(id, obj);
                                    }
                                    

                                    Für Datenpunkte verwende createState().

                                    Danke, bei mir funktioniert es jetzt auch. Hier fehlte nur eine schließende Klammer hinter id. (deshalb hatte ich eine Fehlermeldung)

                                    if(!existsObject(id)) {
                                    
                                    paul53 1 Reply Last reply Reply Quote 1
                                    • paul53
                                      paul53 @dslraser last edited by

                                      @dslraser sagte:

                                      if(!existsObject(id)) {
                                      

                                      Danke, habe korrigiert.

                                      1 Reply Last reply Reply Quote 1
                                      • Newpicsel
                                        Newpicsel @dslraser last edited by

                                        @dslraser

                                        Ich habe hier eine übersicht mit Beispiel und dem export:

                                        <xml xmlns="https://developers.google.com/blockly/xml">
                                         <variables>
                                           <variable id="LfiUSz-w5]D.G6Ak/y2e">id</variable>
                                           <variable id="$mcGKjxdKw)k_50}qNIe">Name</variable>
                                           <variable id="(k_r{s{0[,uYi4T_X$#L">type</variable>
                                           <variable id="UUvU!puSSzK/c])G!9kP">init</variable>
                                           <variable id="lY8-+lZ_0InQ@{{HF9Z0">common</variable>
                                         </variables>
                                         <block type="comment" id="v_tv;-V],:3dC|KK,+0H" x="62" y="-112">
                                           <field name="COMMENT">Beispiel: erstelle Struktur!</field>
                                         </block>
                                         <block type="procedures_defcustomnoreturn" id="JR|$]lz%;.#aZJ4SpaLs" x="63" y="-62">
                                           <mutation statements="false">
                                             <arg name="id" varid="LfiUSz-w5]D.G6Ak/y2e"></arg>
                                             <arg name="Name" varid="$mcGKjxdKw)k_50}qNIe"></arg>
                                             <arg name="type" varid="(k_r{s{0[,uYi4T_X$#L"></arg>
                                           </mutation>
                                           <field name="NAME">createObject</field>
                                           <field name="SCRIPT">aWYoZXhpc3RzT2JqZWN0KGlkKSA9PT0gZmFsc2UpIHsNCiAgIGNvbnN0IG9iaiA9IHsNCiAgICAgIHR5cGU6IHR5cGUsDQogICAgICBjb21tb246IHtuYW1lOiBOYW1lfSwNCiAgICAgIG5hdGl2ZToge30NCiAgIH07DQogICBzZXRPYmplY3QoaWQsIG9iaik7DQp9</field>
                                           <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                                         </block>
                                         <block type="procedures_callcustomnoreturn" id="vAB{{mVjCQJ!8#??9=Yv" x="62" y="13">
                                           <mutation name="createObject">
                                             <arg name="id"></arg>
                                             <arg name="Name"></arg>
                                             <arg name="type"></arg>
                                           </mutation>
                                           <value name="ARG0">
                                             <block type="text" id="1}xLocpB~=/T8UF0rOtV">
                                               <field name="TEXT">0_userdata.0.Eigene_Objekte_TEST</field>
                                             </block>
                                           </value>
                                           <value name="ARG1">
                                             <block type="text" id="x0Z`IhO^?O^Xjugfg)^r">
                                               <field name="TEXT">Hier solten eigene Objekte angelegt werden</field>
                                             </block>
                                           </value>
                                           <value name="ARG2">
                                             <block type="text" id="];A~I~Iu_Bvo3zU@TvFs">
                                               <field name="TEXT">folder</field>
                                             </block>
                                           </value>
                                           <next>
                                             <block type="procedures_callcustomnoreturn" id="a,xCOypc+jYj*/m+`pHH">
                                               <mutation name="createObject">
                                                 <arg name="id"></arg>
                                                 <arg name="Name"></arg>
                                                 <arg name="type"></arg>
                                               </mutation>
                                               <value name="ARG0">
                                                 <block type="text" id="KQse/m:qnU{L3=]o$~Oh">
                                                   <field name="TEXT">0_userdata.0.Eigene_Objekte_TEST.lampen</field>
                                                 </block>
                                               </value>
                                               <value name="ARG1">
                                                 <block type="text" id="a80aUMb-3Si1avx1}wn4">
                                                   <field name="TEXT">Übersicht aller Lampen</field>
                                                 </block>
                                               </value>
                                               <value name="ARG2">
                                                 <block type="text" id="q_^90iUY[Qof+Hg,/vG=">
                                                   <field name="TEXT">device</field>
                                                 </block>
                                               </value>
                                               <next>
                                                 <block type="procedures_callcustomnoreturn" id="?hgrd_seNBhCDwj`R?iV">
                                                   <mutation name="createObject">
                                                     <arg name="id"></arg>
                                                     <arg name="Name"></arg>
                                                     <arg name="type"></arg>
                                                   </mutation>
                                                   <value name="ARG0">
                                                     <block type="text" id="UZ!.oytWIG@$p,U}Ytz[">
                                                       <field name="TEXT">0_userdata.0.Eigene_Objekte_TEST.lampen.küchenLampe</field>
                                                     </block>
                                                   </value>
                                                   <value name="ARG1">
                                                     <block type="text" id="R%[^-_c6G+{Q019ywz/Q">
                                                       <field name="TEXT">Übersicht Küchenlampe</field>
                                                     </block>
                                                   </value>
                                                   <value name="ARG2">
                                                     <block type="text" id="eO|JkOJ~iw4Thw2!Nl5_">
                                                       <field name="TEXT">channel</field>
                                                     </block>
                                                   </value>
                                                 </block>
                                               </next>
                                             </block>
                                           </next>
                                         </block>
                                         <block type="comment" id="ip#vELLdxEZ71[I(hkg1" x="62" y="412">
                                           <field name="COMMENT">Beispiel: erstelle Datenpunkt in dieser Struktur!</field>
                                         </block>
                                         <block type="procedures_defcustomnoreturn" id="gJ[9+,egE[AS4K(1@x$b" x="63" y="463">
                                           <mutation statements="false">
                                             <arg name="id" varid="LfiUSz-w5]D.G6Ak/y2e"></arg>
                                             <arg name="init" varid="UUvU!puSSzK/c])G!9kP"></arg>
                                             <arg name="common" varid="lY8-+lZ_0InQ@{{HF9Z0"></arg>
                                           </mutation>
                                           <field name="NAME">createDatapoint</field>
                                           <field name="SCRIPT">aWYoZXhpc3RzU3RhdGUoaWQpID09PSBmYWxzZSkgew0KDQogICAgY3JlYXRlU3RhdGUoaWQsIGluaXQsIEpTT04ucGFyc2UoY29tbW9uKSk7DQoNCn0=</field>
                                           <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                                         </block>
                                         <block type="procedures_callcustomnoreturn" id="WM|LTm`,;Ej;Y:i3idy5" x="63" y="538">
                                           <mutation name="createDatapoint">
                                             <arg name="id"></arg>
                                             <arg name="init"></arg>
                                             <arg name="common"></arg>
                                           </mutation>
                                           <value name="ARG0">
                                             <block type="text" id="YwbD/A;~U)U0G[mOh_|!">
                                               <field name="TEXT">0_userdata.0.Eigene_Objekte_TEST.lampen.küchenLampe.lichtAN</field>
                                             </block>
                                           </value>
                                           <value name="ARG1">
                                             <block type="logic_boolean" id="9q)o,H^0D*?gz#W(uYGi">
                                               <field name="BOOL">FALSE</field>
                                             </block>
                                           </value>
                                           <value name="ARG2">
                                             <block type="text" id="xzF$PY~-Jvp.ZN@Hwvmj">
                                               <field name="TEXT">{"type":"boolean","role":"indicator","write":false,"read": true,"name": "Status Licht"}</field>
                                             </block>
                                           </value>
                                         </block>
                                        </xml>
                                        

                                        Objekt_Datenpunkt_erzeugen-1.jpg

                                        Objekt_Datenpunkt_erzeugen-2.jpg

                                        Ich hoffe das hilft eventuell jemanden weiter 😊

                                        dslraser 1 Reply Last reply Reply Quote 1
                                        • dslraser
                                          dslraser Forum Testing Most Active @Newpicsel last edited by

                                          @newpicsel
                                          ein icon ist auch ganz nett (als Base64 eingefügt)

                                          Bildschirmfoto 2021-09-20 um 12.05.36.png

                                          Bildschirmfoto 2021-09-20 um 12.05.20.png

                                          B 1 Reply Last reply Reply Quote 1
                                          • B
                                            Burg_Io @dslraser last edited by

                                            @dslraser
                                            Hallo. gibt es für die Icon´s eine Datenbank oder sind sie selbst eerstellt? Und hast du dazu noch etwas in der Funktion angepasst?

                                            MfG Raik

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

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            797
                                            Online

                                            31.9k
                                            Users

                                            80.1k
                                            Topics

                                            1.3m
                                            Posts

                                            blockly javascript
                                            4
                                            26
                                            1369
                                            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