← Terug naar projecten

Architectuur en implementatie: inverter abstraction layer

Een Python abstraction layer voor multi-brand solar inverter connectivity, draaiend op de SunBerry.

Architectuur en implementatie: inverter abstraction layer

Achtergrond

Als Lead Software Developer bij een solar energy bedrijf was ik verantwoordelijk voor het ontwerp, de ontwikkeling en de documentatie van een modulaire abstraction layer in Python. Deze laag maakte het mogelijk om solar inverters van verschillende merken op een consistente manier te koppelen.

Het systeem draait in Docker-containers op een SunBerry-device en communiceert met de inverter via Modbus. Daarnaast introduceerde ik MQTT voor integratie met home automation systemen en voor communicatie tussen de verschillende processen.


Wat is de SunBerry?

De SunBerry staat lokaal bij de klant en is op afstand bereikbaar via VPN. Het device beheert de energiestromen naar de gekoppelde batterij, boiler en andere apparaten. Alle noodzakelijke services draaien lokaal op de SunBerry, zoals de webserver voor de gebruikersinterface, dataopslag en de processen voor device-aansturing.

De abstraction layer

De solar inverter is via Modbus RTU verbonden met de SunBerry. De uitdaging was dat het systeem meerdere invertermodellen en merken moest ondersteunen. Elk merk en model gebruikt andere Modbus-registers, registergroottes en protocolversies.

Een simpele oplossing zou zijn om per model een volledige registertabel te maken. We kozen voor een slimmere aanpak: modellen zoals GoodWe ET, BT en EM hebben veel overeenkomstige registers en konden gegroepeerd worden. Bij nieuwe protocolversies hoeven daardoor alleen de afwijkingen vastgelegd te worden, niet telkens de volledige tabel.

De abstraction layer bevat ook functionaliteit om features samen met een echte inverter te debuggen en te testen.

Het inverterproces

Het inverterproces bevat de abstraction layer en beheert alle communicatie tussen clientprocessen en de inverter. Voorbeelden van clientprocessen zijn Battery Management en Boiler Management.

De communicatie met het inverterproces loopt via MQTT en blijft altijd hetzelfde, ongeacht welk invertermodel aangesloten is.


MQTT

De geintroduceerde MQTT-server wordt gebruikt voor interne communicatie tussen processen, maar ook voor integratie met home automation systemen en voor commando’s vanuit de gebruikersinterface.

MQTT bleek ook erg nuttig tijdens ontwikkeling. Berichten zijn eenvoudig zichtbaar te maken met een standaard MQTT-client of een desktoptool zoals MQTT Explorer. Daardoor konden services lokaal ontwikkeld en getest worden zonder steeds het complete systeem nodig te hebben.