BMS CAN-CAN und CAN-MQTT Gateway für Pylontech-Protokoll (z.B. für Deye Wechselrichter)

Hi,

kennt Ihr das Problem, Ihr wollt 20 Batteriemodule mit integriertem BMS im Parallelverbund verwenden, die BMS unterstützen aber nativ keine Parallelschaltung oder nur in begrenzter Stückzahl?

(Parallelverbund heißt, Ihr achtet natürlich auf die Verschaltung nach Tichelmann und eine dem zu erwartenden Kurzschlussstrom im kA-Bereich genügender Absicherung auf der DC-Seite)

Oder Ihr habt ein Akkumodul und wollte mehrere Wechselrichter an einem BMS betreiben, wie es zur Leistungserhöhung oder zur leistungselektronischen Netzkupplung verschiedener AC-Netze gebräuchlich ist?

Oder Ihr wollte die Datentelegramme des BMS inspizieren oder manipulieren, um nachträglich eine netzdienliche Steuerung oder eine Fernauslesung einzurichten?

  • Für diese Anwendungen habe ich hier eine Gateway-Software in Python implementiert.

  • Parallel zum NxM-CAN-CAN-Multiplexing kann auch ein regelmäßiges Statustelegramm über MQTT gesendet werden, für Statusüberwachung.

  • Fernsteuerung (SOC-Limit etc.) ist geplant

Das Gateway verwendet das asyncio-Modul für eventbasierte, asynchrone Programmierung, was eine Form des kooperativen Multitaskings darstellt.

Parallel dazu werden die Module python-can und aiomqtt verwendet.

Im Gegensatz zum Multithreading ist es hier vom Ansatz so, dass die Programmlogik nicht "frei drehen" kann, d.h. alles hat seinen koordinierten Ablauf. Wenn Eingabedaten der BMS ausbleiben, wird das Gateway demnach auch keine Ausgabedaten erzeugen, so dass der oder die angeschlossenen Wechselrichter nach Time-Out einen Fehler erkennen und abschalten können.

Illustration:

Den Code findet Ihr hier: