NEWS
Script.js - undefined
-
Hallo,
guten Morgen an Alle.
Ich bemühe mich gerade einbißchen in script einzuarbeiten. Als Anlehnung gibt es ja viele gute Beispiele, danke dafür.
Jetzt komme ich aber mit einem nicht weiter.schedule ( "12 10 * * *" , async function () { sendTo('sql.0', 'query', 'select sum(val) from iobroker.ts_number where id=86 ', function (sumsolarfeb22) { if (sumsolarfeb22.error) { console.error(sumsolarfeb22.error); } else { // show result log('Rows: ' + JSON.stringify(sumsolarfeb22.result)); var test = JSON.stringify(sumsolarfeb22.result[0]["sumsolarfeb22"]); log(test); } setState("0_userdata.0.SumSoFeb22", parseFloat(sumsolarfeb22.result[0]["sumsolarfeb22"]), true); } ) } ) ;
13.2.2022, 10:22:00.048 [info ]: javascript.0 (26225) script.js.Skript-SumSolarFeb22: sendTo(adapter=sql.0, cmd=query, msg="select sum(val) from iobroker.ts_number where id=86 ") 13.2.2022, 10:22:00.081 [info ]: javascript.0 (26225) script.js.Skript-SumSolarFeb22: Rows: [{"sum(val)":223.24739}] 13.2.2022, 10:22:00.082 [info ]: javascript.0 (26225) script.js.Skript-SumSolarFeb22: undefined 13.2.2022, 10:22:00.083 [info ]: javascript.0 (26225) script.js.Skript-SumSolarFeb22: setForeignState(id=0_userdata.0.SumSoFeb22, state={"val":null,"ack":true,"c":"script.js.Skript-SumSolarFeb22"})
Der Wert wird durch die sql-Abfrage richtig übergeben, aber nicht im Datenpunkt eingetragen. Ich habe schon mal den Datenpunkt als string bzw. number geändert und neuangelegt, leider keine Änderung.
Solche Scripte mit sql-Abfrage habe ich mehrere im Einsatz, laufen alle bestens.Habt Ihr einen Hinweis für mich??
Danke im Voraus.Gruß Reinald
-
@rhrh11 sagte in Script.js - undefined:
[{"sum(val)":223.24739}]
var test = JSON.stringify(sumsolarfeb22.result[0]["sum(val)"]);
-
@rhrh11 sagte: Rows: [{"sum(val)":223.24739}]
let test = sumsolarfeb22.result[0]['sum(val)']; log(test); setState("0_userdata.0.SumSoFeb22", Math.round(test), true); } }); });
-
Hallo,
danke für eure Hinweise, muss ich mir erstmal anschauen.
Ich hbe noch einges ausprobiert(bin schon ganz wuschig).
Wenn ich in der sql-abfrage statt sum ein max-wert berechne, funktioniert alles. Schreibt die sum-Funktion einen anderes Datenformat??? -
@rhrh11
Ich weiß nicht was die andere Funktion ausgibt aber:javascript.0 (26225) script.js.Skript-SumSolarFeb22: Rows: [{"sum(val)":223.24739}]
das ist ein Objekt. Auf ein Objekt greift man zu in dem man objektbezeichnung.schlüssel oder objektbezeichnung["schlüssel"] verwendet. In deinem Fall
sumsolarfeb22.result[0]["sum(val)"]
["sum(val)"] ist der Schlüssel.
Das JSON.stringify() hab ich übersehen und ist falsch/unnötig. Da der Wert von "sum(val)" eine Zahl(number) ist.
-
@rhrh11 sagte: Wenn ich in der sql-abfrage statt sum ein max-wert berechne, funktioniert alles.
Von SQL habe ich keine Ahnung. Ich sehe nur an der Log-Ausgabe "Rows: ...", was in .result geliefert wird.
-
Danke euch beiden,
das war der Schlüssel, und natürlich ein klassischer Namensfehler( ich werde heute noch Asche auf mein haupt tun).
Klar kommt da sum(val) hin!!!!
Also wieder was gelernt und nicht nur Sport gekuckt.Dann kann ich ja jetzt meine Solartabellen über die Monate und Jahre aufbauen.
Gruß Reinald