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

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

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.4k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.5k

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

Scheduled Pinned Locked Moved Scripting / Logic
blocklyjavascript
6 Posts 2 Posters 1.6k 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: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      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: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          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: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

            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
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              Support us

              ioBroker
              Community Adapters
              Donate

              513

              Online

              32.4k

              Users

              81.4k

              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