NEWS
sendTo sql State is not valid
-
Hallo Zusammen,
Ich bastel mir gerade ein Script mit Blockly um die Deutschland API bzgl. der Gasspeicherfüllstände anzusprechen.
Die klappt auch einwandfrei, sodass ich an die Zeitstempel und die Füllstände komme.
Diese will ich nun via sendTo an meine SQL Datenbank zu senden. Der Adapter ist als sql.1 installiert.
Wenn ich nun aber das Skript ausführe kommt folgender Fehler für jedes Zeitstempel/Wert Paar:javascript.0 (216) script.js.MyScripts.Gasspeicher_Füllstände: {'error':'1 errors happened while storing data','errors':['State \'{ts: 1681689600000, val: 64.53, ack: false, from: 'system.adapter.javascript.0'}\' for 0_userdata.0.Datenpunkte.BundesAPI.Gasspeicherfüllstand is not valid'],'successCount':0}In Blockly sieht das wie folgt aus:

Und das ist das generierte Skript
var i, Position_Trennzeichen, Zeitstempel, result, Fuellstand; try { require("request")('https://www.dashboard-deutschland.de/api/tile/indicators?ids=tile_1667227714015', async function (error, response, result) { var i_list = getAttr((function () { try {return JSON.parse(result);} catch(e) {return {};}})(), '0.json.components.0.chart.series.0.data'); for (var i_index in i_list) { i = i_list[i_index]; Position_Trennzeichen = ('' + i).indexOf(',') + 1; Zeitstempel = ('' + i).slice(0, parseFloat(Position_Trennzeichen) - 1); Fuellstand = ('' + i).slice(((parseFloat(Position_Trennzeichen) + 1) - 1), ('' + i).length); console.debug((['Zeitstempel: ',Zeitstempel,'\n','Füllstand: ',Fuellstand,' %'].join(''))); sendTo("sql.1", "storeState", { "id": '0_userdata.0.Datenpunkte.BundesAPI.Gasspeicherfüllstand', "state": ['{ts: ',parseFloat(Zeitstempel),', val: ',parseFloat(Fuellstand),', ack: false, from: \'system.adapter.javascript.0\'}'].join('') }, async function (result) { console.log(result); }); console.log("sql.1: " + ""); } }).on("error", function (e) {console.error(e);}); } catch (e) { console.error(e); }Habt Ihr eine Idee, wo der Fehler herkommt? Ich sehe es nicht.
Vielen Dank, Martin
-
Hallo Zusammen,
Ich bastel mir gerade ein Script mit Blockly um die Deutschland API bzgl. der Gasspeicherfüllstände anzusprechen.
Die klappt auch einwandfrei, sodass ich an die Zeitstempel und die Füllstände komme.
Diese will ich nun via sendTo an meine SQL Datenbank zu senden. Der Adapter ist als sql.1 installiert.
Wenn ich nun aber das Skript ausführe kommt folgender Fehler für jedes Zeitstempel/Wert Paar:javascript.0 (216) script.js.MyScripts.Gasspeicher_Füllstände: {'error':'1 errors happened while storing data','errors':['State \'{ts: 1681689600000, val: 64.53, ack: false, from: 'system.adapter.javascript.0'}\' for 0_userdata.0.Datenpunkte.BundesAPI.Gasspeicherfüllstand is not valid'],'successCount':0}In Blockly sieht das wie folgt aus:

Und das ist das generierte Skript
var i, Position_Trennzeichen, Zeitstempel, result, Fuellstand; try { require("request")('https://www.dashboard-deutschland.de/api/tile/indicators?ids=tile_1667227714015', async function (error, response, result) { var i_list = getAttr((function () { try {return JSON.parse(result);} catch(e) {return {};}})(), '0.json.components.0.chart.series.0.data'); for (var i_index in i_list) { i = i_list[i_index]; Position_Trennzeichen = ('' + i).indexOf(',') + 1; Zeitstempel = ('' + i).slice(0, parseFloat(Position_Trennzeichen) - 1); Fuellstand = ('' + i).slice(((parseFloat(Position_Trennzeichen) + 1) - 1), ('' + i).length); console.debug((['Zeitstempel: ',Zeitstempel,'\n','Füllstand: ',Fuellstand,' %'].join(''))); sendTo("sql.1", "storeState", { "id": '0_userdata.0.Datenpunkte.BundesAPI.Gasspeicherfüllstand', "state": ['{ts: ',parseFloat(Zeitstempel),', val: ',parseFloat(Fuellstand),', ack: false, from: \'system.adapter.javascript.0\'}'].join('') }, async function (result) { console.log(result); }); console.log("sql.1: " + ""); } }).on("error", function (e) {console.error(e);}); } catch (e) { console.error(e); }Habt Ihr eine Idee, wo der Fehler herkommt? Ich sehe es nicht.
Vielen Dank, Martin
@kopierwichtel
Ich mag mich täuschen (weil ich das selbst noch nicht gemacht habe), aber übergibt man dem SQL-Adapter nicht ein SQL-Statement?
Also etwas in der Art:INSERT INTO iobroker.ts_numbers VALUES(XX, YY, ZZ)Ich sehe in Deinem Script nirgends einen Tabellennamen o.ä.
Also ich als Adapter wüsste gar nicht, wo ich was hinschreiben sollte. -
@kopierwichtel
Ich mag mich täuschen (weil ich das selbst noch nicht gemacht habe), aber übergibt man dem SQL-Adapter nicht ein SQL-Statement?
Also etwas in der Art:INSERT INTO iobroker.ts_numbers VALUES(XX, YY, ZZ)Ich sehe in Deinem Script nirgends einen Tabellennamen o.ä.
Also ich als Adapter wüsste gar nicht, wo ich was hinschreiben sollte.@codierknecht
Lt. Doku müsste der Adapter über sendTo funktionieren. -
@codierknecht
Lt. Doku müsste der Adapter über sendTo funktionieren.@kopierwichtel
Jepp - geht offenbar auch, aber das sieht ganz anders aus:sendTo('history.0', 'storeState', { id: 'mbus.0.counter.xxx', state: [ {ts: 1589458809352, val: 123, ack: false, from: 'system.adapter.whatever.0', ...}, {ts: 1589458809353, val: 123, ack: false, from: 'system.adapter.whatever.0', ...} ] }, result => console.log('added'));Du hast da an allen möglichen und unmöglichen Stellen Anführungszeichen (einfache und doppelte) eingebaut, die da offenbar nicht hingehören.
-
@kopierwichtel
Jepp - geht offenbar auch, aber das sieht ganz anders aus:sendTo('history.0', 'storeState', { id: 'mbus.0.counter.xxx', state: [ {ts: 1589458809352, val: 123, ack: false, from: 'system.adapter.whatever.0', ...}, {ts: 1589458809353, val: 123, ack: false, from: 'system.adapter.whatever.0', ...} ] }, result => console.log('added'));Du hast da an allen möglichen und unmöglichen Stellen Anführungszeichen (einfache und doppelte) eingebaut, die da offenbar nicht hingehören.
@codierknecht
das die vielen Anführungszeichen im Code stehen liegt an den Variablen die genutzt werden:Zeit stempel und Fuellstand sind Variablen die aus dem JSON befüllt werden.
Ich teste aber mal was passiert wenn ich einfach den Zeitstempel und den Wert hart reinschreibe
-
@codierknecht
das die vielen Anführungszeichen im Code stehen liegt an den Variablen die genutzt werden:Zeit stempel und Fuellstand sind Variablen die aus dem JSON befüllt werden.
Ich teste aber mal was passiert wenn ich einfach den Zeitstempel und den Wert hart reinschreibe
Ich habe es jetzt tatsächlich mal mit dem direkten SQL statement versucht. Damit hat es funktioniert

Die Anzahl der offenen SQL verbindungen scheint zwar ein Problem zu sein, aber das ist feintuning.
-
Ich habe es jetzt tatsächlich mal mit dem direkten SQL statement versucht. Damit hat es funktioniert

Die Anzahl der offenen SQL verbindungen scheint zwar ein Problem zu sein, aber das ist feintuning.
@kopierwichtel
Frei nach dem Motto: "Was man nicht selbst macht, taugt auch nix"

Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden