Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Einsteigerfragen
    4. Abfrage MQTT Variable

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Abfrage MQTT Variable

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

      @neueklasse sagte: nur von Integer auf float (statt 1234567 auf 12345.67)

      Dann kann das Runden weggelassen werden. Laut erstem Beitrag muss "COUNTER" groß geschrieben werden.

      const idSensor = 'mqtt.0.tele.Gascounter.SENSOR';
      const idZaehler = '0_userdata.0.Gaszaehler.Gaszaehlerstand';
       
      on(idSensor, function(dp) {
          let zaehler = dp.state.val.COUNTER.C1 / 100;
          setState(idZaehler, zaehler, true);
      });
      
      N 1 Reply Last reply Reply Quote 0
      • N
        NeueKlasse @paul53 last edited by NeueKlasse

        @paul53 COUNTER Grossgeschrieben, das hatte ich auch versucht, ändert leider nichts an dem Error

        paul53 1 Reply Last reply Reply Quote 0
        • Codierknecht
          Codierknecht Developer Most Active @paul53 last edited by Codierknecht

          @paul53 sagte in Abfrage MQTT Variable:

          getAttr() wurde für Blockly entwickelt und wird in Javascript nicht benötigt.

          Danke für den Hinweis - sollte aber doch trotzdem funktionieren.

          Das hier funzt jedenfalls einwandfrei:

          const idSensor = 'mqtt.0.tele.Gascounter.SENSOR';
          const idZaehler = '0_userdata.0.Gaszaehler.Gaszaehlerstand';
           
          on({id: idSensor, change: "ne"}, async function (obj) {
              let zaehler = parseInt(getAttr(obj.state.val, "COUNTER.C1")) / 100;
              setState(idZaehler, zaehler, true);
          });
          
          N 1 Reply Last reply Reply Quote 0
          • N
            NeueKlasse @Codierknecht last edited by

            @codierknecht Jap, das funzt! Danke,

            @paul53 mich würde trotzdem interessieren wieso es ohne die getAttr im moment noch nicht geht.

            Codierknecht paul53 2 Replies Last reply Reply Quote 0
            • paul53
              paul53 @NeueKlasse last edited by paul53

              @neueklasse sagte: ändert leider nichts an dem Error

              Dann enthält der Datenpunkt kein Objekt, sondern ein JSON.

              const idSensor = 'mqtt.0.tele.Gascounter.SENSOR';
              const idZaehler = '0_userdata.0.Gaszaehler.Gaszaehlerstand';
               
              on(idSensor, function(dp) {
                  let zaehler = JSON.parse(dp.state.val).COUNTER.C1 / 100;
                  setState(idZaehler, zaehler, true);
              });
              
              Codierknecht N 2 Replies Last reply Reply Quote 0
              • Codierknecht
                Codierknecht Developer Most Active @paul53 last edited by

                @paul53 sagte in Abfrage MQTT Variable:

                Dann enthält der Datenpunkt kein Objekt, sondern ein JSON.

                Davon war ich bei MQTT einfach mal ausgegangen 😉

                1 Reply Last reply Reply Quote 0
                • Codierknecht
                  Codierknecht Developer Most Active @NeueKlasse last edited by

                  @neueklasse sagte in Abfrage MQTT Variable:

                  mich würde trotzdem interessieren wieso es ohne die getAttr im moment noch nicht geht.

                  Mich auch 😁

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

                    @neueklasse sagte: wieso es ohne die getAttr im moment noch nicht geht.

                    Es fehlte JSON.parse().

                    Codierknecht 1 Reply Last reply Reply Quote 0
                    • Codierknecht
                      Codierknecht Developer Most Active @paul53 last edited by Codierknecht

                      @paul53
                      Jepp - wenn man dann auch die korrekte Groß- und Kleinschreibung verwendet, klappt's auch mit dem Nachbarn 🤦‍♂️
                      In meinem Test-DP stand das noch als Counter.

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

                        @paul53, @Codierknecht Funktionieren beide! Danke ihr Beiden!!

                        ist das hier der richtige thread für... gibt es eine moeglichkeit von einer
                        zahl z.b. 32,4 in der VIS nur die 2. Stelle auszugeben?

                        also bei ems-esp.0.boiler.actual boiler temperature => hier betraegt die Object ID 32,4. wenn ich nur die 2. Stelle anzeigen lassen wollen würde, gibt es hier eine möglichkeit, oder muss ich separate Variablen erstellen in die ich per script die einzelnen stellen verteile?

                        Codierknecht 1 Reply Last reply Reply Quote 0
                        • Codierknecht
                          Codierknecht Developer Most Active @NeueKlasse last edited by

                          @neueklasse
                          Da soll also tatsächlich nur eine "2" stehen?
                          Würde mit einem Binding funktionieren - z.B. in einem HTML-Widget

                          {val:ems-esp.0.boiler.actual_boiler_temperature; val.substr(1,1)}
                          

                          Ich habe hier mal vorausgesetzt, dass in der Objekt-ID nicht wirklich Leerzeichen enthalten sind.

                          N 1 Reply Last reply Reply Quote 0
                          • N
                            NeueKlasse @Codierknecht last edited by

                            @codierknecht Super, funktioniert, danke! Jetzt kann ich mit den neuen erkenntnissen herumexperimentieren!

                            1 Reply Last reply Reply Quote 0
                            • N
                              NeueKlasse @Codierknecht last edited by NeueKlasse

                              @codierknecht

                              die 'idAnpassfaktor' betraegt 0,999987 ich habe es bereits mit parseFloat und get Attr getestet, leider geht
                              das nicht so wie ich möchte...

                              ">> <<" ist zur veranschaulichung

                              const idSensor = 'mqtt.0.tele.Gascounter.SENSOR';
                              const idZaehler = '0_userdata.0.Gaszaehler.Gaszaehlerstand';
                              const idVerbrauch = '0_userdata.0.Gaszaehler.Gasverbrauch';
                              const idZustandszahl = '0_userdata.0.Gaszaehler.Umrechnung.Zustandszahl';
                              const idBrennwert = '0_userdata.0.Gaszaehler.Umrechnung.Brennwert';
                              const idAnpassfaktor = '0_userdata.0.Gaszaehler.Umrechnung.Anpassfaktor';
                               
                              on({id: idSensor, change: "ne"}, async function (obj) {
                                  let zaehler = parseInt(getAttr(obj.state.val, "COUNTER.C1")) / 100 * >> idAnpassfaktor <<;
                                  var roundedm3 = Math.round((zaehler + Number.EPSILON) * 100) / 100;
                                  var roundedkwh = Math.round((zaehler + Number.EPSILON) * 100 * 0.95 * 11.1) / 100;
                                  setState(idZaehler, roundedm3, true);
                                  setState(idVerbrauch, roundedkwh, true);
                              });
                              
                              

                              wie wäre hier der Korrekte Syntax?

                              Codierknecht 1 Reply Last reply Reply Quote 0
                              • Codierknecht
                                Codierknecht Developer Most Active @NeueKlasse last edited by

                                @neueklasse

                                let zaehler = parseInt(getAttr(obj.state.val, "COUNTER.C1")) / 100 * getState(idAnpassfaktor).val;
                                
                                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
                                24
                                736
                                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