Tagesertrag SDM630 für InfluxDB berechnen

Überwachung der Solaranlage per eMail oder Pushover und Steuerung von Geräten mit Smart Home Zentralen. PV-Überschuss Steuerung verbunden mit Geräten und Tasmota Firmware. Wallbox Steuerungen und API Schnittstelle, über die Daten in die Solaranzeigen Datenbanken geschrieben und gelesen werden können. Alles, was man für Steuerungsaufgaben benötigt.

Moderator: Ulrich

Antworten
jkie
Beiträge: 6
Registriert: Mo 24. Aug 2020, 21:17
Hat sich bedankt: 9 Mal
Danksagung erhalten: 1 Mal

Tagesertrag SDM630 für InfluxDB berechnen

Beitrag von jkie »

Ich habe meine alten Zentralsolar-WR über SDM630 an die Solaranzeige angebunden (Regler34). SDM630 liefert mir aber keinen Tagesertrag, sondern hat nur Werte für die aktuelle Leistung und Gesamt-Wh. Im Grafana habe ich den Tagesertrag schon hinbekommen. Ich möchte den Tagesertrag (Wh_heute) auch gerne per Messenger verschicken. Dazu benötige ich ihn aber in InfluxDB.

Theoretisch ist die Rechnung einfach. Ich nehme zu einem bestimmten Zeitpunkt (z.B. nach Sonnenuntergang) den Wert "Wh_Gesamt" aus der Datenbank und subtrahiere davon den Wert "Wh_Gesamt" 24h vorher. Wie ich die Berechnung zum Sonnenuntergang starte und wie ich das Ergebnis in die InfluxDB zurückschreibe, habe ich mir schon aus anderen Vorlagen zusammengetragen; auch wie ich den Wert nach Sonnenuntergang auswähle. Ich scheitere aber an der Auswahl des Wertes "vor 24h", da ich mich mit dem Code zu wenig auskenne.

Hat da eventuell jemand eine passende Vorlage für mich?

In dem Zusammenhang habe ich mich auch mit den Datenbankfeldern "Statistik" beim SDM630 (und anderen) beschäftigt. Das scheinen aber fast ausschließlich Zeitstempel zu sein. Der Sinn dahinter hat sich mir bisher nicht erschlossen. Gibt's da vielleicht mehr Erklärungen dazu?

Schon mal besten Dank im Voraus!

TeamO
Beiträge: 602
Registriert: Mo 22. Jun 2020, 08:58
Hat sich bedankt: 6 Mal
Danksagung erhalten: 98 Mal

Re: Tagesertrag SDM630 für InfluxDB berechnen

Beitrag von TeamO »

Ich schau mal, ob ich die Erweiterung morgen machen kann und vielleicht übernimmt sie Ulrich dann, nach entsprechenden Tests von dir, in ein nächstes Update.

TeamO
Beiträge: 602
Registriert: Mo 22. Jun 2020, 08:58
Hat sich bedankt: 6 Mal
Danksagung erhalten: 98 Mal

Re: Tagesertrag SDM630 für InfluxDB berechnen

Beitrag von TeamO »

So,
versuch es mal mit diesen beiden Dateien.
funktionen.inc.php
(334.07 KiB) 47-mal heruntergeladen
SDM630_meter.php
(17.65 KiB) 43-mal heruntergeladen

jkie
Beiträge: 6
Registriert: Mo 24. Aug 2020, 21:17
Hat sich bedankt: 9 Mal
Danksagung erhalten: 1 Mal

Re: Tagesertrag SDM630 für InfluxDB berechnen

Beitrag von jkie »

Na das nenne ich ja mal einen Hammer - Support !!!

Auch wenn ich noch nicht ganz nachvollziehen konnte, was Du da genau machst, scheint es schon gut zu funktionieren.

Log-File vor der Änderung:
113471 31.05. 20:17:01 -Multi Regler Auslesen [Start].
113472 31.05. 20:17:01 -Verarbeitung von: '1.user.config.php' Regler: 34
113473 31.05. 20:17:01 + -WR_ID: 01
113474 31.05. 20:17:01 |------------ Start SDM630_meter.php -------------------------
113475 31.05. 20:17:02 -AC Leistung: -41.591 Watt
113476 31.05. 20:17:02 -Zaehler1 ohne Berechnung der Summen...
113477 31.05. 20:17:02 -MQTT Daten zum [ localhost ] senden.
113478 31.05. 20:17:02 * -Daten zur lokalen InfluxDB [ solaranzeige ] gesendet.
113479 31.05. 20:17:02 -Multi-Regler-Ausgang. 8
113480 31.05. 20:17:03 MQT-MQTT Daten zum Broker gesendet: localhost Port: 1883
113481 31.05. 20:17:10 -OK. Datenübertragung erfolgreich.
113482 31.05. 20:17:10 |------------ Stop SDM630_meter.php -----------------------
113483 31.05. 20:17:10 -Verarbeitung von: '2.user.config.php' Regler: 34
113484 31.05. 20:17:10 + -WR_ID: 01
113485 31.05. 20:17:10 |------------ Start SDM630_meter.php -------------------------
113486 31.05. 20:17:11 -AC Leistung: 198.62 Watt
113487 31.05. 20:17:11 -Zaehler2 Gesamtberechnungen der Summen durchgeführt
113488 31.05. 20:17:11 -Eigenbedarf: 240.211 Watt
113489 31.05. 20:17:11 * -Daten zur lokalen InfluxDB [ energieanzeige ] gesendet.
113490 31.05. 20:17:11 -Multi-Regler-Ausgang. 8
113491 31.05. 20:17:19 -OK. Datenübertragung erfolgreich.
113492 31.05. 20:17:19 |------------ Stop SDM630_meter.php -----------------------

Log-File nach der Änderung:
114399 31.05. 20:39:02 -Multi Regler Auslesen [Start].
114400 31.05. 20:39:02 -Verarbeitung von: '1.user.config.php' Regler: 34
114401 31.05. 20:39:02 + -WR_ID: 01
114402 31.05. 20:39:02 |------------ Start SDM630_meter.php -------------------------
114403 31.05. 20:39:03 -AC Leistung: -93.939 Watt
114404 31.05. 20:39:03 -Zaehler1 ohne Berechnung der Summen...
114405 31.05. 20:39:03 -MQTT Daten zum [ localhost ] senden.
114406 31.05. 20:39:03 * -Daten zur lokalen InfluxDB [ solaranzeige ] gesendet.
114407 31.05. 20:39:03 -Multi-Regler-Ausgang. 8
114408 31.05. 20:39:04 MQT-MQTT Daten zum Broker gesendet: localhost Port: 1883
114409 31.05. 20:39:11 -OK. Datenübertragung erfolgreich.
114410 31.05. 20:39:11 -WattstundenGesamtHeute: -24.99
114411 31.05. 20:39:11 |------------ Stop SDM630_meter.php -----------------------
114412 31.05. 20:39:11 -Verarbeitung von: '2.user.config.php' Regler: 34
114413 31.05. 20:39:11 + -WR_ID: 01
114414 31.05. 20:39:11 |------------ Start SDM630_meter.php -------------------------
114415 31.05. 20:39:12 -AC Leistung: 181.621 Watt
114416 31.05. 20:39:12 -Zaehler2 Gesamtberechnungen der Summen durchgeführt
114417 31.05. 20:39:12 -Eigenbedarf: 275.56 Watt
114418 31.05. 20:39:12 * -Daten zur lokalen InfluxDB [ energieanzeige ] gesendet.
114419 31.05. 20:39:12 -Multi-Regler-Ausgang. 8
114420 31.05. 20:39:20 -OK. Datenübertragung erfolgreich.
114421 31.05. 20:39:20 -WattstundenGesamtHeute: 77.88
114422 31.05. 20:39:20 |------------ Stop SDM630_meter.php -----------------------

Kurz zur Erläuterung:
- Das erste SDM630 (Regler_1) hängt direkt an den PV-WR, d.h. nur Einspeisung. Werte werden in die DB "Solaranzeige" geschrieben.
- Das zweite SDM630 (Regler_2) hängt am Hausanschluss, d.h. Einspeisung und Bezug. Werte werden in die DB "Energieanzeige" geschrieben.
- Aus Regler_1 und Regler_2 habe ich mir dann den Eigenbedarf errechnet und in die InfluxDB geschrieben.

Für beide SDM630 wird jetzt der Tagesertrag ausgewiesen. Das in diesem Falle die Werte einmal positiv und einmal negativ sind, muss ich in Ruhe noch einmal nachvollziehen. Möglicherweise gibt's da auch noch einen Denkfehler, was jetzt Bezug, Einspeisung und Gesamt bedeutet ...

In der InluxDB wurde auch ein neues Feld generiert:

> select * from Summen order by time desc limit 50
name: Summen
time GesamtLeistungsbedarf Wh_GesamtBezug Wh_GesamtEinspeisung Wh_Heute
---- --------------------- -------------- -------------------- --------
2022-05-31T18:51:10Z -161.176 277 2236909 0
2022-05-31T18:50:11Z -161.176 277 2236908 0
2022-05-31T18:49:10Z -174.615 277 2236908 0
2022-05-31T18:48:11Z -174.615 277 2236906 0
2022-05-31T18:47:10Z -188.522 277 2236905 0
2022-05-31T18:46:11Z -188.522 277 2236903 0
2022-05-31T18:45:10Z -203.64 277 2236902 0
2022-05-31T18:44:11Z -203.64 277 2236900 0
2022-05-31T18:43:10Z -218.71 277 2236898 0
2022-05-31T18:42:11Z -218.71 277 2236898 0
2022-05-31T18:41:10Z -236.463 277 2236896 0
2022-05-31T18:40:11Z -236.463 277 2236894 0
2022-05-31T18:39:12Z -253.105 277 2236892 0
2022-05-31T18:38:10Z -253.105 277 2236891 0
2022-05-31T18:37:11Z -273.719 277 2236890 0
2022-05-31T18:36:11Z -273.719 277 2236888 0
2022-05-31T18:35:10Z -302.659 277 2236886 0
2022-05-31T18:34:10Z -302.659 277 2236886 0
2022-05-31T18:33:11Z -332.306 277 2236884 0
2022-05-31T18:32:11Z -332.306 277 2236882
2022-05-31T18:31:10Z -362.282 277 2236881
2022-05-31T18:30:10Z -362.282 277 2236880
2022-05-31T18:29:11Z -391.025 277 2236879
2022-05-31T18:28:11Z -391.025 277 2236877
2022-05-31T18:27:10Z -411.327 277 2236875
2022-05-31T18:26:10Z -411.327 277 2236875
2022-05-31T18:25:11Z -438.505 277 2236874

Allerdings noch mit dem Wert "0", was wahrscheinlich damit zusammenhängt, dass du das Ergebnis erst einmal in ein txt-File schreibst. Richtig?

Wie gesagt, dass muss ich in Ruhe noch einmal gedanklich versuchen nachzuvollziehen. Gebt mir deshalb bitte etwas Zeit ;)

Aber schon mal: D A N K E

TeamO
Beiträge: 602
Registriert: Mo 22. Jun 2020, 08:58
Hat sich bedankt: 6 Mal
Danksagung erhalten: 98 Mal

Re: Tagesertrag SDM630 für InfluxDB berechnen

Beitrag von TeamO »

Du hast also zwei SDM630 bei Dir, welche ausgelesen werden.
Gibt es unter /var/www/html/database/ zwei Dateien mit x.WhProTag.txt ? Und ist in diesen der jeweilig "aktuelle" Wert von "WattstundenGesamtHeute" eingetragen?

jkie
Beiträge: 6
Registriert: Mo 24. Aug 2020, 21:17
Hat sich bedankt: 9 Mal
Danksagung erhalten: 1 Mal

Re: Tagesertrag SDM630 für InfluxDB berechnen

Beitrag von jkie »

Ja, es gibt jetzt 2 Dateien (1.WhProTag.txt und 2.WhProTag.txt). In beiden Dateien steht der jeweils aktuell berechnete Tageswert, analog zu den Werten im Log-File. Im Log-File kann ich auch nachvollziehen, dass der Zähler um Mitternacht auf Null gesetzt wird und neu startet. TOP!

Das (teilweise) negative Vorzeichen bei den Werten kann ich jetzt auch nachvollziehen. Das SDM630 ist ein 2-Richtungs-Zähler. Dabei wird der Bezug von Energie aus Sicht des SDM positiv ausgewiesen und die Einspeisung von Energie ("Rückspeisung") mit negativen Werten dargestellt. Ich habe das SDM an meiner PV-Anlage (Regler_1) so angeschlossen, dass es aus Sicht des SDM als Einspeisung läuft. Somit bekomme ich immer negative Werte. Beim nächsten Mal würde ich das wahrscheinlich anders herum machen, damit es weniger verwirrt...

Bei dem Tageswert für das 2. SDM musste ich etwas länger nachdenken, ob es passt. Dabei konnte ich auch nachvollziehen, wie Du die Berechnung machst. Und ich meine, dass die Berechnung nicht ganz sauber ist.
Du hast in der Berechnung einen eigenen Energiezähler gebaut, indem die aktuell ausgelesene Leistung ("AC-Leistung") integriert wird. Beim SDM kann dieser Wert "AC_Leistung" positiv (bei Bezug) und negativ (bei Einspeisung) werden. Als Tagesergebnis ergibt sich somit die Differenz aus Tages-Einspeisung und Tages-Bezug. Ob dieses Ergebnis "richtig" oder "falsch" ist, kann wahrscheinlich beliebig lange diskutiert werden. Letztendlich hängt es immer vom Anwendungsfall ab und es muss jeder für sich selber entscheiden. Ich habe auch im Nachgang gemerkt, dass ich mir selber an der Stelle noch zu wenig Gedanken gemacht hatte und deshalb bei meiner Anfrage vielleicht etwas ungenau war.

Da ich den Tageswert nur für die PV_Anlage möchte (Regler_1), passt es in meinem Falle. Im Grafana wird der Tagesertrag auf die gleiche Art und Weise ermittelt. Somit ist meine ursprüngliche Anfrage beantwortet. Von hier ab würde ich es alleine weiter versuchen.

Noch einmal ein riesen Dankeschön an Dich TeamO für den Support!

Wenn die Berechnung des Tagesertrages durch Ulrich zukünftig in das Gesamtprojekt mit einfließen soll, würde ich mir aber eine andere (aus meiner Sicht genauere) Berechnung wünschen. Das SDM übermittelt heute schon Gesamt-Summen-Werte zu Energiebezug ("Wh_Bezug") und Einspeisung ("Wh_Einspeisung"). Und diese Werte sind vom Messgerät ermittelt und müssen nicht mit den bekannten Einschränkungen in der Solaranzeige berechnet werden. Es müsste doch für den Tagesertrag jetzt nur noch die Differenz aus 'aktueller Wert' minus 'Wert vor 24h' berechnet und in die InfluxDB als "Wh_BezugProTag" und "Wh_EinspeisungProTag" geschrieben werden. Aus diesen beiden Werten sollte dann jeder User seinen Anwendungsfall bedienen können. Das Berechnungsprinzip kann dann wahrscheinlich für jedes SmartMeter im Projekt übernommen werden.

Oder stelle ich mir das zu einfach vor?

TeamO
Beiträge: 602
Registriert: Mo 22. Jun 2020, 08:58
Hat sich bedankt: 6 Mal
Danksagung erhalten: 98 Mal

Re: Tagesertrag SDM630 für InfluxDB berechnen

Beitrag von TeamO »

Ich habe hier dieselbe "Funktion" verwendet, welche auch bei anderen Reglern für die berechnung der Tages-Leistung verwendet wird.
Jedoch hatte ich nicht beachtet, dass ja Bezug und Einspeisung vorhanden ist. Natürlich ist es jetzt noch möglich aufgrund des Vorzeichens Bezug und Einspeisung getrennt zu rechnen und mit zwei Werten in die Datenbank zu schreiben.
Und es wäre sicher auch möglich die letzten Werte von "Wh_GesamtEinspeisung" und "Wh_GesamtBezug" vom Vortag von den aktuellen Werte "Wh_GesamtEinspeisung" und "Wh_GesamtBezug" abzuziehen und in die Datenbank zu schreiben und somit den entsprechenden Tages-Wert zu bekommen.
Dafür kenne ich mich aber zu wenig mit PHP aus.

jkie
Beiträge: 6
Registriert: Mo 24. Aug 2020, 21:17
Hat sich bedankt: 9 Mal
Danksagung erhalten: 1 Mal

Re: Tagesertrag SDM630 für InfluxDB berechnen

Beitrag von jkie »

Nachdem ich mit der aktuellen Lösung noch nicht 100% zufrieden bin, habe ich in den letzten Wochen eine ganze Menge ausprobiert. Vieles von dem war nicht von Erfolg gekrönt, was sicherlich auch meinen mangelnden Programmierkenntnissen geschuldet ist. Vielleicht kann mir ja jemand noch einen Tip bzw. Code geben, wie ich aus der InfluxDB zum Zeitstempel "Gestern_TS" (den kann ich schon selber ermitteln) den letzten gespeicherten Wert von z.B. "Wh_Einspeisung" auslesen kann. Daran bin ich bisher gescheitert...

Trotzdem war ich nicht ganz untätig und meine aktuelle Lösung sieht wie folgt aus: Ich habe den Lösungsansatz von @TeamO weiter verfolgt und nutze das Zwischenspeichern von Werten in txt-Dateien als Übergangslösung. Konkret speichere ich mir um Mitternacht von meinen zwei SDM630 jeweils den aktuellen Wert von "Wh_Bezug" und "Wh_Einspeisung" in eine txt-Datei. Damit habe ich die Werte vom Vortag (= Wert_gestern). Diese Werte lese ich dann mit jedem Umlauf wieder aus und ermittle den Tageswert von Bezug und Einspeisung, d.h.

Tageswert = Wert_aktuell (aus SDM630) - Wert_gestern (aus txt-Datei).

Diese Werte schreibe ich dann in die InfluxDB als "Bezug_Tag" und "Einspeisung_Tag" zurück. Die ganze Berechnung habe ich auch von SDM630_meter.php nach SDM630_meter_math.php verschoben, damit es bei einem Update nicht überschrieben wird.

Damit bin ich schon ganz nah an der aus meiner Sicht "perfekten" Lösung. Die ermittelten Tageswerte sind nicht schlechter oder besser, als wenn man die Werte direkt aus der InfluxDB ausliest. Aus dieser Sicht gibt es keine Notwendigkeit einer weiteren Optimierung. Allerdings störe ich mich noch etwas an der Lösung mit den txt-Dateien, deshalb werde ich da weiter dranbleiben (und bei Erfolg berichten).

Antworten