Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add simple DataLogger and support for SD cards. #2125

Open
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

marvincarstensen
Copy link

This PR contains a simple DataLogger that can be used to record historical production data to a CSV file. I think this would be a nice addition for people who don't have a fancy smart home setup with MQTT, Grafana, etc.

To make it easy to access the recorded data (CSV file), I also added support for an SD card through an SPI bus. The MemoryInfo view has been updated to show the SD card capacity:

Bildschirmfoto 2024-07-07 um 09 08 04

The configuration of the DataLogger can be done in its own configuration view:

Bildschirmfoto 2024-07-07 um 09 07 03

Currently, only the following data will be exported, including a timestamp:

Bildschirmfoto 2024-07-07 um 09 14 38

If this PR is considered for merging, I would invest more time to also export individual inverter data (yield, power, voltage, frequency, etc.). What do you think?

Here are some precompiled builds to test:

generic_esp32.zip
generic_esp32c3.zip
generic_esp32s3.zip
generic.zip
opendtufusionv2.zip

@jblond4711
Copy link

Hi,

dein Posting ist total an mir vorbeigegangen. Morgen sollte mein Reader ankommen und dann werde ich mich gleich mal versuchen. Der Reader ist von AZ-Delivery. Mal sehen ob ich den angeschlossen bekomme da meine openDTU auf einer Platine verbaut ist.

@Juergen2453
Copy link

Juergen2453 commented Aug 9, 2024

Leider habe ich es bis jetzt noch nicht hinbekommen etwas auf die SD zu schreiben.
Mein SD-Leser ist : https://www.az-delivery.de/products/copy-of-spi-reader-micro-speicherkartenmodul-fur-arduino
Boards habe ich ausprobiert ESP32 , ESP32-S3-KIT , openFusions-Board v2.x , 4Gb SD-Card (Fat)
Wo ist mein Fehler?
Diese Meldungen bekomme ich aus dem ESP32

DataLogger: 1723215469;0.00;0.00;0.00
saved.
DataLogger: Appending to file: /data.csv
[300585][E][sd_diskio.cpp:199] sdCommand(): Card Failed! cmd: 0x0d
[300591][E][sd_diskio.cpp:624] ff_sd_status(): Check status failed
[300907][E][sd_diskio.cpp:199] sdCommand(): Card Failed! cmd: 0x00
[301227][E][sd_diskio.cpp:199] sdCommand(): Card Failed! cmd: 0x00
[301547][E][sd_diskio.cpp:199] sdCommand(): Card Failed! cmd: 0x00
[301867][E][sd_diskio.cpp:199] sdCommand(): Card Failed! cmd: 0x00
[301873][E][vfs_api.cpp:332] VFSFileImpl(): fopen(/sd/data.csv) failed
DataLogger: Failed to open file for appending
DataLogger: 1723215771;0.00;0.00;0.00
saved.
DataLogger: Appending to file: /data.csv
[604274][E][vfs_api.cpp:332] VFSFileImpl(): fopen(/sd/data.csv) failed
DataLogger: Failed to open file for appending

Nachtrag: Etwas wird auf die SD geschrieben mehr aber nicht.
image

@stefan123t
Copy link

stefan123t commented Aug 9, 2024

@Juergen2453 please check the size of your SD Card. I recall that Jomjol AI on the edge requires 4/8GB SDCards to work. I actually bought a couple of 8GB SD cards as the 32GB SanDisk I had from RasPi around would not work.

See here espressif/arduino-esp32#7707 with hints regarding the SPI settings of the SD library, tracing the IO using a Logic Shrimp, some suggestions to the 3.3V vs 5V SDCard modules too and a link to troubleshooting several issues with mounting 32GB SanDisk modules in ESP-IDF.

Or here for the same ff_sd_status(): Check status failed ERROR and the necessary VSPI pre-setting for some ESP models espressif/arduino-esp32#6372 (comment) This maybe model specific and is also described in the above issue.

I assume the FAT filesystem table may be to big for the tiny uC/ESP32 or the filesystems “Blocksize” for appending to the same block.
You obviously set the SDCard Readers pin_mappings, as you have been able to write the header!

Can you check with a smaller SDCard ?

This issue has one proposal regarding append fails in the stackexchange sub post https://forum.arduino.cc/t/esp32-sd-writes-but-doesnt-append/697112
But I should search for the second error message probably.

You may also verify the “/api/datalogger/config” REST endpoint for your current config, but the Debug Logging is already quite explicit. Thanks for the concise report.

@Juergen2453
Copy link

Ich habe extra eine 4 GB SDCards genommen. Den Header schreibt er ja, also pin_mapping alles richtig.

Ich habe allerdings noch keinen Funkmodul für den Wechselrichter angeschlossen
Bei den drei Werten steht "true" sollte es damit zutun haben ?
Kann es allerdings erst morgen Testen.

Ausgabe: /api/datalogger/config
{
"datalogger_enabled": true,
"saveinterval": 30,
"filename": "data.csv",
"output_config": {
"total_yield_total": true,
"total_yield_day": true,
"total_power": true
}
}

@stefan123t
Copy link

stefan123t commented Aug 9, 2024

@Juergen2453 Schau Dir nochmal meine Updates oben an. Evtl liegt es auch am VSPI Setting wie in dem Kommentar von P-R-O-C-H-Y in espressif/arduino-esp32#6372 Das wird auch im ersten Link/Issue angesprochen.

SPIClass spi = SPIClass(VSPI);

Die drei true Werte sollten die Ausgabe der Spalten aktivieren, sonst schreibt er jeweils eine 0; in die neue Zeile.

Wenn er jedoch keine Werte vom WR bzw. NRF/CMT Modul bekommt weiss ich nicht ob/was er loggt, aber er scheint ja einen Timestamp und Werte schreiben zu wollen:

DataLogger: Failed to open file for appending
DataLogger: 1723215771;0.00;0.00;0.00
saved.
DataLogger: Appending to file: /data.csv

@Juergen2453
Copy link

Funkmodul ist angeschlossen, er könnte auch die Werte abspeichern.
Leider Fehler

DataLogger: 1723274070;171.40;236.00;2207.78
saved.
DataLogger: Appending to file: /data.csv
[200316][E][vfs_api.cpp:332] VFSFileImpl(): fopen(/sd/data.csv) failed
DataLogger: Failed to open file for appending

Ich würde ja gerne selber bauen, dann könnte ich auch
SPIClass spi = SPIClass(VSPI);
ausprobieren.

Wie kann ich das Clonen oder muss ich die Änderungen mit der Hand einpflegen?

@stefan123t
Copy link

@Juergen2453 tut mir leid ich habe mich mit git noch nicht soweit angefreundet dass ich das schon wüsste. Ich glaube Du musst den feature branch auschecken, ggf mit der Commit Id ?

@jblond4711
Copy link

@Juergen2453 an welchen Pins hast du den Kartenleser angeschlossen? Kannst du mal bitte deine pin_mapping.json Einträge zeigen.
Verwendest du ein nrf24 oder den cmt2300a Chip?
In welche Datei gehört der Eintrag SPIClass spi = SPIClass(VSPI); ?

@Juergen2453
Copy link

Juergen2453 commented Aug 10, 2024

@jblond4711 zum Testen habe ich einen ganz normalen ESP32-D0WD-V3 mit 38-Pin genommen.
Nur nrf24 angeschlossen.
Soweit bin ich noch nicht -> "In welche Datei gehört der Eintrag SPIClass spi = SPIClass(VSPI)"
Bis jetzt wird die SD beim starten erkannt und die Datei angelegt. Die Überschrift der Werte wird auch geschrieben,

In der pin_mapping habe ich nur das nötigste drin.
{
"name": "Generic NodeMCU 38 pin",
"nrf24": {
"miso": 19,
"mosi": 23,
"clk": 18,
"irq": 16,
"en": 4,
"cs": 5
},
"sd": {
"clk": 12,
"cs": 27,
"miso": 26,
"mosi": 14
},
"eth": {
"enabled": false,
"phy_addr": -1,
"power": -1,
"mdc": -1,
"mdio": -1,
"type": -1,
"clk_mode": -1
}
},

Ich habe die vorkompilierte Builds zum Testen genommen.

@stefan123t
Copy link

stefan123t commented Aug 11, 2024

@jblond4711 schau mal hier espressif/arduino-esp32#7707 (comment) hat eismeraldo sogar je nach ESP32 board unterschiedliche SPI verwendet:

Analog zu seinen Versuchen mit unterschiedlichen SPIs sollten wir mE auch noch daa Append an die Datei testen. Ich vermute dass er prinzipiell schreiben kann, aber beim Seek für den Append oder beim Lesen des letzten Blocks evtl ein Problem hat.

Der Testaufbau mit Logic Analyzer ist mE auch sehr hilfreich bei der Fehlersuche.

void setup() {
pinMode(PIN_NUM_SD_ACTIVITY, OUTPUT);
pinMode(PIN_STEP_NR_1, OUTPUT);
pinMode(PIN_STEP_NR_2, OUTPUT);
pinMode(PIN_STEP_NR_4, OUTPUT);
clearStep();
// SPI depending on Board type
#if defined(BOARD_DOIT_DEFINED_DEFAULT_GPIO) || defined(BOARD_ESP32_S3_DEFINED_GPIO)
showStep(0, "Init SPI");
SPIClass* spiSpecial = NULL;
#if defined(BOARD_DOIT_DEFINED_DEFAULT_GPIO)
spiSpecial = new SPIClass(HSPI);
#endif
#if defined(BOARD_ESP32_S3_DEFINED_GPIO)
spiSpecial = new SPIClass(FSPI);
#endif
spiSpecial->begin(PIN_NUM_CLK, PIN_NUM_MISO, PIN_NUM_MOSI, PIN_NUM_CS);
#endif
#if defined(BOARD_DOIT_DEFINED_DEFAULT_GPIO) || defined(BOARD_ESP32_S3_DEFINED_GPIO)
showStep(1, "SD.begin");
if (!SD.begin(PIN_NUM_CS, spiSpecial)) {
#else
showStep(1, "SD.begin");
if (!SD.begin()) {
#endif
clearStep();
log_e("Initialization failed!");
return;
}
log_i("*** Initialization ok.");

writeToSD("/test.txt", "123ABCabc1122");
readFromSD("/test.txt");
}

@jblond4711
Copy link

@Juergen2453 an welche Pins hast du den Cardreader angeschlossen? Vermutlich werde ich dann mal einen fliegenden Aufbau machen. Bis jetzt habe ich immer eine Platine verwendet wo ein nrf24 und cmt2300a schon drauf sind aber irgendwas passt da nicht da der Reader immer richtig heiß wird.

@stefan123t soweit bin ich leider noch lange nicht da ich erstmal mit dem Hardware Aufbau klarkommen muss. Jetzt muss ich erstmal sehen wo ich eine Pinbelegung zum Anschließen herbekomme.

@stefan123t
Copy link

stefan123t commented Aug 11, 2024

@jblond4711 hier sind die Settings die @Juergen2453 verwendet hat:

"sd": {
"clk": 12,
"cs": 27,
"miso": 26,
"mosi": 14
},

Laut dem Datenblatt hier sind 15,12,13,14 HSPI und 5,18,19,23 VSPI, das sollte man dann auch entsprechend berücksichtigen.

image

@Juergen2453
Copy link

So ich habe gerade die Daten in die neueste openDTU eingepflegt (ging schneller als ich dachte)
Bauen geht, Übertragen geht aber Fehler sind die selben.
Er legt die Datei "data.csv" an
Er Schreibt die Überschrift in die Datei
nur die Daten schreibt er nicht in die Datei.

@jblond4711 "Laut dem Datenblatt hier sind 15,12,13,14 HSPI und 5,18,19,23 VSPI, das sollte man dann auch entsprechend berücksichtigen."
Das habe ich nicht berücksichtigt, kann man ja noch anpassen.

Aber jetzt kann ich ein bisschen suchen ausprobieren.

@Juergen2453
Copy link

20240811_092839

@stefan123t
Copy link

stefan123t commented Aug 11, 2024

Er legt die Datei "data.csv" an
Er Schreibt die Überschrift in die Datei
nur die Daten schreibt er nicht in die Datei.

@Juergen2453 wenn er die Datei anlegt bzw den Header schreibt, schmeisst er dann auch schon Fehler ?

Und ja die Zuordnung von VSPI vs HSPI solltest Du bei Deinen Versuchen einhalten. Ggf auch noch das SPIClass spi = SPIClass(VSPI); bzw HSPI in die setup Routine einbauen. ZB vor Zeile 95

SPIClass* spiSpecial = NULL;
spiSpecial = new SPIClass(HSPI);

spiSpecial->begin(pin.sd_clk, pin.sd_miso, pin.sd_mosi, pin.sd_cs);
//SPI.begin(pin.sd_clk, pin.sd_miso, pin.sd_mosi, pin.sd_cs);

@Juergen2453
Copy link

Die Datei legt er ohne Fehler an.
Wenn die Datei existiert meldet er es ohne Fehler.
Eigentlich so wie es sein sollte.
Nur die Daten schreibt er nicht.

Sollte ich mal berücksichtigen.
"Zuordnung von VSPI vs HSPI"

"SPIClass* spiSpecial = NULL;
spiSpecial = new SPIClass(HSPI);
spiSpecial->begin(pin.sd_clk, pin.sd_miso, pin.sd_mosi, pin.sd_cs);
//SPI.begin(pin.sd_clk, pin.sd_miso, pin.sd_mosi, pin.sd_cs);"

Leider habe ich jetzt keine Zeit mehr, darum schönes Wochenende noch.

@jblond4711
Copy link

Erstmal Danke für die Hilfe. Dann mache ich mich jetzt mal an die fliegende Verdrahtung. Kann man Pins eigentlich auch doppelt verwenden oder gibt es dann Konflikte?

@jblond4711
Copy link

Alles fliegend verdrahtet aber wieder Fehlschlag. Die DTU startet aber sd Card wird nicht erkannt. In der Systeminfo steht bei SD alles auf 0kB.
Hat der Kartenleser eigentlich eine LED?
Über die Konsole kommen keine Ausgaben. Wie kann ich testen ob der Kartenleser überhaupt funktioniert?

@stefan123t
Copy link

@jblond4711 hat Dein SD Card Reader +3.3V oder 5V ? Da scheint es Unterschiede zu geben, ggf muss man Vorwiderstände zwischen bauen siehe die o.a. Issues und deren Spin-offs.

@jblond4711
Copy link

@stefan123t ist der gleiche den Juergen2453 verwendet. Ich steige da echt nicht mehr durch. Um den Kartenleser zu testen habe ich ihn mal nur allein an den esp32 angeschlossen an die Pins 18, 5, 19, 23 und die pin_Mapping angepasst aber nichts immer noch 0kB und im der Konsole auch keine Anzeige.
Versucht habe ich 3,3 und 5 Volt für den Reader.

@jblond4711
Copy link

jblond4711 commented Aug 11, 2024

Kleiner Fortschritt, ich habe jetzt mal nur den Reader allein an den esp32 angeschlossen mit 5 Volt und die Pins 12, 27,26, 14 wie bei Juergen2454.
Jetzt wird die data.csv angelegt und es gibt auch eine Ausgabe in der Konsole.
16:56:01.728 > DataLogger: 1723388159;0.00;0.00;0.00 16:56:01.728 > saved. 16:56:01.728 > DataLogger: Appending to file: /data.csv 16:56:01.728 > DataLogger: Failed to open file for appending
Das wiederholt sich dann. Was mich aber wundert ist das die SD Anzeige immer bei 0kB bleibt. Verwendet habe ich jetzt mal eine 512Mb große Micro SD Karte, es sind wirklich funfhundert und zwölf Megabyte.
Dann habe ich die Karte mal zur Hälfte mit anderen Daten gefüttert aber die SD Anzeige bleibt bei 0kB.

@jblond4711
Copy link

Jetzt weiß ich auch nicht mehr weiter. Nachdem ich jetzt von der fliegenden Verdrahtung zur Platine gewechselt bin klappt nichts mehr.
Keine Ausgabe vom Datenlogger in der Konsole mehr. Kann es an doppelt belegten Pins liegen?
OpenDTU.pdf

@Juergen2453
Copy link

@stefan123t So bauen kann ich jetzt. Ich hatte mich nur gewundert das ich keine Einstellungen am "Datenlogger" machen konnte.
Da viel mir doch wieder "yarn" ein. Erst ein upgrade von Node und dann ein upgrade von "yarn". Dann war die Oberfläche wieder da. Ab Morgen werde ich mal weiter Testen.

@jblond4711 hast du gebaut oder die fertigen builds genommen?

@Juergen2453
Copy link

@jblond4711 du hast ja CMT und SD an den gleichen PINs. Ich glaube nicht das das geht.

@stefan123t
Copy link

CMT und SD könnte evtl. sogar gehen wenn man definitiv einen anderen CS verwendet, dh MISO, MOSI und CLK kann man sich teilen. Wo es aktuell mW Probleme gibt ist beim gemeinsamen Verwenden des selben SPI mit dem NRF, weil das die RF24 Bibliothek nicht anbietet.

Aber wenn man nicht NRF und CMT braucht bietet es sich an HSPI und VSPI getrennt zu verwenden.

@Juergen2453
Copy link

Es läuft (update alle 15Sek.),
Der NRF24 macht die Probleme, im Moment NRF24 komplett abgeschaltet.

22:18:50.880 > DataLogger: 1723407530;0.00;0.00;0.00
22:18:50.880 > saved.
22:18:50.880 > DataLogger: Appending to file: /data.csv
22:18:50.880 > DataLogger: Data appended
22:19:06.880 > DataLogger: 1723407546;0.00;0.00;0.00
22:19:06.880 > saved.
22:19:06.880 > DataLogger: Appending to file: /data.csv
22:19:06.880 > DataLogger: Data appended
22:19:22.881 > DataLogger: 1723407562;0.00;0.00;0.00
22:19:22.881 > saved.
22:19:22.881 > DataLogger: Appending to file: /data.csv
22:19:22.881 > DataLogger: Data appended

x1

@stefan123t
Copy link

stefan123t commented Aug 12, 2024

@Juergen2453 gratuliere und danke fürs Testen und debuggen!

Kannst Du noch Deine aktuelle Verbindungen (CMT und SD Card Reader) und die Pin Mappng / SD Card Einstellungen hier dokumentieren ?

Hast Du den Source Code jetzt noch anpassen müssen bzw die SPIClass wie vorgeschlagen verwendet oder ging es jetzt auch ohne diesen extra Klimmzug ?

@Juergen2453
Copy link

Die Anschlüsse und die pin_mapping habe ich für die SD geändert.
Alles auf HSPI_xxx. Da ich nur HM-xxx besitze habe ich keinen CMT-Modul angeschlossen sondern versuche es mit dem NRF24.
Den Source Code habe ich zum teil angepasst, aber noch kein Erfolg mit dem NRF24.
Da ich kein Programmierer bin ist es für mich schwer in den Code mich zurechtzufinden.

pin_mapping:
"sd": {
"clk": 14,
"cs": 15,
"miso": 12,
"mosi": 13
}

@marvincarstensen
Copy link
Author

Hallo @Juergen2453, vielen Dank fürs Testen!

Ich konnte bereits erfolgreich den NRF24 mit einer SD-Karte, sowie ein CMT-Modul mit einer SD-Karte anbinden. Ich verwende jedoch auch einen ESP32 S3, welche mehr SPI-Busse enthält.

Wie @stefan123t schon sagte, hängt es mit VSPI und HSPI zusammen.
Allgemein gibt es immer wieder Probleme mit der Anzahl an SPI-Bussen. Das Problem wurde auch bereits im folgenden PR besprochen: #2068.
Die Lösung ist hier der Anschluss von mehreren Geräten an die selben SPI-Pins. Das wird über das SPI-Protokoll auch unterstützt, allerdings bedarf dies unter anderem Änderungen an den NRF und CMT Bibliotheken. @tbnobody hat sich dagegen ausgesprochen, weil so auch diese Bibliotheken maintained werden müssten.

Ich hatte außerdem auch Probleme mit deinem Card-Reader (https://www.az-delivery.de/products/copy-of-spi-reader-micro-speicherkartenmodul-fur-arduino). Liegt daran, dass das Modul nicht zuverlässig mit 3,3V läuft. Schau dir die Bewertungen ab: https://www.amazon.de/product-reviews/B077MCQS9P?filterByStar=one_star&pageNumber=1
Ich musste den Spannungswandler überbrücken, damit es überhaupt irgendwie funktioniert hat.

Der ESP32 unterstützt die direkte Verbindung mit einer SD-Karte. Ich habe tatsächlich zum Testen direkt Kabel an eine "Micro-SD zu SD Adapter" angelötet. Alternativ kannst du auch SD-Modul ohne Spannungswandler und co. benutzen z.B.: https://www.amazon.de/DAOKAI-Micro-SD-Kartenmodul-SD-Schreiber-Arduino-Dupont-Kabel/dp/B09YYG6BT3/

Hier noch mein Pin-Mapping, aber wie gesagt mit für einen ESP32 S3:

{
    "name": "ESP32 + NF + Display + SD",
    "nrf24": {
        "miso": 13,
        "mosi": 11,
        "clk": 12,
        "irq": 14,
        "en": 3,
        "cs": 10
    },
    "display": {
        "type": 4,
        "data": 8,
        "clk": 9
    },
    "sd": {
        "miso": 18,
        "mosi": 17,
        "clk": 16,
        "cs": 15
    }
}

@Juergen2453
Copy link

Juergen2453 commented Aug 12, 2024

@marvincarstensen
Habe gerade auf dem ESP32 CMD-Modul und Card-Reader am laufen bekommen.
Mein Card-Reader habe ich an 5V angeschlossen mit 3.3V hatte ich auch Probleme.
Ich hatte zuerst alles auf einem ESP32-S3, aber der hatte keinen 5V Ausgang, und die schnellste Lösung für mich war einen ESP32 zu nehmen.

Zitat:
"Das wird über das SPI-Protokoll auch unterstützt, allerdings bedarf dies unter anderem Änderungen an den NRF und CMT Bibliotheken. @tbnobody hat sich dagegen ausgesprochen, weil so auch diese Bibliotheken maintained werden müssten."

ist leider schade.

Da ja alles im Prinzip lauft werde ich es mal auf einem ESP32-S3 umbauen.

Das mit dem PR besprochen: #2068 habe ich auch ausprobiert, lief ohne Probleme.

Danke nochmal.

@jblond4711
Copy link

Jetzt habe ich auch mal direkt Kabel an einen SDCard Adapter gelötet und was soll ich sagen jetzt wird die Micro SD erkannt.
Kann mal bitte jemand aktuelle *.bin Dateien zur Verfügung stellen, ich bräuchte die generic_esp32.

@Juergen2453
Copy link

Gerade gebaut für ESP32- generic_esp32.

firmware.zip

@jblond4711
Copy link

jblond4711 commented Aug 12, 2024

Danke für die Firmware.
Wie sieht es denn eigentlich mit der Auswertung der Daten aus? Die *.cvs wird zwar in Excel geladen aber ich kann mit den gespeicherten Daten nichts anfangen.

@jblond4711
Copy link

jblond4711 commented Aug 19, 2024

Hi,

kann denn wirklich niemand was zu den gespeicherten Daten und deren Auswertung etwas sagen?
Für den „timestamp“ habe ich eine Formel gefunden.
-totalpower= momentan erzeugte Watt oder Kilowatt?
-totalyieldday = Tagesertrag in Wh oder Kilowattstunde?
-totalyieldtotal = alles was der Wechselrichter gesamt erzeugt hat in Kilowattstunden?

Hat sich schon jemand die Arbeit einer Excel Tabelle gemacht und würde sie teilen?

Bitte lasst das Projekt nicht einschlafen. Leider funktioniert bei mir das andere Projekt mit der Auswertung nicht.

@Omega13x
Copy link

Omega13x commented Aug 19, 2024

Wahrscheinlich liegt es daran, dass das kaum jemand macht. Die meisten holen sich die Daten in ihre Smarthome-Software, wie Homeassistant oder IObroker und lassen sich das ganze schön grafisch mit bunten Bilder anzeigen.
image
image

@marvincarstensen
Copy link
Author

Hallo @jblond4711,

die Werte korrespondieren mit den drei "Hauptwerten" auf dem Live-Daten im OpenDTU-UI:
-totalpower= Gesamtleistung
-totalyieldday = Gesamtertrag Heute
-totalyieldtotal = Gesamtertrag Insgesamt

@jblond4711
Copy link

Hi,

@marvincarstensen,
wenn ich nur den Tageswert möchte reicht es ja theoretisch den Wert kurz vor bzw. kurz nach dem Sonnenuntergang auf die SD zu speichern.
Zum Auswerten (anzeigen) der Werte es wäre aber schön, zumindest eine rudimentäre, Excel Tabelle zu haben.
Gibt es eigentlich die Möglichkeit auf die *.cvs online zuzugreifen oder muss ich die SD immer „umstecken“?

@spcqike
Copy link

spcqike commented Sep 6, 2024

Gibt es eigentlich die Möglichkeit auf die *.cvs online zuzugreifen oder muss ich die SD immer „umstecken“?

man könnte einen einfaches Dateimanagement einprogrammieren. die .csv Datei vom ESP herunterladen (wie es bei der config und den pinmapping bereits geht). jeden Tag eine neue .csv erstellen lassen. ggf. .csv Datein, die älter sind als x Tage löschen.

wenn ich nur den Tageswert möchte reicht es ja theoretisch den Wert kurz vor bzw. kurz nach dem Sonnenuntergang auf die SD zu speichern.

der Tageswert wird als einzelner Wert vom WR ausgegeben und startet jeden Tag bei 0. theoretisch reicht es also, den Wert nach Sonnenuntergang zu nehmen.

du könntest auch den Maximalwert aus einer Liste an Werten nehmen (in Excel mit max(Bereich)) oder, wenn du es vom totalyield herleiten willst, den max()-min() Wert nehmen.

aber wie @Omega13x schrieb, die meisten Leute machen das alles wahrscheinlich im Smarthome. mit einer Datenbank und einem passenden Frontend. bspw. influxdb und grafana. oder auch dem Volkszähler, oder homeassistent oder oder oder...

@stefan123t
Copy link

Alternativ kannst Du auch den Fork von @RaBa64 verwenden. Wenn ich den Code und das Bild auf der Readme Seite richtig deute sollte damit auch ein SD Card Leser unterstützt werden?

https://github.com/RaBa64/OpenDTU-Database/releases

ich muss aber zugeben ich habe es noch nicht geschafft die Artefakte bei mir auf dem OpenDTU-Fusion v2.0 zum Laufen zu bekommen. Keine Ahnung woran es liegt.
Vielleicht kann ja auch jemand Anderes eine kurze Anleitung geben ?

@sbernhard
Copy link

Alternativ kannst Du auch den Fork von @RaBa64 verwenden. Wenn ich den Code und das Bild auf der Readme Seite richtig deute sollte damit auch ein SD Card Leser unterstützt werden?

Wäre es nicht sinnvoll, sowas wie einen Datenlogger bzw. so eine Ansicht wie bei @RaBa64 direkt hier in OpenDTU zu integrieren?

@stefan123t
Copy link

@sbernhard dafür sind die beiden PRs #935 und dieser #2125. Es muss aber sichergestellt sein dass es den Flash Speicher des ESP32 nicht über Gebühr belastet (flash wear leveling) und dass das Feature auch hier im Upstream Projekt gewollt ist oder es ein Tasmota-ähnliches Build system gibt, bei dem man bestimmte Optionen mit builden kann.

@sbernhard
Copy link

sbernhard commented Oct 13, 2024

Es muss aber sichergestellt sein dass es den Flash Speicher des ESP32

Ich denke, es wäre besser eine SD Card Slot über den ESP32 anzusteuern und dort die Daten zu speichern. Da kann man sicherlich reichlich an Daten halten und wenn die SD Card voll oder kaputt ist, funktioniert die OpenDTU immer noch - die gespeicherten Werte sind halt weg.

Ob man eine SD Card nutzt oder nicht kann man live feststellen und dann diese Funktion über ein Setting aktivieren.

und dass das Feature auch hier im Upstream Projekt gewollt

Wenn die Funktion ordentlich programmiert ist und abschaltbar ist, spricht doch nix dagegen sowas hinzufügen? Diese Zersplitterung, wie auch openDTU on Battery find ich persönlich nicht gut weil dadurch nicht gemeinsam an einer Softwarekonstrukt gearbeitet und verbessert wird. Zu viel Know How ist verteilt und langfristig sind die Projekte gar nicht mehr kompatibel - man arbeitet schlimmstenfall dann vielleicht eher gegeneinander als miteinander.

@spcqike
Copy link

spcqike commented Oct 13, 2024

Zu viel Know How ist verteilt und langfristig sind die Projekte gar nicht mehr kompatibel - man arbeitet schlimmstenfall dann vielleicht eher gegeneinander als miteinander.

Kann ich so nicht nachvollziehen. Im Gegenteil, onBattery ist eine sinnvolle Erweiterung, die eben zusätzliche Funktionen wie die Batterie und das power Meter mitbringt. Es gibt viele PRs hier im „upstream“, die von onBattery initiiert wurden. Von bugfixes über Umstrukturierungen im Code bis zu neuen Funktionen. Nichts mit gegeneinander arbeiten oder nicht mehr kompatibel sein.

Der Nachteil von onBattery ist bspw dass weniger inverter gleichzeitig abgefragt werden können oder dass OTA bei esps mit nur 4Mb nicht mehr geht. Das sind halt Einschränkungen, die aufgrund der Größe des Codes durch zusätzliche Funktionen kommen. Von daher ist es auch durchaus legitim beide firmwares zu pflegen

@sbernhard
Copy link

Kann ich so nicht nachvollziehen. Im Gegenteil, onBattery ist eine sinnvolle Erweiterung, die eben zusätzliche Funktionen wie die Batterie und das power Meter mitbringt. Es gibt viele PRs hier im „upstream“, die von onBattery initiiert wurden. Von bugfixes über Umstrukturierungen im Code bis zu neuen Funktionen. Nichts mit gegeneinander arbeiten oder nicht mehr kompatibel sein.

Aber, wäre es nicht besser alles in einem Projekt zu haben und dann via Optionen beim Bau zu unterscheiden? Eine gemeinsame Code Basis und dann ggf verschiedene Binaries wenn notwendig. Bestenfalls nur via Setting unterscheiden.

Dadurch spart man sich zusätzlichen Pflegeaufwand wie einen PR in mehreren Projekten öffnen und hat trotzdem die Vielfalt unterschiedlicher Binaries für unterschiedliche Einsatzzwecke.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants