Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst] Werte einzeln aus JSON extrahieren für Anfänger

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] Werte einzeln aus JSON extrahieren für Anfänger

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

      
      var json = "mqtt.0.home.boiler.boiler_data"/*BoilerDaten*/;
      var Vorl = "javascript.0.Heizung.Vorlauf"/*Vorlauf*/;
      var Rueckl = "javascript.0.Heizung.Ruecklauf"/*Ruecklauf*/;
      var WWist = "javascript.0.Heizung.WarmwasserIst"/*Warmwasser Ist*/;
      var WWsoll = "javascript.0.Heizung.WarmwasserSoll"/*Warmwasser Soll*/;
      var Druck = "javascript.0.Heizung.Systemdruck"/*Systemdruck*/;
      var WWAn = "javascript.0.Heizung.WarmwasserAn"/*Warmwasser aktiv*/;
      
         var obj = JSON.parse(getState(json).val);
         setState(Vorl, parseFloat(obj.curFlowTemp));
         setState(Rueckl, parseFloat(obj.retTemp));
         setState(WWIst, parseFloat(obj.wWCurTmp));
         setState(WWsoll, parseFloat(obj.wWSelTemp));
         setState(Druck, parseFloat(obj.sysPress));
         setState(WWAn, obj.wWActivated);
      
      

      So werden die Werte nur einmal bei Skriptstart gesetzt, denn es fehlt ein Trigger.

      1 Reply Last reply Reply Quote 0
      • Chaot
        Chaot last edited by

        Ich habe das jetzt mal so versucht:

        on({id: 'mqtt.0.home.boiler.boiler_data', change: "any"}, function (obj) {
        
        var json = "mqtt.0.home.boiler.boiler_data"/*BoilerDaten*/;
        var Vorl = "javascript.0.Heizung.Vorlauf"/*Vorlauf*/;
        var Rueckl = "javascript.0.Heizung.Ruecklauf"/*Ruecklauf*/;
        var WWist = "javascript.0.Heizung.WarmwasserIst"/*Warmwasser Ist*/;
        var WWsoll = "javascript.0.Heizung.WarmwasserSoll"/*Warmwasser Soll*/;
        var Druck = "javascript.0.Heizung.Systemdruck"/*Systemdruck*/;
        var WWAn = "javascript.0.Heizung.WarmwasserAn"/*Warmwasser aktiv*/;
        
        try {obj = JSON.parse(getState('mqtt.0.home.boiler.boiler_data').val);
               } catch (e) {
                       console.error('Cannot parse: ' + getState('mqtt.0.home.boiler.boiler_data').val);
                       return;
                }
        
        Vorl = obj.curFlowTemp;
        Rueckl = obj.retTemp;
        WWIst = obj.wWCurTmp;
        WWsoll = obj.wWSelTemp;
        Druck = obj.sysPress;
        WWAn = obj.wWActivated;
        
           setState(Vorl,curFlowTemp);
           setState(Rueckl,retTemp);
           setState(WWIst,wWCurTmp);
           setState(WWsoll,wWSelTemp);
           setState(Druck,sysPress);
           setState(WWAn,wWActivated);
        
            });
        
        

        Aber es werden weder beim ersten och beim zweiten script die Werte gesetzt.

        Ich habe aber auch keinen Fehler im Log.

        1 Reply Last reply Reply Quote 0
        • Chaot
          Chaot last edited by

          Sorry,

          ich bin betriebsblind.

          Ich danke für dein Script.

          Beim Versuch habe ich jetzt einen Fehler erhalten:

          javascript.0	2018-10-17 23:39:50.942	error	at ContextifyScript.Script.runInContext (vm.js:59:29)
          javascript.0	2018-10-17 23:39:50.942	error	at script.js.Heizung.Versuch5:14:13
          javascript.0	2018-10-17 23:39:50.942	error	ReferenceError: WWIst is not defined
          javascript.0	2018-10-17 23:39:50.942	error	^
          javascript.0	2018-10-17 23:39:50.942	error	setState(WWIst, parseFloat(obj.wWCurTmp));
          javascript.0	2018-10-17 23:39:50.942	error	script.js.Heizung.Versuch5: script.js.Heizung.Versuch5:14
          
          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 last edited by

            @Chaot:

            Beim Versuch habe ich jetzt einen Fehler erhalten:

            javascript.0	2018-10-17 23:39:50.942	error	setState(WWIst, parseFloat(obj.wWCurTmp));
            
            ```` `  
            

            Grund: Groß-/Kleinschreibung:

            var WWist = "javascript.0.Heizung.WarmwasserIst"/*Warmwasser Ist*/;
            
            
            1 Reply Last reply Reply Quote 0
            • Chaot
              Chaot last edited by

              Jaa,

              DAAAAANKE!

              Ich habe das jetzt ohne Fehler am laufen und es scheinen auch die Daten geschreiben zu werden.

              Habe ich den Trigger richtig gesetzt?

              Es soll nur bei einer Änderung aktualisiert werden:

               on({id: 'mqtt.0.home.boiler.boiler_data', change: "any"}, function (obj) {
              
              var json = "mqtt.0.home.boiler.boiler_data"/*BoilerDaten*/;
              var Vorl = "javascript.0.Heizung.Vorlauf"/*Vorlauf*/;
              var Rueckl = "javascript.0.Heizung.Ruecklauf"/*Ruecklauf*/;
              var WWist = "javascript.0.Heizung.WarmwasserIst"/*Warmwasser Ist*/;
              var WWsoll = "javascript.0.Heizung.WarmwasserSoll"/*Warmwasser Soll*/;
              var Druck = "javascript.0.Heizung.Systemdruck"/*Systemdruck*/;
              var WWAn = "javascript.0.Heizung.WarmwasserAn"/*Warmwasser aktiv*/;
              
                 var obj1 = JSON.parse(getState(json).val);
                 setState(Vorl, parseFloat(obj.curFlowTemp));
                 setState(Rueckl, parseFloat(obj.retTemp));
                 setState(WWist, parseFloat(obj.wWCurTmp));
                 setState(WWsoll, parseFloat(obj.wWSelTemp));
                 setState(Druck, parseFloat(obj.sysPress));
                 setState(WWAn, obj.wWActivated);
               });
              
              

              Die Daten kommen sonst im 10 Sekunden Takt.

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

                Die IDs besser außerhalb des Triggers definieren und auf Änderung triggern:

                var json = "mqtt.0.home.boiler.boiler_data"/*BoilerDaten*/;
                var Vorl = "javascript.0.Heizung.Vorlauf"/*Vorlauf*/;
                var Rueckl = "javascript.0.Heizung.Ruecklauf"/*Ruecklauf*/;
                var WWist = "javascript.0.Heizung.WarmwasserIst"/*Warmwasser Ist*/;
                var WWsoll = "javascript.0.Heizung.WarmwasserSoll"/*Warmwasser Soll*/;
                var Druck = "javascript.0.Heizung.Systemdruck"/*Systemdruck*/;
                var WWAn = "javascript.0.Heizung.WarmwasserAn"/*Warmwasser aktiv*/;
                
                on(json, function(dp) {
                   var obj = JSON.parse(dp.state.val);
                   setState(Vorl, parseFloat(obj.curFlowTemp));
                   setState(Rueckl, parseFloat(obj.retTemp));
                   setState(WWist, parseFloat(obj.wWCurTmp));
                   setState(WWsoll, parseFloat(obj.wWSelTemp));
                   setState(Druck, parseFloat(obj.sysPress));
                   setState(WWAn, obj.wWActivated);
                });
                
                
                1 Reply Last reply Reply Quote 0
                • Chaot
                  Chaot last edited by

                  Danke schön.

                  Das funktioniert perfekt und ich bin wirklich glücklich das Forum hier zu haben mit solchen Spitzenleuten.

                  1 Reply Last reply Reply Quote 0
                  • B
                    Beowolf last edited by

                    Ich habe das gleiche Problem hier.

                    Das ist der Datenpunkt

                    mqtt.1.tele.Sonoff.SENSOR
                    

                    Das steht im Datenpunkt

                    {"Time":"2024-08-28T12:49:04","BME280":{"Temperature":26.1,"Humidity":48.1,"DewPoint":14.2,"Pressure":1011.2},"PressureUnit":"hPa","TempUnit":"C"}
                    

                    Das ist mein Skript

                    on({id: 'mqtt.1.tele.Sonoff.SENSOR', change: "any"}, function (obj) {
                    
                    var json = "mqtt.1.tele.Sonoff.SENSOR"/*Werbefenster*/;
                    var Temperature = "javascript.0.Werbekasten.Temperatur"/*Temperatur*/;
                    var Humidity = "javascript.0.Werbekasten.Luftfeuchte"/*Luftfeuchte*/;
                    var DewPoint = "javascript.0.Werbekasten.Taupunkt"/*Taupunkt*/;
                    var Pressure = "javascript.0.Werbekasten.Luftdruck"/*Luftdruck*/;
                     
                    on(json, function(dp) {
                       var obj = JSON.parse(dp.state.val);
                       setState(Temperature, parseFloat(obj.Temperature));
                       setState(Humidity, parseFloat(obj.Humidity));
                       setState(DewPoint, parseFloat(obj.DewPoint));
                       setState(Pressure, parseFloat(obj.Pressure));
                    });
                    

                    Als Fehlermeldung kommt das

                    28.8.2024, 13:54:09.343	[info ]: javascript.0 (23058) Stopping script script.js.common.Werbekasten
                    28.8.2024, 13:54:09.387	[info ]: javascript.0 (23058) Start JavaScript script.js.common.Werbekasten (Javascript/js)
                    28.8.2024, 13:54:09.387	[error]: javascript.0 (23058) script.js.common.Werbekasten compile failed: at script.js.common.Werbekasten:21
                    

                    Die Fehlermeldung sagt mir nicht viel. Datenpunkte werden auch nicht gefüllt.

                    Was mache ich da falsch?

                    Danke

                    haus-automatisierung paul53 2 Replies Last reply Reply Quote 0
                    • haus-automatisierung
                      haus-automatisierung Developer Most Active @Beowolf last edited by haus-automatisierung

                      @beowolf sagte in [gelöst] Werte einzeln aus JSON extrahieren für Anfänger:

                      Die Fehlermeldung sagt mir nicht viel.

                      Die sagt in diesem Fall aus, dass Du offene Klammern hast welche nicht geschlossen werden (die erste Zeile ist Quatsch).

                      @beowolf sagte in [gelöst] Werte einzeln aus JSON extrahieren für Anfänger:

                      Was mache ich da falsch?

                      Du hast eine Eben im Objekt vergessen. So formatiert sieht man es besser:

                      {
                          "Time": "2024-08-28T12:49:04",
                          "BME280": {
                              "Temperature": 26.1,
                              "Humidity": 48.1,
                              "DewPoint": 14.2,
                              "Pressure": 1011.2
                          },
                          "PressureUnit": "hPa",
                          "TempUnit": "C"
                      }
                      

                      So. parseFloat brauchst Du nicht (ist ja kein String und alles schon im richtigen Format).

                      const jsonObjId = 'mqtt.1.tele.Sonoff.SENSOR';
                      
                      const temperatureObjId = 'javascript.0.Werbekasten.Temperatur';
                      const humidityObjId = 'javascript.0.Werbekasten.Luftfeuchte';
                      const dewPointObjId = 'javascript.0.Werbekasten.Taupunkt';
                      const pressureObjId = 'javascript.0.Werbekasten.Luftdruck';
                      
                      on({ id: jsonObjId, change: 'ne' }, (dp) => {
                         const obj = JSON.parse(dp.state.val);
                      
                         setState(temperatureObjId, obj.BME280.Temperature);
                         setState(humidityObjId, obj.BME280.Humidity);
                         setState(dewPointObjId, obj.BME280.DewPoint);
                         setState(Pressure, obj.BME280.Pressure);
                      });
                      
                      1 Reply Last reply Reply Quote 0
                      • paul53
                        paul53 @Beowolf last edited by paul53

                        @beowolf sagte: Das ist mein Skript

                        Zeile 1 ist zu viel. "BME280" fehlt. Wandlung nach Zahl ist nicht nötig.

                        const idJson = "mqtt.1.tele.Sonoff.SENSOR"/*Werbefenster*/;
                        const idTemperature = "javascript.0.Werbekasten.Temperatur"/*Temperatur*/;
                        const idHumidity = "javascript.0.Werbekasten.Luftfeuchte"/*Luftfeuchte*/;
                        const idDewPoint = "javascript.0.Werbekasten.Taupunkt"/*Taupunkt*/;
                        const idPressure = "javascript.0.Werbekasten.Luftdruck"/*Luftdruck*/;
                         
                        on(idJson, function(dp) {
                           const obj = JSON.parse(dp.state.val).BME280;
                           setState(idTemperature, obj.Temperature, true);
                           setState(idHumidity, obj.Humidity, true);
                           setState(idDewPoint, obj.DewPoint, true);
                           setState(idPressure, obj.Pressure, true);
                        });
                        

                        Eigene Datenpunkte erstelle besser unter "0_userdata.0" (gab es 2018 noch nicht).

                        B 1 Reply Last reply Reply Quote 1
                        • B
                          Beowolf @paul53 last edited by

                          @paul53

                          Vielen Dank jetzt sind die Werte da.

                          Das mit "0_userdata.0" mache ich noch. Ich wollte nicht so viel verändern. 😊

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          527
                          Online

                          31.7k
                          Users

                          79.7k
                          Topics

                          1.3m
                          Posts

                          4
                          12
                          2080
                          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