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. Verständnisproblem: sql Abfrage in Function, Ergebnis als Rückgabewert

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

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

Geplant Angeheftet Gesperrt Verschoben JavaScript
6 Beiträge 3 Kommentatoren 485 Aufrufe 2 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.
  • E Offline
    E Offline
    ehome
    schrieb am zuletzt editiert von
    #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 Antwort Letzte Antwort
    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
      schrieb am zuletzt editiert von
      #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 Antwort Letzte Antwort
      0
      • E Offline
        E Offline
        ehome
        schrieb am zuletzt editiert von
        #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 Antwort Letzte Antwort
        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
          schrieb am zuletzt editiert von
          #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 Antworten Letzte Antwort
          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
            schrieb am zuletzt editiert von
            #5

            @paul53 Danke

            1 Antwort Letzte Antwort
            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
              schrieb am zuletzt editiert von 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 Antwort Letzte Antwort
              0
              Antworten
              • In einem neuen Thema antworten
              Anmelden zum Antworten
              • Älteste zuerst
              • Neuste zuerst
              • Meiste Stimmen


              Support us

              ioBroker
              Community Adapters
              Donate

              667

              Online

              32.6k

              Benutzer

              82.0k

              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