Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. English
  3. Scripting / Logic
  4. JSON - Reading a datapoint with a . in the name? - Solved

NEWS

  • Neues YouTube-Video: Visualisierung im Devices-Adapter
    BluefoxB
    Bluefox
    13
    1
    666

  • Neuer ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    2.0k

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    11
    1
    896

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

Scheduled Pinned Locked Moved Scripting / Logic
blocklyjavascript
6 Posts 2 Posters 2.0k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • E Offline
    E Offline
    erwinberlin
    wrote on last edited by erwinberlin
    #1

    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"}

    paul53P 1 Reply Last reply
    0
    • E 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"}

      paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by paul53
      #2

      @erwinberlin

      obj.SDS0X1['PM2.5']
      

      Blockly:

      Bild_2021-03-28_192744.png

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: Asus PN 42 / N100 / 8 GB / 500 GB

      E 1 Reply Last reply
      0
      • paul53P paul53

        @erwinberlin

        obj.SDS0X1['PM2.5']
        

        Blockly:

        Bild_2021-03-28_192744.png

        E Offline
        E Offline
        erwinberlin
        wrote on last edited by erwinberlin
        #3

        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);
          }
        });
        
        paul53P 2 Replies Last reply
        0
        • E 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);
            }
          });
          
          paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by paul53
          #4

          @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?

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: Asus PN 42 / N100 / 8 GB / 500 GB

          1 Reply Last reply
          0
          • E 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);
              }
            });
            
            paul53P Offline
            paul53P Offline
            paul53
            wrote on last edited by paul53
            #5

            @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);
            });
            

            Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
            Produktiv: Asus PN 42 / N100 / 8 GB / 500 GB

            E 1 Reply Last reply
            0
            • paul53P 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 Offline
              E Offline
              erwinberlin
              wrote on last edited by
              #6

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

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

              1 Reply Last reply
              0

              Hello! It looks like you're interested in this conversation, but you don't have an account yet.

              Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

              With your input, this post could be even better 💗

              Register Login
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              Support us

              ioBroker
              Community Adapters
              Donate

              519

              Online

              32.9k

              Users

              83.1k

              Topics

              1.3m

              Posts
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2025
              logo
              • Login

              • Don't have an account? Register

              • Login or register to search.
              • First post
                Last post
              0
              • Home
              • Recent
              • Tags
              • Unread 0
              • Categories
              • Unreplied
              • Popular
              • GitHub
              • Docu
              • Hilfe