FHEM Forum

FHEM => Sonstiges => Thema gestartet von: axel.mohnen am 09 Juni 2016, 07:01:24

Titel: DBLog mittels HTTP Command im JSON Format auslesen
Beitrag von: axel.mohnen am 09 Juni 2016, 07:01:24
Hallo Fhem'ler,

ich möchte meine Stromzählerdaten die ich im DBLog (SQLITE) abgespeichert habe mittels HTTP Command im JSON Format auslesen.
Dazu habe ich gedacht könnte ich doch die "GET WEBCHART" Methode aus dem DBLog Modul nutzen.
Mit dem normalen "GET" Befehl funktioniert es, ist aber nicht im JSON Format (z.b.:get myDbLog - - 2012-11-10 2012-11-20 KS300:temperature)

Ich möchte gerne die "History" Table zu einem bestimmten DEVICE auslesen.
Kann mir jemand ein Beispiel geben wie der Befehl aussehen muss? Leider komme ich mit der Hilfe in der FHEM reference nicht weiter.
Im meinem Fall bekomme ich nur ein leeres JSON "Data" tag zurück.

-----------
z.B.:get logdb - webchart 2013-02-11_00:00:00 2013-02-12_00:00:00 ESA2000_LED_011e timerange TIMESTAMP day_kwh
-----------

Vielen Dank im Voraus.

Viele Grüsse
Axel
Titel: Antw:DBLog mittels HTTP Command im JSON Format auslesen
Beitrag von: MarcP am 08 November 2019, 22:01:36
Hi,

ich habe den Thread auf der Suche nach einer Lösung für das gleiche Problem gefunden.

Ich habe mir nun eine Javascript-Funktion gebaut, was das für mich macht, eventuell hilft Dir das ja weiter.



function getData(callback) {
  var ret = [];
  var logrep ="logrep"; //DbRep device name
  var sql = encodeURI("select * from current;");
  var cmd = encodeURI("get " + logrep + " dbValue ") + sql;

  fetch('/fhem?cmd=' + cmd)
  .then(response => {
    return response.text();
  })
  .then(data => {
    var parser = new DOMParser();
    var htmlDoc = parser.parseFromString(data, 'text/html');
    var result = htmlDoc.getElementById('content').firstElementChild.innerHTML;
    var lines  = result.split("\n");
    var ret = [];
    lines.forEach(line => {
      var tokens = line.split("|");
      ret.push(tokens);
    });
    callback(ret);
  })
  .catch(err => {
    callback(err);
  })
}

function printme(p) {
  console.log(p);
}




<button type="button" onClick="getData(printme)">go!</button>


VG
Marc