InfluxDB 2.x Täglicher Stromverbrauch

Hallo,

ich weiß nicht, ob meine Frage hier passend ist. Wenn nicht, bitte verschieben.

Ich habe mir zwar das Video von Simon42 bzgl. Grafana und InfluxDB angesehen, allerdings verwende ich InfluxDB 2.7 auf einem Unraid Server (nicht als AddOn in HA) und dort wird die Flux Sprache eingesetzt.

Jetzt habe ich bei mir mehrere Tasmota Steckdosen, welche die aktuelle Leistung in W, den heutigen Engergieverbrauch in kWh und den gesamten Energieverbrauch in kWh anzeigt. Ich möchte aber in Grafana einen Panel mit dem täglichen bzw. wöchentlichen oder monatlichen Engergieverbrauch haben. Zuerst einmal für einzelne Steckdosen und später pro Raum.

Ich habe schon das Internet durchstöbert, aber entweder wird Grafana 1.x verwendet oder ioBroker oder eben keine Tasmota Steckdosen.

Hat das schon jemand in dieser Kombination gemacht und kann mir den Syntax für die Abfrage zur Verfügung stellen?

Hallo @Thomas29,

zuerst musst du InfluxDB2 in HA eingerichtet haben, dass die Daten überhaupt dahin gesendet werden.
Gehe aber davon aus, das ist schon geschehen… Die DataSource als Flux…

Dann musst du lediglich ein neues Panel erstellen und den Code in dieser Form nutzen:

from(bucket: "home_assistant")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "W")
  |> filter(fn: (r) => r["_field"] == "power")
  |> filter(fn: (r) => r["entity_id"] == "smarttv_power")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")
 

und/oder so:

 from(bucket: "home_assistant")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "kWh")
  |> filter(fn: (r) => r["domain"] == "sensor")
  |> filter(fn: (r) => r["entity_id"] == "smarttv_energy")
  |> filter(fn: (r) => r["_field"] == "energy")
  |> aggregateWindow(every: 1d , fn: last, timeSrc: "_start")
  |> difference(nonNegative: true, columns: ["_value"])
  |> yield(name: "last")

Ganz einfach für den Einstieg empfehle ich dir das Admin-Tool von Influx:
Das erreichst du unter: http://deineInfluxIP:8086

Darin gibt es den Data-Explorer - ähnlich zu Grafana. Das tolle hierbei ist, du kannst dir die Flux-Abfrage zusammen klicken und als Code anzeigen lassen… Der Button nennt sich Script-Editor.

Danke @nukleuz für Deine Beispiele und den Code. Habe es auch gemacht wie Du.
Leider habe ich bisher die Erfahrung machen müssen, dass influxDB ein Problem mit der Aggregation von 1d hat. Zumindest stimmen bei mir die Werte nicht mit den Werten in HA überein. Das liegt meiner Meinung nach daran, dass influxDB intern mit UTC arbeitet und sich somit nicht mit unserem Tag decken.
Wenn diese Ungenauigkeit nicht stört, dann paßt es ja. Ich habe vorerst die Versuche von Aggregationen für mich abgebrochen. Je länger die Aggregation wird, Woche, Monat, Jahr desto geringer fallen die Fehler aus.
Viel Erfolg
Claudius

@ryhoruk

Vielleicht hilft das hier?

Bisher haben mir die Werte gereicht und habe mir nie den Kopf über die Genauigkeit gemacht.

Nach diesem Beitrag ist es lediglich ein “Anzeige-Missverständnis”.

Eigentlich ganz spannend - ist da von euch keiner konform mit?

Vielen Dank schon mal.

Ich habe jetzt folgendes verwendet;

import "timezone"
option location = timezone.location(name: "Europe/Berlin")

from(bucket: "HomeAssistant")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "kWh")
  |> filter(fn: (r) => r["entity_id"] == "technik_energy_today")
  |> filter(fn: (r) => r["_field"] == "value")
  |> aggregateWindow(every: 1d , fn: last, timeSrc: "_start")

Allerdings, wenn ich mir die einzelnen Werte in der DB (ohne Aggregation) anschaue, stelle ich fest, dass meine Tasmota Steckdose in der Nacht um 1 Uhr auf 0 setzt.

2023-09-24 18:12:16 GMT+22023-09-26 18:12:16 GMT+22023-09-26 00:59:09 GMT+2	1,11
2023-09-24 18:12:16 GMT+22023-09-26 18:12:16 GMT+22023-09-26 00:59:49 GMT+2	1,11
2023-09-24 18:12:16 GMT+22023-09-26 18:12:16 GMT+22023-09-26 01:00:09 GMT+2	   0
2023-09-24 18:12:16 GMT+22023-09-26 18:12:16 GMT+22023-09-26 01:00:19 GMT+2	0,00

Lässt sich das mit einen Time-Offset irgendwie korrigieren oder ist das eine Einstellung in der Steckdose, wann diese den Wert auf 0 zurück setzt?

Es würde vielleicht auch reichen wenn ich sagen könnte, gib mir den letzten Wert vor 1 Uhr nachts anstatt den letzten vom Tag.

Schau dir mal die Doku von Tasmota an - da kannst du über die Konsole des Geräts was an der Timezone einstellen:

oder du nimmst das:

TimeSTD 0, 0, 10, 1, 3, 60
TimeDST 0, 0, 3, 1, 2, 120
timezone 99
time

Bei dir fehlt bestimmt die automatische Zeitumstellung - Sommer/Winter - deshalb die Stunde Unterschied.

Versuch mal die Befehle in der Konsole nacheinander auszuführen. dann sollte es passen.

Danke, das hat mir geholfen. Jetzt stimmt die Zeit. Mal sehen, was in ein paar Tagen in InfluxDB und Grafana steht.

1 „Gefällt mir“