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

      @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

                          924
                          Online

                          31.9k
                          Users

                          80.1k
                          Topics

                          1.3m
                          Posts

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