NEWS
[gelöst] Skript - JS und SQL Abfrage - Erg undifined
-
@michl75
Wie man mit dem Blockly-sendTo eine query-Abfrage macht, weiß ich auch nicht. Das Ergebnis steht jedenfalls nicht in Wert, sondern in einer Variable result.Versuche es mal so:
Funktion abfrage(t):
let _sql = "SELECT AVG(val) FROM iobroker.ts_number where id = 218 and ts > (" + t + ")"; sendTo('sql.0', 'query', _sql, auswertung);
-
@paul53 Erstmal danke für deine Mühe... Habe erst mal meins verworfen und NEU wie deins aufgebaut....
Der Code dazu... genau so...
let _sql = "SELECT AVG(val) FROM iobroker.ts_number where id = 218 and ts > (" + t + ")"; sendTo('sql.0', 'query', _sql, auswertung); {1}
und Ergebnis:
Hätte ich nur mehr Ahnung davon...
EDIT .. das Doppelte {1} ... keine ahnugn woher das kommt, steht aber nicht so in meinem Code...
-
@michl75 sagte: Hätte ich nur mehr Ahnung davon...
Ich hatte anfangs noch einen Fehler drin, den ich nachträglich korrigiert habe: Die Funktion auswertung(result) muss den Parameter result erhalten.
-
@paul53 ok moment ich teste
EDIT: Es tut sich was auch wenn noch kein Ergebnis... aber ... so sieht die Ausgabe nun aus:
...und so versucht er es auch mit setState in die Variable zu schreiben - klar bleibt 0 ist ja text und keine Zahl
-
@michl75 sagte:
so sieht die Ausgabe nun aus:
Das sieht schon gut aus. Mach mal weiter:
Nun müsste noch obj['AVG(val)'] ermittelt werden, was wohl so wegen der Klammern in Blockly nicht funktioniert.
Dann besser gleich eine JS-Funktion mit Ergebnis:
return res.result[0]['AVG(val)'];
-
@paul53 sieht nun so aus...
glaub wir kommen dem ergebnis näher
das AVG muss noch weg iwie -
@michl75 sagte in Skript - JS-Funktion und SQL Abfrage - Ergebnis undifined:
das AVG muss noch weg
Das Problem sind die Klammern (unzulässige Zeichen).
Funktion average(res):
return res.result[0]['AVG(val)'];
-
@michl75
Man kann die Aufschlüsselung des Abfrageergebnisses auch gleich in die Funktion abfrage(t) packen:let _sql = "SELECT AVG(val) FROM iobroker.ts_number where id = 218 and ts > (" + t + ")"; sendTo('sql.0', 'query', _sql, function(res) { if(!res.error) auswertung(res.result[0]['AVG(val)']); });
-
-
@michl75 sagte: Es funktioniert!!!
Die Konvertierung "nach Zahl" sollte nicht erforderlich sein.
Markiere bitte das Thema in der Überschrift des ersten Beitrags als [gelöst].