Dyness Speicher Monitoring über CAN-BUS - fertig

Hi,

ich dachte ich teile mal ein kleines Projekt, was ich mithilfe von AI erstellt habe, dabei geht es um das CAN-BUS monitoring meines DYNESS Speichers.
Mit Hilfe der AI habe ich eine kleine Script Sammlung erstellt, mit der ich die CAN-Daten erst mal im RAM speichere (damit mir die SD-Karte nicht abraucht irgendwann), dann verarbeitet wird und die Daten in eine Influx-DB speichert zur Visualisierung mittels Grafana.
Da ich 2 Tower habe, die über eine Parallel-Box zusammengeschalten sind, musste ich auch das im Script mit einfließen lassen, was zum Vorteil für die ist, die eben auch mehrere Tower haben.
Oben Rechts kann man dann zwischen den Towern durchschalten.
Beim CAN-to-USB Stick, habe ich den folgenden von Amazon verwendet (NICHT den Waveshare CAN-to-USB nehmen, dieser verwendet eine proprietäre CAN Library)

GITHUB // https://github.com/Chavell3/Dyness-CAN-Monitoring

Kurze Beschreibung der Files:

Monitoring-Pipeline

1. dyness_monitor.sh

  • Größe: 3.0 KB

  • Zweck: Orchestriert die komplette Monitoring-Pipeline

  • Was es tut:

    • Läuft alle 20 Sekunden (via systemd timer)

    • Nimmt 14 Sekunden CAN-Daten auf (candump -t a can0)

    • Ruft decode_dyness.py auf

    • Ruft import_dyness_to_influx.py auf

    • Speichert temporäre Dateien in /dev/shm/dyness/ (RAM)

    • Räumt alte Dateien auf (max. 20 CSV-Dateien)

    • Loggt alle Schritte nach /var/log/dyness_monitor.log

2. decode_dyness.py

  • Größe: 27 KB

  • Zweck: Parsed CAN-Bus-Daten der Dyness Tower T7 Batterie

  • Was es tut:

    • Liest candump-Logs (unterstützt beide Formate)

    • Decodiert Cell-Voltages (CAN-ID 0x100-0x11F) für 2 Towers × 5 Module × 30 Zellen

    • Decodiert Temperaturen (CAN-ID 0x120-0x13F)

    • Decodiert Battery Pile Total (CAN-ID 0x4210): Voltage, Current, BMS-Temp, SOC, SOH

    • Konvertiert LSB-First-Encoding mit Offsets

  • Output:

    • dyness_cells.csv: Timestamp, Tower, Module, Cell, Voltage_V, Voltage_mV, Delta_V

    • dyness_temps.csv: Timestamp, Tower, Reading, Temp_degC

    • dyness_pile.csv: Timestamp, Voltage_V, Current_A, BMS_Temp_C, SOC_pct, SOH_pct

3. import_dyness_to_influx.py

  • Größe: 6.6 KB

  • Zweck: Importiert CSV-Daten in InfluxDB v2.x

  • Was es tut:

    • Verbindet zu InfluxDB (192.168.4.230:8086, Bucket: homelab)

    • Importiert dyness_cells.csv → Measurement: dyness_cells

    • Importiert dyness_temps.csv → Measurement: dyness_temps

    • Importiert dyness_pile.csv → Measurement: dyness_pile

    • Batch-Import mit 1000 Datenpunkten pro Request

    • Verwendet Line Protocol Format

4. Dyness Battery Monitor - Tower_grafana.json

  • Exportiertes Grafana Dashboard zur Visualisierung

So sieht das Ganze in Grafana dann aus.

Das ganze lässt sich vermutlich auch für andere Batterie-Hersteller verwenden, wenn man deren CAN-ID's kennt.

Viel Spaß damit, wem es hilft.
P.S. ich bin kein Profi-Coder oder so, daher kann man sicherlich das ein oder andere noch verbessern... für mich tut es aber erst mal das was es soll...

1 „Gefällt mir“

wow
cooles Projekt, Danke fürs Teilen!
wird mit Einzug einer Steuerbox und dann (zwingend) HA bei meinem Kumpel evtl Verwendung finden
dort werkelt ein t14 :slight_smile:

Ich habe gesehen man kann in HA auch ne InfluxDB einbinden, sollte also möglich sein.

Ich persönlich finde HA zur Anzeige dieser Massendaten aber als nicht geeignet. Ist aber nur meine Meinung…