NEWS
sendTo & InfluxDB -> ??? [gelöst]
-
@legro Es müssten doch 760 Tage sein und nicht nur 480, oder?
-
Ja, wohl zu früh gefreut. Ich habe keine Ahnung, was die Lücken hervorruft.
In Grafana hingegen fehlt nichts.
Was ist das alles doch für ein Mist.
Wenigstens habe ich's nun geschafft, dass in InfluxDB wohl alle Datensätze angezeigt werden. Man musste hierzu das Aggregieren löschen.
-
Jetzt hoffe ich das Rätsel endgültig gelöst zu haben.
Es sieht ganz danach aus, dass sich ioBroker bei der Ausgabe der Datensätze schlichtweg verschluckt. Ich habe die Datensätze in 35-er Portionen ausgegeben, dabei fehlte nichts.
-
@legro Das hört sich doch gut an. Muss man erst drauf kommen. Besser ist es sowas als Array zu speichern, dann kann man auch besser nachschauen.
-
@mcu sagte in sendTo & InfluxDB -> ???:
@legro .. Besser ist es sowas als Array zu speichern, ..
Das ist auch das Ziel.
Wie ich oben schrieb, möchte ich mich von InfluxDB, Grafana & Co. lösen und stattdessen den FlexCharts-Adapter von @jrbwh verwenden. In einer ersten Stufe möchte ich die in InfluxDB gespeicherten Daten in Arrays einlesen, um sie dem FlexCharts-Adapter zur Anzeige zu übergeben.
In einer zweiten Phase werde ich alle bisher in InfluxDB gespeicherte Daten in einer eigen Datenstruktur ablegen, sodass ich InfluxDB nicht mehr benötige.
-
Mittlerweile bin ich an der Verarbeitung der Daten, die ich mittels sendTo aus InfluxDB ausgelesen habe.
Hier ein Beispiel für die gelieferten Werte ..
[ [ { result: '_result', table: 0, _start: '2023-01-16T07:25:56.533063965Z', _stop: '2023-02-15T07:25:56.533063965Z', _time: '2023-01-23T11:00:01.025Z', _value: 6.949600000079954, _field: 'value', _measurement: 'gasTag', ts: 1674471601025 }, { result: '_result', table: 0, _start: '2023-01-16T07:25:56.533063965Z', _stop: '2023-02-15T07:25:56.533063965Z', _time: '2023-01-24T11:00:01.053Z', _value: 6.713639999830775, _field: 'value', _measurement: 'gasTag', ts: 1674558001053 }, { result: '_result', table: 0, _start: '2023-01-16T07:25:56.533063965Z', _stop: '2023-02-15T07:25:56.533063965Z', _time: '2023-01-25T11:00:01.059Z', _value: 7.05180000008113, _field: 'value', _measurement: 'gasTag', ts: 1674644401059 }, ... ], [ { result: '_result', table: 1, ... }, .. ] ]
Das Ergebnis ist ein zweidimensionales Array. Für jede Abfrage (s. table: 0, ..)wird ein Array erzeugt, das wiederum die einzelnen Werte als Objekte in einem (Unter)Array ablegt.
Das Ganze kommt ziemlich aufgeblasen daher. So ist es völlig redundant, stets in jedem Datensatz die Werte table, _start, _stop anzugeben. Sei's d'rum! Man muss sich halt aus dem ganze Zeug die interessierenden Felder in eine eigenes Array umpacken.
-
@legro Für jede Abfrage? Zeig mal bitte die Abfragen. Wofür sind die unterschiedlichen table?
-
@mcu sagte in sendTo & InfluxDB -> ???:
@legro Und als option
options: { end: Date.now(), count: 1000, aggregate: 'onchange' }
Das dürfte mit Werten >500 momentan immer noch nicht funktionieren, da Dein PR immer noch nicht übernommen wurde.
https://github.com/ioBroker/ioBroker.influxdb/issues/391
https://github.com/ioBroker/ioBroker.influxdb/pull/392 -
@wolfi913 Hab ich schon gar nicht mehr dran gedacht. Danke für den Hinweis.
-
@mcu sagte in sendTo & InfluxDB -> ???:
@legro .. Zeig mal bitte die Abfragen. Wofür sind die unterschiedlichen table?
Mir gelang es nur mittels flux vernünftige Ergebnisse zu erzielen. Über 'history' - anstelle von 'query' - erhielt ich nur Unsinn oder gar nichts.
sendTo('influxdb.0', 'query', 'from(bucket: "db_iobroker") |> range(start: -745d, stop: -727d) |> filter(fn: (r) => r._measurement == "gasTag") |> filter(fn: (r) => r["_field"] == "value")', function (query) { let abfrage = JSON.stringify(query.result) let qry = JSON.parse(abfrage) console.log(qry)
Man kann mehrere Abfragen in einer query-Anweisung angeben. Diese werden dann in einem zweiten, dritten, .. Array abgespeichert. Die Angabe table reflektiert die jeweilige Abfrage.
Beispiele ..
qry[0][1] -> zweites Objekt {..} in der ersten Abfrage
qry[1][0] -> erstes Objekt in der zweiten Abfrage
qry[0].length -> Anzahl der Elemente in der ersten Abfrage -
@legro Dann bitte auch die Lösung schreiben. danke.
-
Die Lösung steht doch hier. Auch die möglichen Ergebnisse habe ich doch auch angegeben.
-
NACHTRAG
Die Zeitangaben können auch in der üblichen Linux-Notation erfolgen ..
sendTo('influxdb.0', 'query', //'from(bucket: "db_iobroker") |> range(start: -745d, stop: 0d) |> filter(fn: (r) => r._measurement == "gasTag") |> filter(fn: (r) => r["_field"] == "value")', 'from(bucket: "db_iobroker") |> range(start: 2023-01-24T00:00:00Z, stop: 2023-01-30T00:00:00Z) |> filter(fn: (r) => r._measurement == "gasTag") |> filter(fn: (r) => r["_field"] == "value")', function (query) { let qry = JSON.parse(JSON.stringify(query.result)) let werte = [] for (let i=0; i<qry[0].length; i++) { werte.push(qry[0][i]._value) } setState('0_userdata.0.Gaszähler.gasTag_Test', JSON.stringify(werte), true)