NEWS
Persistieren von Object Daten in InfluxDB
-
Hallo,
ich habe eine ioBroker Instanz am Laufen, die Daten über MQTT erhält und in der InfluxDB speichert. Von dort hole ich dann die Daten und visualisiere alles in Grafana. Die Datenpunkte, die ich in Objects ablege (und für die Persistierung in der InfluxDB) aktiviere, sind einzelne Werte (z.B. ein Temperaturwert) und diese werden dann mit dem Timestamp vom Zeitpunkt der Speicherung, in der InfluxDB abgelegt.
Ich habe nun ein neues Geräte, welches mir Datenpunkte liefert, die aber eine eigenen Timestamp haben, d.h. ich möchte nun, den Timestamp, den sie in der InfluxDB bekommen selber definieren können.
Kann mir jemand sagen, wie man das in ioBroker machen kann? Ich habe gesehen, dass man Rollen für Datenpunkte definieren kann (JSON, value.time, ...) und ich habe damit versucht z.B. ein JSON Objekt mit Attributen "timestamp" und "value" zu übergeben, in der Hoffnung der InfluxDB Adapter würde dann diese Werte so auch in der Datenbank ablegen. Das war leider nicht erfolgreich und mir fehlt einfach das Grundwissen, wie man das macht und in der Dokumentation habe ich keine klärenden Information gefunden.
Kann mir jemand hier weiterhelfen oder sagen, wo die entsprechenden Infos bekommen kann?
Vielen Dank und Grüsse, Malte
-
@malte85 sagte in Persistieren von Object Daten in InfluxDB:
Ich habe nun ein neues Geräte, welches mir Datenpunkte liefert, die aber eine eigenen Timestamp haben, d.h. ich möchte nun, den Timestamp, den sie in der InfluxDB bekommen selber definieren können.
du willst das der DP als Wert 5 bekommt aber nicht sofort in der Influx landet sonder sagen wir mal in 2 stunden erst ??
hab ich das richtig verstaden?
-
Nein nicht genau, aber meine Frage war auch nicht besonders gut formuliert.
Ich möchte irgendwie im ioBroker einen Datenpunkt ablegen, wo ich zusätzlich
zum eigentlichen Wert auch den Zeitpunkt definieren kann, wann dieser in der
Vergangenheit aufgezeichnet wurde.Konkret zeichnet mein Gerät unabhängig Werte auf und wenn dieses dann mit
dem ioBroker verbunden ist oder eine Verbindung hat, kommen quasi Werte aus
der Vergangenheit, z.B. vom vorherigen Tag. Diese dann abgelegten Werte sollten
dann in der InfluxDB nicht mit dem aktuellen Timestamp abgespeichert werden,
sondern den Timestamp vom vorherigen Tag bekommen.Hier mit einem Beispiel erklärt, was ich gerne machen würde:
Ich möchte einfach als ioBroker Object "mqtt.0.temperatur" den Wert z.B. als
JSON Dokument ablegen:{ "timestamp": 1556813561098000000, "value": 21.5 }
und der InfluxDB Adapter würde den Wert (21.5) dann in der InfluxDB mit diesem
entsprechenden Timestamp ablegen. Dies würde im Line Protocol von InfluxDB
diesem entsprechen:mqtt.0.temperature value=21.5 1556813561098000000
Irgendwo glaube ich gelesen zu haben, dass man als ioBroker Object Value
auch etwas in der Form "21.5;1556813561098000000" ablegen könnte und der
InfluxDB Adapter würde das dann so interpretieren. Meine Tests waren aber
leider nicht erfolgreich, was aber auch an der Konfiguration liegen kann. -
@malte85 Wahrscheinlich ist es da am Sinnvollsten, am Influxdb Adapter vorbei mit Javascript zu arbeiten.
https://docs.influxdata.com/influxdb/cloud/api-guide/client-libraries/nodejs/write/?t=Node.js
-
@martinp Meinst du damit dann auch an den ioBroker/MQTT vorbei? Oder kann ich eine Javascript Funktion am Object Tree als Callback hängen, welcher aufgerufen wird, wenn dort neue Daten ankommen (in meinem Beispiel auf mqtt.0.temperature)?
-
@malte85 Ja, so schwebt mir das vor ...
@haus-automatisierung hatte mal ein Video, wie er solche Dinge ohne influx-Adapter mit Javascript schreibt ...
Da ging es wohl darum, Datenpunkte zu haben, die alle zeitlich synchron sind.
Das geht aber über meine Javascript-Kenntnisse hinaus ... müsste auch schauen, dass ich mich da anhand Quellcode einlese ..
-
@malte85 sagte: Werte aus der Vergangenheit, z.B. vom vorherigen Tag.
Wie sehen diese Werte aus?
Man kann bei setState() auch den Zeitstempel mitgeben.
setState(id, {val: value, ts: timestamp, ack: true});
Ich weiß aber nicht, ob der InfluxDB-Adapter diesen Zeitstempel übernimmt oder selbst den Zeitstempel bildet.