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. Probleme mit SendTo

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

Probleme mit SendTo

Geplant Angeheftet Gesperrt Verschoben JavaScript
4 Beiträge 2 Kommentatoren 514 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.
  • F Offline
    F Offline
    FISO
    schrieb am zuletzt editiert von
    #1

    Ich hab den SQL Adapter installiert, mit der Absicht, selber Daten zu schreiben und auch auszulesen. Auf der Info-Seite gibt es ja ein paar Beispiele, wie man das macht (Mit SendTo), aber ich bekomm die Daten nicht aus dieser SendTo Funktion "raus", so dass ich die Daten weiterverarbeiten kann.... Hier mein Beispiel:

    var db = "XXX";
    var table = "XXX";
    
    var test1 = "";
    sendTo('sql.0', 'query', 'SELECT * FROM ' + db + "." + table + ' where datum between "2022-03-01" and "2022-03-28"', function (result) {
        if (result.error) {
            console.error(result.error);
        } else {
            // show result        
            help_func(JSON.stringify(result.result));        
        }
    });
        
    
    async function help_func(db_wert) {              
        test1 = await db_wert;
    }
    
    console.log(test1);
    

    console.log(test1) bleibt leer. Führe ich das in der help_func() aus, dann wird mir das angezeigt! Ich kann die Daten nicht in die Variable test1 schreiben und außerhalb von SendTo darauf zugreifen, das geht nur innerhalb. Wie kann man dieses Problem lösen? Mein Hirn raucht schon und bin mehr gefrustet als begeistert ;)

    Ich hoffe ihr könnt mir Helfen :)

    VG

    Steve

    OliverIOO 1 Antwort Letzte Antwort
    0
    • F FISO

      Ich hab den SQL Adapter installiert, mit der Absicht, selber Daten zu schreiben und auch auszulesen. Auf der Info-Seite gibt es ja ein paar Beispiele, wie man das macht (Mit SendTo), aber ich bekomm die Daten nicht aus dieser SendTo Funktion "raus", so dass ich die Daten weiterverarbeiten kann.... Hier mein Beispiel:

      var db = "XXX";
      var table = "XXX";
      
      var test1 = "";
      sendTo('sql.0', 'query', 'SELECT * FROM ' + db + "." + table + ' where datum between "2022-03-01" and "2022-03-28"', function (result) {
          if (result.error) {
              console.error(result.error);
          } else {
              // show result        
              help_func(JSON.stringify(result.result));        
          }
      });
          
      
      async function help_func(db_wert) {              
          test1 = await db_wert;
      }
      
      console.log(test1);
      

      console.log(test1) bleibt leer. Führe ich das in der help_func() aus, dann wird mir das angezeigt! Ich kann die Daten nicht in die Variable test1 schreiben und außerhalb von SendTo darauf zugreifen, das geht nur innerhalb. Wie kann man dieses Problem lösen? Mein Hirn raucht schon und bin mehr gefrustet als begeistert ;)

      Ich hoffe ihr könnt mir Helfen :)

      VG

      Steve

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

      @fiso

      1. warum verwendest du hier async und await?
        Die Function, die im sendTo-Aufruf definiert wird, ist ein callback.
        dh wenn diese funktion aufgerufen wird, ist das ergebnis bereits in result enthalten und es muss nicht noch gewartet werden.
        wenn du im sql einen fehler gemacht hast, steht das in result.error drin.
        wenn der sqlbefehl erfolgreich war, stehen die daten in result.result drin.
        daher kannst du Zeile 10 direkt mit folgendem ersetzen
      console.log(JSON.stringify(result.result));
      
      1. db_wert ist eine variable
        async und await können nur vor funktionsbezeichner geschrieben werden.

      Zeile 19. der Befehl ist ausserhabl der beiden Blöcke.
      an dieser Stelle ist test1 immer noch "".

      das ist leider etwas das tückische an javascript, das die abarbeitung nicht wie in einer funktionalen programiersprache, welche linear abgearbeitet wird, vergleichbar ist.
      die reihenfolge der abarbeitung
      1-4 normal
      5; der befehl wird gestartet, aber asynchron üer callback. die zeit bis das zurückkehrt ist nicht vorhersehbar und die restlichen befehle des aktuellen blocks müssen noch zu ende abgearbeitet werden
      15, aber keine ausführung, sondern hier wird die funktion an sich nur deklariert
      19. wie bereits gesagt, wegen zeile 4, ist test1 = ""

      dann wenn der sendTo fertig ist, wird der callback (2.parameter im sendto aufgerufen).
      und dann gehts hier ab zeile 6 weiter.

      noch eine zusatzinfo

      await kann nur vor eine funktionsbezeichner geschrieben werden, der ein sogenanntes promis zurück gibt.
      async kapselt automatisch so eine funktion und gibt ohne zutun des programmierers ein promise zurück
      await wartet dann so lange bis der promise aufgelöst wird.
      aber da muss man sich erst ein wenig reindenken
      https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Promise
      https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Statements/async_function
      https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Operators/await

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

      F 1 Antwort Letzte Antwort
      0
      • OliverIOO OliverIO

        @fiso

        1. warum verwendest du hier async und await?
          Die Function, die im sendTo-Aufruf definiert wird, ist ein callback.
          dh wenn diese funktion aufgerufen wird, ist das ergebnis bereits in result enthalten und es muss nicht noch gewartet werden.
          wenn du im sql einen fehler gemacht hast, steht das in result.error drin.
          wenn der sqlbefehl erfolgreich war, stehen die daten in result.result drin.
          daher kannst du Zeile 10 direkt mit folgendem ersetzen
        console.log(JSON.stringify(result.result));
        
        1. db_wert ist eine variable
          async und await können nur vor funktionsbezeichner geschrieben werden.

        Zeile 19. der Befehl ist ausserhabl der beiden Blöcke.
        an dieser Stelle ist test1 immer noch "".

        das ist leider etwas das tückische an javascript, das die abarbeitung nicht wie in einer funktionalen programiersprache, welche linear abgearbeitet wird, vergleichbar ist.
        die reihenfolge der abarbeitung
        1-4 normal
        5; der befehl wird gestartet, aber asynchron üer callback. die zeit bis das zurückkehrt ist nicht vorhersehbar und die restlichen befehle des aktuellen blocks müssen noch zu ende abgearbeitet werden
        15, aber keine ausführung, sondern hier wird die funktion an sich nur deklariert
        19. wie bereits gesagt, wegen zeile 4, ist test1 = ""

        dann wenn der sendTo fertig ist, wird der callback (2.parameter im sendto aufgerufen).
        und dann gehts hier ab zeile 6 weiter.

        noch eine zusatzinfo

        await kann nur vor eine funktionsbezeichner geschrieben werden, der ein sogenanntes promis zurück gibt.
        async kapselt automatisch so eine funktion und gibt ohne zutun des programmierers ein promise zurück
        await wartet dann so lange bis der promise aufgelöst wird.
        aber da muss man sich erst ein wenig reindenken
        https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Promise
        https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Statements/async_function
        https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Operators/await

        F Offline
        F Offline
        FISO
        schrieb am zuletzt editiert von
        #3

        @oliverio

        Hallo Oliver,

        Ursprünglich hatte ich ja kein Await und Async verwendent, sondern:

        var db = "XXX";
        var table = "XXX";
         
        var test1 = "";
        sendTo('sql.0', 'query', 'SELECT * FROM ' + db + "." + table + ' where datum between "2022-03-01" and "2022-03-28"', function (result) {
            if (result.error) {
                console.error(result.error);
            } else {
                // show result        
                help_func(JSON.stringify(result.result));        
            }
        });
            
         
        function help_func(db_wert) {              
            test1 = db_wert;
        }
         
        console.log(test1);
        

        Ich bin da noch unerfahren, aber mir wurde im FB-ioBroker bereich geraten damit mal zu experimentieren. Es war mir klar, dass ich wohl damit keinen Erfolg habe.

        Die SQL Syntax ist richtig, ich bekomme ja meine Daten aus der DB zurück. Das einzige was mir halt noch fehlt ist dass ich außerhalb der Blöcke dann damit arbeiten kann.

        So wie ich dich richtig verstanden habe ist, dass der SendTo asynchron gestartet wird und der restliche Code trotzdem weiterverarbeitet wird auch wenn der SendTo Block noch nicht fertig ist. Gibt es denn eine Möglichkeit außerhalb der Blöcke auf das Ergebnis zu warten und erst wenn ich die Daten bekomme dann damit zu arbeiten?

        Ich sage aber schonmal Vorab Danke für deine Erklärung :) Vielen Dank und dir noch einen schönen Abend :)

        VG Steve

        OliverIOO 1 Antwort Letzte Antwort
        0
        • F FISO

          @oliverio

          Hallo Oliver,

          Ursprünglich hatte ich ja kein Await und Async verwendent, sondern:

          var db = "XXX";
          var table = "XXX";
           
          var test1 = "";
          sendTo('sql.0', 'query', 'SELECT * FROM ' + db + "." + table + ' where datum between "2022-03-01" and "2022-03-28"', function (result) {
              if (result.error) {
                  console.error(result.error);
              } else {
                  // show result        
                  help_func(JSON.stringify(result.result));        
              }
          });
              
           
          function help_func(db_wert) {              
              test1 = db_wert;
          }
           
          console.log(test1);
          

          Ich bin da noch unerfahren, aber mir wurde im FB-ioBroker bereich geraten damit mal zu experimentieren. Es war mir klar, dass ich wohl damit keinen Erfolg habe.

          Die SQL Syntax ist richtig, ich bekomme ja meine Daten aus der DB zurück. Das einzige was mir halt noch fehlt ist dass ich außerhalb der Blöcke dann damit arbeiten kann.

          So wie ich dich richtig verstanden habe ist, dass der SendTo asynchron gestartet wird und der restliche Code trotzdem weiterverarbeitet wird auch wenn der SendTo Block noch nicht fertig ist. Gibt es denn eine Möglichkeit außerhalb der Blöcke auf das Ergebnis zu warten und erst wenn ich die Daten bekomme dann damit zu arbeiten?

          Ich sage aber schonmal Vorab Danke für deine Erklärung :) Vielen Dank und dir noch einen schönen Abend :)

          VG Steve

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

          Hast du das den mal ausprobiert mit Zeile 10 was ich geschrieben habe?
          Was willst du den mit den Daten machen?
          Das JSON.stringify ist für die Weiterbearbeitung erst mal nicht hilfreich.
          Erst wenn du ein javascript-Objekt in einen Datenpunkt schreiben willst musst du das machen.

          In result.result ist ja ein Array mit Objekten
          Jedes Objekt ein Datensatz aus deiner Datenbank gemäß dem SQL

          Ansonsten machst du einfach so

          var db = "XXX";
          var table = "XXX";
           
          var test1 = "";
          sendTo('sql.0', 'query', 'SELECT * FROM ' + db + "." + table + ' where datum between "2022-03-01" and "2022-03-28"', function (result) {
              if (result.error) {
                  console.error(result.error);
              } else {
                  // show result        
                  help_func(result.result);        
              }
          });
              
           
          function help_func(result) {              
              console.debug(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

          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

          679

          Online

          32.6k

          Benutzer

          82.2k

          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