Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. Attribut-Abfrage mit Punkten dazwischen (gelöst)

    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

    Attribut-Abfrage mit Punkten dazwischen (gelöst)

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

      Hallo miteinander,
      ich wage mich gerade an erste Blockly-"Scripte" heran und versuche einen Testdatensatz eines Microcontroller-APIs zu lesen, der wiederum ein Smartmeter auslesen soll. Ausgelesen habe ich mit "Attribut vom Objekt"

      Unbenannt.png

      Nun habe ich gelesen, dass Punkte (".") im Attribut für verschachtelte JSONs verwendet werden, also zB für

      "Body" : {
        "Data" : {
          "XYZ" : { "Value" : 1234}}}
      

      gebe ich als Attribut "Body.Data.XYZ.Value" ein und bekomme 1234.

      Jetzt habe ich in diesem Fall aber einen Datenpunkt der "1.8.0" heißt, ohne Verschachtelung. Gebe ich das in die Attribut-Abfrage ein, kommt "NULL".
      z.B. "uptime" und der "timestamp" wird korrekt ausgegeben

      Hier der Testdatensatz, der auszulesen wäre:

      {
      "timestamp":"2022-02-02T09:47:15",
      "1.8.0":"686655",
      "2.8.0":"67",
      "1.7.0":"143",
      "2.7.0":"0",
      "32.7.0":"2370",
      "52.7.0":"2375",
      "72.7.0":"2366",
      "31.7.0":"9",
      "51.7.0":"53",
      "71.7.0":"63",
      "13.7.0":"536",
      "uptime":"0007:00:03:04"
      }
      
      liv-in-sky 1 Reply Last reply Reply Quote 0
      • liv-in-sky
        liv-in-sky @brokenchrisi last edited by

        @brokenchrisi sagte in Attribut-Abfrage mit Punkten dazwischen:

        {

        da musst du dir eine function schreiben

        der inhalt wäre:

        log(myJson["1.8.0"])
        

        Image 8.png
        zum testen ein script

        <xml xmlns="https://developers.google.com/blockly/xml">
         <variables>
           <variable id="_dFwL!*|l!rvA~f9=!p.">myJson</variable>
           <variable id="6TxI8{XWfi(5|N@s:Hhq">theJson</variable>
         </variables>
         <block type="procedures_defcustomreturn" id="Q{~C_0Sd~b#S-eGF2tcL" x="213" y="288">
           <mutation statements="false">
             <arg name="myJson" varid="_dFwL!*|l!rvA~f9=!p."></arg>
           </mutation>
           <field name="NAME">readJsonPart</field>
           <field name="SCRIPT">cmV0dXJuIG15SnNvblsiMS44LjAiXTs=</field>
           <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
         </block>
         <block type="variables_set" id="{9GyhUN$4[,p*!HKTYM5" x="163" y="387">
           <field name="VAR" id="6TxI8{XWfi(5|N@s:Hhq">theJson</field>
           <value name="VALUE">
             <block type="convert_json2object" id="snxCT~_5j!Rx*Us9g:hR">
               <value name="VALUE">
                 <block type="text" id="QStj,vv092Z@9@2S|B9|">
                   <field name="TEXT">{  "timestamp":"2022-02-02T09:47:15",  "1.8.0":"686655",  "2.8.0":"67",  "1.7.0":"143",  "2.7.0":"0",  "32.7.0":"2370",  "52.7.0":"2375",  "72.7.0":"2366",  "31.7.0":"9",  "51.7.0":"53",  "71.7.0":"63",  "13.7.0":"536",  "uptime":"0007:00:03:04"  }</field>
                 </block>
               </value>
             </block>
           </value>
           <next>
             <block type="debug" id="cKm.s%,qG[FK-ZqjcV{$">
               <field name="Severity">log</field>
               <value name="TEXT">
                 <shadow type="text" id="s[Hd0KseBjz]opVe6V]-">
                   <field name="TEXT">test</field>
                 </shadow>
                 <block type="procedures_callcustomreturn" id="1S.4^dFCjEw[,0-%0wL6">
                   <mutation name="readJsonPart">
                     <arg name="myJson"></arg>
                   </mutation>
                   <value name="ARG0">
                     <block type="variables_get" id="x)@fBP.4IL:iuD5~~KsX">
                       <field name="VAR" id="6TxI8{XWfi(5|N@s:Hhq">theJson</field>
                     </block>
                   </value>
                 </block>
               </value>
             </block>
           </next>
         </block>
        </xml>
        

        B 1 Reply Last reply Reply Quote 0
        • B
          brokenchrisi @liv-in-sky last edited by

          @liv-in-sky

          Vielen Dank! Damit klappt es wunderbar!!!

          Für das Verständnis: Kannst du für mich als JS-Laien (deshalb verwende ich blockly) kurz erklären was diese Funktion macht?

          liv-in-sky 2 Replies Last reply Reply Quote 0
          • liv-in-sky
            liv-in-sky @brokenchrisi last edited by

            @brokenchrisi

            normalerweise ist das mit dem punkt zum unterscheiden schon richtig - wenn aber z.b. punkte oder bindestiche im attribut sind, kann das javasccript nicht - der punkt ist reserviert und der bindestrich bedeutet minus

            die funktion übesetzt das durch die geschweifte klammer - damit man das trotzdem lesen kann.

            mal ein beispiel

            
            
            "Body" : {
            
              "1.8.0" : {
            
                "XYZ" : { "value" : 1234}}}
            
            

            dies muss so abgefragt werden

            Body["1.8.0"].Data.XYZ.value
            

            immer an der stelle, wo sonderzeichen sind muss dann anstatt eines punktes - ein eckige klammer bei der abfrage

            die function macht folgendes

            du übergibst ihr das thejson als parameter, in der function wird dann definiert, was sie mit dem parameter machen soll und mit return zurückgegeben

            B 1 Reply Last reply Reply Quote 0
            • B
              brokenchrisi @liv-in-sky last edited by

              @liv-in-sky

              👌
              Danke dir!

              1 Reply Last reply Reply Quote 0
              • liv-in-sky
                liv-in-sky @brokenchrisi last edited by

                @brokenchrisi

                das funtioniert mit blockly nicht - daher die js-function

                Image 1.png

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

                Support us

                ioBroker
                Community Adapters
                Donate

                915
                Online

                31.9k
                Users

                80.1k
                Topics

                1.3m
                Posts

                2
                6
                351
                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