Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. MQTT -> {Value: XX} im Wert

    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

    MQTT -> {Value: XX} im Wert

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

      @seeandfeel

      function werteAuslesen(jsonStr) {
          var obj = JSON.parse(jsonStr).Heizung;
          var test = obj.Kesseltemperatur_0x0.value;
          log('Kesseltemperatur: ' + test);
      }
      
      S 1 Reply Last reply Reply Quote 0
      • S
        Seeandfeel @paul53 last edited by

        @paul53
        Vielen Dank für die schnelle Hilfe!

        Funktioniert aber leider noch nicht, ich bekomme vom mqtt Adapter und direkt gleich darauf folgende Fehler:

        javascript.0	2021-02-15 19:08:03.080	error	(2300) at processImmediate (internal/timers.js:439:21)
        javascript.0	2021-02-15 19:08:03.080	error	(2300) at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:5384:37)
        javascript.0	2021-02-15 19:08:03.079	error	(2300) at Object.stateChange (/opt/iobroker/node_modules/iobroker.javascript/main.js:472:25)
        javascript.0	2021-02-15 19:08:03.079	error	(2300) at Object.callback (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1055:38)
        javascript.0	2021-02-15 19:08:03.079	error	(2300) at Object.<anonymous> (script.js.Parse.Parse_P4:11:5)
        javascript.0	2021-02-15 19:08:03.079	error	(2300) at werteAuslesen (script.js.Parse.Parse_P4:5:20)
        javascript.0	2021-02-15 19:08:03.078	error	(2300) at JSON.parse (<anonymous>:null:null)
        javascript.0	2021-02-15 19:08:03.077	error	(2300) Error in callback: SyntaxError: Unexpected token in JSON at position 1366
        mqtt.0	2021-02-15 19:08:03.070	error	(29487) Client [] Cannot parse {"Heizung": {"Kesseltemperatur_0x0": {"value": 65.5}, "Status": {"value": "Betriebsbereit"}, "Abgastemperatur_0x1": {"value": 64.0}, "Betriebsmodus": {"value": "Automati
        

        Ich verstehe "Unexpected token in JSON at position 1366" nicht. Die Klammern passen doch?

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

          @seeandfeel sagte: Die Klammern passen doch?

          Ja, wenn sie so kommen, wie im ersten Beitrag gezeigt. Prüfe es per log(obj.state.val).

          S 1 Reply Last reply Reply Quote 0
          • S
            Seeandfeel @paul53 last edited by Seeandfeel

            @paul53

            Die Daten hab ich 3x verglichen, sollten eigentlich gleich sein.

            Falls das so stimmt:

            var idJson = "mqtt.0.p4d2mqtt.sensor.P4.state";  // Datenpunkt-ID mit JSON-String
            var test = "javascript.0.testp4";
            
            function werteAuslesen(jsonStr) {
                var obj = JSON.parse(jsonStr).Heizung;
                var test = obj.Kesseltemperatur_0x0.value;
                log(obj.state.val);
            }
            
            on({id:idJson,change:'ne'}, function (obj) {
                werteAuslesen(obj.state.val);
            });
            

            Ergibt jetzt:
            (2300) Error in callback: SyntaxError: Unexpected token in JSON at position 1368
            -> nicht 67 sondern die Klammer bei 68. Ich verstehs nicht. 😞

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

              @seeandfeel sagte: Falls das so stimmt:

              Nein, so:

              var idJson = "mqtt.0.p4d2mqtt.sensor.P4.state";  // Datenpunkt-ID mit JSON-String
              var test = "javascript.0.testp4";
               
              function werteAuslesen(jsonStr) {
                  var obj = JSON.parse(jsonStr).Heizung;
                  var test = obj.Kesseltemperatur_0x0.value;
              }
               
              on({id:idJson,change:'ne'}, function (obj) {
                  log(obj.state.val);
                  werteAuslesen(obj.state.val);
              });
              

              So liefert das Log den kompletten JSON-String.

              @seeandfeel sagte in MQTT -> {Value: XX} im Wert:

              Unexpected token in JSON at position 1368

              Das ist das Ende des JSON. Kann da noch ein nicht sichtbares Sonderzeichen / Leerzeichen sein? Um das zu erkennen, füge im Log am Ende noch ein sichtbares Zeichen an:

                  log(obj.state.val + 'x');
              

              Versuche mal

                  werteAuslesen(obj.state.val.trim());
              
              S 1 Reply Last reply Reply Quote 0
              • S
                Seeandfeel @paul53 last edited by

                @paul53 sagte in MQTT -> {Value: XX} im Wert:

                werteAuslesen(obj.state.val.trim());

                Das mit dem "x" hat etwas weitergeholfen.. - im Debug hab ich ein Leerzeichen gesehen.

                Wenn ich mir dann das MQTT Adapter Debug ansehe, findet sich folgendes:

                Client [] Cannot parse {"Heizung": {"Kesseltemperatur_0x0": {"value": 71.0}, "Status": {"value": "Heizen"}, "Abgastemperatur_0x1": {"value": 187.0}, "Betriebsmodus": {"value": "Automatik"}, "Boardtemperatur_0x2": {"value": 38.0}, "Uhrzeit": {"value": "Dienstag, 16. Feb. 2021 11:06:33"}, "Restsauerstoffgehalt_0x3": {"value": 8.4}, "Aussentemperatur_0x4": {"value": 2.0}, "Saugzugdrehzahl_0x7": {"value": 1929.0}, "Fuehler1_0x8": {"value": 90.5}, "LuftgeschwindigkeitinderAnsaugoeffnung_0xc": {"value": 1.19}, "Kesselstellgroesse_0x12": {"value": 98.0}, "Vorlauf-Isttemperatur_0x15": {"value": 51.0}, "Vorlauf-Solltemperatur_0x16": {"value": 50.0}, "Ansauglufttemperatur_0x60": {"value": 33.0}, "StromaufnahmederAustragschnecke_0x61": {"value": 0.01}, "FuellstandimPelletsbehaelter_0x71": {"value": 82.64}, "Einschub_0x74": {"value": 59.0}, "Sauerstoffregler_0x75": {"value": 61.0}, "Puffertemperaturoben_0x76": {"value": 64.5}, "PuffertemperaturMitte_0x77": {"value": 60.0}, "Puffertemperaturunten_0x78": {"value": 51.5}, "PufferpumpenAnsteuerung_0x8c": {"value": 74.0}, "Stromaufnahme24VDCPelletsmodul_0xa3": {"value": 0.28}, "BreitbandsondeHeizstrom_0xf3": {"value": 1.085}, "BreitbandsondeHeizungsSpannung_0xf4": {"value": 9.047}, "BreitbandsondeInnenwiderstand_0xf7": {"value": 298.0}, "Resetierbarerkg-Zaehler_0x111": {"value": 50.0}, "Resetierbarert-Zaehler_0x112": {"value": 4.0}}}�
                

                2 Einträge später macht Iobroker daraus {"value": 4.0}}}� -> {"value": 4.0}}}\u0000" .

                Ich hab das mal an den Entwickler weitergegeben, mal sehen ob er was findet.
                Gibt es dazu evtl. einen Workaround?

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

                  @seeandfeel sagte: Gibt es dazu evtl. einen Workaround?

                  Hast Du es mal mit .trim() versucht?

                  werteAuslesen(obj.state.val.trim());
                  
                  S paul53 2 Replies Last reply Reply Quote 0
                  • S
                    Seeandfeel @paul53 last edited by

                    @paul53

                    Hatte ich auch probiert:

                    on({id:idJson,change:'ne'}, function (obj) {
                        log(obj.state.val);
                        werteAuslesen(obj.state.val.trim());
                    });
                    

                    Ergibt:

                    javascript.0	2021-02-16 11:52:38.276	error	(2300) at Object.<anonymous> (script.js.Parse.Parse_P4:11:5)
                    javascript.0	2021-02-16 11:52:38.276	error	(2300) at werteAuslesen (script.js.Parse.Parse_P4:5:20)
                    javascript.0	2021-02-16 11:52:38.275	error	(2300) at JSON.parse (<anonymous>:null:null)
                    javascript.0	2021-02-16 11:52:38.274	error	(2300) Error in callback: SyntaxError: Unexpected token in JSON at position 1366
                    

                    Ich hab jetzt gerade mal probiert (wohin? 🙂 ) sowas einzubauen:

                    json.replaceAll("\\u0000", "")
                    

                    oder gibt wohl auch ein:

                    str.replace
                    

                    Aber ich habe ehrlich gesagt wenig Ahnung von JAVA 😞 .

                    Gargano 1 Reply Last reply Reply Quote 0
                    • Gargano
                      Gargano @Seeandfeel last edited by Gargano

                      @seeandfeel

                      var x = obj.state.val;
                      x=x.replace('�','');
                      
                      S 1 Reply Last reply Reply Quote 0
                      • S
                        Seeandfeel @Gargano last edited by

                        @gargano

                        Auch dir gleich mal Danke @Gargano :

                        Um nichts falsch zu machen, hab das ganze jetzt so:

                        var idJson = "mqtt.0.p4d2mqtt.sensor.P4.state";  // Datenpunkt-ID mit JSON-String
                        var test = "javascript.0.testp4";
                        
                         
                        function werteAuslesen(jsonStr) {
                            var x = obj.state.val;
                            x=x.replace('�','');
                            var obj = JSON.parse(jsonStr).Heizung;
                            var test = obj.Kesseltemperatur_0x0.value;
                        }
                         
                        on({id:idJson,change:'ne'}, function (obj) {
                            log(obj.state.val);
                            werteAuslesen(obj.state.val);
                        });
                        

                        Json Parse Fehler "zum Ende" ist weg. Dafür jetzt:

                        javascript.0	2021-02-16 12:09:38.847	error	(2300) at Object.<anonymous> (script.js.Parse.Parse_P4:14:5)
                        javascript.0	2021-02-16 12:09:38.846	error	(2300) at werteAuslesen (script.js.Parse.Parse_P4:6:17)
                        javascript.0	2021-02-16 12:09:38.846	error	(2300) Error in callback: TypeError: Cannot read property 'state' of undefined
                        

                        Oh man.. 😞

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

                          @paul53 sagte: Workaround?

                          Verkürze mal den String um das letzte Zeichen:

                          var idJson = "mqtt.0.p4d2mqtt.sensor.P4.state";  // Datenpunkt-ID mit JSON-String
                          var test = "javascript.0.testp4";
                           
                          function werteAuslesen(jsonStr) {
                              var obj = JSON.parse(jsonStr).Heizung;
                              var test = obj.Kesseltemperatur_0x0.value;
                              log('Kesseltemperatur: ' + test + ' °C');
                          }
                          
                          on({id:idJson, change:'ne'}, function (obj) {
                              let str = obj.state.val;
                              let json = str.substr(0, str.length - 1);
                              werteAuslesen(json);
                          });
                          
                          S 1 Reply Last reply Reply Quote 0
                          • paul53
                            paul53 @Seeandfeel last edited by paul53

                            @seeandfeel sagte: Um nichts falsch zu machen, hab das ganze jetzt so:

                            So ist es falsch. Richtig:

                            var idJson = "mqtt.0.p4d2mqtt.sensor.P4.state";  // Datenpunkt-ID mit JSON-String
                            var test = "javascript.0.testp4";
                             
                            function werteAuslesen(jsonStr) {
                                var obj = JSON.parse(jsonStr).Heizung;
                                var test = obj.Kesseltemperatur_0x0.value;
                            }
                             
                            on({id:idJson,change:'ne'}, function (obj) {
                                var json = obj.state.val.replace('�','');
                                werteAuslesen(json);
                            });
                            
                            1 Reply Last reply Reply Quote 1
                            • S
                              Seeandfeel @paul53 last edited by

                              @paul53

                              Jetzttttt 😄 :

                              (2300) script.js.Parse.Parse_P4: Kesseltemperatur: 68 °C
                              

                              Super, echt Klasse!
                              Vielen Dank euch beiden, vor allem @paul53 .

                              Jetzt muss ichs nur noch schaffen das ganze in Objekte zu bringen. 😉 Mal sehen ob ich es hinbekomme..

                              Vielen Dank nochmal!

                              paul53 Gargano 2 Replies Last reply Reply Quote 0
                              • paul53
                                paul53 @Seeandfeel last edited by

                                @seeandfeel
                                Mit welcher Methode funktioniert es jetzt? Verkürzen oder Ersetzen?

                                1 Reply Last reply Reply Quote 0
                                • Gargano
                                  Gargano @Seeandfeel last edited by Gargano

                                  @seeandfeel Paul war schneller, war grad Mittag essen.
                                  Zur Erklärung dieses Zeichens am Ende. Es handelt sich wohl hier um das String Ende Zeichen welches in C den Wert (hex) 0x0 hat. Fälschlicherweide wird wohl die Länge des Strings beim MQTT senden falsch berechnet und dieses Zeichen mitgesendet.

                                  1 Reply Last reply Reply Quote 0
                                  • S
                                    Seeandfeel last edited by Seeandfeel

                                    Oh, entschuldigt.. - vor lauter Freude die Lösung vergessen. 😉

                                    Funktioniert hat es jetzt mit:

                                     let json = str.substr(0, str.length - 1);
                                    

                                    Ersetzen hatte ich noch gar nicht probiert gehabt. Das hatte ich ganz übersehen.

                                    Das "var json = obj.state.val.replace('�','');" läuft auf:

                                    (2300) Error in callback: SyntaxError: Unexpected token in JSON at position 1364
                                    

                                    Vielen Dank auch für die Erklärung @Gargano ! Ich wollte nicht fragen bzw. euch noch mehr "belästigen" 😉 .
                                    Eigentlich versuchs ich ja echt selber zu lösen.. - aber bei JAVA setzt es (noch) bei mir aus. 😞

                                    Gernot Tauss 1 Reply Last reply Reply Quote 0
                                    • Gernot Tauss
                                      Gernot Tauss @Seeandfeel last edited by

                                      @seeandfeel Hi, könntest du mir das ganze Script schicken?

                                      lg

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

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      380
                                      Online

                                      31.8k
                                      Users

                                      80.0k
                                      Topics

                                      1.3m
                                      Posts

                                      4
                                      18
                                      1364
                                      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