NEWS
[gelöst] Simple API Abfrage
-
Moin zusammen,
ich versuche gerade Testweise einmal eine API Abfrage zu bauen und nutze folgendes...
http://192.168.178.222:8087/query/javascript.0.ShellyVerbrauch.SHPLG-S%231D3709%231.Relay0.gestern?dateFrom=2022-04-01T12:00:00.000Z&dateTo=2022-04-08T01:00:10.000Z
Dabei erscheint nur der letzte Wert, obwohl in dem History Adapter Vorgänger existieren.
[ { "target": "javascript.0.ShellyVerbrauch.SHPLG-S#1D3709#1.Relay0.gestern", "datapoints": [ [ 409.55, 1649541600417 ] ] } ]
Wo ist mein Fehler...?
-
@froggi1930 dann ust du aber auch den history adapter abfragen und nicht den javascript
-
@arteck
Wie frage ich den denn ab... in den Objekten unter History finde ich nur admin und sonst nichts -
@froggi1930 ok ..
ich frag mal so : was soll das Endergebniss werden ?? -
@froggi1930 was willst du eigentlich erreichen?
Mit der Abfrage erhältst du den aktuellen Wert eines Datenpunkts -
-
@froggi1930 sagte in Simple API Abfrage:
Ich möchte gerne von einem externen Rechner die Verbrauchshistorie abrufen
dann musst du entweder die History Daten aufarbeiten, oder gar mit SQL arbeiten und da auf die Datenbank zugreifen.
-
@homoran
Dann kann ich mit dem API Aufruf die History Daten gar nicht abrufen?Wie greife ich denn dann von extern auf die Datenbank zu?
-
@froggi1930 sagte in Simple API Abfrage:
Wie greife ich denn dann von extern auf die Datenbank zu?
welche Datenbank nutzst du denn?
für History liegen die Daten in /opt/iobroker/iobroker-data/history nach Datum sortiert und darin nach Datenpunkt und darin als JSON
-
@homoran
Ich nutze den History Adapter... die Daten aus dem Ordner kann ich aber nicht per API zur Verfügung stellen - richtig? -
@froggi1930
https://github.com/ioBroker/ioBroker.simple-api#query-1
Scheint ein Fehler im simpleApi zu sein?http://192.168.178.89:8087/query/zigbee.0.00517.temperature/?prettyPrint&dateFrom=2022-04-01T00:00:00.000Z&dateTo=2022-04-10T00:00:00.000Z -> [ { "target": "zigbee.0.00158d00025e9517.temperature", "datapoints": [ [ 18.6, 1649591510116 ] ] } ]
-
@mcu @apollon77
ich habe zumindest gedacht, dass ich so an die Daten herankomme... oder es ist ein Denkfehler und gar nicht so dafür gedacht -
@froggi1930 Dann müsstest du dir einen DP erstellen und in den die Daten von einer History-Abfrage reinstellen und dann das Ergebnis aus dem DP mit simpleApi auslesen.
-
@froggi1930 sagte in Simple API Abfrage:
und gar nicht so dafür gedacht
Laut Beschreibung sollte es so funktionieren. Wie gesagt: Fehler im simpleApi.
-
@mcu said in Simple API Abfrage:
@froggi1930 Dann müsstest du dir einen DP erstellen und in den die Daten von einer History-Abfrage reinstellen und dann das Ergebnis aus dem DP mit simpleApi auslesen.
Das versteh ich leider so nicht...
-
@froggi1930
Einen DP erstellen mit Blockly oder javascript.createState(ID_VOM_NEUEN_DP, {read: true, write: true, name: "SIMPLEAPI DP", type: "string", role: "", def: "" });
Mit Blockly oder javascript die Abfrage an den History erstellen und das Ergebnis in den neuen DP schreiben.
sendTo('history.0', 'getHistory', { id: 'javascript.0.ShellyVerbrauch.SHPLG-S#1D3709#1.Relay0.gestern', options: { end: Date.now(), count: 50, aggregate: 'onchange', addId: true } }, function (result) { let arr = []; for (var i = 0; i < result.result.length; i++) { console.log(result.result[i].id + ' ' + new Date(result.result[i].ts).toISOString()); arr.push({'result':result.result[i].id,'time':new Date(result.result[i].ts).toISOString()}); } setState(ID_vom_NEUEN_DP,JSON.stringify(arr),false); });
Dann mit simpleApi die neuen DP auslesen.
Das musst du Dir dann aber im Detail noch anschauen.
-
@mcu
super... danke Dir. Werde mich gleich damit einmal auseinandersetzten -
@froggi1930 said in Simple API Abfrage:
@mcu
super... danke Dir. Werde mich gleich damit einmal auseinandersetztenOK... das funktioniert soweit ganz OK. Es wäre natürlich viel einfacher direkt per API darauf zuzugreifen... habe mal ein Issue aufgemacht - vielleicht ist es ja wirklich ein Fehler.
Ansonsten schreibe ich die Daten jetzt auch auf ein NAS in eine Maria Datenbank. Mal sehen, was am Ende besser funktioniert.
-
@froggi1930 ist es besser wenn du start und endzeitpunkt als Zahl angibst (als Date.getTime() Unix epoch in ms)
Sonst muss ich mal reinschauen
-
@apollon77
Du meinst so...?http://192.168.178.222:8087/query/javascript.0.ShellyVerbrauch.SHPLG-S%231D3709%231.Relay0.gestern?dateFrom=1649368800402?dateTo=1649541600417
... gibt trotzdem nur den letzten Wert aus