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

                        655
                        Online

                        31.8k
                        Users

                        80.0k
                        Topics

                        1.3m
                        Posts

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