NEWS
Werte aus SQL Datenbank anzeigen
-
Hallo,
ich habe einen Raspberry der Temperaturen in eine SQL Datenbank schreibt.
Diese würde ich gerne auslesen und als Datenpunkte im IObroker einbinden.
Leider habe ich nichts gefunden wie ich eine Tabelle in einem Datenpunkt angeben könnte.
Die SQL Datenbank habe ich bereits angebunden. -
@femi said in Werte aus SQL Datenbank anzeigen:
ich habe einen Raspberry der Temperaturen in eine SQL Datenbank schreibt.
Wäre es nicht einfacher, ioBroker als Slave auch auf dem Raspi laufen zu lassen und die Werte ganz normal per Adapter einzulesen?
Diese würde ich gerne auslesen und als Datenpunkte im IObroker einbinden.
Leider habe ich nichts gefunden wie ich eine Tabelle in einem Datenpunkt angeben könnte.Du wirst ein Skript machen müssen, das die Daten in einen von dir erstellen Datenpunkt schreibt.
Die SQL Datenbank habe ich bereits angebunden.
Dann kennst du das?
https://github.com/ioBroker/ioBroker.sql#custom-queries -
@unclesam
Danke für die Antwort,
Klar könnte ich auf dem Raspberry auch IO Broker installieren, aber dann müsste ich fast alles neu machen. Nur um ein paar Felder aus der Datenbank auszulesen.
Das ist mir für diese Spielerei dann doch zu viel Aufwand. -
z.b. holt daten
sendTo('sql.0', 'query', 'SELECT download FROM todaydownload.today', function (result) { if (result.error) { console.error(result.error); } else { setState("controll-own.0.HANDY.SQLToDos",JSON.stringify(result.result)); //setState("controll-own.0.HANDY.SQLToDos",result.result); //show result console.log('Rows: ' + JSON.stringify(result.result)); //console.log(result.result[0]); } });
oder hier hole ich sql variablen
sendTo('sql.0', 'query', 'show status like "Connection_errors_max_connections"', function (result) { if (result.error) { console.error(result.error); } else { // console.log('Rows: ' + JSON.stringify(result.result)); //console.log(result.result[0].Value); //var abc = JSON.stringify(result.result); //abc = abc.replace( /[|]/g , ""); //var json = JSON.parse(abc); // console.log(json.Value); setState("controll-own.0.FUTRO.SQLConnections",result.result[0].Value); // var json1 = JSON.parse(result.result); } });
-
@liv-in-sky
leider habe ich viel zu wenig Ahnung von dem was du mit dem Script machst, vielleicht kannst du mir mal auf die Sprünge helfen. -
- du brauchst den sql adapter
- du brauchst erstmal das "sql-query" selbst - die eigentliche sql abfrage- kannst du im phpadmin erstellen hast du das ?
-
@liv-in-sky
den SQL Adapter hab ich ja bereits installiert und funktioniert auch.
Aber wie kriege ich einen Datenpunkt erstellt der eine Tabelle ausliest? -
@femi kannst du die sql sprache - wie beschreibst du die tabelle ?
-
@liv-in-sky
die Daten sind in der Datenbank schon drin, da habe ich ein Script geschrieben, das alle 15 Minuten die Fühler abfragt und die Werte in die Datenbank schreibt. -
dann erstell das query , welches du brauchst - nimm das erste script von oben und gib das query mit der datenbank (tabelle) ein
unter setState gibst du einen datenpunkt (typ zeichenkette) ein, welchen du selbst angelegt hast,
-
@liv-in-sky
leider verstehe ich nur Bahnhof,
wo soll ich das Query erstellen? -
@femi schau mal in den chat
-
@femi
wie wäre es die Datenbank (ich gehe davon aus, das es mysql/maria ist), abzufragen
und direkt json werte daraus zu machen und in einen datenpunkt zu schreiben
die können dann im widget json table angezeigt werdenhttps://stackoverflow.com/questions/41758870/how-to-convert-result-table-to-json-array-in-mysql
-
@oliverio
Ja klar, das würde funktionieren, aber in dem verlinktem Post sehe ich keine Datenbankabfrage.
Leider kenne ich mich mit json scripten überhaupt nicht aus. -
im beispiel wird der sql-adapter verwendet.
mit dem sendTo-Befehl kann man mit dem sprechen und ein sql-statement übergeben
im adapter ist konfiguriert, wo die sql-datenbank zu erreichen ist.
bei erfolg gibt der sendto-befehl dann in result die Daten zurück. -
für später:
habe versucht, dass nachzustellen - bei mir gehts so:sendTo('sql.0', 'query', 'SELECT temeratur FROM testMyTimestapm.tbl_Fuehler1 ORDER BY timestamp DESC LIMIT 1', function (result) { if (result.error) { console.error(result.error); } else { setState("0_userdata.0.TemperaturFuehler.Fuehler1",Number(JSON.stringify(result.result[0].temeratur))); log(JSON.stringify(result.result[0].temeratur)) } });