Je Hoymiles omvormer slim limiteren met een ESP32 en OpenDTU

De teruglevering van je zonnestroom slim aansturen wordt met het toenemende aantal uren met negatieve energieprijzen steeds belangrijker. Maar de meeste omvormers zijn hier totaal niet voor geschikt. Met een Hoymiles omvormer zijn er best wat mogelijkheden, maar de echte groene nerd wil alle controle. Daarom deze handleiding: met een ESP32 micro-computer die je in Home Assistant kunt hangen kun je de volledige controle nemen over je Hoymiles omvormer en je teruglevering als een pro slim aansturen.
Je teruglevering slim aansturen: het nieuwe normaal
Je teruglevering aansturen was tot kort geleden een luxe-aangelegenheid. Leuk maar noodzakelijk niet bepaald. Maar dat gaat veranderen. Had je met een dynamisch energiecontract in 2025 nog maar 11 uren met negatieve energieprijzen, dankzij het wegvallen van salderen zal dat vanaf 2027 flink vaker voorkomen. Afhankelijk van je energieleverancier naar schatting 7 a 15 procent van de uren in het jaar.
De logische reactie: zelf sturen
Het antwoord ligt voor de hand: slimme teruglevering. Gebruik je eigen opgewekte stroom zoveel mogelijk zelf, en limiteer of stop de teruglevering tijdens negatieve energieprijzen. In de praktijk betekent dit dat je je omvormer(s) wilt kunnen:
- Volledig uitzetten bij negatieve stroomprijzen
- Limiteren op een bepaald vermogen zodat je precies zoveel opwekt als je zelf verbruikt (zero export)
- Dynamisch aansturen vanuit Home Assistant, gekoppeld aan de actuele dynamische energieprijs of je P1-meterdata
Bestaande methodes voor Hoymiles: beperkingen
In een eerder artikel (Je Hoymiles micro-omvormers slim uitzetten via app, modbus of Home Assistant) zijn al de gangbare methodes besproken: via de Hoymiles app, via Modbus TCP of via de officiële DTU in Home Assistant.
Die methodes werken, maar kennen beperkingen:
- De Hoymiles app vereist een actieve cloudverbinding en een werkende S-Miles account
- De officiële DTU-koppeling haalt data op via de Hoymiles-cloud, wat slechts eens per 15 minuten refresht — veel te traag voor realtime vermogenssturing
De oplossing: OpenDTU met ESP32 en CMT2300A
Voor wie volledige, lokale controle wil over zijn Hoymiles HMS- of HMT-omvormers — zonder cloud, zonder afhankelijkheid van de officiële DTU, en met real-time updates — is OpenDTU mogelijk een oplossing. Groene nerd FrankR hoorde onze aflevering over zonnepanelen uitzetten en vertelde over deze OpenDTU oplossing. In dit artikel beschreven we wat hij heeft gedaan.
OpenDTU is opensourcesoftware die draait op een ESP32-microcontroller en via een CMT2300A-radiomodule direct communiceert met je omvormer op 868MHz. De totale hardware kost minder dan €15. Je krijgt er realtime paneeldata, volledige MQTT-integratie met Home Assistant en directe vermogenssturing voor terug.
In deze handleiding lees je stap voor stap hoe je dit bouwt, configureert en koppelt aan Home Assistant.
Inhoudsopgave
- Je teruglevering slim aansturen: het nieuwe normaal
- Wat heb je nodig?
- Stap 1: Firmware flashen (doe dit eerst!)
- Stap 2: WiFi configureren
- Stap 3: Hardware aansluiten
- Stap 4: Device Profile instellen
- Stap 5: Omvormer toevoegen
- Stap 6: MQTT en Home Assistant koppeling
- Stap 7: Vermogen limiteren en omvormer schakelen
- Belangrijke opmerkingen
- Veelvoorkomende problemen
Wat heb je nodig?
Hardware
| Component | Omschrijving | Geschatte prijs |
|---|---|---|
| ESP32 DevKit | Bijvoorbeeld een ESP32-WROOM-32 NodeMCU (38-pin) | ~€5 |
| CMT2300A radiomodule | EBYTE E49-900MBL-01 testboard met voorgesoldeerd E49-900M20S-module + antenne | ~€7 |
| Dupont-kabeltjes | Female-to-female jumper wires (6 stuks nodig) | ~€2 |
| USB-kabel | Micro-USB of USB-C, afhankelijk van je ESP32-board | aanwezig |
| Antenne | 868MHz-antenne (vaak meegeleverd met het testboard-kitje) | inbegrepen |
Het E49-900MBL-01 testboard heeft pin-headers, waardoor je eenvoudig met Dupont-draadjes kunt aansluiten op de ESP32 — solderen is niet nodig. Let erop dat je bij bestelling een kitje kiest inclusief antenne.
Software
- OpenDTU firmware — te downloaden of direct te flashen via opendtu.solar/firmware
- Webbrowser (Chrome of Edge) voor de Web Flasher
- Home Assistant met MQTT-integratie (optioneel, voor automatisering)
- MQTT Broker (bijv. Mosquitto, te installeren als Home Assistant add-on)
Compatibiliteit
OpenDTU ondersteunt de Hoymiles HM-, HMS- en HMT-series. De CMT2300A-radiomodule is specifiek nodig voor de HMS- en HMT-serie (Sub-1GHz communicatie). Voor de oudere HM-serie is een NRF24L01+ module nodig (2.4GHz).
Let op: Omvormers met een “W” in de naam (bijv. HMS-800W-2T) hebben ingebouwde WiFi en worden niet ondersteund door OpenDTU.
| Serie | Frequentie | Radiomodule | Voorbeelden |
|---|---|---|---|
| HM | 2.4 GHz | NRF24L01+ | HM-300, HM-600, HM-1500 |
| HMS | Sub-1GHz (868MHz) | CMT2300A | HMS-800-2T, HMS-1000-2T, HMS-2000-4T |
| HMT | Sub-1GHz (868MHz) | CMT2300A | HMT-1800-6T, HMT-2250-6T |
Stap 1: Firmware flashen (doe dit eerst!)
Aanbevolen volgorde: flash de firmware eerst, voordat je de CMT2300A aansluit. Zo kun je alvast de WiFi-configuratie doorlopen zonder losse draden in de weg.
- Sluit de ESP32 via USB aan op je computer.
- Open de OpenDTU Web Flasher in Chrome, Edge of Brave.
- Kies ESP32 als platform en klik op de blauwe Install-knop.
- Selecteer in de popup de juiste seriële poort van je ESP32.
- Wacht tot de firmware is geflasht — dit duurt minder dan 3 minuten.
ESP32 niet zichtbaar? Wacht 5 minuten en probeer opnieuw. Werkt het nog niet? Probeer een andere USB-poort of -kabel. Bij sommige boards moet je de BOOT-knop ingedrukt houden totdat het flashproces start.
Alternatief: handmatig met esptool
Download de opendtu-generic_esp32.factory.bin van de GitHub Releases pagina en flash via de commandoregel:
esptool --baud 921600 --port COM3 --chip esp32 \
--before default-reset --after hard-reset \
write-flash --flash-mode dout \
--flash-freq 40m --flash-size detect \
0x0 opendtu-generic_esp32.factory.bin
Vervang COM3 door de juiste poort op jouw systeem. Gebruik altijd de .factory variant bij de eerste keer — deze bevat de bootloader, partitietabel én firmware.
Stap 2: WiFi configureren
Na het flashen start de ESP32 automatisch een eigen WiFi-accesspoint:
- Zoek op je telefoon of laptop naar het netwerk “OpenDTU-*”.
- Verbind met wachtwoord:
openDTU42 - Open een browser en ga naar
http://192.168.4.1 - Log in met:
- Gebruikersnaam:
admin - Wachtwoord:
openDTU42
- Gebruikersnaam:
- Navigeer naar Settings → Network Settings en voer je WiFi-gegevens in.
- De ESP32 verbindt nu met je thuisnetwerk. Het accesspoint blijft nog circa 3 minuten actief. Ga naar Info → Network om het toegewezen IP-adres te vinden.
De OpenDTU-webinterface is nu bereikbaar op dit IP-adres vanuit je eigen netwerk.
Tip: Koppel de ESP32 na de WiFi-configuratie los van de computer en sluit hem aan op een USB-adapter voor permanente voeding. De stroomvoorziening kan via de USB-poort van de ESP32 zelf, of (als je het prototypeboard gebruikt) via de USB-aansluiting van het CMT2300A-board.
Stap 3: Hardware aansluiten
Nu de firmware en WiFi werken, sluit je de CMT2300A-module aan op de ESP32.
Pinout van het E49-900MBL-01 prototypeboard
Let op: verwijder op het prototypeboard eerst de jumper tussen Pin 1 en Pin 2 voordat je begint. De relevante pinnen op het board zijn:
| E49 CMT pin | Functie | Draadkleur (conventie) |
|---|---|---|
| PIN3 | 3,3V | rood |
| PIN5 | GND | zwart |
| PIN9 | CS | oranje |
| PIN10 | FCS | geel |
| PIN11 | SDIO | groen |
| PIN12 | CLK | blauw |
Bedrading: CMT2300A → ESP32
Het volgende schema is in de praktijk bewezen werkend met meerdere HMS-1000-2T omvormers, en komt overeen met het device profile in Stap 4. De draadkleur is een geheugensteuntje — elke kleur werkt uiteraard zolang je de mapping consistent houdt.
| E49 CMT pin | Functie | Draadkleur | ESP32 GPIO |
|---|---|---|---|
| PIN9 | CS | oranje | GPIO 15 |
| PIN10 | FCS | geel | GPIO 26 |
| PIN11 | SDIO | groen | GPIO 12 |
| PIN12 | CLK | blauw | GPIO 14 |
| PIN3 | 3,3V | rood | 3.3V pin |
| PIN5 | GND | zwart | GND pin |
Flexibiliteit: Het maakt in principe niet uit aan welke GPIO-pinnen je de CMT aansluit, zolang je normale data-pinnen van de ESP32 gebruikt (geen bootstrapping-pinnen zoals GPIO 0, 2 of 6–11) én het JSON-profiel in Stap 4 exact overeenkomt met jouw bedrading.
Boards met ingebouwde LoRa-chip (zoals TTGO LoRa32): GPIO 12, 14, 26 en 27 kunnen dan al bezet zijn — gebruik in dat geval andere vrije GPIO’s en pas het JSON-profiel daarop aan.
Condensator
Plaats een 100µF condensator tussen 3.3V en GND op de ESP32. Dit stabiliseert de voeding naar de radiomodule en wordt expliciet aanbevolen door ervaren gebruikers op het Tweakers-forum.
Stap 4: Device Profile instellen
OpenDTU moet weten hoe de radiomodule is aangesloten. Dit gaat via een Device Profile — een JSON-bestand met de GPIO-toewijzingen. Meer uitleg over device profiles vind je in de officiële documentatie. Dit is de stap waar de meeste gebruikers op vastlopen.
JSON-profiel aanmaken
Open een teksteditor (Notepad/Gedit, geen Word) en kies het profiel dat bij jouw bedrading hoort. Sla het bestand op als pin_mapping.json.
Voor Optie A (GPIO 27, 26, 14, 12):
[
{
"name": "ESP32 met CMT2300A",
"nrf24": {
"miso": -1, "mosi": -1, "clk": -1,
"irq": -1, "en": -1, "cs": -1
},
"cmt": {
"clk": 12,
"cs": 27,
"fcs": 26,
"sdio": 14,
"gpio2": -1,
"gpio3": -1
}
}
]
Voor Optie B (GPIO 4, 5, 23, 18):
[
{
"name": "ESP32 met CMT2300A",
"nrf24": {
"miso": -1, "mosi": -1, "clk": -1,
"irq": -1, "en": -1, "cs": -1
},
"cmt": {
"clk": 18,
"cs": 4,
"fcs": 5,
"sdio": 23,
"gpio2": -1,
"gpio3": -1
}
}
]
De waarden -1 betekenen “niet aangesloten”. De nrf24-sectie staat op -1 omdat je uitsluitend de CMT2300A gebruikt.
Profiel uploaden
- Ga naar Settings → Config Management in de OpenDTU-webinterface
- Kies bij “Restore” de optie “Pin Mapping (pin_mapping.json)”
- Klik op Browse, kies je JSON-bestand en klik op Restore
- Het systeem herstart automatisch
- Ga naar Settings → Device-Manager / Connection Settings en controleer of je CMT-profiel is geselecteerd
Na het herstarten zou onder Info → System de CMT2300A Chip Status als “connected” moeten verschijnen (zie screenshot hieronder). De nRF24-status staat op “not configured” — dat is correct, want je gebruikt geen NRF24L01+ module.

✅ CMT2300A Status: configured ✅ CMT2300A Chip Status: connected
Is de status nog “disconnected”? Controleer dan of de GPIO-nummers in je JSON exact overeenkomen met je werkelijke bedrading.
Veelgemaakte fout: De waarden in het JSON zijn ESP32 GPIO-nummers, niet de fysieke pinnummers op het E49-prototypeboard.
Stap 5: Omvormer toevoegen
- Ga in de webinterface naar Settings → Inverter Settings.
- Voer het serienummer van je Hoymiles-omvormer in (te vinden op de sticker op de omvormer zelf).
- Geef de omvormer een herkenbare naam.
- Klik op Add om de omvormer toe te voegen.
OpenDTU start nu met het pollen van de omvormer. Let op: je ziet alleen data als de omvormers overdag “wakker” zijn — ’s nachts (zonder zonlicht) gaan Hoymiles omvormers in slaapstand en is er geen communicatie mogelijk.
Je kunt meerdere omvormers toevoegen aan dezelfde DTU. FrankR heeft er bijvoorbeeld 3.

NTP-tijdsynchronisatie
Als je geen verbinding krijgt met de omvormer ondanks een correcte CMT2300A-status, controleer dan de NTP-instellingen. Communicatie lukte bij meerdere gebruikers pas nadat de tijd correct was gesynchroniseerd via Settings → NTP Settings. De standaard NTP-server werkt niet altijd — een alternatief zoals time-f.netgear.com wordt aanbevolen.
Als het goed is zie je via Info → Console succesvolle TX/RX-communicatie verschijnen. In het Live View dashboard verschijnen zowel de totale AC-output als de individuele DC-input per paneelkanaal.
Stap 6: MQTT en Home Assistant koppeling
MQTT configureren in OpenDTU
- Ga naar Settings → MQTT in de OpenDTU-webinterface.
- Schakel Enable MQTT in.
- Vul de gegevens van je MQTT broker in:
- Schakel Enable Home Assistant MQTT Auto Discovery in.
- Stel de Prefix Topic in op
homeassistant/(standaard Home Assistant discovery prefix). - Schakel Individual Panels in als je data per paneel wilt zien in HA.
Entities in Home Assistant
Na het opslaan van de MQTT-instellingen verschijnen de meeste entities automatisch in Home Assistant via MQTT Auto Discovery. Je vindt ze onder het device “OpenDTU” in je MQTT-integratie.
Mochten sommige entities niet automatisch verschijnen, dan kun je ze handmatig toevoegen via de MQTT-integratie GUI in Home Assistant (Settings → Devices & Services → MQTT → Configure). Dit is tegenwoordig standaard HA-functionaliteit en vereist geen configuration.yaml-aanpassing meer.
FrankR laat nog weten dat de waarde van de ’totalen’ vaak niet kloppen. De waarden per omvormer zijn correct, maar bijvoorbeeld niet het productietotaal van alle omvormers. In de MQTT settings kun je deze handmatig toevoegen:

Je voegt een eerste item toe aan device OpenDTU en daarna kun je sensors toevoegen aan hetzelfde device:

Toevoegen is relatief eenvoudig:

State topic is het belangrijkste, hier te vinden: https://www.opendtu.solar/firmware/mqtt_topics/. Als alternatief kun je ook de individuele waardes per omvormer optellen en gebruiken om daarna te sturen.

Stap 7: Vermogen limiteren en omvormer schakelen
Dankzij de MQTT Auto Discovery uit Stap 6 zijn alle omvormers na het herstarten automatisch zichtbaar in Home Assistant — zonder verdere configuratie. Je hoeft geen MQTT-topics of serienummers handmatig in te voeren.
Omvormers als HA-devices
Ga in Home Assistant naar Settings → Devices & Services → MQTT. Daar verschijnen je omvormers als losse devices, met de namen die je in OpenDTU hebt ingesteld (bijv. HMS1, HMS2, HMS3). Elk device heeft automatisch 32 entities beschikbaar, waaronder vermogensdata per paneel én de bedieningsentities.

Beschikbare bedieningsentities
Per omvormer zijn de volgende entities direct bruikbaar in dashboards en automatiseringen:
| Entity | Type | Functie |
|---|---|---|
| Power Limit HMS1 | Number (slider) | Stel het maximale vermogen in (bijv. 0–1000W) |
| Solar HMS Set Value | Number | Totaal vermogenslimiet over alle omvormers |
| Limit NonPersistent | Number | Tijdelijk limiet — reset na stroomonderbreking |
| Limit Persistent | Number | Permanent limiet — blijft behouden na nacht |
| Turn Inverter Off | Button | Zet omvormer uit |
| Turn Inverter On | Button | Zet omvormer aan |
| Restart Inverter | Button | Herstart omvormer |

En als je snel handmatig het vermogen wil beperken, voeg je alleen de essentiële entiteiten toe op je dashboard:

Gebruiken in een automatisering
Omdat het gewone HA-entities zijn, werkt alles zoals bij elk ander apparaat. Een automatisering die de omvormer uitzet bij negatieve stroomprijs ziet er zo uit — geen MQTT publish, geen serienummer:
alias: Omvormer uit bij negatieve stroomprijs
trigger:
- platform: numeric_state
entity_id: sensor.energyprice_current
below: 0
action:
- action: button.press
target:
entity_id: button.hms1_turn_inverter_off
- action: button.press
target:
entity_id: button.hms2_turn_inverter_off
- action: button.press
target:
entity_id: button.hms3_turn_inverter_off
En voor zero export — het instellen van een vermogenslimiet op basis van je actuele verbruik:
alias: Zero Export
trigger:
- platform: time_pattern
seconds: "10"
action:
- action: number.set_value
target:
entity_id: number.hms1_limit_nonpersistent
data:
value: "{{ [[(states('sensor.power_consumption')|float / 3), 0]|max, 1000]|min }}"
Pas de entity-namen aan naar de namen die jij je omvormers hebt gegeven in OpenDTU.
Toevoegen aan je dashboard
Je kunt de Power Limit-sliders en de aan/uit-knoppen ook direct op je Lovelace-dashboard zetten via + Add to dashboard op de device-pagina. Zo heb je altijd handmatige bediening bij de hand naast je automatiseringen.
Tip: De MQTT-topics zijn nog steeds beschikbaar als je geavanceerdere scripts wilt schrijven, maar voor de meeste toepassingen zijn de HA-entities eenvoudiger en overzichtelijker.
Belangrijke opmerkingen
Garantie van Hoymiles
Er bestaan berichten in de community dat het gebruik van een niet-officiële DTU mogelijk invloed kan hebben op de garantie van je Hoymiles-omvormer. De officiële Hoymiles-documentatie voor DTU-hardware stelt dat het demonteren van de DTU zonder toestemming de resterende garantieperiode ongeldig maakt — maar dit betreft de DTU zelf, niet per se de omvormer. Nadelen die op Tweakers worden genoemd zijn het ontbreken van firmware-updates voor de omvormer en geen support op afstand van Hoymiles. Maar bij FrankR komen gewoon firmware updates binnen:

OpenDTU en officiële DTU niet tegelijk
De OpenDTU en een officiële Hoymiles DTU (zoals de DTU-Pro-S) kunnen niet tegelijk met dezelfde omvormer communiceren. Je moet kiezen welke je gebruikt. Sommige gebruikers wisselen gedurende de dag, maar dat is omslachtig.
Bereik en antenne
De CMT2300A communiceert op 868MHz (Sub-1GHz). Dit biedt een groter bereik dan de 2.4GHz van de oudere HM-serie — precies de reden dat Hoymiles voor deze frequentie heeft gekozen. Zorg dat de antenne goed is aangesloten en dat de ESP32 niet te ver van de omvormer(s) staat. Obstakels als dakpannen, isolatiefolie (dampremmer) en betonnen muren kunnen het signaal aanzienlijk verzwakken. Eén Tweakers-gebruiker met gewapend betonnen muren meldde dat zelfs WiFi problematisch was — houd hier rekening mee bij de plaatsing van je OpenDTU. In de OpenDTU-webinterface kun je onder Info → Console de signaalkwaliteit controleren. FrankR heeft hier zelf geen problemen mee, maar je kunt via de DTU instellingen hier nog aan tweaken om het bereik te verbeteren:

Behuizing
Voor de behuizing zijn meerdere opties populair: een klein lasdoosje van de bouwmarkt (de antenne past mooi door een wartel), een 3D-geprint doosje, of gewoon op een plank leggen. Zorg dat de ESP32 en het radiomodule droog en uit direct zonlicht staan.
Veelvoorkomende problemen
Op basis van het Tweakers-forum en de OpenDTU GitHub-discussies zijn dit de meestvoorkomende valkuilen:
| Probleem | Oorzaak | Oplossing |
|---|---|---|
| CMT2300A Status: “disconnected” | Verkeerde GPIO-nummers of bedrading | Controleer of de GPIO-nummers in je JSON overeenkomen met je werkelijke bedrading |
| CMT2300A “connected” maar geen data van omvormer | NTP-tijd niet gesynchroniseerd | Configureer een werkende NTP-server (bijv. time-f.netgear.com) |
| Console toont “TX SPI Timeout” | Verkeerde SPI-pinnen of conflict met andere chip | Controleer of de gekozen GPIO’s niet al bezet zijn (bijv. door LoRa-chip) |
| Console toont “Nothing received, resend count exceeded” | Omvormer is in slaapstand (nacht) of buiten bereik | Test overdag wanneer de panelen actief zijn |
| ESP32 niet herkend door Web Flasher | Driver-probleem of USB-kabel zonder dataliijnen | Probeer andere USB-poort, andere kabel, of andere computer |
| Pads losgelaten bij solderen CMT2300A | Losse E49-900M20S module is extreem fragiel | Gebruik het E49-900MBL-01 prototypeboard |
Foto: jeroenvanderl









1 Comment