Elke omvormer slim uitzetten of limiteren met Modbus

13 juni 2024

Zonnepanelen die de zon omzetten in stroom blijft fantastisch. Maar niet altijd. Tijdens negatieve energieprijzen wil je de teruglevering beperken of stopzetten. Probleem is dat omvormers dit vrijwel niet ondersteunen. Deze handleiding brengt daar verandering in. Met deze oplossing kun je de teruglevering met vrijwel elke omvormer met behulp van Modbus uitschakelen of limiteren. Hoe je dat doet, leggen we in dit artikel uit.

De voordelen van deze methode

Er zijn verschillende manieren om je omvormer uit te schakelen. Bij een enkele omvormer wordt het ondersteund, en soms kun je het via je smart home software via bv. een api of een cloud aansturen. Maar dit kan vaker niet dan wel.

De voordelen van deze oplossing t.o.v. de alternatieven:

  1. Hij werkt voor vrijwel elk merk omvormer
  2. Je bent niet afhankelijk van of het merk omvormer zelf een lokale API of cloudoplossing beschikbaar maakt met deze functie
  3. Hij werkt lokaal, er is geen afhankelijkheid van communicatie met de cloud
  4. Je kunt het aansturen vanuit Home Assistant, Homey en andere smart home oplossingen
  5. Je kunt de omvormer niet alleen aan- of uitzetten, maar ook de teruglevering beperken
  6. Er is tweerichtingscommunicatie mogelijk. Je kunt er ook informatie van je omvormer mee uitlezen.
  7. Het is veiliger dan een schakelaar omzetten om de stroom er in een klap te halen
  8. Je beschikt over real-time data, daar waar data via de cloud vaak elk kwartier ververst

Het resultaat

Grofweg heeft deze oplossing twee use-cases.

1. Automatisch stoppen met terugleveren van zonnestroom bij negatieve energieprijzen

De eerste usecase is dat je beschikt over een dynamisch energiecontract, waarbij er soms sprake is van negatieve energieprijzen. Dan zijn uurprijzen voor stroom zo laag, dat je geld krijgt om stroom te gebruiken, en anderzijds geld moet betalen om terug te leveren. Op dat moment wil je dus dat je omvormer automatisch stopt met het terugleveren van stroom aan het elektriciteitsnet.

Met een automatisering in Home Assistant (of je eigen favoriete smart home software) stel je in dat, in het geval van negatieve dynamische energieprijzen, je een signaal stuurt naar de omvormer dat de teruglevering moet stoppen. Met dit als resultaat:

De zonnepanelen stoppen ermee (links) als zich negatieve energieprijzen voordoen (rechts)

2. Automatisch voorzien in eigen gebruik, zonder terug te leveren aan het net

Heb je dynamische energieprijzen maar wil je wel voorzien in je eigen gebruik? Of heb je een andere contractvorm, en wil je zorgen dat je zelf je eigen zonnestroom kunt gebruiken met niet teruglevert aan het net? Dan kun je de teruglevering van de zonnestroom beperken tot je eigen gebruik. Door je gebruik via de slimme meter in te lezen, en de teruglevering daar op aan te passen, kun je in je eigen energieverbruik voorzien. Met als resultaat, een energieverbruik dat rond het nulpunt ligt.

Aan de slag

Eerst zal ik wat vertellen over de technologie waar deze oplossing mee werkt, vervolgens gaan we de hardware klaarmaken en als laatste gaan we met de software aan de slag.

Wat is Modbus?

Modbus is een communicatieprotocol dat wordt gebruikt voor het verbinden van industriële elektronische apparaten, bijvoorbeeld bij bedrijven en zonneparken om de teruglevering van zonnepanelen te beperken (curtailment), op afstand. Het is eenvoudig, robuust en makkelijk te gebruiken en wordt veel toegepast in industriële omgevingen om gegevens tussen controleapparaten zoals sensoren, meters en actuatoren te versturen. Modbus is ontwikkeld in de jaren ’80 voor programmeerbare logische controllers (PLC’s). Het kan functioneren op verschillende netwerklagen en wordt vaak gebruikt over RS-485, RS-232 en TCP/IP-netwerken. Vaak worden Modbus en RS485 door elkaar gebruikt. Maar RS485 is eigenlijk het medium, en Modbus is de laag er bovenop.

Wat is ESPHome?

ESPHome is een open-source platform dat ontworpen is om het automatiseren van apparaten in huizen gemakkelijker te maken, vooral voor diegenen die gebruik maken van het ESP8266- en ESP32-microcontrollerplatform. Je kunt met ESPHome sensoren, schakelaars en andere apparaten maken en configureren met eenvoudige YAML-bestanden, wat programmeerkennis minder noodzakelijk maakt.

Het platform integreert naadloos met Home Assistant, een populair systeem voor huisautomatisering, waardoor gebruikers hun apparaten via een gebruikersvriendelijke interface kunnen beheren en automatiseren. Met ESPHome kun je firmware creëren die draadloos geüpdatet kan worden (OTA), en het heeft een grote gemeenschap van gebruikers die voortdurend nieuwe componenten en functionaliteiten toevoegen.

Stappenplan

We gaan grofweg een paar dingen doen. Allereerst gaan we een kabel maken zodat we, vanaf onze eigen laptop, met de omvormer kunnen communiceren. Daarna gaan we, op basis van de documentatie van de omvormer, de ’taal’ van de omvormer leren spreken. Zodat we daarna data kunnen uitlezen, of versturen (wat nodig is om de teruglevering te stoppen). Zodra we dit principe hebben uitgevogeld, gaan we zelf een slim kastje maken dat we kunnen aansluiten op de omvormer. Dat slimme kastje hangt in je netwerk en kun je vervolgens aan Home Assistant koppelen, zodat je hem vanuit daar kunt aansturen.

1. Voorbereidingen

In deze handleiding beschrijven we het proces zo universeel mogelijk. In de handleiding werken we met een SAJ omvormer. De handleiding is getest met een SAJ SunTrio Plus 5K en een SAJ SunTrio Plus 8K. Dit is een wat oudere variant dan de R5 series (o.a. Zonneplan).

Er zijn een aantal zaken die verstandig zijn om van te voren voor te bereiden dan wel te checken.

Documentatie

Voor mijn SAJ omvormer moet ik weten hoe ik er via Modbus mee kan communiceren. Dat kun je vaak vinden in een installateurshandleiding. In mijn geval is er een SAJ Modbus Communication Protocol pdf. Zonder deze documentatie wordt dit proces een moeilijk verhaal.

Export-limit functie

Nu we weten welke ‘taal’ de omvormer spreekt, kijken we meteen in de documentatie naar een functie die de omvormer aan of uit kan zetten of de omvormer kan beperken in zijn teruglevering. Vaak heet deze ‘power limit’. In het document van SAJ staat helemaal aan het eind een functie met de naam ‘LimitPower’, die als volgt wordt beschreven:

Firmware-versie

Voor de SAJ-omvormer hebben we gemerkt dat het uitmaakt welke versie firmware je draait. Onze SAJ-omvormers draaien v2.030 (master) v2.030 (slave) v3.024 (display). Vooral oude versies hebben geen ondersteuning voor een zogeheten ‘export limit’.

Voor een SAJ-omvormer kun je dit controleren, door op LCD-scherm van de omvormer naar Settings -> Export Limit te gaan. Heb je dit menu-item niet, dan kan het zijn dat je de firmware dient te updaten. Neem hiervoor contact op met je installateur.

<foto van omvormer>

2. Maak een kabel + connector

Moet Modbus via een aparte kabel?

Moet je wel een aparte kabel maken om via Modbus te communiceren? Dat hangt er ervan af. Sommige omvormers (bijvoorbeeld SolarEdge) hebben ook de mogelijkheid om Modbus via TCP/IP te doen. In dat geval loopt Modbus dus via je internetverbinding.

Lokaliseer de Modbus-poort

De meeste omvormers hebben een of meerdere RS485, RS232 en TCP/IP aansluitingen ten behoeve van communicatie met de omvormer. Zo heeft mijn SAJ ook een RS232-poort, die gebruikt wordt door de WiFi dongle zodat ik hem via mijn app kan uitlezen. De poorten vind je doorgaans aan de onderzijde van de omvormer, en meestal staat er bij de omvormer vernoemd welk type poort het is.

Deze poorten vind je bij de meeste inverters aan de onderkant, en hij wordt aangeduid met RS-485. Deze poort heeft drie pinnen: GND, A en B. Alleen A en B zijn nodig.

We hebben een connector nodig die we op de poort kunnen aansluiten. Hiervoor gebruiken we een connector van het type Weipu SP13. Deze heeft de volgende pin-out (let goed op, het laatste plaatje is vanaf de achterkant):

In de connector plaatsen we een twee-aderige kabel, die we met 1 en 2 verbinden. Let goed op welke kleur in welk gaatje gaat.

Nadat de connector aan de kabel verbonden is kun je deze op de omvormer aansluiten:

Om de kabel uit te kunnen lezen, verbinden we het andere eind van de kabel aan een RS485 naar USB connector. Deze zijn voor zo’n 10 a 15 euro te koop, bijvoorbeeld bij Amazon.

De twee-aderige kabel kun je verbinden met de groene connector aan het uiteinde van de RS485 naar USB connector. Let hierbij op om A aan A (of +) te koppelen, en B aan B (of -). Indien er een aansluiting is voor GND (aarde), dan is het vaak niet nodig om deze aan te sluiten.

Om met de omvormer te communiceren, moeten we nog afstemmen dat we op de juiste manier communiceren. De instellingen voor Modbus dien je in de invormer te configureren. Normaal staat dit op adres 1 met een baud rate van 9600. Je kunt dit vinden onder Settings -> Communication. De instellingen an sich maken niet uit, maar dienen wel overeen te komen met de hardware/software aan het ‘andere eind van de kabel’.

3. Communicatie opzetten

Om met de communicatie met de omvormer te testen, kun je het programma QModbus gebruiken. Dit is een programma dat het mogelijk maakt Modbus-commando’s te versturen, en te kijken wat de responses zijn.

Om de communicatie op te zetten, putten we uit informatie uit de installateurshandleiding van de omvormer of door informatie in de omvormer zelf op te zoeken. In ons geval vinden we de noodzakelijke instellingen op de omvormer. Door op het LED-display van de omvormer te navigeren naar Settings -> Communicate, vinden we het volgende. Ik registreer het RS-485 adres (1) en de baudrate (9600).

Een complete beeld vinden we in de eerder genoemde handleiding, in de tweede paragraaf:

Ook hier staat genoemd dat voor een 3-fase omvormer de Baud Rate van de RS-485 interface 9600 bps bedraagt. We moeten ook weten wat de data bit is (8), stop bit (1) en parity (none). Deze informatie stellen we in in QModbus (1):

Om te testen of de communicatie werkt, moeten we ook daadwerkelijk iets communiceren. In paragraaf 4 van de handleiding staat welke informatie je kunt ophalen. De eerste is het ophalen van het type omvormer. Dit staat in register 8F00H. De H vertel je dat het een Hex is, 8F00 is het nummer.

Deze moeten we naar een getal vertalen, wat kan met een Hex to Decimal converter. Die vertelt ons dat 8F00 staat voor 36608.

In het tweede blok, ‘ModBus request’, vullen we vervolgens in wat we willen gaan communiceren. We vragen hier adres 36608 op. Het resultaat zou het type omvormer moeten zijn.

Als resultaat krijgen we in blok 3 data terug! Dat betekent dat de communicatie succesvol lijkt. De data die we terugkrijgen is 0x0021. Dit komt overeen met onze handleiding, waar staat dat 0x0021 overeenkomt met ‘Suntrio Plus inverter’!

We kunnen ook veranderende (realtime) data ophalen. Bijvoorbeeld het voltage. In de handleiding zijn ook enkele registers te zien om het voltage, de ampere en de frequentie van de eerste fase op te halen. Het voltage van de fase 1 zit op register 0116.

De converter vertelt ons dat dit adres 278 is. Als we met QModbus het adres 278 aanroepen, dan krijgen we de waarde 2411 terug.

Dit komt overeen met het voltage van de eerste fase die op het LED-display van de omvormer wordt weergegeven.

4. Data versturen

Data ophalen is gelukt, maar nu willen we ook data versturen. In sectie 4.6 van onze handleiding staat een speciaal Modbus-register gedocumenteerd voor een export limit. Dit is het hexadecimale adres 801F. Door hier een percentage naar toe te schrijven, kan de export beperkt worden.

Althans, zo hebben we dat ondervonden. De handleiding specificeert niet wat je er heen kunt sturen, of wat de schaal is. Met wat error en trial kwamen we er uiteindelijk achter dat we waarden van 0 t/m 1100 konden sturen. Dit is waarschijnlijk 0% tot 110%. Bij een hogere waarde kregen we een foutmelding terug. Sturen we 044d (hex voor 1101), dan krijgen we de melding ‘Illegal data value’ terug.

Als we de teruglevering tot een minimum willen beperken, sturen we de waarde 0 (0x0000) naar de omvormer. Onderaan krijgen we de melding ‘Value succesfully sent’ te zien 💚.

Op het display van de omvormer is vervolgens te zien dat de teruglevering tot een minimum (3 W) is beperkt:

We kunnen nu de omvormer uitlezen en aansturen via Modbus. In beginsel is wat we nu gedaan hebben voldoende om de omvormer ook met Home Assistant direct aan te kunnen sturen. Dit kan door de USB-connector aan te sluiten op de Raspberry Pi (of andere hardware( waar Home Assistant op draait, en de omvormer met een bestaande integratie te verbinden.

5. Een ‘slim kastje’ maken met ESPHome

Maar Bas gaat met zijn oplossing nog een stap verder. Hij heeft een ‘slim kastje’ gemaakt met ESPHome. Waarom?

  • Fysieke beperking
    Niet bij iedereen staat de Home Assistant server in de buurt van de omvormer. Bij mij thuis ook niet: de server staat in de meterkast, de omvormer op zolder. Een slim kastje wat er tussenzit en via het netwerk met Home Assistant kan communiceren, is dan wel zo praktisch.
  • Geen opwek, geen communicatie
    Bij veel omvormers is er geen communicatie mogelijk als er geen opwek is. Zou je vanuit Home Assistant, ESPHome of andere domotica-platformen direct communiceren via Modbus, dan komt er de nodige logica om hier omheen te werken. Dit kastje zorgt er tevens voor dat, als de omvormer weer aangaat, hij ook weer ingesteld wordt zoals jij dat wilt.

Boodschappenlijstje

Allereerst een boodschappenlijstje voor een slim kastje:

Seeed Studio Xiao ESP32 S3 (5-15 euro)

UART to RS485 chip (2-5 euro)

USB-C netvoeding (Kiwi Electronics, 7-20 euro)

Gaatjesbord printplaat (2-5 euro)

Hardware bouwen

Hier komen we bij de meest ingewikkelde stap van deze handleiding, want hier is enige handigheid met printplaatjes en solderen van belang. We hebben een gaatjesbord waar we de ESP32 chip en UART to RS485 chip op monteren. Vervolgens dienen we deze op elkaar aan te sluiten. En als laatste sluiten we de netvoeding en de twee-aderige kabel op de UART to RS485 chip aan.

Het eindresultaat

Het prikken van de chips op het gaatjesbord is eenvoudig. Maar dan dienen we ze met elkaar te verbinden. Hiervoor kijken we eerst naar de layout van de ESP32 chip. Die is als volgt:

We gaan D8, D9 en D10 gebruiken voor de connectie, GND en 3V3 voor de voeding en aarde.

De verbindingen maak je met soldeer en een soldeerbout. Zie hier voor video-instructies.

Als laatste sluit je de netvoeding op de ESP32 chip aan, en verbind je de twee-aderige kabel met de UART to RS485 chip.

Installeer ESPHome

Nu je de hardware hebt is het zaak om de software van ESPHome te installeren. Dit kan je via Docker doen, of tegenwoordig ook direct vanuit Home Assistant zelf. Kies de methode die je zelf het meest prettig vindt en volg de instructies.

5. Voeg ESPHome toe aan Home Assistant

Om met ESPHome te werken vanuit Home Assistant, voegen we eerst de ESPHome integratie toe. Dit doe je onder Instellingen -> Apparaten & diensten -> Integratie toevoegen. Volg de stappen om de integratie te installeren.

We gaan, voor nu, je slimme kastje eerst met de USB-C kabel op je laptop of pc aansluiten. We gaan dan naar Instellingen -> Addons, open ESPHome en klik op ‘Open WebUI’. In de ESPHome interface klik je vervolgens op + New device, en geef je je device een naam. Ik kies voor Modbus-inverter.

ESPHome gaat nu je configuratie maken en deze installeren op het apparaat. Gedurende de vervolgstappen, zal Home Assistant aan te geven op welke poort het apparaat is aangesloten.

Na de stappen doorlopen te hebben, krijg je een nieuw ESPHome apparaat in de interface te zien. Klik hierbij op ‘Edit’ om de configuratie te bewerken.

In de configuratie dien je een aantal zaken aan te passen en toe te voegen. Zo dien je het juiste board te benoemen.

Zo pas ik de configuratie van esp32 aan naar:

esp32:
  board: seeed_xiao_esp32c3
  framework:
    type: arduino

In het eerste deel wordt de naam gedefinieerd. Het wifiwachtwoord zal hij automatisch overnemen, als de !secret wifi_ssid en wifi_password in Home Assistant zijn gedefinieerd. Anders zet je de netwerknaam en het wachtwoord in deze code.

Daarnaast dienen we een aantal zaken toe te voegen aan de configuratie. Plak je onderaan de configuratie. De tx_pin, rx_pin en flow_control_pin matchen met de pins op de chip die we eerder verbonden hebben. De baud_rate, stop_bits, data_bits en parity hebben we eerder in deze handleiding vastgesteld in de documentatie van de omvormer.

Vanaf ‘modbus_controller’ maken we een nieuw device wat straks in Home Assistant wordt herkend.

In deze configuratie staat een getal, bedoeld voor de ‘export limit’. In dit getal geven we de teruglevering aan, die we bij deze omvormer aangeven in de rage van 0 t/m 1100. Deze luistert op het hexadecimale adres 801f, die we eerder in deze handleiding in stap 4 hebben vastgesteld op basis van de documentatie van de omvormer. Ter info: een heximaal adres kun je schrijven als 801fH of als 0x801f.

Daarnaast definiëren we een sensor die het type omvormer laat zien. Deze hebben we ook eerder in de handleiding gebruikt, en is aan te roepen op heximaal adres 0x8f00. Deze geeft in mijn geval cijfer 33 terug, die overeenkomt met de ‘Suntrio inverter’. Als laatste een sensor ‘Energy today’, die toont hoeveel energie (in kWh) er vandaag is opgewekt.

# Specifieke code voor Modbus

uart:
  tx_pin: GPIO9  # Bord-afhankelijk.
  rx_pin: GPIO10  # Bord-afhankelijk.

  baud_rate: 9600  # Inverter-afhankelijk.
  stop_bits: 1  # Inverter-afhankelijk.
  data_bits: 8  # Inverter-afhankelijk.
  parity: NONE  # Inverter-afhankelijk.

modbus:
  id: modbus1
  flow_control_pin: GPIO8  # Bord-afhankelijk.

modbus_controller:
- id: modbus_controller1
  modbus_id: modbus1
  address: 0x01  # Inverter-afhankelijk.

number:
  - platform: modbus_controller
    id: export_limit
    modbus_controller_id: modbus_controller1
    use_write_multiple: true
    name: "Export limit"
    address: 0x801f  # Decimaal 32799.
    register_type: holding
    value_type: U_WORD
    min_value: 0
    max_value: 1100

sensor:
  - platform: modbus_controller
    modbus_controller_id: modbus_controller1
    name: "Type omvormer"
    register_type: holding
    address: 0x8f00  # Decimaal 36608.
    value_type: U_WORD

  - platform: modbus_controller
    modbus_controller_id: modbus_controller1
    name: "Energy Today"
    register_type: holding
    address: 0x12c  # Decimaal 300
    accuracy_decimals: 2
    filters:
    - multiply: 0.01  # Schaalfactor 100
    unit_of_measurement: "kWh"
    value_type: U_WORD

Het is uiteraard nog mogelijk om nog veel meer velden toe te voegen. Denk aan de huidige opwek of het voltage per fase. Maar voor nu hou ik het in deze handleiding bij deze velden.

Vervolgens kies je rechtsboven voor ‘Save’, en daarna ‘Install’. Nu ga je de nieuwe configuratie op je apparaat deployen. Kies in de popup wederom voor ‘Plug into this computer’ en selecteer de juiste USB-poort waarop het apparaat is aangesloten.

Wanneer de ESPHome met je wifi-netwerk verbonden is, zal deze automatisch voor je Home Assistant worden herkend. Ga hiervoor naar Instellingen -> Apparaten & diensten. Bovenaan vind je de apparaten die automatisch worden herkend. Klik op configureren om het toevoegen te starten.

Doorloop de stappen, en hierna verschijnt er een nieuw apparaat met 4 entiteiten: ons slimme kastje! Open het apparaat en zie hier de sensoren en controls waar je over beschikt.

6. Teruglevering stoppen of beperken

Om de teruglevering van de omvormer te beperken, vul ik een getal in het ‘Export limit’ veld, van 0 (geen teruglevering) tot 1100 (volledige teruglevering).

7. Automatiseren

In deze stap gaan we een automatisering instellen. In mijn geval wil ik de teruglevering automatisch stoppen zodra de dynamische energieprijzen negatief worden. Oftewel, wanneer ik moet betalen om terug te leveren. Om dit voor elkaar te krijgen gaan we twee automatiseringen instellen. Eén om bij negatieve energieprijzen de teruglevering te stoppen, en één om bij positieve energieprijzen de teruglevering weer aan te zetten.

Dynamische energieprijzen inlezen

Voor het script maken we gebruik van dynamische prijzen. Om dynamische prijzen in Home Assistant te krijgen, kun je deze handleiding volgen.

De automatiseringen

We maken de volgende twee automatiseringen aan. Ga hiervoor in Home Assistant naar Instellingen -> Automatiseringen en scenes en klik op ‘Automatisering toevoegen’. We gaan de automatiseringen optuigen volgens deze logica:

Omvormers uitzetten bij negatieve energieprijzen:

  • Wanneer: de <selecteer hier de sensor met de huidige dynamische energieprijs> onder 0 is
  • Doe dan: stuur een notificatie naar <jouw telefoon>
  • Doe dan: stel de export limit in op 0

Omvormers aanzetten bij positieve energieprijzen:

  • Wanneer: de <selecteer hier de sensor met de huidige dynamische energieprijs> boven 0 is
  • Doe dan: stuur een notificatie naar <jouw telefoon>
  • Doe dan: stel de export limit in op 1100

Laat je reactie achter

Je e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met een *

6 reacties op “Elke omvormer slim uitzetten of limiteren met Modbus

  1. Martijn Kerver jun 14, 2024

    Hi, super tof dit! Ik heb nog wel een solplanet (in gebruik) en Huawei (ongetest) configuratie voor esphome via modbus. Laat maar even weten als jullie die zouden willen hebben, dan deel ik deze graag als dank voor jullie leuke podcast/YouTube videos.

  2. Albert Bos jun 16, 2024

    Top podcast heren!
    Ik zou graag met “buurman bas” in contact komen om eens wat gedachten uit te wisselen over de do’s and dont’s.
    Kunnen jullie mij met hem in contact brengen?