Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst] Wie krieg ich "result" an Blockly übergeben

    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

    [gelöst] Wie krieg ich "result" an Blockly übergeben

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

      @metaxa sagte: Ich krieg das Resultat der Abfrage nicht nach Blockly.

      Wenn die Funktion vor sendTo() mit

      return 0;
      

      beendet wird, kann nichts geloggt werden.

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

        @paul53 Lieben Dank für deine Reaktion!

        Dieser "Befehl" kommt automatisch mit wenn ich in Blockly den Baustein "JS-Funktion mit Ergebniss" auswähle. Ich hatte den Befehl auch schon am Ende, aber da kam auch nix an. Oder gehört der auf "1" gestellt?

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

          @metaxa sagte in Wie krieg ich "result" an Blockly übergeben:

          Dieser "Befehl" kommt automatisch mit wenn ich in Blockly den Baustein "JS-Funktion mit Ergebniss" auswähle

          Ja - als Beispiel.
          Hinter dem "return" folgt das, was als Ergebnis zurückkommen soll.
          Mit einem "return" wird eine Funktion aber auch beendet. Das wird also als letztes aufgerufen. Nachdem das Ergebnis feststeht.

          Was möchtest Du denn als Ergebnis zurückliefern?

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

            @codierknecht

            sendTo('hm-rpc.0', 'getParamset', {ID: 'HEQ0510329:2', paramType: 'MASTER'}, res => {
                // log(JSON.stringify(res)); //Liest alle Paprameter aus
                log(JSON.stringify(res.result.MODE_TEMPERATUR_REGULATOR)); //schreibt nur den aktuellen Modus ins Log
                // setState('0_userdata.0.Hilfsdatenpunkte.ScriptDP.HM.Thermostat_WZ.Master_Parameter', res.result.MODE_TEMPERATUR_REGULATOR, true);
            });
            

            Diese Abfrage des aktuellen Modus sollte "0", "1" oder "2" zurückgeben. Mit der Ziffer kann ich dann in Blockly weiterarbeiten.

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

              @metaxa

              Ich nehme mal an, dass das dann auch als Zahl zurückgegeben werden soll?

              Hier stand quatsch ...

              1 Reply Last reply Reply Quote 0
              • haus-automatisierung
                haus-automatisierung Developer Most Active @metaxa last edited by

                @metaxa sagte in Wie krieg ich "result" an Blockly übergeben:

                Kann mir bitte jemand unter die Arme greifen?

                Du musst mit einem Promise arbeiten, da sonst die Callback-Funktion erst aufgerufen wird, wenn Deine Funktion längst abgearbeitet ist.

                const res = await sendToAsync('hm-rpc.0', 'getParamset', { ID: 'HEQ0510329:2', paramType: 'MASTER' });
                return res.result.MODE_TEMPERATUR_REGULATOR;
                
                metaxa 1 Reply Last reply Reply Quote 2
                • paul53
                  paul53 @metaxa last edited by paul53

                  @metaxa sagte: da kam auch nix an.

                  Man kann aus einer Callback-Funktion nichts an den Funktionsaufruf zurück geben, da die Callback-Funktion erst später aufgerufen wird. Wenn setState() innerhalb der Callback-Funktion ausgeführt wird, wird das Ergebnis in den DP geschrieben.

                  1 Reply Last reply Reply Quote 0
                  • metaxa
                    metaxa @haus-automatisierung last edited by

                    @haus-automatisierung sagte in Wie krieg ich "result" an Blockly übergeben:

                    Du musst mit einem Promise arbeiten

                    Ich verstehe es nicht, liegt an meinen NICHT vorhandenen JS Kenntnissen. Leider gibt es keine Blockly Möglichkeit bei den alten Thermostaten den aktuellen Modus abzufragen, weswegen ich Euch quälen und um Hilfe bitten muss.

                    Es funktioniert 🙂
                    7dc103f2-078e-41c4-bda2-96d7917943b1-image.png
                    0fc4d752-d580-46cd-9501-f95a728c6b8a-image.png

                    Lieben Dank @haus-automatisierung & @paul53 & @Codierknecht

                    haus-automatisierung Codierknecht 2 Replies Last reply Reply Quote 0
                    • haus-automatisierung
                      haus-automatisierung Developer Most Active @metaxa last edited by

                      @metaxa sagte in [gelöst] Wie krieg ich "result" an Blockly übergeben:

                      Ich verstehe es nicht, liegt an meinen NICHT vorhandenen JS Kenntnissen.

                      Na in Deinem Ausgangspost rufst Du sendTo auf. Als letzten Parameter übergibst Du eine Funktion. Diese Funktion wird dann aufgerufen, sobald das Ergebnis vorliegt. Das Problem ist aber, dass die umliegende Funktion darauf nicht wartet. Das sendTo wird also ausgeführt und sofort ist die umliegende Funktion abgearbeitet.

                      Um diesem Problem vorzubeugen, gibt es in JavaScript sog. Promises (für Google). Für länger laufende Aufgaben kann man sich also explizit entscheiden, auf die Abarbeitung zu warten (mit dem Schlüsselwort await. Dafür ist nur wichtig, dass die aufgerufene Funktion ein Promise zurückgibt. Und das macht die Funktion mit dem Namen sendToAsync.

                      Und dann kann man damit eben weiterarbeiten. Damit man mit await arbeiten kann, muss die umliegende aber als async definiert sein. Aber das sind alle per Blockly definierten Funktionen automatisch. Siehst Du auch, wenn Du auf JavaScript umschaltest.

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

                        @metaxa sagte in [gelöst] Wie krieg ich "result" an Blockly übergeben:

                        Es funktioniert

                        Könnte man aber noch etwas "optimieren".

                        eb431eb3-465f-413c-9175-3ac31b02d76c-image.png

                        Muss da wirklich mit 'nem Zeitplan gearbeitet werden?
                        Gibt es da keinen Datenpunkt, auf dessen Wertänderung man reagieren könnte?

                        Edit
                        Dieser DP muss ja nicht zwangsläufig einer sein, der auch gleich den passenden Wert liefert. Es reicht ja aus, dass man mitbekommt ob und wann sich da etwas ändert.
                        Ist halt ein Unterschied, ob man das 1.440 x am Tag aufruft, oder nur dann wenn sich auch tatsächlich etwas geändert hat.

                        metaxa 1 Reply Last reply Reply Quote 2
                        • metaxa
                          metaxa @Codierknecht last edited by metaxa

                          @codierknecht sagte in [gelöst] Wie krieg ich "result" an Blockly übergeben:

                          Muss da wirklich mit 'nem Zeitplan gearbeitet werden?

                          Leider ja, natürlich nicht jede Minute wie in meinem Beispiel, das war nur für die Dauer des Testes. Die alten MH bieten leider keinen DP der sich ändert wenn am Thermostat manuell der Modus verändert wird.

                          6d4897f0-f033-4bd7-b14e-946cb28241f0-image.png

                          Nachdem ich 5 oder 6 Stk. abfragen muss, werde ich vermutlich auf einen Interval von 10 oder gar 30 Minuten gehen.

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          813
                          Online

                          31.8k
                          Users

                          80.0k
                          Topics

                          1.3m
                          Posts

                          4
                          12
                          415
                          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