Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. English
    3. Scripting / Logic
    4. JSON - Reading a datapoint with a . in the name? - Solved

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    JSON - Reading a datapoint with a . in the name? - Solved

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

      Hi, I am having trouble reading a data point from a JSON message in blockly. The script works, however there is 1 datapoint with a . in it. Is there a trick to get it done? I tried various solutions I found online, however to no avail. See the JSON message below.

      {"Time":"2021-03-28T11:31:08","BMP180":{"Temperature":11.4,"Pressure":1022.7},"SHT3X-0x45":{"Temperature":11.2,"Humidity":45.3,"DewPoint":-0.3},"SDS0X1":{"PM2.5":3.6,"PM10":7.0},"PressureUnit":"hPa","TempUnit":"C"}

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

        @erwinberlin

        obj.SDS0X1['PM2.5']
        

        Blockly:

        Bild_2021-03-28_192744.png

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

          This is my code, however the PM2.5 still does not work in this script. I used the code in blockly and that works fine! Now I can see the differences, but I still would like to understand why the script does not work?

          Probably obvious to experienced Java programmers, however not for a newbie like me. Any help appreciated!

          var AQ;
          on({id: "mqtt.0.tele.tasmota_sensors_7E466A.SENSOR", change: "any"}, async function (obj) {
            var value = obj.state.val;
            var oldValue = obj.oldState.val;
            AQ = (function () { try {return JSON.parse(getState("mqtt.0.tele.tasmota_sensors_7E466A.SENSOR").val);} catch(e) {return {};}})();
            console.log('PM10 & PM2.5');
            console.log(parseFloat(getAttr(AQ, 'SDS0X1.PM10')));
            console.log(parseFloat(getAttr(AQ, 'SDS0X1['PM2.5']')));
            if (parseFloat(getAttr(AQ, 'SDS0X1.PM10')) != 0) {
              setState("javascript.0.Air-quality.10um", parseFloat(getAttr(AQ, 'SDS0X1.PM10')), true);
            }
            if (parseFloat(getAttr (AQ, 'SDS0X1['PM2.5']') != 0) {
              setState("javascript.0.Air-quality.2_5um", parseFloat(getAttr(AQ, 'SDS0X1['PM2.5']')), true);
            }
          });
          
          paul53 2 Replies Last reply Reply Quote 0
          • paul53
            paul53 @erwinberlin last edited by paul53

            @erwinberlin sagte): 'SDS0X1['PM2.5']'

            Try this:

            Bild_2021-03-30_171316.png

            PM10 and PM2.5 values are numbers.

            let x = getAttr(json, 'SDS0X1['PM2.5']'); // designed for Blockly
            // is not
            let x = JSON.parse(json).SDS0X1['PM2.5']; // Javascript
            

            because the 2. parameter of getAttr() must be a string or an array with one string element.

            P.S. Spricht ErwinBerlin kein deutsch?

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

              @erwinberlin
              Javascript-Version:

              on('mqtt.0.tele.tasmota_sensors_7E466A.SENSOR', function (dp) {
                let sensor = JSON.parse(dp.state.val);
                let pm10 = sensor.SDS0X1.PM10;
                let pm2_5 = sensor.SDS0X1['PM2.5'];
                log('PM10: ' + pm10);
                log('PM2.5: ' + pm2_5);
                if (pm10) setState("javascript.0.Air-quality.10um", pm10, true);
                if (pm2_5) setState("javascript.0.Air-quality.2_5um", pm2_5, true);
              });
              
              E 1 Reply Last reply Reply Quote 0
              • E
                erwinberlin @paul53 last edited by

                @paul53 Super, vielen Dank! Das hat mich sehr geholfen.

                Übrigens spreche ich Deutsch, aber schreiben ist jedoch etwas ganz anderes...

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

                Support us

                ioBroker
                Community Adapters
                Donate

                1.0k
                Online

                31.6k
                Users

                79.4k
                Topics

                1.3m
                Posts

                blockly javascript
                2
                6
                1150
                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