NEWS
Sql query Rückgabewert verwenden
-
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.
-
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
-
(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>
-
Wenn Du schreibst:
'SELECT MAX(iobroker.ts_number.val) As MaxVal...
dann erhältst du mit:
result.result[0].MaxVal
direkt den Wert
-
Hier fehlt eindeutig ein KlatschMitDerHandAnDenKopf Smilie.
~~<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?~~
-
Die Doku auf der Github-Seite des Adapters hätte das auch gelöst
Da ist ein Beispiel drauf …
-
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?
-
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