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


Wat heb je nodig?

Hardware

ComponentOmschrijvingGeschatte prijs
ESP32 DevKitBijvoorbeeld een ESP32-WROOM-32 NodeMCU (38-pin)~€5
CMT2300A radiomoduleEBYTE E49-900MBL-01 testboard met voorgesoldeerd E49-900M20S-module + antenne~€7
Dupont-kabeltjesFemale-to-female jumper wires (6 stuks nodig)~€2
USB-kabelMicro-USB of USB-C, afhankelijk van je ESP32-boardaanwezig
Antenne868MHz-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.

SerieFrequentieRadiomoduleVoorbeelden
HM2.4 GHzNRF24L01+HM-300, HM-600, HM-1500
HMSSub-1GHz (868MHz)CMT2300AHMS-800-2T, HMS-1000-2T, HMS-2000-4T
HMTSub-1GHz (868MHz)CMT2300AHMT-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.

  1. Sluit de ESP32 via USB aan op je computer.
  2. Open de OpenDTU Web Flasher in Chrome, Edge of Brave.
  3. Kies ESP32 als platform en klik op de blauwe Install-knop.
  4. Selecteer in de popup de juiste seriële poort van je ESP32.
  5. 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:

  1. Zoek op je telefoon of laptop naar het netwerk “OpenDTU-*”.
  2. Verbind met wachtwoord: openDTU42
  3. Open een browser en ga naar http://192.168.4.1
  4. Log in met:
    • Gebruikersnaam: admin
    • Wachtwoord: openDTU42
  5. Navigeer naar Settings → Network Settings en voer je WiFi-gegevens in.
  6. 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 pinFunctieDraadkleur (conventie)
PIN33,3Vrood
PIN5GNDzwart
PIN9CSoranje
PIN10FCSgeel
PIN11SDIOgroen
PIN12CLKblauw

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 pinFunctieDraadkleurESP32 GPIO
PIN9CSoranjeGPIO 15
PIN10FCSgeelGPIO 26
PIN11SDIOgroenGPIO 12
PIN12CLKblauwGPIO 14
PIN33,3Vrood3.3V pin
PIN5GNDzwartGND 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

  1. Ga naar Settings → Config Management in de OpenDTU-webinterface
  2. Kies bij “Restore” de optie “Pin Mapping (pin_mapping.json)”
  3. Klik op Browse, kies je JSON-bestand en klik op Restore
  4. Het systeem herstart automatisch
  5. 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

  1. Ga in de webinterface naar Settings → Inverter Settings.
  2. Voer het serienummer van je Hoymiles-omvormer in (te vinden op de sticker op de omvormer zelf).​
  3. Geef de omvormer een herkenbare naam.
  4. 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

  1. Ga naar Settings → MQTT in de OpenDTU-webinterface.
  2. Schakel Enable MQTT in.
  3. Vul de gegevens van je MQTT broker in:
    • Hostname: IP-adres van je MQTT broker (bijv. je Home Assistant IP)
    • Port1883 (standaard, onversleuteld)
    • Username/Password: indien van toepassing
    • Base Topic: bijv. solar/ (standaard)
  4. Schakel Enable Home Assistant MQTT Auto Discovery in.
  5. Stel de Prefix Topic in op homeassistant/ (standaard Home Assistant discovery prefix).
  6. 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:

EntityTypeFunctie
Power Limit HMS1Number (slider)Stel het maximale vermogen in (bijv. 0–1000W)
Solar HMS Set ValueNumberTotaal vermogenslimiet over alle omvormers
Limit NonPersistentNumberTijdelijk limiet — reset na stroomonderbreking
Limit PersistentNumberPermanent limiet — blijft behouden na nacht
Turn Inverter OffButtonZet omvormer uit
Turn Inverter OnButtonZet omvormer aan
Restart InverterButtonHerstart 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:

ProbleemOorzaakOplossing
CMT2300A Status: “disconnected”Verkeerde GPIO-nummers of bedradingControleer of de GPIO-nummers in je JSON overeenkomen met je werkelijke bedrading​
CMT2300A “connected” maar geen data van omvormerNTP-tijd niet gesynchroniseerdConfigureer een werkende NTP-server (bijv. time-f.netgear.com)​
Console toont “TX SPI Timeout”Verkeerde SPI-pinnen of conflict met andere chipControleer 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 bereikTest overdag wanneer de panelen actief zijn​
ESP32 niet herkend door Web FlasherDriver-probleem of USB-kabel zonder dataliijnenProbeer andere USB-poort, andere kabel, of andere computer​
Pads losgelaten bij solderen CMT2300ALosse E49-900M20S module is extreem fragielGebruik het E49-900MBL-01 prototypeboard​

Foto: jeroenvanderl

Wat vind jij hiervan?

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

1 Comment