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.
    • 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

                        1.1k
                        Online

                        31.7k
                        Users

                        79.7k
                        Topics

                        1.3m
                        Posts

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