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.
    • Codierknecht
      Codierknecht Developer Most Active @NeueKlasse last edited by

      @neueklasse

      getAttr(getState("DEINE_ID").val, 'Counter.C1');
      

      Oder als Blockly:
      80ff6709-c677-4591-8224-e81b9b3b1c45-image.png

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

        @codierknecht Danke fuer die Schnelle Antwort!

        um wieder in das ganze thema Java einzusteigen wollte ich noch den Korrekten Zählerstand in die
        Uservariable schreiben... irgendwo scheint hier noch etwas zu haken...
        desweiteren Stelle ich mir die Frage, wie oft wird das Script pro Zeiteinheit ueberhaupt ausgefuehrt?

        JavaGascounter.jpg

        Codierknecht mickym 2 Replies Last reply Reply Quote 0
        • Codierknecht
          Codierknecht Developer Most Active @NeueKlasse last edited by

          @neueklasse sagte in Abfrage MQTT Variable:

          desweiteren Stelle ich mir die Frage, wie oft wird das Script pro Zeiteinheit ueberhaupt ausgefuehrt?

          So wird das Ganze nur 1x beim Start des Script ausgeführt.
          Du brauchst einen Trigger, der auf Änderungen reagiert.

          on({id: "mqtt.0.tele.Gascounter.SENSOR", change: "ne"}, async function (obj) {
            var GascounterESP32 = getAttr(obj.state.val, 'Counter.C1');
            // hier Dein Code
          });
          
          

          By the way: Scripte und Ausgaben aus Log oder Terminal nicht als Screenshot sondern in Code-Tags </> posten.
          Nicht jeder hat Lust, das Ganze nochmal abzutippen. Und auf dem Handy sind Screenshots nur schwer lesbar.

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

            @codierknecht ahh... ok Danke,

            
            var CounterCalc = 0;
            
            on({id: "mqtt.0.tele.Gascounter.SENSOR", change: "ne"}, async function (obj) {  // trigger
                var GascounterESP32 = getAttr(obj.state.val, 'Counter.C1');                 // write state into Variable
            
                CounterCalc = (GascounterESP32 / 10);                                                   // calculation
                    setState('0_userdata.0.Gaszaehler.Gaszaehlerstand'/*Gaszaehlerstand*/,CounterCalc); // calculated value into uservalue
            
            });
            

            könntest Du mir noch bitte sagen wieso er die uservariable mit setState nicht überschreibt mit CounterCalc?

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

              @neueklasse
              Könnte man noch etwas vereinfachen:

              on({id: "mqtt.0.tele.Gascounter.SENSOR", change: "ne"}, async function (obj) {
                  setState('0_userdata.0.Gaszaehler.Gaszaehlerstand', parseInt(getAttr(obj.state.val, 'Counter.C1')) / 10); 
              });
              

              Der Wert wird geschrieben, sobald sich der der DP mqtt.0.tele.Gascounter.SENSOR das nächste mal ändert.
              Wenn das Script gestartet wird, solltest Du im Log etwas mit 1 Subscriptions sehen.

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

                @neueklasse sagte in Abfrage MQTT Variable:

                @codierknecht Danke fuer die Schnelle Antwort!

                um wieder in das ganze thema Java einzusteigen ….

                Du steigst nicht in Java ein, sondern in Javascript. Das ist ein gewaltiger Unterschied.
                😉

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

                  @mickym Stimmt!

                  @Codierknecht

                  javascript.0 (193) script.js.User_Scripts.Gascounter: setForeignState(id=0_userdata.0.Gaszaehler.Gaszaehlerstand, state={"val":null,"ack":false,"ts":1675419639482,"q":0,"from":"system.adapter.javascript.0","lc":1675419639482,"c":"script.js.User_Scripts.Gascounter"})

                  auf die vorherige sowie 'kurze' variante gibt es eine subscription, aber bei value steht "null" drin. (oben gezeigter Log)

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

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

                    @neueklasse sagte in Abfrage MQTT Variable:

                    wie oft wird das Script pro Zeiteinheit ueberhaupt ausgefuehrt?

                    Man benötigt einen Trigger.

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

                      @paul53

                      hier bekomme ich einen

                      error javascript.0 (193) at Object.<anonymous> (script.js.User_Scripts.Gascounter:8:51)

                      (in Zeile 8 befindet sich "let zaehler =")

                      hatte vorher einen Denkfehler, das durch 10 Teilen ist falsch.. ich moechte hier nur von
                      Integer auf float (statt 1234567 auf 12345.67)

                      paul53 1 Reply Last reply Reply Quote 0
                      • 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
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            963
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            4
                                            24
                                            739
                                            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