Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Einsteigerfragen
    4. Automatisierung
    5. Gerätename aus Liste auslesen -Blockly

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Gerätename aus Liste auslesen -Blockly

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

      @bert-0 sagte: alias.0.UG.Arbeitszimmer.Fenster_rechts.LOWBAT

      Wie sieht die ID-Struktur unter "alias.0" aus? Ist sie einheitlich (Gerät.Kanal.Datenpunkt)?

      B 1 Reply Last reply Reply Quote 0
      • Codierknecht
        Codierknecht Developer Most Active @Bert 0 last edited by Codierknecht

        @bert-0 sagte in Gerätename aus Liste auslesen -Blockly:

        Was ich aber nicht schaffe , ist aus dem einzelnen Wert ( Batteriestatus ) dann den Gerätenamen/Kanalnamen zu extrahieren

        Über eine kleine JS-Funktion:

        function getDeviceName(stateID) {
            var id = stateID.substring(0, stateID.lastIndexOf('.'));
            return getObject(id).common.name;
        }
        
        B 1 Reply Last reply Reply Quote 0
        • B
          Bert 0 @Codierknecht last edited by

          @codierknecht
          Danke, aber mir geht es um Blockly, Javascript bin ich noch nicht so gut drin.

          Codierknecht 1 Reply Last reply Reply Quote 0
          • B
            Bert 0 @paul53 last edited by

            @paul53
            Ja

            1 Reply Last reply Reply Quote 0
            • Codierknecht
              Codierknecht Developer Most Active @Bert 0 last edited by Codierknecht

              @bert-0
              Wenn Du nur die ID des übergeordneten Elements brauchst, geht das auch mit Blockly:
              ec8a5069-dc4c-4849-a100-613230694558-image.png
              Wenn Du aber tatsächlich den Namen des übergeordneten Elements haben möchtest, kommst Du wohl um JS kaum herum.

              <xml xmlns="https://developers.google.com/blockly/xml">
               <variables>
                 <variable id="Iuwd(|h_]8gJ[~(,bb;(">stateID</variable>
                 <variable id="cT7$#}[1DeWb5m45Z.VO">Alle_Geräte-mit_Batterien</variable>
                 <variable id="H7uf1#MNI!o2I8$$mlwm">Batteriestatus</variable>
               </variables>
               <block type="procedures_defcustomreturn" id="_Yg%Y[qgVaoA23UIH}#T" x="138" y="-212">
                 <mutation statements="false">
                   <arg name="stateID" varid="Iuwd(|h_]8gJ[~(,bb;("></arg>
                 </mutation>
                 <field name="NAME">getDeviceName</field>
                 <field name="SCRIPT">ICAgIHZhciBpZCA9IHN0YXRlSUQuc3Vic3RyaW5nKDAsIHN0YXRlSUQubGFzdEluZGV4T2YoJy4nKSk7DQogICAgcmV0dXJuIGdldE9iamVjdChpZCkuY29tbW9uLm5hbWU7DQo=</field>
                 <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
               </block>
               <block type="variables_set" id="e8_B=)/G}SX;6irIG1Hw" x="138" y="-162">
                 <field name="VAR" id="cT7$#}[1DeWb5m45Z.VO">Alle_Geräte-mit_Batterien</field>
                 <value name="VALUE">
                   <block type="selector" id="2zcAFqjE4^@IP.~4~@t6">
                     <field name="TEXT">(functions=battery_status)</field>
                   </block>
                 </value>
                 <next>
                   <block type="debug" id="K@]q@}zdtvo+]?8[$+pI" disabled="true">
                     <field name="Severity">log</field>
                     <value name="TEXT">
                       <shadow type="text" id="ztJWVF!EA2wxUo$o7z=S">
                         <field name="TEXT">test</field>
                       </shadow>
                       <block type="variables_get" id="wpNkypy%Dm,/kY#5!9pq">
                         <field name="VAR" id="cT7$#}[1DeWb5m45Z.VO">Alle_Geräte-mit_Batterien</field>
                       </block>
                     </value>
                     <next>
                       <block type="controls_forEach" id="64J.9]F}Nu-w77XR@6_*">
                         <field name="VAR" id="H7uf1#MNI!o2I8$$mlwm">Batteriestatus</field>
                         <value name="LIST">
                           <block type="variables_get" id="#GAcA7-9V]Gy!(-kid+)">
                             <field name="VAR" id="cT7$#}[1DeWb5m45Z.VO">Alle_Geräte-mit_Batterien</field>
                           </block>
                         </value>
                         <statement name="DO">
                           <block type="debug" id="5pC}DaX$w6D8KU`2~j9e">
                             <field name="Severity">log</field>
                             <value name="TEXT">
                               <shadow type="text" id="pKqmj]F^S.eA5pWVK:[c">
                                 <field name="TEXT">test</field>
                               </shadow>
                               <block type="variables_get" id="qKAw(TF@a|?oh2^_F-Qt">
                                 <field name="VAR" id="H7uf1#MNI!o2I8$$mlwm">Batteriestatus</field>
                               </block>
                             </value>
                             <next>
                               <block type="controls_if" id="jDo*_B9M_lC;xw?bJca@">
                                 <value name="IF0">
                                   <block type="logic_compare" id="hKvf.M0GXD#k#u$}mz8g">
                                     <field name="OP">EQ</field>
                                     <value name="A">
                                       <block type="get_value_var" id="Q02Z6h*J{_gd9lqt4??c">
                                         <field name="ATTR">val</field>
                                         <value name="OID">
                                           <shadow type="text" id="rP,9[HU`7(/sD.)0HuUP">
                                             <field name="TEXT"></field>
                                           </shadow>
                                           <block type="variables_get" id="oW4[:DKJWW.:2?pNpZQT">
                                             <field name="VAR" id="H7uf1#MNI!o2I8$$mlwm">Batteriestatus</field>
                                           </block>
                                         </value>
                                       </block>
                                     </value>
                                     <value name="B">
                                       <block type="logic_boolean" id="s8Wg}4V79gMZ!9RQj*9R">
                                         <field name="BOOL">TRUE</field>
                                       </block>
                                     </value>
                                   </block>
                                 </value>
                                 <statement name="DO0">
                                   <block type="debug" id="]Ve+?2EfE;B*j@#*.*V0">
                                     <field name="Severity">log</field>
                                     <value name="TEXT">
                                       <shadow type="text" id="gFP03WbG6fltGZ2m42gF">
                                         <field name="TEXT">test</field>
                                       </shadow>
                                       <block type="text_join" id="8)iS]x_$fU6;$UE;w*g0">
                                         <mutation items="5"></mutation>
                                         <value name="ADD0">
                                           <block type="text" id="xQ/[6J5;+V*`A(pyBamj">
                                             <field name="TEXT">Die Batterie in Zimmer </field>
                                           </block>
                                         </value>
                                         <value name="ADD1">
                                           <block type="variables_get" id="r?*+wgcaoAwHM?mYW!)n">
                                             <field name="VAR" id="H7uf1#MNI!o2I8$$mlwm">Batteriestatus</field>
                                           </block>
                                         </value>
                                         <value name="ADD2">
                                           <block type="text_multiline" id="_5+W3z^B^SZA2vFp~kQ[">
                                             <field name="TEXT"> muss ausgetauscht werden mit der Kanal-ID:  </field>
                                           </block>
                                         </value>
                                         <value name="ADD3">
                                           <block type="procedures_callcustomreturn" id="5ib9zw9KJEfM~=iMMu%h">
                                             <mutation name="getDeviceName">
                                               <arg name="stateID"></arg>
                                             </mutation>
                                             <value name="ARG0">
                                               <block type="variables_get" id="p^6;TfEOxZT=?obQCBe.">
                                                 <field name="VAR" id="H7uf1#MNI!o2I8$$mlwm">Batteriestatus</field>
                                               </block>
                                             </value>
                                           </block>
                                         </value>
                                         <value name="ADD4">
                                           <block type="text_multiline" id="?)~.SP9?=)va9FEo!qVv">
                                             <field name="TEXT">!</field>
                                           </block>
                                         </value>
                                       </block>
                                     </value>
                                   </block>
                                 </statement>
                               </block>
                             </next>
                           </block>
                         </statement>
                       </block>
                     </next>
                   </block>
                 </next>
               </block>
              </xml>```
              [/s]
              B 1 Reply Last reply Reply Quote 1
              • B
                Bert 0 @Codierknecht last edited by

                @codierknecht Danke, nur mal Interessehalber. Wie rufe ich die Funktion innerhalb der Scleife dann ab?

                Bert

                Codierknecht paul53 3 Replies Last reply Reply Quote 0
                • Codierknecht
                  Codierknecht Developer Most Active @Bert 0 last edited by

                  @bert-0
                  982418b2-ba08-40e2-bad2-8332211a9174-image.png

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

                    @bert-0 sagte: Wie rufe ich die Funktion innerhalb der Scleife dann ab?

                    Bild_2022-12-21_112334163.png

                    @codierknecht sagte in Gerätename aus Liste auslesen -Blockly:

                    Über eine kleine JS-Funktion:

                    Wenn der Objekt-Typ nicht geprüft wird, handelt es sich um den "Parentname".

                    <xml xmlns="https://developers.google.com/blockly/xml">
                     <variables>
                       <variable id="cT7$#}[1DeWb5m45Z.VO">Alle_Geräte-mit_Batterien</variable>
                       <variable id="-SyDULXW{,RJuT2tv+3S">id</variable>
                       <variable id="H7uf1#MNI!o2I8$$mlwm">Batteriestatus</variable>
                     </variables>
                     <block type="variables_set" id="e8_B=)/G}SX;6irIG1Hw" x="138" y="-162">
                       <field name="VAR" id="cT7$#}[1DeWb5m45Z.VO">Alle_Geräte-mit_Batterien</field>
                       <value name="VALUE">
                         <block type="selector" id="2zcAFqjE4^@IP.~4~@t6">
                           <field name="TEXT">(functions=battery_status)</field>
                         </block>
                       </value>
                       <next>
                         <block type="debug" id="K@]q@}zdtvo+]?8[$+pI" disabled="true">
                           <field name="Severity">log</field>
                           <value name="TEXT">
                             <shadow type="text" id="ztJWVF!EA2wxUo$o7z=S">
                               <field name="TEXT">test</field>
                             </shadow>
                             <block type="variables_get" id="wpNkypy%Dm,/kY#5!9pq">
                               <field name="VAR" id="cT7$#}[1DeWb5m45Z.VO">Alle_Geräte-mit_Batterien</field>
                             </block>
                           </value>
                           <next>
                             <block type="controls_forEach" id="64J.9]F}Nu-w77XR@6_*">
                               <field name="VAR" id="H7uf1#MNI!o2I8$$mlwm">Batteriestatus</field>
                               <value name="LIST">
                                 <block type="variables_get" id="#GAcA7-9V]Gy!(-kid+)">
                                   <field name="VAR" id="cT7$#}[1DeWb5m45Z.VO">Alle_Geräte-mit_Batterien</field>
                                 </block>
                               </value>
                               <statement name="DO">
                                 <block type="debug" id="5pC}DaX$w6D8KU`2~j9e">
                                   <field name="Severity">log</field>
                                   <value name="TEXT">
                                     <shadow type="text" id="pKqmj]F^S.eA5pWVK:[c">
                                       <field name="TEXT">test</field>
                                     </shadow>
                                     <block type="variables_get" id="qKAw(TF@a|?oh2^_F-Qt">
                                       <field name="VAR" id="H7uf1#MNI!o2I8$$mlwm">Batteriestatus</field>
                                     </block>
                                   </value>
                                   <next>
                                     <block type="controls_if" id="jDo*_B9M_lC;xw?bJca@">
                                       <value name="IF0">
                                         <block type="get_value_var" id="Q02Z6h*J{_gd9lqt4??c">
                                           <field name="ATTR">val</field>
                                           <value name="OID">
                                             <shadow type="text">
                                               <field name="TEXT"></field>
                                             </shadow>
                                             <block type="variables_get" id="oW4[:DKJWW.:2?pNpZQT">
                                               <field name="VAR" id="H7uf1#MNI!o2I8$$mlwm">Batteriestatus</field>
                                             </block>
                                           </value>
                                         </block>
                                       </value>
                                       <statement name="DO0">
                                         <block type="debug" id="]Ve+?2EfE;B*j@#*.*V0">
                                           <field name="Severity">log</field>
                                           <value name="TEXT">
                                             <shadow type="text" id="gFP03WbG6fltGZ2m42gF">
                                               <field name="TEXT">test</field>
                                             </shadow>
                                             <block type="text_join" id="8)iS]x_$fU6;$UE;w*g0">
                                               <mutation items="5"></mutation>
                                               <value name="ADD0">
                                                 <block type="text" id="xQ/[6J5;+V*`A(pyBamj">
                                                   <field name="TEXT">Die Batterie in Zimmer </field>
                                                 </block>
                                               </value>
                                               <value name="ADD1">
                                                 <block type="variables_get" id="r?*+wgcaoAwHM?mYW!)n">
                                                   <field name="VAR" id="H7uf1#MNI!o2I8$$mlwm">Batteriestatus</field>
                                                 </block>
                                               </value>
                                               <value name="ADD2">
                                                 <block type="text_multiline" id="_5+W3z^B^SZA2vFp~kQ[">
                                                   <field name="TEXT"> muss ausgetauscht werden mit dem Kanal-Namen:  </field>
                                                 </block>
                                               </value>
                                               <value name="ADD3">
                                                 <block type="procedures_callcustomreturn" id="r|D:$H=x9@DSnwLhqk!c">
                                                   <mutation name="parentName">
                                                     <arg name="id"></arg>
                                                   </mutation>
                                                   <value name="ARG0">
                                                     <block type="variables_get" id="nyU;v)kF^?;X]Rz%Y*gV">
                                                       <field name="VAR" id="H7uf1#MNI!o2I8$$mlwm">Batteriestatus</field>
                                                     </block>
                                                   </value>
                                                 </block>
                                               </value>
                                               <value name="ADD4">
                                                 <block type="text_multiline" id="?)~.SP9?=)va9FEo!qVv">
                                                   <field name="TEXT">!</field>
                                                 </block>
                                               </value>
                                             </block>
                                           </value>
                                         </block>
                                       </statement>
                                     </block>
                                   </next>
                                 </block>
                               </statement>
                             </block>
                           </next>
                         </block>
                       </next>
                     </block>
                     <block type="procedures_defcustomreturn" id=",Vm(c(Gx:e%.dlGJp=2:" x="412" y="238">
                       <mutation statements="false">
                         <arg name="id" varid="-SyDULXW{,RJuT2tv+3S"></arg>
                       </mutation>
                       <field name="NAME">parentName</field>
                       <field name="SCRIPT">aWQgPSBpZC5zdWJzdHJpbmcoMCwgaWQubGFzdEluZGV4T2YoJy4nKSk7DQppZihleGlzdHNPYmplY3QoaWQpKSByZXR1cm4gZ2V0T2JqZWN0KGlkKS5jb21tb24ubmFtZTs=</field>
                       <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                     </block>
                    </xml>
                    

                    Funktion parentName(id):

                    id = id.substring(0, id.lastIndexOf('.'));
                    if(existsObject(id)) return getObject(id).common.name;
                    
                    Codierknecht B 2 Replies Last reply Reply Quote 0
                    • Codierknecht
                      Codierknecht Developer Most Active @Bert 0 last edited by

                      @bert-0
                      In dem Blockly oben war noch ein Fehler. Hab's oben korrigiert. Sorry 👀

                      1 Reply Last reply Reply Quote 0
                      • Codierknecht
                        Codierknecht Developer Most Active @paul53 last edited by

                        @paul53 sagte in Gerätename aus Liste auslesen -Blockly:

                        Wenn der Objekt-Typ nicht geprüft wird, handelt es sich um den "Parentname".

                        Stimmt auch wieder. Ist eindeutiger 👍

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

                          @paul53
                          Geht nicht:

                          javascript.0 (886) script.js.Testscripte.Skript_1: Die Batterie in Zimmer alias.0.OG.xxx.xxx.LOWBAT muss ausgetauscht werden mit dem Kanal-Namen: [object Object]!
                          
                          paul53 Codierknecht 3 Replies Last reply Reply Quote 0
                          • paul53
                            paul53 @Bert 0 last edited by

                            @bert-0
                            Weshalb ist den Name ein Objekt? Ist er mehrsprachig?

                            Was gibt der untere Debug-Block aus, wenn er ergänzt wird?

                            Bild_2022-12-21_115213837.png

                            B 2 Replies Last reply Reply Quote 0
                            • Codierknecht
                              Codierknecht Developer Most Active @Bert 0 last edited by

                              @bert-0
                              Aso bei mir funzt Paul's Blockly wunderbar:
                              97603869-71e5-4fe7-a7be-a27acf019ff3-image.png

                              1 Reply Last reply Reply Quote 0
                              • Codierknecht
                                Codierknecht Developer Most Active @Bert 0 last edited by

                                @bert-0
                                Wie sieht denn der Objektbaum an der Ecke aus?

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

                                  @paul53

                                  11:56:20.299	info	javascript.0 (886) script.js.Testscripte.Skript_1: getState(id=alias.0.OG.Schlafzimmer.Fenster_Schlafzimmer.LOWBAT, timerId=undefined) => {"val":true,"ack":true,"ts":xxxxxxxxx,"q":0,"from":"system.adapter.zigbee.0","user":"system.user.admin","lc":xxxxxxxxx}
                                  11:56:20.300	info	javascript.0 (886) script.js.Testscripte.Skript_1: getObject(id=alias.0.OG.Schlafzimmer.Fenster_Schlafzimmer, enumName=undefined) => {"_id":"alias.0.OG.Schlafzimmer.Fenster_Schlafzimmer","common":{"name":{"de":"Fenster Schlafzimmer"},"role":"window","icon":"","color":null},"native":{},"type":"channel","from":"system.adapter.admin.0","user":"system.user.admin","ts":xxxxxxxxx,"acl":{"object":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}}
                                  11:56:20.300	info	javascript.0 (886) script.js.Testscripte.Skript_1: Die Batterie in Zimmer alias.0.OG.Schlafzimmer.Fenster_Schlafzimmer.LOWBAT muss ausgetauscht werden mit dem Kanal-Namen: [object Object]!
                                  11:56:20.300	info	javascript.0 (886) script.js.Testscripte.Skript_1: getObject(id=alias.0.OG.Schlafzimmer.Fenster_Schlafzimmer, enumName=undefined) => {"_id":"alias.0.OG.Schlafzimmer.Fenster_Schlafzimmer","common":{"name":{"de":"Fenster Schlafzimmer"},"role":"window","icon":"","color":null},"native":{},"type":"channel","from":"system.adapter.admin.0","user":"system.user.admin","ts":xxxxxxxxx,"acl":{"object":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"}}
                                  11:56:20.300	info	javascript.0 (886) script.js.Testscripte.Skript_1: {'de':'Fenster Schlafzimmer'}
                                  

                                  Was meinst du mit Name ein Objekt?

                                  Bert

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

                                    @bert-0 sagte: Was meinst du mit Name ein Objekt?

                                    Genau das:

                                     {'de':'Fenster Schlafzimmer'}
                                    

                                    Dann hänge noch ein .de in der Funktion dran:

                                    id = id.substring(0, id.lastIndexOf('.'));
                                    if(existsObject(id)) return getObject(id).common.name.de;
                                    

                                    Funktioniert so aber nur, wenn es immer eine Objekt ist mit {de: 'Kanalname'}. Andernfalls muss der Typ geprüft werden.

                                    id = id.substring(0, id.lastIndexOf('.'));
                                    if(existsObject(id)) {
                                        let pName = getObject(id).common.name;
                                        if(typeof pName == 'object') return pName.de;
                                        return pName;
                                    }
                                    
                                    B 1 Reply Last reply Reply Quote 0
                                    • B
                                      Bert 0 @paul53 last edited by

                                      @paul53
                                      Danke dir, passt.👍

                                      noch eine letzte Frage: Wie hast du die Funktion in Blockly eingefügt? Gibt es eine Möglichkeit von Javascript zurück zu Blockly?
                                      Bert

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

                                        @bert-0 sagte: Wie hast du die Funktion in Blockly eingefügt?

                                        Verstehe die Frage nicht. Man sieht es hier. Das ist Blockly mit einem Block "JS-Funktion mit Ergebnis".

                                        Bild_2022-12-21_131220409.png

                                        Diese JS-Funktion benötigt man, da Blockly keinen "getObject(id)"-Block bietet.

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

                                          @paul53 Ok sorry, bei mir hatte sich der Editor nicht geöffnet. geht jetzt.

                                          Danke

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

                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          1.0k
                                          Online

                                          31.7k
                                          Users

                                          79.7k
                                          Topics

                                          1.3m
                                          Posts

                                          3
                                          20
                                          1161
                                          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