Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Verständnisproblem: sql Abfrage in Function, Ergebnis als Rückgabewert

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    16
    1
    241

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    4.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    1.3k

Verständnisproblem: sql Abfrage in Function, Ergebnis als Rückgabewert

Scheduled Pinned Locked Moved JavaScript
6 Posts 3 Posters 540 Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • E Offline
    E Offline
    ehome
    wrote on last edited by
    #1

    Hallo,
    ich habe eine Funktion, bei der ich ein Ergebnis aus einer sql Abfrage zurückgeben möchte.

    //Funktionsaufruf 
    var niedrigsterTagesWert=wert_tagesanfang(ID_PV_PRODUKTION);
    log ("minimal: "+niedrigsterTagesWert);
    
    ....
    // Funktion:
    function wert_tagesanfang(obj) { 
        var ergebnis;
        var myQuery="SELECT min(val) as minwert FROM iobroker.ts_number WHERE  id=(select id from iobroker.datapoints where name='"+obj+"') AND (FROM_UNIXTIME(substring(ts,1,10))) >= concat(DATE_FORMAT(NOW(), '%Y-%m-%d'), ' 00:00:00');";
             //log(myQuery);
        sendTo('sql.0', 'query', myQuery, function (result) {
            if (result.error) {
                log(result.error);
            } else {
                ergebnis=result.result[0].minwert;
                log("ergebnis in func:"+ergebnis);
            }
            
        });
        return ergebnis; 
    }
    

    Obwohl in der Function das richtige Ergebnis im Log ausgegeben wird, wird für den übergebene Wert ein undefined im Log ausgegeben, auch scheint der Rückgabewert laut Timestamp VOR dem Ergebnis aus der SQL Abfrage ausgegeben

    2019-05-28 22:06:52.274  - info: javascript.1 script.js.History_Werte_+_DB_Pflege.SQL_Tagesstatsistik: minimal: undefined
    2019-05-28 22:06:52.274  - info: javascript.1 script.js.History_Werte_+_DB_Pflege.SQL_Tagesstatsistik: NaN
    2019-05-28 22:06:52.378  - info: javascript.1 script.js.History_Werte_+_DB_Pflege.SQL_Tagesstatsistik: ergebnis in func:1271882
    
    

    kann mir das jemand erklären, wie ich mit der Rückgabe auf die SQl Abfrage "warten" kann?

    paul53P 1 Reply Last reply
    0
    • E ehome

      Hallo,
      ich habe eine Funktion, bei der ich ein Ergebnis aus einer sql Abfrage zurückgeben möchte.

      //Funktionsaufruf 
      var niedrigsterTagesWert=wert_tagesanfang(ID_PV_PRODUKTION);
      log ("minimal: "+niedrigsterTagesWert);
      
      ....
      // Funktion:
      function wert_tagesanfang(obj) { 
          var ergebnis;
          var myQuery="SELECT min(val) as minwert FROM iobroker.ts_number WHERE  id=(select id from iobroker.datapoints where name='"+obj+"') AND (FROM_UNIXTIME(substring(ts,1,10))) >= concat(DATE_FORMAT(NOW(), '%Y-%m-%d'), ' 00:00:00');";
               //log(myQuery);
          sendTo('sql.0', 'query', myQuery, function (result) {
              if (result.error) {
                  log(result.error);
              } else {
                  ergebnis=result.result[0].minwert;
                  log("ergebnis in func:"+ergebnis);
              }
              
          });
          return ergebnis; 
      }
      

      Obwohl in der Function das richtige Ergebnis im Log ausgegeben wird, wird für den übergebene Wert ein undefined im Log ausgegeben, auch scheint der Rückgabewert laut Timestamp VOR dem Ergebnis aus der SQL Abfrage ausgegeben

      2019-05-28 22:06:52.274  - info: javascript.1 script.js.History_Werte_+_DB_Pflege.SQL_Tagesstatsistik: minimal: undefined
      2019-05-28 22:06:52.274  - info: javascript.1 script.js.History_Werte_+_DB_Pflege.SQL_Tagesstatsistik: NaN
      2019-05-28 22:06:52.378  - info: javascript.1 script.js.History_Werte_+_DB_Pflege.SQL_Tagesstatsistik: ergebnis in func:1271882
      
      

      kann mir das jemand erklären, wie ich mit der Rückgabe auf die SQl Abfrage "warten" kann?

      paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by
      #2

      @ehome return ergebnis wird ausgeführt, bevor sendTo() abgearbeitet ist (asynchrone Abarbeitung von sendTo()). Lösung:

      function auswertung(res) {
         var niedrigsterTagesWert = res;
         log ("minimal: "+niedrigsterTagesWert);
      }
      
      // Funktion:
      function wert_tagesanfang(obj) { 
          var ergebnis;
          var myQuery="SELECT min(val) as minwert FROM iobroker.ts_number WHERE  id=(select id from iobroker.datapoints where name='"+obj+"') AND (FROM_UNIXTIME(substring(ts,1,10))) >= concat(DATE_FORMAT(NOW(), '%Y-%m-%d'), ' 00:00:00');";
               //log(myQuery);
          sendTo('sql.0', 'query', myQuery, function (result) {
              if (result.error) {
                  log(result.error);
              } else {
                  ergebnis=result.result[0].minwert;
                  log("ergebnis in func:"+ergebnis);
                  auswertung(ergebnis);
              }
          });
      }
      
      //Funktionsaufruf 
      wert_tagesanfang(ID_PV_PRODUKTION);
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Reply Last reply
      0
      • E Offline
        E Offline
        ehome
        wrote on last edited by
        #3

        Danke Paul,

        dazu eine Verständnisfrage: Es gibt keine Möglichkeit einen "return" wert am Ende von "wert_tagesanfang" zurückzugeben, da die sendTo parallel und unabhängig läuft. Die Funktion Auswertung dient nur dazu, direkt um NACH dem Lauf von sendTo etwas auszuführen zu können - richtig ?

        paul53P 1 Reply Last reply
        0
        • E ehome

          Danke Paul,

          dazu eine Verständnisfrage: Es gibt keine Möglichkeit einen "return" wert am Ende von "wert_tagesanfang" zurückzugeben, da die sendTo parallel und unabhängig läuft. Die Funktion Auswertung dient nur dazu, direkt um NACH dem Lauf von sendTo etwas auszuführen zu können - richtig ?

          paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by
          #4

          @ehome sagte:

          Die Funktion Auswertung dient nur dazu, direkt um NACH dem Lauf von sendTo etwas auszuführen zu können - richtig ?

          Richtig, deshalb habe ich sie auswertung genannt.

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          E hanssH 2 Replies Last reply
          0
          • paul53P paul53

            @ehome sagte:

            Die Funktion Auswertung dient nur dazu, direkt um NACH dem Lauf von sendTo etwas auszuführen zu können - richtig ?

            Richtig, deshalb habe ich sie auswertung genannt.

            E Offline
            E Offline
            ehome
            wrote on last edited by
            #5

            @paul53 Danke

            1 Reply Last reply
            0
            • paul53P paul53

              @ehome sagte:

              Die Funktion Auswertung dient nur dazu, direkt um NACH dem Lauf von sendTo etwas auszuführen zu können - richtig ?

              Richtig, deshalb habe ich sie auswertung genannt.

              hanssH Offline
              hanssH Offline
              hanss
              wrote on last edited by hanss
              #6

              @paul53
              Vielen Dank, das leuchtet ein.

              Wenn am Programmende nur ein log("blabla") erforderlich ist, dann geht das ja noch.
              Wenn man aber im Programm mit dem Rückgabewert weiterarbeiten will, dann passiert das in
              der Callback Funktion "auswertung".

              Das wird bei mehreren Abfragen dann sehr unübersichtlich.
              Siehe: https://forum.iobroker.net/topic/35344/sql-abfrage-universal/10

              Gibt es dafür eine Lösung?

              1 Reply Last reply
              0
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              Support us

              ioBroker
              Community Adapters
              Donate

              593

              Online

              32.7k

              Users

              82.5k

              Topics

              1.3m

              Posts
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
              ioBroker Community 2014-2025
              logo
              • Login

              • Don't have an account? Register

              • Login or register to search.
              • First post
                Last post
              0
              • Home
              • Recent
              • Tags
              • Unread 0
              • Categories
              • Unreplied
              • Popular
              • GitHub
              • Docu
              • Hilfe