NEWS
SQL-Abfrage aus Script an MariaDB
-
Hallo,
ich habe bisher iobroker Daten in eine MsSQL-Datenbank geschrieben und die in einem SQL-Script stark vereinfacht so ausgelesen:sendTo('sql.0', 'query', 'SELECT 1 AS test;', async(result) =>{setState(DataPoint , getAttr((getAttr(result, 'result')[0]), ''), true); }); und mit {console.log('### SQL-Test: '+ String(DataPoint) + ' = ' + String(getState(DataPoint).val))};Das hat funktioniert.
Jetzt habe ich auf MariaDB umgestellt. Daten werden auch problemlos in DB geschrieben. Adapter arbeitet also korrekt und Rechte sind vorhanden.
Ich schaffe es aber nicht mehr auf irgendeine Weise Werte abzurufen. Die ganze SQL-Logik ist in eine DB-function verlegt.sendTo('sql.0', 'query', "SELECT fnTest AS test;", function(result) {console.log('Result 1: ', result);});Result bleibt leer. Aber auch folgende Abfragen liefern nichts, bzw 0 zurück:
sendTo('sql.0', 'query', "SELECT 1 AS test;", function(result) {console.log('Result 1: ', result);}); sendTo('sql.0', 'query', "SELECT 1 AS test;", result => console.log('Result 2: ', result)); sendTo('sql.0', 'query', 'SELECT 1 AS test;', result =>{ setState(DataPoint , getAttr((getAttr(result, 'result')[0]), ''), true); }); {console.log('Result3: '+ String(DataPoint) + ' = ' + String(getState(DataPoint).val))}; sendTo('sql.0', 'query', 'SELECT 1 AS test;', async(result) =>{ setState(DataPoint , getAttr((getAttr(result, 'result')[0]), ''), true); }); {console.log('Result4: '+ String(DataPoint) + ' = ' + String(getState(DataPoint).val))};Hat jemand eine Idee, was ich beim Abruf eines sql mit MariaDB anders machen muss?
Danke im Voraus
Gerd -
Hallo,
ich habe bisher iobroker Daten in eine MsSQL-Datenbank geschrieben und die in einem SQL-Script stark vereinfacht so ausgelesen:sendTo('sql.0', 'query', 'SELECT 1 AS test;', async(result) =>{setState(DataPoint , getAttr((getAttr(result, 'result')[0]), ''), true); }); und mit {console.log('### SQL-Test: '+ String(DataPoint) + ' = ' + String(getState(DataPoint).val))};Das hat funktioniert.
Jetzt habe ich auf MariaDB umgestellt. Daten werden auch problemlos in DB geschrieben. Adapter arbeitet also korrekt und Rechte sind vorhanden.
Ich schaffe es aber nicht mehr auf irgendeine Weise Werte abzurufen. Die ganze SQL-Logik ist in eine DB-function verlegt.sendTo('sql.0', 'query', "SELECT fnTest AS test;", function(result) {console.log('Result 1: ', result);});Result bleibt leer. Aber auch folgende Abfragen liefern nichts, bzw 0 zurück:
sendTo('sql.0', 'query', "SELECT 1 AS test;", function(result) {console.log('Result 1: ', result);}); sendTo('sql.0', 'query', "SELECT 1 AS test;", result => console.log('Result 2: ', result)); sendTo('sql.0', 'query', 'SELECT 1 AS test;', result =>{ setState(DataPoint , getAttr((getAttr(result, 'result')[0]), ''), true); }); {console.log('Result3: '+ String(DataPoint) + ' = ' + String(getState(DataPoint).val))}; sendTo('sql.0', 'query', 'SELECT 1 AS test;', async(result) =>{ setState(DataPoint , getAttr((getAttr(result, 'result')[0]), ''), true); }); {console.log('Result4: '+ String(DataPoint) + ' = ' + String(getState(DataPoint).val))};Hat jemand eine Idee, was ich beim Abruf eines sql mit MariaDB anders machen muss?
Danke im Voraus
Gerd@Norwegen60 sagte in SQL-Abfrage aus Script an MariaDB:
Hat jemand eine Idee, was ich beim Abruf eines sql mit MariaDB anders machen muss?
Hatte mir in meiner Beispielsammlung vermerkt.
// wenn sql eine mysql, z.B. mariaDB dann immer davor den namen der DB setzen
// z.B. iob_mariadb.datapoints oder iob_mariadb.ts_number, etc.Also dann in JS so:
sendTo('sql.0', 'query', 'SELECT * FROM iob_mariadb.ts_number WHERE id=' + result.result[0].id, function (result) { console.log('Rows: ' + JSON.stringify(result.result)); });Steht auch versteckt in der Doku ;-)
Vielleicht hilfts.
-
Hallo,
ich habe bisher iobroker Daten in eine MsSQL-Datenbank geschrieben und die in einem SQL-Script stark vereinfacht so ausgelesen:sendTo('sql.0', 'query', 'SELECT 1 AS test;', async(result) =>{setState(DataPoint , getAttr((getAttr(result, 'result')[0]), ''), true); }); und mit {console.log('### SQL-Test: '+ String(DataPoint) + ' = ' + String(getState(DataPoint).val))};Das hat funktioniert.
Jetzt habe ich auf MariaDB umgestellt. Daten werden auch problemlos in DB geschrieben. Adapter arbeitet also korrekt und Rechte sind vorhanden.
Ich schaffe es aber nicht mehr auf irgendeine Weise Werte abzurufen. Die ganze SQL-Logik ist in eine DB-function verlegt.sendTo('sql.0', 'query', "SELECT fnTest AS test;", function(result) {console.log('Result 1: ', result);});Result bleibt leer. Aber auch folgende Abfragen liefern nichts, bzw 0 zurück:
sendTo('sql.0', 'query', "SELECT 1 AS test;", function(result) {console.log('Result 1: ', result);}); sendTo('sql.0', 'query', "SELECT 1 AS test;", result => console.log('Result 2: ', result)); sendTo('sql.0', 'query', 'SELECT 1 AS test;', result =>{ setState(DataPoint , getAttr((getAttr(result, 'result')[0]), ''), true); }); {console.log('Result3: '+ String(DataPoint) + ' = ' + String(getState(DataPoint).val))}; sendTo('sql.0', 'query', 'SELECT 1 AS test;', async(result) =>{ setState(DataPoint , getAttr((getAttr(result, 'result')[0]), ''), true); }); {console.log('Result4: '+ String(DataPoint) + ' = ' + String(getState(DataPoint).val))};Hat jemand eine Idee, was ich beim Abruf eines sql mit MariaDB anders machen muss?
Danke im Voraus
Gerd@Norwegen60 sagte in SQL-Abfrage aus Script an MariaDB:
Hat jemand eine Idee, was ich beim Abruf eines sql mit MariaDB anders machen muss?
Meine SQL-Abfragen funktionieren so recht gut:
sendTo('sql.0', 'query', 'SELECT 1 AS test1, 2 AS test2, 3 AS test3;', function (result) { if (result.error) { console.error(result.error); } else { //setState (idDataPoint,JSON.stringify(result.result)); console.log (JSON.stringify(result.result)); } });@bahnuhr sagte in SQL-Abfrage aus Script an MariaDB:
immer davor den namen der DB setzen
Ja, das ist sehr nützlich.
sendTo('sql.0', 'query', 'SELECT * FROM iobroker.datapoints ORDER BY name;', function (result) { if (result.error) { console.error(result.error); } else { console.log (JSON.stringify(result.result)); } }); -
@Norwegen60 sagte in SQL-Abfrage aus Script an MariaDB:
Hat jemand eine Idee, was ich beim Abruf eines sql mit MariaDB anders machen muss?
Meine SQL-Abfragen funktionieren so recht gut:
sendTo('sql.0', 'query', 'SELECT 1 AS test1, 2 AS test2, 3 AS test3;', function (result) { if (result.error) { console.error(result.error); } else { //setState (idDataPoint,JSON.stringify(result.result)); console.log (JSON.stringify(result.result)); } });@bahnuhr sagte in SQL-Abfrage aus Script an MariaDB:
immer davor den namen der DB setzen
Ja, das ist sehr nützlich.
sendTo('sql.0', 'query', 'SELECT * FROM iobroker.datapoints ORDER BY name;', function (result) { if (result.error) { console.error(result.error); } else { console.log (JSON.stringify(result.result)); } });@fuzzy1955 sagte in SQL-Abfrage aus Script an MariaDB:
Ja, das ist sehr nützlich.
Nicht nur nützlich sondern muss.
MariaDB funktionierte ohne den Zusatz bei mir nicht. -
@fuzzy1955 sagte in SQL-Abfrage aus Script an MariaDB:
Ja, das ist sehr nützlich.
Nicht nur nützlich sondern muss.
MariaDB funktionierte ohne den Zusatz bei mir nicht. -
@Norwegen60 sagte in SQL-Abfrage aus Script an MariaDB:
Hat jemand eine Idee, was ich beim Abruf eines sql mit MariaDB anders machen muss?
Meine SQL-Abfragen funktionieren so recht gut:
sendTo('sql.0', 'query', 'SELECT 1 AS test1, 2 AS test2, 3 AS test3;', function (result) { if (result.error) { console.error(result.error); } else { //setState (idDataPoint,JSON.stringify(result.result)); console.log (JSON.stringify(result.result)); } });@bahnuhr sagte in SQL-Abfrage aus Script an MariaDB:
immer davor den namen der DB setzen
Ja, das ist sehr nützlich.
sendTo('sql.0', 'query', 'SELECT * FROM iobroker.datapoints ORDER BY name;', function (result) { if (result.error) { console.error(result.error); } else { console.log (JSON.stringify(result.result)); } });Danke für das Feedback. Ein Stück bin ich weiter. Dass nie etwas kam lag daran, dass ich
console.log('Result 1: ', result); // , durch + ersetzen und schon wird Result im Log angezeigt :-( console.log('Result 1 : ' + result);hatte.
Ich hatte es auch mit ioBroker.fn_xx probiert, aber da der Log nie was angezeigt hat, konnte das auch nicht funktieren bzw. ich nichts sehen. Auch das hiersendTo('sql.0', 'query', "SELECT ioBroker.fn_energy('YEAR', 27, 1) AS energy;", function(result) { console.log("Result fnEnergy2: " + JSON.stringify(result.result)); });liefert jetzt "energy":23456
Zwei Fragen sind jetzt noch offen. Das Ganze wird in der Functionfunction GetEnergy(Mode, ID, Offset, DataPoint) { sendTo('sql.0', 'query', "SELECT ioBroker.fn_energy('YEAR', 27, 1) AS energy;", function(result) { console.log("Result fnEnergy2: " + JSON.stringify(result.result)); }); }aufgerufen.
- Wie ersetze ich jetzt 'YEAR', 27, 1 durch Mode, ID, Offset
- wie bekomme ich 23456 in Datapoint. Letzteres hatte ich schon, funktioniert aber bei der Rückgabe "energy:"23456 nicht
-
Danke für das Feedback. Ein Stück bin ich weiter. Dass nie etwas kam lag daran, dass ich
console.log('Result 1: ', result); // , durch + ersetzen und schon wird Result im Log angezeigt :-( console.log('Result 1 : ' + result);hatte.
Ich hatte es auch mit ioBroker.fn_xx probiert, aber da der Log nie was angezeigt hat, konnte das auch nicht funktieren bzw. ich nichts sehen. Auch das hiersendTo('sql.0', 'query', "SELECT ioBroker.fn_energy('YEAR', 27, 1) AS energy;", function(result) { console.log("Result fnEnergy2: " + JSON.stringify(result.result)); });liefert jetzt "energy":23456
Zwei Fragen sind jetzt noch offen. Das Ganze wird in der Functionfunction GetEnergy(Mode, ID, Offset, DataPoint) { sendTo('sql.0', 'query', "SELECT ioBroker.fn_energy('YEAR', 27, 1) AS energy;", function(result) { console.log("Result fnEnergy2: " + JSON.stringify(result.result)); }); }aufgerufen.
- Wie ersetze ich jetzt 'YEAR', 27, 1 durch Mode, ID, Offset
- wie bekomme ich 23456 in Datapoint. Letzteres hatte ich schon, funktioniert aber bei der Rückgabe "energy:"23456 nicht
@Norwegen60 sagte in SQL-Abfrage aus Script an MariaDB:
'YEAR', 27, 1 durch Mode, ID, Offset
Teil 1: Ich baue umfangreichere SQL-Statements in einem String vorher zusammen:
function GetEnergy(Mode, ID, Offset, DataPoint) { let strSQL = "SELECT ioBroker.fn_energy('" + Mode + "', " + ID + ", " + Offset + ") AS energy;" sendTo('sql.0', 'query', strSQL, function(result) { console.log("Result fnEnergy2: " + JSON.stringify(result.result)); }); } -
@Norwegen60 sagte in SQL-Abfrage aus Script an MariaDB:
'YEAR', 27, 1 durch Mode, ID, Offset
Teil 1: Ich baue umfangreichere SQL-Statements in einem String vorher zusammen:
function GetEnergy(Mode, ID, Offset, DataPoint) { let strSQL = "SELECT ioBroker.fn_energy('" + Mode + "', " + ID + ", " + Offset + ") AS energy;" sendTo('sql.0', 'query', strSQL, function(result) { console.log("Result fnEnergy2: " + JSON.stringify(result.result)); }); }@fuzzy1955
Ja, das hatte ich auch, aber ich dachte ich müsse hier auch in String wandeln und hattelet strSQL = "SELECT ioBroker.fn_energy('" + Mode + "', " + String(ID) + ", " + String(Offset) + ") AS energy;" // Und ich hatte es mit let sSQL5 = `SELECT ioBroker.fn_energy('${Mode}', ${ID}, ${Offset}) AS energy`;versucht, dort aber die falschen quotes verwendet. mit den nach rechts gekippten hat auch das funktioniert
Das hier funktioniert jetzt incl. zurück holen des Wertes in Datapointlet sSQL0 = "SELECT ioBroker.fn_energy('" + Mode + "', " + ID + ", " + Offset + ") AS energy"; sendTo('sql.0', 'query', sSQL0, function (result) { let energy = result.result[0].energy; setState(DataPoint, {val: Number(energy), ack: true}); log('GetEnergy: ' + energy + ' -> ' + DataPoint, 'info'); });Danke für die Unterstützung