Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Objektname auslesen und verwenden

    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

    Objektname auslesen und verwenden

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      paddy2 last edited by

      Hallo zusammen

      Ich hoffe jemand hat eine gute Variante um folgendes umzusetzen:

      Ich möchte mittels Blockly ein Objektname (übergeordneter Name) auslesen und anschliessend den Wert in einem Datenpunkt setzen.

      Hat jemand eine gutes Blockly um lediglich den Namen als Wert auszulesen?

      Freue mich auf eure Lösungen und besten Dank.

      Grüsse
      Paddy

      d4e43354-bc08-4b52-9bc1-6d62119604b8-image.png

      mickym paul53 3 Replies Last reply Reply Quote 0
      • mickym
        mickym Most Active @paddy2 last edited by mickym

        @paddy2

        61abb901-cb72-472f-a5f8-e3da1a68206b-image.png

        <xml xmlns="https://developers.google.com/blockly/xml">
         <variables>
           <variable id="pBM:8|laUGVyq6c-GrwF">Name</variable>
           <variable id="9@uh!fqKlne*byXEY!sG">id</variable>
         </variables>
         <block type="procedures_defcustomreturn" id="8vJeR!X(G$*Th=G=z]$/" x="88" y="63">
           <mutation statements="false">
             <arg name="Name" varid="pBM:8|laUGVyq6c-GrwF"></arg>
           </mutation>
           <field name="NAME">id_ermitteln</field>
           <field name="SCRIPT">bGV0IG5hbWUgPSBOYW1lOw0KcmV0dXJuIGdldElkQnlOYW1lKG5hbWUpOw==</field>
           <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
         </block>
         <block type="variables_set" id="24)W}h7ok`3(i{ceJ~w?" x="87" y="142">
           <field name="VAR" id="9@uh!fqKlne*byXEY!sG">id</field>
           <value name="VALUE">
             <block type="procedures_callcustomreturn" id="J7j3Zw}O)k)*vaoOD.}#">
               <mutation name="id_ermitteln">
                 <arg name="Name"></arg>
               </mutation>
               <value name="ARG0">
                 <block type="text" id="v**3R5VM^3@G!Q7T]|~5">
                   <field name="TEXT">sensor2</field>
                 </block>
               </value>
             </block>
           </value>
           <next>
             <block type="controls_if" id="|s[}%u[~5Szx=Fqb,eF:">
               <mutation else="1"></mutation>
               <value name="IF0">
                 <block type="logic_compare" id="}6X5-xz$btn9(jVnCOcl">
                   <field name="OP">EQ</field>
                   <value name="A">
                     <block type="convert_type" id="|qG#[-i}|EG}X,+?^04S">
                       <value name="ITEM">
                         <block type="variables_get" id="T!{D;o72N/*E|XBD1~ZH">
                           <field name="VAR" id="9@uh!fqKlne*byXEY!sG">id</field>
                         </block>
                       </value>
                     </block>
                   </value>
                   <value name="B">
                     <block type="text" id="i[(qLi+;^wBlzBQwz%AX">
                       <field name="TEXT">string</field>
                     </block>
                   </value>
                 </block>
               </value>
               <statement name="DO0">
                 <block type="debug" id="2dlP5u,(OxXxN#-PS;R4">
                   <field name="Severity">log</field>
                   <value name="TEXT">
                     <shadow type="text" id="*{$%Ub$X}]N.O[,R]kj!">
                       <field name="TEXT">test</field>
                     </shadow>
                     <block type="variables_get" id="(sIAf1srX4YX?nSFV{5]">
                       <field name="VAR" id="9@uh!fqKlne*byXEY!sG">id</field>
                     </block>
                   </value>
                   <next>
                     <block type="debug" id="[3:QVi?yvekLE0Sv*Va?">
                       <field name="Severity">log</field>
                       <value name="TEXT">
                         <shadow type="text" id="iw6s7=lPn~XDT3|}m3]y">
                           <field name="TEXT">test</field>
                         </shadow>
                         <block type="lists_getIndex" id="FNOJeG:SBV8s|.ej}Q8l">
                           <mutation statement="false" at="true"></mutation>
                           <field name="MODE">GET</field>
                           <field name="WHERE">FROM_END</field>
                           <value name="VALUE">
                             <block type="lists_split" id=",A;$H;q#mO8fPWfYj]|s">
                               <mutation mode="SPLIT"></mutation>
                               <field name="MODE">SPLIT</field>
                               <value name="INPUT">
                                 <block type="variables_get" id="Blr!s_84@6Bk:[W({JIs">
                                   <field name="VAR" id="9@uh!fqKlne*byXEY!sG">id</field>
                                 </block>
                               </value>
                               <value name="DELIM">
                                 <shadow type="text" id="EADE?0$={#eQz1ZF^A{(">
                                   <field name="TEXT">.</field>
                                 </shadow>
                               </value>
                             </block>
                           </value>
                           <value name="AT">
                             <block type="math_number" id="~S(^jc)YbP0UzX.$2)Z4">
                               <field name="NUM">2</field>
                             </block>
                           </value>
                         </block>
                       </value>
                     </block>
                   </next>
                 </block>
               </statement>
               <statement name="ELSE">
                 <block type="debug" id="T!)U.dPfnBv=.EIUoivE">
                   <field name="Severity">log</field>
                   <value name="TEXT">
                     <shadow type="text" id="^}qOVYb0$$WpynK4elT]">
                       <field name="TEXT">Name nicht eindeutig oder nicht vorhanden!</field>
                     </shadow>
                   </value>
                 </block>
               </statement>
             </block>
           </next>
         </block>
        </xml>
        

        Ohne JS kommst Du bei den Puzzle Dingern nicht aus. Wenn es nicht eindeutig ist, gibts ein Array mit allen Objekt-IDs zurück, deswegen die Typ-Prüfung.

        Wenn Du also statt sensor2 - den Namen eingibst, sollte es wenn es eindeutig ist, funktionieren. Den Wert statt in das Log in einen Datenpunkt zu schreiben, sollte ja kein Problem sein.

        T 1 Reply Last reply Reply Quote 0
        • T
          TT-Tom @mickym last edited by TT-Tom

          @mickym es kann auch mit dem selector funktionieren, also ohne JS

          Bildschirmfoto 2023-04-16 um 18.06.08.png

          ['0_userdata.0.Abfallkalender.1.color','0_userdata.0.Abfallkalender.2.color','0_userdata.0.Abfallkalender.3.color','0_userdata.0.Abfallkalender.4.color']
          

          @paddy2 möchtest du alle Fenster Sensoren auslesen, sehe ich das richtig?

          mickym 1 Reply Last reply Reply Quote 0
          • mickym
            mickym Most Active @TT-Tom last edited by mickym

            @tt-tom Na OK - ich habe es anders verstanden. Ich dachte er/sie will den Namen "Fensterkontakt Büro Paddy OG" eingeben und darüber die ID und damit die Bezeichnung des übergeordneten Ordner herausfinden und diese in einem eigenen Datenpunkt abspeichern.

            T 1 Reply Last reply Reply Quote 1
            • T
              TT-Tom @mickym last edited by

              @mickym okay, wenn ich das jetzt so lese, könntest du recht haben. Mal sehen was er genau will.

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

                @paddy2 sagte: den Namen als Wert auszulesen?

                JS-Funktion mit Ergebnis: parentName(id)

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

                  @paul53 Das hilft auch nicht, wenn man die id über den Namen rausbekommen will, deswegen habe ich ja die JS-Funktion mit Ergebnis:

                  getIdByName(name) genommen.

                  Das kann man natürlich noch in den parentName einbinden - aber ich dachte mit der Liste ist sie flexibler durch die Hierarchien zu wandern.

                  David G. 1 Reply Last reply Reply Quote 0
                  • David G.
                    David G. @mickym last edited by David G.

                    @mickym

                    Ich glaube, er möchte das gelb hervorgehobe auslesen wenn er einen DP eine Ebene tiefer auswählt.

                    Das wäre ja Pauls Vorschlag. Den ich ähnlich auch schon nutze.

                    Wie werden es nachher erfahren ^^.

                    mickym 1 Reply Last reply Reply Quote 0
                    • mickym
                      mickym Most Active @David G. last edited by mickym

                      @david-g Gut ich bin davon ausgegangen, dass

                      Fentsterkontakt Büro Paddy OG ==> 000DA49A37143

                      liefern soll und dass 000DA49A37143 in einen eigenen Datenpunkt geschrieben werden soll. Das Problem wird sowieso sein, dass der Ordner 000DA49A37143.1 gleich wie der übergeordnete Ordner heißt, dann funktioniert mein Script auch nicht. Der Ordner müsste eigentlich Fentsterkontakt Büro Paddy OG:1 heißen, sowie bei 2 auch. 😉

                      Die Funktion getIdByName(name) gibt dann ein Array zurück und auch das muss man ja unterbinden, deshalb die Typprüfung, weil sonst kann man das übergeordnete Objekt ja nicht eindeutig identifizieren, weil Namen ja nicht eindeutig sein müssen.

                      1 Reply Last reply Reply Quote 0
                      • P
                        paddy2 last edited by

                        Euch allen vielen Dank für eure Hilfe!

                        Nach zweiter Durchsicht war meine Beschreibung tatsächlich ein wenig verwirrend.

                        Ich suche nach einer geeigneten Möglichkeit, am liebsten Mittels Blockly, den Wert "Namen" auszulesen.

                        Anschliessend möchte ich diesen Wert in einen DP setzen.

                        997ffa00-5a9a-4e79-b3a7-7a6360edec05-image.png

                        Falls eine obengenannte Variante dies kann, werde ich mich daran versuchen...

                        Am Ende der Übung soll die Sprachsteuerung die Öffnungen präzise bezeichnen können ohne das ich alle IFTTT einzeln bezeichnen muss...

                        Danke euch!

                        T 1 Reply Last reply Reply Quote 0
                        • T
                          TT-Tom @paddy2 last edited by TT-Tom

                          @paddy2 dann kannst du das verwenden
                          Bildschirmfoto 2023-04-18 um 09.17.46.png

                          name kommt vom Triggerbaustein. Wenn du mehrere States über wachen willst, dann nimm statt Objekt ID den Selektor. habe ich weiter oben schon mal gezeigt.

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

                            @paddy2 sagte: Objektname (übergeordneter Name) auslesen und anschliessend den Wert in einem Datenpunkt setzen.

                            Wenn es der gelb markierte Gerätename sein soll:

                            Blockly_temp.JPG

                            1 Reply Last reply Reply Quote 2
                            • P
                              paddy2 last edited by

                              @paul53 @TT-Tom
                              Weltklasse! Das nenn ich mal effiziente Hilfe 🙂

                              a517108c-434d-4888-9aa7-30da66f967d0-image.png

                              Hat einwandfrei geklappt!

                              Euch allen herzlichen Dank!

                              D 1 Reply Last reply Reply Quote 0
                              • D
                                dtp @paddy2 last edited by dtp

                                Ich würde mich hier gerne mit einer Frage einklinken. Ich finde den Befehle "getIdByName" sehr interessant, aber er liefert halt - wie oben schon erwähnt - dann ein Array, wenn der Name mehrmals existiert, was das z.B. bei der Nutzung des alexa2-Adapters vorkommen kann. So liefert mir z.B. die Abfrage

                                const triggerId = getIdByName('Büro Rollo links');
                                

                                das Resultat

                                ['tradfri.0.B-65542','alexa2.0.Smart-Home-Devices.280d2f90-4dc8-4474-9e5d-ca221f8fdfdb']
                                

                                De facto möchte ich aber nur den ersten Datenpunkt nutzen. Den würde mir ja dann

                                triggerId[0]
                                

                                liefern, aber wie kann ich sicherstellen, dass ich immer auf den Datenpunkt "tradfri..." zurückgreife? Die Reihenfolge könnte sich ja auch mal ändern, oder?

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

                                  @dtp

                                  if(triggerId[0].startsWith('tradfri')) id = triggerId[0];
                                  else id = triggerId[1]
                                  
                                  1 Reply Last reply Reply Quote 0
                                  • First post
                                    Last post

                                  Support us

                                  ioBroker
                                  Community Adapters
                                  Donate

                                  397
                                  Online

                                  31.9k
                                  Users

                                  80.3k
                                  Topics

                                  1.3m
                                  Posts

                                  6
                                  15
                                  1093
                                  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