pvtom/rscp2mqtt

Detailed historical consumption from e3DC

Closed this issue · 7 comments

Hi Tom,
noch zwei Fragen zu den historischen Werten:

Die e3DC liefert ja werte für "yesterday", "week", "month", "year". Weiterhin gibt es das Topic "history" nach Jahren geordnet.

  • Gibt es auch die Tageswerte über die gesamte Laufzeit? (Oder macht die e3DC eine Aggregation und wirft die Messwerte dann weg?). Das Portal zeigt diese Werte an, wenn ich mich richtig erinnere.. vielleicht sind sie nicht in der Schnittstelle drin.
  • Gibt es einen Zeitstempel für diese Werte - "Yesterday" ist halt nur in Verbindung mit dem Lesezeitpunkt sinnvoll (geht in Grafana, ist aber nicht so schön...)

VG TImmo
(hoffe, dass das der richtige Kanal für solche Fragen ist - oder hast Du ein separates Forum?)

Hallo Timmo,

die Tageswerte (auch Wochen-, Monatswerte), die man über das Portal einsehen kann, kann man grundsätzlich auch über die RSCP-Schnittstelle auslesen. Ich habe mich für die vergangenen Jahre und Yesterday entschieden, weil es von der Anzahl überschaubar bleibt. Die Yesterday-Werte z.B. schreibe ich nachts in eine Mail an mich.

Wenn man alle Tage seit Einschalten des Hauskraftwerks ausgibt, kommt bei einem Programmstart eine Menge Traffic auf. Von daher ist die Frage, was man hier sinnvoll umsetzen kann/sollte. Insbesondere, wenn andere User (wie in Issue #38) eine andere Aufteilung (monatsweise) wünschen. Evtl. ist die Idee, dass man über "e3dc/set/..."-Kommandos nach Tagen etc. anfragen kann, besser?!

Ich bastele immer mal wieder an History-Abfragen, weil mich der Gedanke zu weiteren historischen Werten auch seit Längerem umtreibt.
Bei der Abfrage muss man die Start- und die Endsekunde des Tages, des Monats, des Jahres (UNIX Epoche, seit 1.1.1970) mitgeben, dabei die Schalttage und Monatslängen berücksichtigen. Teilweise hatte ich beim Basteln allerdings Probleme, trotz der korrekten Zeitspannen, die gleichen Werte wie im Portal zu ermitteln. Insb. konnte ich Schalttage nicht korrekt abfragen. Hier hat E3DC scheinbar mittlerweile etwas geändert. Im Portal wurde bis von ein paar Monaten für einen Schalttag zwei Zeitbereiche (vor und nach der Zeitumstellung) ausgegeben. Das konnte ich über RSCP nicht nachvollziehen... es gibt dabei also auch Herausforderungen, die mich bisher davon abgehalten haben, eine weitergehende Lösung für rscp2mqtt zu bauen.

Zur Frage nach dem Zeitstempel: Ist mir nicht bekannt, würde ich mir auch zur besseren Zuordnung der zurückgelieferten Werte wünschen.

Gruß
Thomas

Hi Thomas

kann ich nachvollziehen, nicht Trivial - und das ohne Doku... Ich habe gerade auch nochmals geschaut und das hier gefunden:
https://python-e3dc.readthedocs.io/en/latest/e3dc.html#e3dc.E3DC.get_db_data_timestamp
Das scheint genau die Funktion der Datenbankabfrage zu beschreiben, wahrscheinlich verwendest Du auch so eine Logik.

Tatsächlich passt die Historical Value Thematik nicht ganz zu Timeseries mit MQTT. Nach einem Neustart werden wieder alle DB Daten in Influx eingetragen, und die kommt nicht auf einen grünen Zweig mit den redundanten Einträgen (hatte wg Frickelei so um die 10 Restarts... jetzt habe ich 10 Yesterdays in der DB). Mail ist natürlich auch nett...

Vielleicht wäre es wirklich eleganter, das zu separieren: Messwerte wie Power laufend über MQTT bereitstellen, und statische DB Werte nur auf "Ping" / MQTT ("e3dc/set/...") Kommando zu triggern. Dann könnte man die o.g. Funktion nutzen, und einfach einen kompletten Dump (alle Verbrauchswerte pro Minute seit Beginn oder so) und das einmal in die eigene DB rein. Dann müsste man noch den Timestamp vergewaltigen - nicht den Zeitpunkt des Schreibens in Influx, sondern den Timestamp des Wertes in nutzen.

Die Aggregation und Auswertung überlässt man dann Influx, Grafana & Co., da gibt es alle Möglichkeiten - nach Schaltjahr, Mondphasen und Millisekunden...

Vielen Dank für die Module!

VG Timmo

Neu mit Release v3.11:
Historical data for a specific day (format "YYYY-MM-DD") can be queried by
mosquitto_pub -h localhost -p 1883 -t "e3dc/set/request/day" -m "2024-01-01"

Please use the script request_days.sh to request data for a time span.
./request_days.sh localhost 1883 e3dc 2024-01-01 2024-01-13

Cool!

Bei mir werden seit dieser Version zyklisch die historischen Tagesdaten als neues MQTT Topic gepublished, ohne dass ich die speziell per MQTT Set Befehl abfrage. Kann ich die automatische Ausgabe der "day" Werte irgendwie in der config verhindern? Ich brauche die nicht.

Beispielwerte:

...
rscp2mqtt:e3dc/day/2024/2/9/autarky:.* 2_9_autarky
rscp2mqtt:e3dc/day/2024/2/10/battery/energy/charge:.* charge
rscp2mqtt:e3dc/day/2024/2/10/battery/energy/discharge:.* discharge
rscp2mqtt:e3dc/day/2024/2/10/solar/energy:.* energy
rscp2mqtt:e3dc/day/2024/2/10/grid/energy/in:.* in
rscp2mqtt:e3dc/day/2024/2/10/grid/energy/out:.* out
rscp2mqtt:e3dc/day/2024/2/10/home/energy:.* energy
rscp2mqtt:e3dc/day/2024/2/10/battery/rsoc:.* rsoc
rscp2mqtt:e3dc/day/2024/2/10/consumed:.* 2_10_consumed
rscp2mqtt:e3dc/day/2024/2/10/autarky:.* 2_10_autarky
rscp2mqtt:e3dc/day/2024/2/11/battery/energy/charge:.* charge
rscp2mqtt:e3dc/day/2024/2/11/battery/energy/discharge:.* discharge
rscp2mqtt:e3dc/day/2024/2/11/solar/energy:.* energy
rscp2mqtt:e3dc/day/2024/2/11/grid/energy/in:.* in
rscp2mqtt:e3dc/day/2024/2/11/grid/energy/out:.* out
rscp2mqtt:e3dc/day/2024/2/11/home/energy:.* energy
rscp2mqtt:e3dc/day/2024/2/11/battery/rsoc:.* rsoc
rscp2mqtt:e3dc/day/2024/2/11/consumed:.* 2_11_consumed
rscp2mqtt:e3dc/day/2024/2/11/autarky:.* 2_11_autarky

@docolli
Die "day"-Werte kann man ab Release v3.15 in der .config mit
DAILY_VALUES=false
unterdrücken.

Schon gesehen... 😉
Vielen Dank dafür!