Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. JSON als Datenpunkt/mqtt

    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

    JSON als Datenpunkt/mqtt

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

      Hallo Leute,

      habe mir den "Air Quality Monitor" SPS208 zugelegt.

      Dieser sendet mir per mqtt folgende Json:

      {"ts":"2019-02-18T22:21:00Z","rco2 (ppm)":857.1,"rtemp":-45,"rhumid":0,"km102.rtvoc (ppb)":125.3,"km102.rhumid":43.82,"km102.rtemp":21.63,"km100.rgt25":0,"km100.rpm25":1.13,"km100.rpm25c":1.349,"km100.rgt03":507.9,"km100.rpm10":1.174,"km100.rpm10c":1.4,"rbtrytemp":30,"rbtryvoltage_now":3544000,"rbtryvoltage_max":4100000,"rbtrycurrent_now":-441000,"rbrdtemp":30}
      

      mit folgendem java script (aus einem anderen Beitrag kopiert 😉 )kann ich auch gewisse Datenpunkte auslesen:

      //MQTT Json to Objekt
       
      // var setzen
       
      // Create States
      createState('javascript.0.jsonconverter.sonoff.Watt', 0,{type: 'nummer',name: 'Aktuelle Watt Zahl', read: true,write: true,role: 'value.watt'})
      createState('javascript.0.jsonconverter.sonoff.Volt', 0,{type: 'nummer',name: 'Aktuelle Volt Zahl', read: true,write: true,role: 'value.voltage'})
      createState('javascript.0.jsonconverter.sonoff.Ampere', 0,{type: 'nummer',name: 'Aktuelle Ampere Zahl', read: true,write: true,role: 'value.ampere'})
       
      // Script beginning
      on({id: "sonoff.0.Büro.POWER"/*Büro POWER*/, change: "any"}, function (obj) {
       
         //variabele erstellen fuer meine 3 beispiel objecte
              var volt;
              var watt;  
              var ampere; 
       
         //der try ist wichtig das der adapter nicht abschmiert bei einem fehler, hiermit pasen wird die json in ein object
         try {obj = JSON.parse(getState("mqtt.0.device.pro.history.42a2b53b-2db4-4c44-81d4-feb55209f1f8"/*device/pro/history/42a2b53b-2db4-4c44-81d4-feb55209f1f8*/).val);
         } catch (e) {
                 console.error('Cannot parse: ' + getState("mqtt.0.device.pro.history.42a2b53b-2db4-4c44-81d4-feb55209f1f8"/*device/pro/history/42a2b53b-2db4-4c44-81d4-feb55209f1f8*/).val);
                 return;
          }
          //hier schreien wir die daten des json strings in die variabelen, links die variable und rechts der name im json. obj bedeuten halt lese den wert nach :
          // bei dir waere das z.b. obj.time / obj.yesterday usw
         volt = obj.ts;
         watt = obj.rhumid;
         ampere = obj.rtemp;
       
      //
       
      setState('javascript.0.jsonconverter.sonoff.Watt', (watt));
      setState('javascript.0.jsonconverter.sonoff.Volt', (volt));
      setState('javascript.0.jsonconverter.sonoff.Ampere', (ampere));
       
         //jetzt lass uns mal im log zeigen was wir bekommen haben
         log(volt);
         log(watt);
         log(ampere);
      });
      

      Nur leider kann ich keine Datenpunkte mit einem Leerzeichen (zB volt =obj.rco2 (ppm);) oder mit einem Punkt (zB. volt= obj.km102.rhumid;) auslesen, es kommt immer ein error.

      Wie kann ich diese Datenpunkte auslesen?

      Das Script werde ich dann anpassen, wenn ich alle Daten auslesen kann.

      Kann leider kein javascript. Habe bisher immer alles mit blockly gemacht, nur in diesem Fall komme ich leider damit auch nicht weiter.

      Herzlichen Dank für Eure Hilfe!!!

      lg
      Chris

      1 Reply Last reply Reply Quote 0
      • Lenny.CB
        Lenny.CB Most Active last edited by

        so vielleicht:

        var json = '{"ts":"2019-02-18T22:21:00Z","rco2 (ppm)":857.1,"rtemp":-45,"rhumid":0,"km102.rtvoc (ppb)":125.3,"km102.rhumid":43.82,"km102.rtemp":21.63,"km100.rgt25":0,"km100.rpm25":1.13,"km100.rpm25c":1.349,"km100.rgt03":507.9,"km100.rpm10":1.174,"km100.rpm10c":1.4,"rbtrytemp":30,"rbtryvoltage_now":3544000,"rbtryvoltage_max":4100000,"rbtrycurrent_now":-441000,"rbrdtemp":30}';
        
        var obj = JSON.parse(json);
        
        for (i=0; i<Object.keys(obj).length; i++){
            log(Object.keys(obj)[i] + ': ' + obj[Object.keys(obj)[i]]);    
        }
        
        1 Reply Last reply Reply Quote 0
        • BuZZy
          BuZZy last edited by BuZZy

          Verwende einfach die sogenannte bracket notation um auf die Werte zuzugreifen..
          Also so:

          co2 = obj['rco2 (ppm)'];
          

          Gruß

          1 Reply Last reply Reply Quote 0
          • Z
            zecki79 last edited by

            Hi,

            herzlichen Dank für die Lösungsvorschläge!
            Werde ich heute nach der Arbeit ausprobieren!

            Lg
            Chris

            1 Reply Last reply Reply Quote 0
            • Z
              zecki79 last edited by

              So, der Hinweis von BuZZy konnte mein Problem lösen! Nochmals herzlichen Dank!

              lg

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

              Support us

              ioBroker
              Community Adapters
              Donate

              893
              Online

              31.8k
              Users

              80.0k
              Topics

              1.3m
              Posts

              javascript
              3
              5
              1153
              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