Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Sql query Rückgabewert verwenden

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Sql query Rückgabewert verwenden

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

      Hi,

      Mit folgender SQL phpmyadmin Query bekomme ich genau einen gewünschten Wert zurück:

      SELECT MAX(iobroker.ts_number.val) FROM iobroker.ts_number INNER JOIN iobroker.datapoints ON iobroker.ts_number.id=iobroker.datapoints.id WHERE iobroker.datapoints.name like 'javascript.1.Fronius.Messwerte.AktuelleEnergieErzeugung';
      

      ****Diesen Abfrage möchte ich nun in einem JS Skript verwenden, schaffe es aber nicht, diesen Wert in eine Variable zu bekommen.

      Wie muss man das machen?****

      Ich nehme an, dass folgende Syntax prinzipiell richtig ist:

      sendTo('sql.0', 'query', 'SELECT MAX(iobroker.ts_number.val) FROM iobroker.ts_number INNER JOIN iobroker.datapoints ON iobroker.ts_number.id=iobroker.datapoints.id WHERE iobroker.datapoints.name like \'javascript.1.Fronius.Messwerte.AktuelleEnergieErzeugung\';');
      

      Nur wie muss ich den sendTo handeln?

      Ein````
      var mein_wert = sendTo('sql.0....

      
      Hatte auch erfolglos versucht
      

      MeineSQLAbfrage(), function(error, stdout, stderr) {
      meineVariable = stdout;
      MeineSQLAbfrage(){
      sendTo('sql.0....
      }

      Wo ist der Kniff?
      
      Danke im Voraus.
      1 Reply Last reply Reply Quote 0
      • Thisoft
        Thisoft last edited by

        Hallo,

        jetzt mal ungeprüft zusammengeschrieben:

        
        function ergebnis(result) {
          log('Maximum ist:'+ JSON.stringify(result.result));
        }
        sendTo('sql.0', 'query', 'SELECT MAX(iobroker.ts_number.val) FROM iobroker.ts_number INNER JOIN iobroker.datapoints ON iobroker.ts_number.id=iobroker.datapoints.id WHERE iobroker.datapoints.name = \'javascript.1.Fronius.Messwerte.AktuelleEnergieErzeugung\'',ergebnis);
        

        Ich habe auch ein Weilchen gebraucht um dahinterzusteigen was da abläuft. Durch die asynchrone Verarbeitung in Javascript kann man den Rückgabewert nicht einfach in der aufrufenden Routine weiterverwenden sondern muss die Auswertung in eine Function packen die durch die Rückgabe des Wertes erst aufgerufen wird…

        Oder so - man möge mich schlagen und korrigieren wenn das falsch erklärt ist 😉

        Gruß Thilo

        1 Reply Last reply Reply Quote 0
        • F
          Fitti last edited by

          (huch, da gab es ja schon eine Antwort. Danke Thilo)

          Okay, nun habe ich es gefunden. Stand in der SQL Adapter Anleitung. Hatte ich natürlich da nicht gesucht. :roll:

          Nun sieht es so aus:

              sendTo('sql.0', 'query', 'SELECT MAX(iobroker.ts_number.val) FROM iobroker.ts_number INNER JOIN iobroker.datapoints ON iobroker.ts_number.id=iobroker.datapoints.id WHERE iobroker.datapoints.name like \'javascript.1.Fronius.Messwerte.AktuelleEnergieErzeugung\';', function (result) {
              if (result.error) {
                  console.error(result.error);
              } else {
                  // show result
                   log('Rows: ' + JSON.stringify(result.result));
              }
              });
          

          Jetzt versuche ich noch herauszufinden, wie ich <u>am einfachsten</u> aus result.result einfach nur mein gewünschten Wert heraushole.

          Hiermit wird es ja zu einem JSON. Die Ausgabe ist:

          [{"MAX(iobroker.ts_number.val)":6303}]
          

          Was mich zuerst verwunderte. Bei näherer Betrachtung ist schon klar, dass die Spalteninfos mitkommen.

          In anderen Programiersprachen habe ich hier immer nur den/die Werte zurückerhalten.

          Gibt es hier eine eine einfache Möglichkeit?

          <size size="85">(Damit meine ich nicht, den Rückgabewert zu extrahieren, das kann ich ja mit JSON Parse machen).</size>

          1 Reply Last reply Reply Quote 0
          • Thisoft
            Thisoft last edited by

            Wenn Du schreibst:

            'SELECT MAX(iobroker.ts_number.val) As MaxVal...
            

            dann erhältst du mit:

            result.result[0].MaxVal
            

            direkt den Wert

            1 Reply Last reply Reply Quote 0
            • F
              Fitti last edited by

              Hier fehlt eindeutig ein KlatschMitDerHandAnDenKopf Smilie.~~![](</s><URL url=)<link_text text="http://i754.photobucket.com/albums/xx18 ... er/doh.gif">http://i754.photobucket.com/albums/xx181/Simon_Gardner/doh.gif</link_text>" />

              Danke für die Erleuchtung des Tages - da stand ich mir selber im Weg.

              Wundere mich nur, warum ich nun result.result als array ansprechen muss?~~

              1 Reply Last reply Reply Quote 0
              • apollon77
                apollon77 last edited by

                Die Doku auf der Github-Seite des Adapters hätte das auch gelöst 🙂 Da ist ein Beispiel drauf …

                1 Reply Last reply Reply Quote 0
                • F
                  Fitti last edited by

                  @apollon77:

                  Die Doku auf der Github-Seite des Adapters hätte das auch gelöst 🙂 Da ist ein Beispiel drauf … `

                  Welchen Beitrag meist Du? Den ersten? Da habe ich doch geschrieben, dass ich den da gefunden habe.

                  Oder steht da was, warum ich es einmal als Array und einmal nicht als array anspreche?

                  1 Reply Last reply Reply Quote 0
                  • D
                    der_Auge last edited by

                    Hi

                    ich verzweifel.

                    Finde keine Lösung

                    Alle Themen die ich gefunden habe helfen nicht das Thema umzusetzen.

                    EDIT:

                    Habe nun eine Lösung gefunden

                    http://forum.iobroker.net/viewtopic.php … 20#p109828

                    Gruß

                    Jürgen

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    584
                    Online

                    31.7k
                    Users

                    79.8k
                    Topics

                    1.3m
                    Posts

                    4
                    8
                    4445
                    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