InfluxDB & Gafana Addons Heatmap

Hallo zusammen!

Aktuelles HA OS auf Raspberry 5 mit den offiziellen Addons InfluxDB & Grafana.

Habe nen Haufen Steckdosen, Shellys und weitere Geräte, die Energieverbrauch melden. Soweit so gut, kommt auch alles an.

Habe mit Grafana leider keine Erfahrung und versuche es mit Hilfe von ChatGPT zu lernen. Einige Pannels habe ich schon. Geht schon grundsätzlich.

Konkret wollte ich nun einen Vergleich als Linie Gestern vs. Heute bauen. Diese jedoch zum besseren vergleichen übereinander gelegt (timeshift). Da ging es dann los. ChatGPT ist der Meinung, dass InfluxDB in v 1.18.x das nicht kann, da braucht man mind. InfluxDB 2.x. Weil man dafür Flux braucht (anstelle von InfluxQL). Aber als Workaround gibt es für die envars INFLUXDB_HTTP_FLUX_ENABLED: “true”. Soweit so gut. Neue Datenquelle angelegt, ich kann nun Flux verwenden. Aber das Ziel ist trotzdem nicht zu erreichen.

Noch schlimmer ist es mit einer Heatmap Stromverbrauch Wochentage / Uhrzeit. Nach vielen Stunden verschiedener Queries, Fehlermeldungen und Debugging erzählt mir ChatGPT nun, dass im Addon Grafana 12.0 drin ist. Das sei bekanntermaßen buggy und ich müsste Grafana 12.2 verwenden.

Habe jetzt schon mehrere Tage versenkt.

Bevor ich mit konkretem Code und Fehlern um Hilfe bitte, die Frage:
Hat sowas schon jemand hinbekommen? Mein Eindruck ist, dass ChatGPT einfach gerade nur Mist erzählt. Das sind doch keine besonderen Anforderungen, und so outdated sind die Versionen in den Addons doch auch nicht. Ich kann es einfach nicht glauben, dass das nicht funktionieren soll.

Moin,

ja, das ist nur die halbe Miete, denn es müssen zusätzliche Daten geladen werden, die es aber unter influxDB V 1.8 nicht gibt, die bekommt man erst mit influxDB V 2.x
Das war etwas mit option müsste ich mir aber noch einmal anschauen, habe schon lange nichts mehr mit V 1.8 gemacht, bin mir aber sicher, dass ich da schon mal im vergangenen Jahr hier im Forum etwas geschrieben habe.

Falsche Herangehensweise, wie soll man helfen, wenn man nicht weiß was da die schlaue KI gemacht hat :thinking:

Also ich habe nur mal auf die schnelle den Gesamtverbrauch vom hichi Lesekopf in ein Heatmap gepackt

from(bucket: "home_assistant")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "kWh")
  |> filter(fn: (r) => r["_field"] == "value")
  |> filter(fn: (r) => r["domain"] == "sensor")
  |> filter(fn: (r) => r["entity_id"] == "stromzahler_total_verbrauch")
  |> filter(fn: (r) => r["friendly_name"] == "Stromzähler total Verbrauch")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")

Wie gesagt, das entspricht nicht Deinen Anforderungen, aber die musst Du auch erst einmal formulieren :slight_smile:

VG
Bernd

Naja, würden sich einige melden und bestätigen, dass sie sich selbst schon die Zähne daran ausgebissen haben - und es mit InfluxDB v1.8 mit Grafana 12.0 (mit bekanntem Zeitschinenbug) einfach nicht zuverlässig geht, würde es doch nicht fair sein, jetzt die Leute zu bitten mitzuhlefen Code zu debuggen. Deshlab erstmal die Frage: Hat es überhaupt schon mal wer hinbekommen?

Dachte das sei klar.

x-Achse: Tagesstunden (0 bis 23)
y-Achse: Wochentage ( Mo bis Fr)
Values: SUM der Sensoren *_power gemäß Auswahl im Dropdown. Variable (SHOW TAG VALUES FROM “autogen”.“W”).

import "date"

from(bucket: "home_assistant/autogen")
  |> range(start: ${__from:date}, stop: ${__to:date})
  |> filter(fn: (r) =>
    r._measurement == "W" and r._field == "value" and
    r.domain == "sensor" and r["entity_id"] =~ /${device_power:regex}/
  )
  // |> timeShift(duration: 2h)      

  |> map(fn: (r) => ({
      r with
      hour: date.hour(t: r._time),
      weekday: int(v: date.weekDay(t: r._time))
    }))

 
  |> group(columns: ["weekday","hour"])
  |> sample(n: 16, pos: 0) 
  |> group() 

  |> keep(columns: ["_time","hour","weekday","_value"])

Danke für deine Antwort! Ideen?

Moin,

ich habe es auch mal versucht, aber bei mir nimmt er auch nicht die richtigen Daten für X-Achse und Y-Achse kann da soviel ich will umsortieren, no luck.

Dabei nutze ich recht aktuelle Software Grafana 12.1 und auch influxDB V2.7.10, ich habe auch mal geschaut ob ich ein anderes Plugin finde aber da gibt es auch nichts.

Das einzige, was ich hinbekommen habe, ist das


import "date"
import "timezone" // Muss importiert werden, falls Sie eigene Zeitzonen definieren, 
localZone = timezone.location(name: "Europe/Berlin")

from(bucket: "home_assistant")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "W")
  |> filter(fn: (r) => r["domain"] == "sensor")
  |> filter(fn: (r) => r["friendly_name"] == "Stromzähler aktueller Verbrauch")
  |> filter(fn: (r) => r["_field"] == "value")
  
  // Stündliche Aggregation mit Füllung für die Heatmap
  |> aggregateWindow(every: 1h, fn: mean, createEmpty: false)
  
  // korrekte Verwendung von date.weekDay()
  |> map(fn: (r) => ({
      // Übernimmt die Werte und Zeitstempel
      _time: r._time,
      _value: r._value,
      
      // Extrahiert die Stunde (ohne location, da 0-23 global)
      hour: int(v: date.hour(t: r._time)),
      
      // Extrahiert den Wochentag (0=Sonntag, 6=Samstag) unter Berücksichtigung der Zeitzone!
      weekday: int(v: date.weekDay(t: r._time, location: localZone)),
      
      // Behält Tags bei, die für die Heatmap nicht verändert werden
      _measurement: r._measurement, 
      friendly_name: r.friendly_name
  }))
  
  // Reduziert die Ausgabe auf die notwendigen Spalten für Grafana
  |> keep(columns: ["_value", "hour", "weekday"])
  |> yield(name: "hourly_watt_heatmap")

VG
Bernd