[Grafana] wie "genutzte" PV Energie darstellen.

Ahoi werte Freunde der gepflegten Darstellung,

nachdem nun mein BKW einen Monat läuft und ich ratzfatz 100kw der Sonne zu verdanken habe, habe ich mich (in vielen Stunden) mit grafana auseinandergesetzt und habe mir das ganze Päckchen auf meinem MacMini Server unter Docker installiert (so ging es ganz gut). Bin auch recht zufrieden, aber die Optimierungswut lässt nicht ab, daher würde ich gerne noch den genutzten PV Strom visualisieren, hab aber gerade einen Knoten im Kopf was ich mit was verrechnen sollte (vom gesamt Ertrag speise ich trotz Homeoffice locker 70% ein). Aktuell sieht das ganze so aus:

Den aktuellen IST Verbrauch konnte ich recht einfach darstellen in dem ich Zähler und PV addiert habe, wegen hin und wieder zeitlichen Versetzungen ist das Ergebnis nicht immer 100% korrekt aber man hat eine Vorstellung (sende nur alle 60sek per MQTT vom openDTU und von der Zähler IR Schnittstelle).

Nun wäre es toll, wenn ich sehen könnte wieviel ich vom produzierten Strom überhaupt verwerte/selbst verbrauche und was davon alles eingespeist wird. Kann mir jemand kurz helfen den Knoten ausm Kopf entwirren, was muss ich kalkulieren?

Ich habe:

  • PV Leistung

  • Zählerstand gesamt

  • Zähler aktueller Verbrauch bzw. was eingespeist wird (also Werte zB wie 100W oder -100W)

Also das was du meinst ist der Eigenverbrauch. Dieser wird berechnet aus PVLeistung - Einspeisung (Betrag) . Ist die Einspeisung 0, ist Eigenverbrauch = PVLeistung.

Liegen deine Daten (PVLeistung / aktuelle Zählerleitung) in der gleichen Datenbank/Measurement?

Hausverbrauch= PV-Ertrag - Einspeisung

Achte darauf, das die Daten in gleichen Zeitabständen in MQTT reinkommen und stelle bei Grafana die Automatischen Aktialisierung denn auf die Hälfte der Zeit ein, wie Deinen Daten reikommen

Danke Euch beiden, aktuell macht openDTU etwas Ärger, wie es scheint sendet er seit 20min keine Leistungsdaten Daten mehr (nur Temperatur 49,5°C), passiert in den letzten Tagen oft um die Zeit, aber darum soll es nicht gehen.

Danke, den IST Verbrauch sehe ich ja (sieht man in der Übersicht) mir gehts aber darum, wieviel ich von den PV Anlage gelieferte Leistung überhaupt selbst nutze (also alle gezogene Energie minus der selbst verwendeten, das Problem ist aber das mein Zähle rMinuswerte angibt beim Einspeisen. Will sagen, zB brauche ich aktuell im Haus mit alles Office etc. 300W, Sonne gibt mit 600W, also gehen 300 in Netz = Aktueller eigentlicher Verbrauch 300W, kosten 0W = klar. Aber was heisst das an einem Tag zusammengezählt, wenn ich allen SELBST genutzten Strom addiere? da wird dann zB auch der Wasserkocher dazu addiert, der dann aber 900W mehr braucht als die PV liefert, diese Zahl wird aber nicht rausgerechnet. Will sagen ich habe keine separate nur Einspeise Anzeige (Delivert bleibt 0.000). Sorry ich weiss nicht ob das verständlich ist, Knoten und so

Den PV-Ertrag hast du ja bereits vorliegen (in kWh)..

Und das gleiche baust Du dir mit Grafana für die eingespeiste Energiemenge.. (Die Abfrage ist nur als genereller Gedanke/Ideenanstoß zu verstehen)

SELECT integral("Zaehlerstandleistung",1h) * (-1) FROM "Measurement" WHERE "Zaehlerstandleistung" < 0 Group by time(1d) tz('Europe/Berlin')

Wenn Du nun den Wert von erzeugten Energiemenge abziehst, hast Du deinen Eigenverbrauch.. (kann man natürlich alles in eine Abfrage packen bzw. bei mehreren Abfragen via Transform)

Hallo nochmal und Danke für die Infos. Langsam beschleicht mich das Gefühl, dass mein datenbank Aufbau doch noch (mangels besseren Wissens) nicht optimal ist. Kurz zum Hintergrund mit der Bitte um Hinweise auf Verbesserung:

Auf dem MacMini Server läuft Docker mit Portainer, influxdb, iobroker und grafana (mehr nicht, auch kein RedNode). Daten bekomme ich vom HM-600 über openDTU per Mqtt alle 60sek und über die Hichi IR Schnitstelle über Tasmota (auch alle 60sek). Da es Probleme gab bei Tasmota das auf den gleichen Port wie vom openDTU zu schicken, läuft Tasmota im ioBroker über Sonoff auf Port 1890 und openDTU auf Mqtt mit Port 1883, das funktioniert und erscheint beides in grafana, mir dünkt aber das ist nicht ganz optimal und entsprechend gibts Probleme. Auch hörte ich nun, dass man die Kalkulationssachen lieber in RedNode machen sollte und finale Daten in Grafana verwenden sollte. Was würdet Ihr sagen?

Dann um das rechen Problem der genutzten PV Energie einzugrenzen, wie erhalte ich nur die rein Eingespeissten Energie Werte? wie gesagt mein Zähle macht mal 300W Plus mal 300W minus, aber beides aus der gleichen einen Datenquelle "Current Power". Gerade dieser Minuswert bringt mich so durcheinander. Wenn das unter delivered ein normaler wert wäre, könnt ich den Easy mit Verbräuchen etc kalkulieren.

PS die Probleme mit Tasmota per MQTT waren, dass die Werte nicht eindeutig waren, sondern so was ankam (hier vom Mqtt Explorer)

kurze Frage.. was machst du mit den Daten von den MQTT-Sensoren?-- speicherst Du dir die in eine influxdb? ..wenn ja, wie sieht dort die Struktur aus. / oder gehen die zu einem MQTT-Broker in iobroker? .

PS: ich kann Dir helfen, sollten die Daten in einer influxdb v1.8x landen.

Oha, das ist eine gute Frage, ich ging davon aus, dass alles von MQTT automatisch in die influxdb geht, denn sonst hätt ich in Grafana keine Historischen Werte. Habe das aber alles über ioBroker konfiguriert (wenn man das so nennen kann). Komme leider auch nicht auf das influx Backend um Dir zu sagen welche Struktur da wäre.

Überlege alles nochmal neu zu installieren das das mit rednode läuft, aber langsam verbrenne ich richtig viel Zeit damit.

Poste mal bitte deinen Query für deine Visualisierung in Grafana für PV und Zähler (links oben in deinem Screenshot).. sollte dein Datenbackend eine influx 1.8x sein, kann ich dir aus den Infos ein query für den aktuellen Eigenverbrauch + die insgesamt selbst verbrauchte Energie bauen.. ist relativ einfach.

Query sieht gesamt so aus, also da ist nichts mit Code. Influx ist als Datenquelle angegeben, aber Database kommt von ioBroker sehe ich gerade.

bzw

A

SELECT last("value") FROM "autogen"."sonoff.0.PowerCounter.E320_Power_in" WHERE time >= 1686806360195ms and time <= 1686838760195ms GROUP BY time(1m) fill(none) ORDER BY time ASC

B

SELECT last("value") FROM "autogen"."mqtt.0.HM-600_3joern.ac.power" WHERE time >= 1686806360195ms and time <= 1686838760195ms GROUP BY time(1m) fill(none) ORDER BY time ASC
SELECT integral("value", 1h) FROM "autogen"."sonoff.0.PowerCounter.E320_Power_in" WHERE time >= 1686806360195ms and WHERE value < 0
SELECT integral("value", 1h) FROM "autogen"."sonoff.0.PowerCounter.E320_Power_in" WHERE time >= 1686806360195ms and WHERE value >= 0
SELECT integral("value", 1h) FROM "autogen"."mqtt.0.HM-600_3joern.ac.power" WHERE time >= 1686806360195ms

Klappt das? Ich kenn mich mit Influx und Grfana nicht so aus, insbesondere dann, wenn die Daten in so ner Autogen DB abgelegt werden...

Sorry, wüsste gar nicht, wie ich das einbauen soll. Wenn ich das so mache, wie ich denke (was bestimmt falsch ist - mache mit Grafana/der Visualisierung ca. seit 2 Wochen rum) sieht das so aus

Du hast Fehler im Code.. wenn ich heute Abend noch kurz Zeit habe, mache ich dir die Anfragen eben fertig.

1 „Gefällt mir“

Versuche mal diese Abfrage.. autogen muss glaube nicht mit angegeben werden

SELECT Erzeugung - Einspeisung AS Eigenverbrauch FROM (
SELECT integral("value",1h) AS Erzeugung FROM "mqtt.0.HM-600_3joern.ac.power",
SELECT integral("value",1h) * (-1) AS Einspeisung FROM "sonoff.0.PowerCounter.E320_Power_in" WHERE value <= 0)
WHERE $timeFilter GROUP BY TIME(1h) tz('Europe/Berlin')
1 „Gefällt mir“

Ahoi mdkeil, hab super vielen lieben Dank für Deine Mühe, aber ich glaube ich bin echt zu unerfahren, damit sinnvoll was anfangen zu können (durch Buttons/Grafiken klicken bekomm ich hin, aber Code... wie gesagt weiss ich nichtmal, ob ich den an der richtigen Stelle eingebaut habe), bzw ich bekomme folgenden Fehler Code

error parsing query: found SELECT, expected identifier at line 3, char 9
Object
message:"InfluxDB Error: error parsing query: found SELECT, expected identifier at line 3, char 9"
data:Object
error:"error parsing query: found SELECT, expected identifier at line 3, char 9"
message:"error parsing query: found SELECT, expected identifier at line 3, char 9"
config:Object
method:"GET"
url:"api/datasources/proxy/uid/f68027bc-3a61-4083-af5c-878064565a61/query"
params:Object
db:"iobroker"
q:"SELECT Erzeugung - Einspeisung AS Eigenverbrauch FROM (
SELECT integral(\"value\",1h) AS Erzeugung FROM \"mqtt.0.HM-600_3joern.ac.power\",
SELECT integral(\"value\",1h) * (-1) AS Einspeisung FROM \"sonoff.0.PowerCounter.E320_Power_in\" WHERE value <= 0)
WHERE time >= now() - 9h and time <= now() GROUP BY TIME(1h) tz('Europe/Berlin')"
epoch:"ms"
data:null
precision:"ms"
inspect:Object
type:"influxdb"
paramSerializer:function serializeParams(e){…}
headers:Object
X-Grafana-Org-Id:1
retry:0
hideFromInspector:false

So hab ich den Code eingesetzt

Wähle zuerst mal als Visualisierung "Time Series" aus.. und dann versuche es mal damit, (Erzeugung-Einspeisung) im Query in Klammern zu setzen.

Ich kann dir sonst noch anbieten (wenn Grafana von extern zugänglich ist), dass du mir einen Zugang einrichtest und ich dir die Queries direkt erstelle..

Nochmals vielen vielen Dank für Deine Geduld und Mühe, ich habe versucht vorher mit NodeRed zu arbeiten und habe dabei als ich dann nach der influxdb geschaut habe das Verzeichnis zerschossen. Habe gerade die komplette Docker installation gelöscht, selten hat ein Thema soviel Zeit gefressen und ich sollte mal wieder Geld verdienen. Wegen Grafana werde ich auch nicht mehr Sonne haben, daher schau ich mir halt bei Bedarf die langweilige Tasmota Zähleroberfläche an... und ja ich kotze noch.

Hab ein schönes entspanntes Wochenende

Ahoi, aus Gründen und Ehrgeiz konnt ich es doch nicht lassen ?

Habe das System neu installiert (geht ja dank yaml in 5min) und da ich ein Backup des Grafana JSON hatte, war das Ganze ratzfatz wieder da (leider sind die alten PV/Zähler Daten weg, aber ist ok) nun habe ich Dein Vorschlag @mdkeil nochmal versucht und einzeln aufgedröselt, dass ich es verstehe, bzw so eingebaut, dass es "irgendwie" funktioniert. Parallel habe ich auch noch mit den Tageswerten was gebastelt (das andere Beispiel ist ja auf Stundenbasis). Irgendwie erscheinen mir die Zahlen aber nicht diese zu sein, die ich gerne hätte um am Ende des Tages zu sehen, was die PV den zu meinem gesamt Tagesbedarf beigetragen hat. Aber ich denke ich nähere mich.

@mdkeil Danke für Dein Angebot mit der direkten Hilfe, das ich gerne annehmen würde, doch da ich das auch gerne besser verstehen würde, wäre sowas bei einer Screensharing Session evt nochmal viel besser/nachhaltiger. Zumal externer Zugang nur per VPN wäre und dann auf mein gesamt Büronetzwerk, was semi optimal wäre :wink: Lass mich wissen, wenn Du Lust hättest, würde mich freuen.

Hier mal die Beispiele:

Das mit dem Query Code von mdkeil

Das von mir auf Tagesbasis

Du kannst "meinen" Code auch auf Tagesbasis machen.. Group by time(1d) ..unter query options dann aber z.B. unter Relative time 7d eintragen, dann bekommst Du die letzen 7 Tage angezeigt..

1 „Gefällt mir“