Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. JS Funktion für Blockly anpassen

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    JS Funktion für Blockly anpassen

    This topic has been deleted. Only users with topic management privileges can see it.
    • David G.
      David G. last edited by

      Hallo,

      ich habe folgende kleine JS-Funktion in einem Blockly:

      var end = new Date().getTime();
      getHistory('sql.0', {
       
              id:         'sourceanalytix.0.alias__0__Zaehler__Gas__kwh.currentYear.consumed.01_previousDay',
              start:      end - 77600000,
              end:        end,
            //  aggregate:  'm4',
              timeout:    2000
          }, function (err, result) {
              if (err) console.error(err);
              if (result) {
                  log(JSON.stringify(result))
                  for (var i = 0; i < result.length; i++) {
                  result = (result[i].val + ' ' + new Date(result[i].ts).toISOString());
                  }
              }
          });
      

      (Obere Bereich im Bild (get_sql))

      gerne würde ich diese anpassen, damit ich folgenden Baustein so verwenden kann:
      (untere Bereich im Bild (so soll es sein))

      Screenshot 2023-05-23 084947.png

      Leider bekomme ich es nicht hin, den Code so anzupassen, dass er meine Variablen annimmt und ein Ergebnis für den Debug auswirft.

      Zusätzlich würde ich gerne noch mit timestamp der SQL-Werte rechnen. Dafür ist die Variable ts_versatz.

      Als Ergebnis hätte ich gerne wie im oberen Beispiel einen JSON-String, nur mit den umgerechneten Werten.

      paul53 1 Reply Last reply Reply Quote 0
      • paul53
        paul53 @David G. last edited by paul53

        @david-g
        Wenn man die Datenpunkt-ID, start und stop an die Funktion übergibt, muss man diese auch auswerten. Eine Rückgabe an den Aufruf ist aus einer Callback-Funktion nicht möglich, sondern man muss das Ergebnis auf eine globale Variable (Liste) verweisen. Die Liste kann man auch gut mit Blockly weiter verarbeiten.

        getHistory('sql.0', {
            id: dp,
            start: start,
            end: stop,
            //  aggregate:  'm4',
            timeout:    2000
        }, function (err, result) {
            if (err) console.error(err);
            if (result) Liste = result;
        });
        

        Blockly_temp.JPG

        David G. 1 Reply Last reply Reply Quote 0
        • David G.
          David G. @paul53 last edited by

          @paul53

          Danke, werde ich morgen testen können.
          Kann es ja so wirklich alles schön umrechnen und dann wieder mit Objekt nach json umformatieren.

          paul53 1 Reply Last reply Reply Quote 0
          • paul53
            paul53 @David G. last edited by paul53

            @david-g
            Denke daran, dass get_sql() asynchron ausgeführt wird, die Liste also verzögert gefüllt wird.

            David G. 2 Replies Last reply Reply Quote 0
            • David G.
              David G. @paul53 last edited by

              @paul53

              Okay, dann baue ich da eine Pause ein.

              1 Reply Last reply Reply Quote 0
              • David G.
                David G. @paul53 last edited by David G.

                @paul53

                Irgendwo scheint ein Fehler zu sein:

                15:59:13.422	info	javascript.0 (16961) Start javascript script.js.Eigene_Scripte.Tests.Read_sql
                15:59:13.443	info	javascript.0 (16961) script.js.Eigene_Scripte.Tests.Read_sql: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
                15:59:13.445	error	javascript.0 (16961) script.js.Eigene_Scripte.Tests.Read_sql: ReferenceError: stop is not defined
                15:59:13.445	error	javascript.0 (16961) at get_sql (script.js.Eigene_Scripte.Tests.Read_sql:8:14)
                15:59:13.445	error	javascript.0 (16961) at script.js.Eigene_Scripte.Tests.Read_sql:19:7
                15:59:13.445	error	javascript.0 (16961) at script.js.Eigene_Scripte.Tests.Read_sql:22:3
                

                Screenshot 2023-05-23 160616.png

                getHistory('sql.0', {
                    id: dp,
                    start: start,
                    end: stop,
                    //  aggregate:  'm4',
                    timeout:    2000
                }, function (err, result) {
                    if (err) console.error(err);
                    if (result) Liste = result;
                });
                
                paul53 1 Reply Last reply Reply Quote 0
                • paul53
                  paul53 @David G. last edited by

                  @david-g sagte: ReferenceError: stop is not defined

                  Schau mal in den vom Blockly erzeugten Javascript-Code. Wurde stop in stop2 geändert? Dann ändere es entsprechend in Zeile 4.

                  David G. 1 Reply Last reply Reply Quote 0
                  • David G.
                    David G. @paul53 last edited by David G.

                    @paul53

                    Das war es.
                    Jetzt hab ich aber eine andere Frage.
                    In der zuerst generierten Liste (ka wie man das nennt) gehören ts und val immer zusammen.

                    Wenn ich jetzt mit der Liste weuterarbeite wird das aufgelöst.

                    Screenshot_20230523_180528_Chrome.jpg

                    18:03:56.340	warn	javascript.0 (16961) script.js.Eigene_Scripte.Tests.Read_sql: [{"ts":1684780235339,"val":8.797098765432098,"i":true},{"ts":1684792728939,"val":17.99}]
                    18:03:56.341	error	javascript.0 (16961) script.js.Eigene_Scripte.Tests.Read_sql: [1684780235339,8.797098765432098,1684792728939,17.99]
                    

                    Das val und ts muss ich noch mit erstelle Text aus vor machen?
                    Würde mit den {} natürlich auch gehen.
                    Vermute aber das geht eleganter?

                    paul53 1 Reply Last reply Reply Quote 0
                    • paul53
                      paul53 @David G. last edited by paul53

                      @david-g sagte: Das val und ts muss ich noch mit erstelle Text aus vor machen?

                      Was soll mit den val und ts passieren, was ist das Ziel?

                      David G. 1 Reply Last reply Reply Quote 0
                      • David G.
                        David G. @paul53 last edited by David G.

                        @paul53

                        Die json möchte ich in eCharts verwenden.
                        Möchte in der Visu verschiedene DPs, Zeiträume auswählen können und die Zeitachse was verschieben (im test noch nicht eingebaut) können.
                        So recht ein Chart für zig Kombination.

                        eCharts gibt das Format der json vor.
                        Sie wie im warn aus meinem letzten Beitrag.
                        Nur das i":true darf nicht vorkommen.

                        paul53 1 Reply Last reply Reply Quote 0
                        • paul53
                          paul53 @David G. last edited by paul53

                          @david-g sagte: wie im warn aus meinem letzten Beitrag. Nur das i":true darf nicht vorkommen.

                          ts soll in ms bleiben?

                          Blockly_temp.JPG

                          David G. 2 Replies Last reply Reply Quote 0
                          • David G.
                            David G. @paul53 last edited by David G.

                            @paul53

                            Sowas in der Art hatte ich auch schon getestet. Ohne Erfolg. Da waren die " immer zwischen 2 /.

                            So klappt es jetzt.
                            Allerdings habe ich zu Beginn immer ein leeres {}, und dann kommen erst befülle Werte.

                            javascript.0 (16961) script.js.Eigene_Scripte.Tests.Read_sql: [{},{"ts":1684274470454,"val":16.03},{"ts":1684360352054,"val":10.5},{"ts":1684447443254,"val":4.21},{"ts":1684533324854,"val":4.28},{"ts":1684620416054,"val":4.28},{"ts":1684706297654,"val":8.74},{"ts":1684793388854,"val":17.99}]
                            

                            Funktioniert aber trotzdem in eCharts.

                            1 Reply Last reply Reply Quote 0
                            • David G.
                              David G. @paul53 last edited by David G.

                              @paul53

                              Hier mein (sehr rudimentärer) Testaufbau für was es die json ist.

                              Erst kann man einen DP auswählen. Im Beispiel Tages/Wochen/Monats/Jahreswerte vom Gasverbrauch.

                              Dann den Zeitraum.

                              Screen_Recordin-1684925174200.gif

                              ECharts hat mit den Jsons aber mal noch 1-2 Problemchen...

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

                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              613
                              Online

                              32.0k
                              Users

                              80.5k
                              Topics

                              1.3m
                              Posts

                              2
                              13
                              205
                              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