Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Wert aus function zurückgeben

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

Wert aus function zurückgeben

Geplant Angeheftet Gesperrt Verschoben JavaScript
9 Beiträge 3 Kommentatoren 555 Aufrufe 4 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • wierer-sigiW Offline
    wierer-sigiW Offline
    wierer-sigi
    schrieb am zuletzt editiert von
    #1

    Hallo,

    versuche mich an JavaScript, da ich den History Adapter Daten entlocken will.

    Habe folgendes Script gefunden mit dem ich einen Datenpunkt des History abfragen kann.

    Nun will ich aber auch die gewonnen Werte wieder zurückgeben. Wie bekomme ich die xxx aus der Function ( result ) wieder als wert zurück?
    Dachte an return aber da habe ich wohl einen Fehler drin.

    Danke vorab

    var end = Date.now();
    var xxx;
    sendTo('history.0', 'getHistory', {
        id: 'javascript.0.WBH_Engergy.PV_Gesamt_gestern',
        options: {
            count:      1,
            end:        end,
            aggregate: 'Max',
            ignoreNull: 'true'
        }
    }, function (result) {
        for (var i = 0; i < result.result.length; i++) {
            console.log(result.result[i].val + ' ' + new Date(result.result[i].ts).toISOString());
            xxx = result.result[i].val;
            console.log("1 - " + xxx)
        };
        return xxx;
        console.log("2 - " + xxx);
    });
    console.log("3 -  " + xxx);
    

    Ausgabefenster:

    21:17:02.091	info	javascript.0 (1792) Stop script script.js.Test-Center.Test_2_History
    21:17:02.152	info	javascript.0 (1792) Start javascript script.js.Test-Center.Test_2_History
    21:17:02.183	info	javascript.0 (1792) script.js.Test-Center.Test_2_History: 3 - undefined
    21:17:02.183	info	javascript.0 (1792) script.js.Test-Center.Test_2_History: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
    21:17:02.192	info	javascript.0 (1792) script.js.Test-Center.Test_2_History: 5147.6 2024-01-07T22:55:00.115Z
    21:17:02.192	info	javascript.0 (1792) script.js.Test-Center.Test_2_History: 1 - 5147.6
    21:17:02.193	info	javascript.0 (1792) script.js.Test-Center.Test_2_History: 5147.6 2024-01-08T20:17:02.182Z
    21:17:02.193	info	javascript.0 (1792) script.js.Test-Center.Test_2_History: 1 - 5147.6
    
    OliverIOO 1 Antwort Letzte Antwort
    0
    • wierer-sigiW wierer-sigi

      Hallo,

      versuche mich an JavaScript, da ich den History Adapter Daten entlocken will.

      Habe folgendes Script gefunden mit dem ich einen Datenpunkt des History abfragen kann.

      Nun will ich aber auch die gewonnen Werte wieder zurückgeben. Wie bekomme ich die xxx aus der Function ( result ) wieder als wert zurück?
      Dachte an return aber da habe ich wohl einen Fehler drin.

      Danke vorab

      var end = Date.now();
      var xxx;
      sendTo('history.0', 'getHistory', {
          id: 'javascript.0.WBH_Engergy.PV_Gesamt_gestern',
          options: {
              count:      1,
              end:        end,
              aggregate: 'Max',
              ignoreNull: 'true'
          }
      }, function (result) {
          for (var i = 0; i < result.result.length; i++) {
              console.log(result.result[i].val + ' ' + new Date(result.result[i].ts).toISOString());
              xxx = result.result[i].val;
              console.log("1 - " + xxx)
          };
          return xxx;
          console.log("2 - " + xxx);
      });
      console.log("3 -  " + xxx);
      

      Ausgabefenster:

      21:17:02.091	info	javascript.0 (1792) Stop script script.js.Test-Center.Test_2_History
      21:17:02.152	info	javascript.0 (1792) Start javascript script.js.Test-Center.Test_2_History
      21:17:02.183	info	javascript.0 (1792) script.js.Test-Center.Test_2_History: 3 - undefined
      21:17:02.183	info	javascript.0 (1792) script.js.Test-Center.Test_2_History: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
      21:17:02.192	info	javascript.0 (1792) script.js.Test-Center.Test_2_History: 5147.6 2024-01-07T22:55:00.115Z
      21:17:02.192	info	javascript.0 (1792) script.js.Test-Center.Test_2_History: 1 - 5147.6
      21:17:02.193	info	javascript.0 (1792) script.js.Test-Center.Test_2_History: 5147.6 2024-01-08T20:17:02.182Z
      21:17:02.193	info	javascript.0 (1792) script.js.Test-Center.Test_2_History: 1 - 5147.6
      
      OliverIOO Offline
      OliverIOO Offline
      OliverIO
      schrieb am zuletzt editiert von
      #2

      @wierer-sigi
      Das hängt davon ab was du mit dem Wert dann machen möchtest.
      Durch die asynchrone Arbeitsweise von JavaScript wird der Code nicht immer in der Reihenfolge ausgeführt wie man das denkt.

      In deinem Beispiel verursacht sendto in Zeile 3 noch keine Ausführung, sonder js merkt sich, das der Befehl ausgeführt werden soll.
      Die konkrete Ausführung erfolgt wahrscheinlich erst nach Zeile 20
      Also Zeile 19 wird hier nach sendto, aber vor allem anderen ausgeführt.
      Dann arbeitet es da in einem anderen Adapter, der wenn er fertig ist dann den Code ab Zeile 11 aufruft.

      Zeile 18 ist übrigens toter code der nie ausgeführt werden kann, da nach einem Return im gleichen Block nix ausgeführt werden kann.

      Meine Adapter und Widgets
      TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
      Links im Profil

      wierer-sigiW 1 Antwort Letzte Antwort
      0
      • OliverIOO OliverIO

        @wierer-sigi
        Das hängt davon ab was du mit dem Wert dann machen möchtest.
        Durch die asynchrone Arbeitsweise von JavaScript wird der Code nicht immer in der Reihenfolge ausgeführt wie man das denkt.

        In deinem Beispiel verursacht sendto in Zeile 3 noch keine Ausführung, sonder js merkt sich, das der Befehl ausgeführt werden soll.
        Die konkrete Ausführung erfolgt wahrscheinlich erst nach Zeile 20
        Also Zeile 19 wird hier nach sendto, aber vor allem anderen ausgeführt.
        Dann arbeitet es da in einem anderen Adapter, der wenn er fertig ist dann den Code ab Zeile 11 aufruft.

        Zeile 18 ist übrigens toter code der nie ausgeführt werden kann, da nach einem Return im gleichen Block nix ausgeführt werden kann.

        wierer-sigiW Offline
        wierer-sigiW Offline
        wierer-sigi
        schrieb am zuletzt editiert von
        #3

        @oliverio

        Danke für den Hinweis mit der Toten Zeile.

        Ziel wäre es das der Wert via return in das Blocky zurückgegeben wird.

        Bildschirmfoto 2024-01-09 um 13.43.40.png

        Die Variable yyy übergibt er an das JS und verwendet es auch.

        Aber ich bekomme halt xxx nicht zurück, da dies innerhalb der function ist.

        var yyy;
        var end = Date.now();
        var xxx;
        sendTo('history.0', 'getHistory', {
            id: 'javascript.0.WBH_Engergy.PV_Gesamt_gestern',
            options: {
                count:      yyy,
                end:        end,
                aggregate: 'Max',
                ignoreNull: 'true'
            }
        }, function (result) {
            for (var i = 0; i < result.result.length; i++) {
                console.log(result.result[i].val + ' ' + new Date(result.result[i].ts).toISOString());
                xxx = result.result[i].val;
                console.log("1 - " + xxx)
            };
            console.log("2 - " + xxx);
        });
        console.log("3 -  " + xxx);
        return xxx;
        
        13:58:27.523	info	javascript.0 (1792) Stop script script.js.Test-Center.Test_Blocky_Javascript
        13:58:27.627	info	javascript.0 (1792) Start javascript script.js.Test-Center.Test_Blocky_Javascript
        13:58:27.646	info	javascript.0 (1792) script.js.Test-Center.Test_Blocky_Javascript: 3 - undefined
        13:58:27.647	info	javascript.0 (1792) script.js.Test-Center.Test_Blocky_Javascript: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
        13:58:27.647	info	javascript.0 (1792) script.js.Test-Center.Test_Blocky_Javascript: Return = undefined
        13:58:27.654	info	javascript.0 (1792) script.js.Test-Center.Test_Blocky_Javascript: 5148.2 2024-01-08T22:55:00.053Z
        13:58:27.654	info	javascript.0 (1792) script.js.Test-Center.Test_Blocky_Javascript: 1 - 5148.2
        13:58:27.654	info	javascript.0 (1792) script.js.Test-Center.Test_Blocky_Javascript: 5148.2 2024-01-09T12:58:27.646Z
        13:58:27.655	info	javascript.0 (1792) script.js.Test-Center.Test_Blocky_Javascript: 1 - 5148.2
        13:58:27.655	info	javascript.0 (1792) script.js.Test-Center.Test_Blocky_Javascript: 2 - 5148.2```
        haus-automatisierungH 1 Antwort Letzte Antwort
        0
        • wierer-sigiW wierer-sigi

          @oliverio

          Danke für den Hinweis mit der Toten Zeile.

          Ziel wäre es das der Wert via return in das Blocky zurückgegeben wird.

          Bildschirmfoto 2024-01-09 um 13.43.40.png

          Die Variable yyy übergibt er an das JS und verwendet es auch.

          Aber ich bekomme halt xxx nicht zurück, da dies innerhalb der function ist.

          var yyy;
          var end = Date.now();
          var xxx;
          sendTo('history.0', 'getHistory', {
              id: 'javascript.0.WBH_Engergy.PV_Gesamt_gestern',
              options: {
                  count:      yyy,
                  end:        end,
                  aggregate: 'Max',
                  ignoreNull: 'true'
              }
          }, function (result) {
              for (var i = 0; i < result.result.length; i++) {
                  console.log(result.result[i].val + ' ' + new Date(result.result[i].ts).toISOString());
                  xxx = result.result[i].val;
                  console.log("1 - " + xxx)
              };
              console.log("2 - " + xxx);
          });
          console.log("3 -  " + xxx);
          return xxx;
          
          13:58:27.523	info	javascript.0 (1792) Stop script script.js.Test-Center.Test_Blocky_Javascript
          13:58:27.627	info	javascript.0 (1792) Start javascript script.js.Test-Center.Test_Blocky_Javascript
          13:58:27.646	info	javascript.0 (1792) script.js.Test-Center.Test_Blocky_Javascript: 3 - undefined
          13:58:27.647	info	javascript.0 (1792) script.js.Test-Center.Test_Blocky_Javascript: registered 0 subscriptions, 0 schedules, 0 messages, 0 logs and 0 file subscriptions
          13:58:27.647	info	javascript.0 (1792) script.js.Test-Center.Test_Blocky_Javascript: Return = undefined
          13:58:27.654	info	javascript.0 (1792) script.js.Test-Center.Test_Blocky_Javascript: 5148.2 2024-01-08T22:55:00.053Z
          13:58:27.654	info	javascript.0 (1792) script.js.Test-Center.Test_Blocky_Javascript: 1 - 5148.2
          13:58:27.654	info	javascript.0 (1792) script.js.Test-Center.Test_Blocky_Javascript: 5148.2 2024-01-09T12:58:27.646Z
          13:58:27.655	info	javascript.0 (1792) script.js.Test-Center.Test_Blocky_Javascript: 1 - 5148.2
          13:58:27.655	info	javascript.0 (1792) script.js.Test-Center.Test_Blocky_Javascript: 2 - 5148.2```
          haus-automatisierungH Offline
          haus-automatisierungH Offline
          haus-automatisierung
          Developer Most Active
          schrieb am zuletzt editiert von haus-automatisierung
          #4

          @wierer-sigi sagte in Wert aus function zurückgeben:

          Ziel wäre es das der Wert via return in das Blocky zurückgegeben wird.

          Dann musst Du ein Promise zurückgeben, da alle Blockly-Funktionen mit await aufgerufen werden.

          return new Promise((resolve) => {
              sendTo('history.0', 'getHistory', {
                  id: 'javascript.0.WBH_Engergy.PV_Gesamt_gestern',
                  options: {
                      count:      yyy,
                      end:        Date.now(),
                      aggregate: 'Max',
                      ignoreNull: 'true'
                  }
              }, (result) => {
                  for (var i = 0; i < result.result.length; i++) {
                      console.log(result.result[i].val + ' ' + new Date(result.result[i].ts).toISOString());
                      resolve(result.result[i].val);
                  }
              })
          });
          

          Da solltest Du nur sicherstellen, dass auch wirklich immer Daten zurückkommen. Sonst wartet der Code ewig. Also auch für einen reject() sorgen. Aber das nur als Beispiel, weil ich den Code eh nicht verstehe. Wozu die Schleife?

          🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
          🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
          📚 Meine inoffizielle ioBroker Dokumentation

          OliverIOO 1 Antwort Letzte Antwort
          1
          • haus-automatisierungH haus-automatisierung

            @wierer-sigi sagte in Wert aus function zurückgeben:

            Ziel wäre es das der Wert via return in das Blocky zurückgegeben wird.

            Dann musst Du ein Promise zurückgeben, da alle Blockly-Funktionen mit await aufgerufen werden.

            return new Promise((resolve) => {
                sendTo('history.0', 'getHistory', {
                    id: 'javascript.0.WBH_Engergy.PV_Gesamt_gestern',
                    options: {
                        count:      yyy,
                        end:        Date.now(),
                        aggregate: 'Max',
                        ignoreNull: 'true'
                    }
                }, (result) => {
                    for (var i = 0; i < result.result.length; i++) {
                        console.log(result.result[i].val + ' ' + new Date(result.result[i].ts).toISOString());
                        resolve(result.result[i].val);
                    }
                })
            });
            

            Da solltest Du nur sicherstellen, dass auch wirklich immer Daten zurückkommen. Sonst wartet der Code ewig. Also auch für einen reject() sorgen. Aber das nur als Beispiel, weil ich den Code eh nicht verstehe. Wozu die Schleife?

            OliverIOO Offline
            OliverIOO Offline
            OliverIO
            schrieb am zuletzt editiert von
            #5

            @haus-automatisierung sagte in Wert aus function zurückgeben:

            Das resolve kann nur einmal ausgeführt werden

            return new Promise((resolve) => {
                sendTo('history.0', 'getHistory', {
                    id: 'javascript.0.WBH_Engergy.PV_Gesamt_gestern',
                    options: {
                        count:      yyy,
                        end:        Date.now(),
                        aggregate: 'Max',
                        ignoreNull: 'true'
                    }
                }, (result) => {
                    for (var i = 0; i < result.result.length; i++) {
                        console.log(result.result[i].val + ' ' + new Date(result.result[i].ts).toISOString());
                    };
                    resolve(result.result);
                   });
            });
            

            Meine Adapter und Widgets
            TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
            Links im Profil

            haus-automatisierungH 1 Antwort Letzte Antwort
            1
            • OliverIOO OliverIO

              @haus-automatisierung sagte in Wert aus function zurückgeben:

              Das resolve kann nur einmal ausgeführt werden

              return new Promise((resolve) => {
                  sendTo('history.0', 'getHistory', {
                      id: 'javascript.0.WBH_Engergy.PV_Gesamt_gestern',
                      options: {
                          count:      yyy,
                          end:        Date.now(),
                          aggregate: 'Max',
                          ignoreNull: 'true'
                      }
                  }, (result) => {
                      for (var i = 0; i < result.result.length; i++) {
                          console.log(result.result[i].val + ' ' + new Date(result.result[i].ts).toISOString());
                      };
                      resolve(result.result);
                     });
              });
              
              haus-automatisierungH Offline
              haus-automatisierungH Offline
              haus-automatisierung
              Developer Most Active
              schrieb am zuletzt editiert von
              #6

              @oliverio sagte in Wert aus function zurückgeben:

              Das resolve kann nur einmal ausgeführt werden

              Sorry, war quick and dirty im Forum programmiert. Ich sag ja, dass der Teil mit der Schleife eh sinnlos ist. Entweder man möchte nur einen Wert (dann kann man den auch direkt Abfragen), oder alle Werte.

              🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
              🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
              📚 Meine inoffizielle ioBroker Dokumentation

              OliverIOO wierer-sigiW 2 Antworten Letzte Antwort
              0
              • haus-automatisierungH haus-automatisierung

                @oliverio sagte in Wert aus function zurückgeben:

                Das resolve kann nur einmal ausgeführt werden

                Sorry, war quick and dirty im Forum programmiert. Ich sag ja, dass der Teil mit der Schleife eh sinnlos ist. Entweder man möchte nur einen Wert (dann kann man den auch direkt Abfragen), oder alle Werte.

                OliverIOO Offline
                OliverIOO Offline
                OliverIO
                schrieb am zuletzt editiert von
                #7

                @haus-automatisierung
                alles gut.
                ich weiß das du das weißt

                Meine Adapter und Widgets
                TVProgram, SqueezeboxRPC, OpenLiga, RSSFeed, MyTime,, pi-hole2, vis-json-template, skiinfo, vis-mapwidgets, vis-2-widgets-rssfeed
                Links im Profil

                1 Antwort Letzte Antwort
                0
                • haus-automatisierungH haus-automatisierung

                  @oliverio sagte in Wert aus function zurückgeben:

                  Das resolve kann nur einmal ausgeführt werden

                  Sorry, war quick and dirty im Forum programmiert. Ich sag ja, dass der Teil mit der Schleife eh sinnlos ist. Entweder man möchte nur einen Wert (dann kann man den auch direkt Abfragen), oder alle Werte.

                  wierer-sigiW Offline
                  wierer-sigiW Offline
                  wierer-sigi
                  schrieb am zuletzt editiert von
                  #8

                  @haus-automatisierung
                  @oliverio

                  Dank Euch, funktioniert.

                  Die Schleife war, wenn ich mir z.B. alle Werte von einem Tag / Monat anzeigen lassen will.

                  haus-automatisierungH 1 Antwort Letzte Antwort
                  0
                  • wierer-sigiW wierer-sigi

                    @haus-automatisierung
                    @oliverio

                    Dank Euch, funktioniert.

                    Die Schleife war, wenn ich mir z.B. alle Werte von einem Tag / Monat anzeigen lassen will.

                    haus-automatisierungH Offline
                    haus-automatisierungH Offline
                    haus-automatisierung
                    Developer Most Active
                    schrieb am zuletzt editiert von haus-automatisierung
                    #9

                    @wierer-sigi Wäre noch schön, wenn Du den Downvote in der ersten Antwort von @OliverIO entfernst :) Oder wofür ist der? Gerne hilfreiche Beiträge bewerten...

                    🧑‍🎓 Autor des beliebten ioBroker-Master-Kurses
                    🎥 Tutorials rund um das Thema DIY-Smart-Home: https://haus-automatisierung.com/
                    📚 Meine inoffizielle ioBroker Dokumentation

                    1 Antwort Letzte Antwort
                    2
                    Antworten
                    • In einem neuen Thema antworten
                    Anmelden zum Antworten
                    • Älteste zuerst
                    • Neuste zuerst
                    • Meiste Stimmen


                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    461

                    Online

                    32.4k

                    Benutzer

                    81.5k

                    Themen

                    1.3m

                    Beiträge
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                    ioBroker Community 2014-2025
                    logo
                    • Anmelden

                    • Du hast noch kein Konto? Registrieren

                    • Anmelden oder registrieren, um zu suchen
                    • Erster Beitrag
                      Letzter Beitrag
                    0
                    • Home
                    • Aktuell
                    • Tags
                    • Ungelesen 0
                    • Kategorien
                    • Unreplied
                    • Beliebt
                    • GitHub
                    • Docu
                    • Hilfe