Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Verständnisproblem: sql Abfrage in Function, Ergebnis als Rückgabewert

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

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

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

      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?

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

        @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);
        
        1 Reply Last reply Reply Quote 0
        • E
          ehome last edited by

          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 ?

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

            @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 hanss 2 Replies Last reply Reply Quote 0
            • E
              ehome @paul53 last edited by

              @paul53 Danke

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

                @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 Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                582
                Online

                31.6k
                Users

                79.4k
                Topics

                1.3m
                Posts

                3
                6
                375
                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