Je Solis omvormer slim aansturen met een zelfbouw ESPHome stick

In onze eerdere handleiding over het slim limiteren van je Solis omvormer concludeerden we helaas dat de mogelijkheden beperkt zijn. Voor echte groene nerds is er nu een hele mooie oplossing voor die je wél alle mogelijkheden en veel vrijheid geeft: het ginlong-solis project. Dit open source project maakt het mogelijk om de originele firmware van je Solis S3 WiFi-stick te vervangen door ESPHome-firmware. Hiermee krijg je volledige lokale controle over je omvormer, inclusief het beperken van het uitgangsvermogen.
Met dank aan: Hajo Noerenberg, FrankR, Wessel en de open source community achter ginlong-solis.
Inhoudsopgave
- Wat maakt deze oplossing uniek?
- Hoe werkt het?
- Ondersteunde apparaattypen
- Wat heb je nodig?
- Stap-voor-stap: S3 WiFi-stick flashen
- Vermogen beperken via Home Assistant
- Extra functionaliteiten
- Waarschuwingen en aandachtspunten
Wat maakt deze oplossing uniek?
De meeste methoden om een Solis omvormer aan te sturen zijn beperkt (zie ons overzicht voor het slim aansturen van je Solis omvormer). Deze ESPHome-oplossing biedt aanzienlijk meer mogelijkheden:
| Functie | SolisCloud App | DRM-poort | Standaard WiFi-stick | ESPHome firmware |
|---|---|---|---|---|
| Omvormer aan/uit | ✅ | ✅ | ❌ | ✅ |
| Vermogen beperken (0-110%) | ❌ | ❌ | ❌ | ✅ |
| Lokale communicatie | ❌ (cloud) | ✅ | ❌ (cloud) | ✅ |
| Home Assistant integratie | ❌ | Via relais | ❌ | ✅ Native |
| Real-time data | ❌ (5 min) | ❌ | ❌ (5 min) | ✅ |
| Automatiseerbaar | Beperkt | Via relais | ❌ | ✅ Volledig |
| Kosten | Gratis (bij stick) | ~€15-30 | Gratis | ~€20 (S3-stick) |
De kern van de oplossing: via Modbus-register 3052 kan het uitgangsvermogen van de omvormer ingesteld worden als percentage (0-110%) van het nominale vermogen. Dit register wordt via de ESPHome-firmware als een number-entiteit beschikbaar gesteld in Home Assistant, waarmee je het vermogen direct kunt instellen of automatiseren.
Hoe werkt het?
Het ginlong-solis project vervangt de originele firmware van de Solis S3 WiFi-stick door een op ESPHome gebaseerde firmware. De S3-stick is Solis’ huidige oplossing om omvormers met de SolisCloud te verbinden. De stick bevat een MXCHIP EMW3080-E MCU (een ARM Cortex-M4F processor met WiFi) en is via een RS485 Modbus-interface met de omvormer verbonden.
Met de alternatieve firmware communiceert de stick lokaal via je WiFi-netwerk met Home Assistant, in plaats van data naar de Alibaba-cloud te sturen. De ESPHome-configuratie leest alle relevante sensordata uit (vermogen, spanning, stroom, temperatuur, energieopbrengst) én biedt de mogelijkheid om het uitgangsvermogen te beperken of de werkmodus te wijzigen.
Ondersteunde apparaattypen
Het project levert kant-en-klare Modbus-configuratiebestanden voor drie typen Solis-apparaten:
- INV — Standaard string omvormers (register range 3xxx)
- ESINV — Hybride/energy storage omvormers (register range 33xxx)
- EPM — Export Power Managers (register range 36xxx)
Bij het configureren kies je het juiste type door de bijbehorende YAML-include te activeren in het ESPHome-configuratiebestand.
Wat heb je nodig?
Optie 1: Solis S3 WiFi-stick reflashen (aanbevolen)
De WiFi-stick is de huidige oplossing van Solis om je omvormer te verbinden met het SolisCloud-platform. Wat veel mensen niet weten: dat platform draait op de cloud van Alibaba China. De 3e generatie stick (S3) herken je aan de drie LED’s op de voorkant en de resetknop op de achterkant.
De webinterface is beveiligd met HTTP simple auth. Bij levering zijn de inloggegevens:
- Gebruikersnaam:
admin - Wachtwoord:
123456789
Maar pas op: zodra je de stick met je thuis-WiFi verbindt, verandert het wachtwoord zonder enige melding naar je WiFi-wachtwoord. Vanaf dat moment log je in met admin en je WiFi-wachtwoord. Dit nogal merkwaardige gedrag is volgens de projectauteur opnieuw een teken van de onvolwassenheid van de firmware.
Geen eigen logging server mogelijk
Omdat de firmware geen ondersteuning biedt voor het instellen van een eigen remote logging server, heeft het ginlong-solis project een workaround: het Perl-script solis2influx.pl. Dit script leest basisstatistieken uit de webinterface van de stick (via het endpoint /inverter.cgi) en publiceert deze in een InfluxDB-database.
Onder de motorkap: AliOS en Alibaba
De stick-firmware is gebaseerd op Alibaba’s AliOS-Things 3.0.0 embedded besturingssysteem (mogelijk zijn er ook delen van MXCHIP’s MiCO OS in verwerkt). Twee opvallende zaken:
- De firmware gebruikt hardcoded DNS-servers:
public1.alidns.comenpublic2.alidns.com. - Data wordt frequent gepusht naar
*.iot-as-mqtt.*.aliyuncs.com— welke specifieke server wordt gekozen op basis van je geolocatie.
Hardware van de S3-stick
De hardware van de stick is gebaseerd op de MXCHIP EMW3080-E MCU:
| Eigenschap | Specificatie |
|---|---|
| Processor | ARM Cortex-M4F (MX1290) |
| WiFi | 2,4 GHz IEEE 802.11 b/g/n |
| Antenne | IPEX-aansluiting (het suffix -E in de productnaam) |
| Flash | 8 MB (zie opmerking hieronder) |
✋ Belangrijk: In tegenstelling tot alle beschikbare datasheets, blijkt de EMW3080-E (althans die in de Solis S3-stick) géén 2 MB flash te bevatten, maar een 8 MB flashmodule.
De EMW3080 is in feite een geherlabelde — of laten we zeggen: dezelfde familie — Realtek RTL8710BN MCU uit de Ameba-Z serie. Meer technische info over de EMW3080 is te vinden bij A_D Electronics en in een discussie op esp8266.ru.
Aansluitingen
De stick is via een propri¨etaire Exceedconn EC04681-2014-BF connector met de omvormer verbonden. De ronde pinaansluitingen:
| Pin | Functie |
|---|---|
| 1 | VCC (5V) |
| 2 | GND |
| 3 | RS485+ |
| 4 | RS485- |


De externe antenne is aangesloten via een standaard SMA-connector. De behuizing kun je openen door de inkepingen naar het midden van de stick te drukken.
Seriële interface op het PCB
Op de printplaat bevindt zich een seriële interface (LogCLI), aangesloten op UART2_Log_TX en UART2_Log_RX van de MCU (115200 baud, 8N1, 3,3 Volt).
⚠️ Let op: hardware watchdog. Sinds eind 2022 bestaat er een nieuwere printplaatversie met een hardware watchdog. Je herkent deze nieuwe boards aan de silkscreen-opdruk ‘22.34’ (vermoedelijk het jaar en weeknummer van productie).
Analyse via de seriële poort
Door een USB-serieel adapter aan te sluiten op de UART2_Log-pinnen krijg je een eerste indruk van wat de stick doet. Bij normaal opstarten verschijnt de volgende output:
ROM:[V0.1]
FLASHRATE:4
BOOT TYPE:0 XTAL:40000000
IMG1 DATA[1128:10002000]
IMG1 ENTRY[800053d:100021ef]
IMG1 ENTER
CHIPID[000000ff]
read_mode idx:2, flash_speed idx:2
calibration_result:[1:19:13][3:15]
calibration_result:[2:21:11][1:15]
calibration_result:[3:1:1][1:1]
calibration_ok:[2:21:11]
FLASH CALIB[NEW OK]
OTA2 ADDR[8100000]
OTAx SELE[ffffffff]
OTA1 USE
IMG2 DATA[0x800f1c0:36:0x10005000]
IMG2 SIGN[RTKWin(10005008)]
IMG2 ENTRY[0x10005000:0x800b105]
BOOT_FLASH_RDP RDP enable
RDP bin decryption Failed!
checksum_ipsec = 0x46956286, checksum_rdp_flash = 0x80d838a
2ndboot image start
Press key 'w' to 2ndboot cli menu in 100ms.
122: ota crc cal:0x7a1a param:0xffff
17: ota upg_flag:0xffffcount:0 crc;0xffff
30: No OTA upgrade.
De volledige (geanonimiseerde) bootlog is beschikbaar in de GitHub-repository.
2ndboot CLI
Door de ‘w’-toets ingedrukt te houden tijdens het opstarten start een extreem beperkte 2ndboot CLI:
text2ndboot image start
Press key 'w' to 2ndboot cli menu in 100ms.
2ndboot ver: 2ndboot-1.0.0-20210917.200018
Please input 1-2 to select functions
[1] Uart Ymodem Upgrade
[2] System Reboot
[h] Help Info
2ndboot#
UART bootmodus
Door TX-pin 21 (PA_30) laag te trekken tijdens het opstarten gaat het apparaat in UART bootmodus en wacht het op een xmodem-transfer:
ROM:[V0.1]
FLASHRATE:4
UARTIMG_Download 2
Open xModem Transfer on Log UART...
In deze modus kun je de firmware downloaden. Oorspronkelijk kon dit met RTLtool (vereist Python 2), maar tegenwoordig is ltchiptool de betere optie:
bash$ python2 ./rtltool.py -p /dev/ttyUSB0 gf
Connecting...
Flash Status value: 0x40
$ python2 ./rtltool.py -p /dev/ttyUSB0 rf 0x8000000 0x800000 dump-0x8000000-0x800000.bin
Connecting...
Read Flash data from 0x08000000 to 0x08800000 in file: dump-0x8000000-0x800000.bin ...
Done!
Analyse van het flashgeheugen (firmware 1012F)
De firmware-dump bevat allerlei interessante informatie. De strings AOS-R-3.0.0 en sdk-c-3.0.1 linken duidelijk naar AliOS-Things 3.0.0. Met behulp van de Realtek AmebaZ Memory Layout, Introduction to Ameba-Z SDK en mk3080/flash_partitions.c kon de flashpartitietabel gereconstrueerd worden (gevonden op adres 0x800e320):
| Partitie | Startadres | Lengte | Beschrijving |
|---|---|---|---|
| Bootloader | 0x0 | 0x8000 | AliOS boot_all.bin |
| Recovery | 0xb000 | 0x6000 | 2ndboot |
| Application | 0x19000 | 0x127000 | Hoofdapplicatie |
| OTA Storage | 0x150000 | 0x127000 | Over-the-air update opslag |
| Parameter1 | 0x2a0000 | 0x2000 | |
| Parameter2 | 0x2a2000 | 0x2000 | WiFi-credentials (@ 0x2a3000) |
| Parameter3 | 0x2a4000 | 0x2000 | AliOS PK+PS+DN+DS |
| Parameter4 | 0x2a6000 | 0x2000 | |
| Parameter5 | 0x2a8000 | 0x10000 | |
| Parameter55 | 0x2b8000 | 0x1000 | |
| Parameter33 | 0x7fe000 | 0x1000 | Backup van Parameter3? |
| Offline | 0x300000 | 0x4fe000 | 0x1000 nullen + ruis |
Het Alibaba IoT Platform
Partitie ‘Parameter3’ bevat de ‘Product Key’ (PK) en ‘Device Secret’ (DS) die nodig zijn om verbinding te maken met het Alibaba IoT Platform. Het serienummer van de stick wordt als ‘Device Name’ (DN) gebruikt.
Met de Link SDK for Python kun je je eenvoudig voordoen als de omvormer en MQTT-data naar SolisCloud sturen.
Analyse van de hoofdapplicatie (firmware 1012F)
De hoofdapplicatie begint op adres 0x19000 met een TEXT-segment voor flash-in-place execution (XIP), gevolgd door een DATA-segment voor RAM-executie (hierna ‘APP1’ genoemd).
De complete APP1 in OTA-pakketformaat (inclusief checksums) begint op 0x19000 met een lengte van 797.628 bytes en MD5-checksum 0a88cb5556ab28ffba63a8d56e131d56. Met het meegeleverde script decode-alios-ota-firmware.pl kun je alle details bekijken en de checksums valideren:
$ ./decode-alios-ota-firmware.pl solis-s3-app-1012F_ota.bin
# Segment .text
0x00000000: Signature = 0x3831393538373131 (OK)
0x00000008: Code length = 790112
0x0000000c: Address = 0x00000000 (FLASH XIP)
0x00000010: Reserved = 0xffffffffffffffffffffffffffffffff
0x00000020: Code = (byte code)
# Segment .data
0x000c0e80: Signature = 0x3831393538373131 (OK)
0x000c0e88: Code length = 7420
0x000c0e8c: Address = 0x10005000 (RAM)
0x000c0e90: Reserved = 0xffffffffffffffffffffffffffffffff
0x000c0ea0: Code = (byte code)
# Segments checksum
0x000c2b9c: Checksum = 0x25249404 (OK)
# OTA trailer
0x000c2ba0: Magic = 0xefefefef (OK)
0x000c2ba4: Size = 797600 (OK)
0x000c2ba8: MD5 checksum = 0x85a615f88804cfb7784ffab81c27795b (OK)
0x000c2bb8: Reserved = 0xffffffff
# End of data
0x000c2bbc: Filesize = 0xc2bbc = 797628 (OK)
Een onverwachte tweede applicatie
Opmerkelijk genoeg wordt APP1 gevolgd door een tweede applicatie (‘APP2’), die begint met TEXT op adres 0xdbbbc (lengte 222.276 bytes) en DATA op 0x112020 (lengte 3.656 bytes). Deze APP2 is binair identiek aan AliOS ate.bin.
Het is onduidelijk of deze tweede applicatie daadwerkelijk wordt gebruikt. Het vermoeden is dat het gaat om ATE-firmware voor Automatic Test Equipment of om eFuses/RDP in te stellen.
De firmware aanpassen (tampering)
Met kennis van de broncode is het relatief eenvoudig om de bijbehorende bytecode in de firmware-dump te lokaliseren. Een voorbeeld: de Mbed TLS wrapper-code die het SSL-certificaat controleert:
cif (ca_crt != NULL) {
mbedtls_ssl_conf_authmode(&(pTlsData->conf), MBEDTLS_SSL_VERIFY_REQUIRED);
correspondeert in de binary met:
0803fb86 ba f1 00 0f cmp.w r10,#0x0
0803fb8a 2f d0 beq LAB_0803fbec
0803fb8c 02 21 movs r1,#0x2 // 0x2 = MBEDTLS_SSL_VERIFY_REQUIRED
0803fb8e 2e e0 b LAB_0803fbee
Door de waarde 02 21 te wijzigen naar 00 21 (0x0 = MBEDTLS_SSL_VERIFY_NONE) op offset 0x3fb8c, wordt het SSL-certificaat van de bestemming niet meer gecontroleerd. Hiermee kun je het SSL-verkeer onderscheppen of omleiden (MQTT, HTTP en andere verbindingen naar de Alibaba-cloud).
⚠️ Bij het schrijven naar flash met RTLtool (wf-commando) moet je altijd volledige 4096-byte gealligneerde datablokken schrijven (flash SECTOR_SIZE 0x1000).
Optie 2: Zelf bouwen met ESP8266
Voor wie liever zelf bouwt, is er een alternatief met een ESP8266 (bijvoorbeeld een Wemos D1 Mini).
Hardware:
- Wemos D1 Mini (of D1 Mini Pro met externe antenne voor beter bereik)
- RS485-naar-serieel adapter (bijv. HW-0519, XY-K485 of XY-017)
- Exceedconn EC04681-2014-BF connector (verkrijgbaar op eBay, of 3D-printbaar)

Bedrading
De Exceedconn-connector heeft vier pinnen in een ronde opstelling:
| Pin | Functie | Verbind met |
|---|---|---|
| 1 | VCC (5V) | 5V op de Wemos D1 Mini |
| 2 | GND | GND op de Wemos D1 Mini |
| 3 | RS485+ | A/+ op de RS485-adapter |
| 4 | RS485- | B/- op de RS485-adapter |
Belangrijk: de bedrading tussen de RS485-adapter en de ESP8266 is contra-intuïtief. Je verbindt de RX-pin van de HW-0519 adapter met de RX-pin van de ESP (en TX met TX) — dus géén RX-TX-crossover zoals normaal bij seriële communicatie. Dit komt doordat deze goedkope adapters de pin-labels vanuit het perspectief van de bus benoemen, niet vanuit het perspectief van de MCU.
Software: ESPHome (aanbevolen)
De aanbevolen softwareoptie voor de ESP8266-build is ESPHome, vooral als je Home Assistant gebruikt. Het bestand solis-esphome-esp8266.yaml is een kant-en-klare configuratie die je direct in het ESPHome Device Builder kunt laden. In het packages-blok activeer je het juiste Modbus-configuratiebestand voor jouw type omvormer (INV, ESINV of EPM) door de gewenste regel te uncommenten.
Vanuit het ESPHome-dashboard kun je de firmware compileren en via USB uploaden naar de Wemos D1 Mini. Na de eerste flash verlopen updates draadloos via OTA.
Software: Arduino + InfluxDB (alternatief)
Voor wie liever geen Home Assistant gebruikt, biedt het project ook een Arduino-sketch (solis2influx.ino) die alle inverterdata (status en statistieken) via Modbus uitleest en naar een InfluxDB-database pusht.
Deze oplossing gebruikt WiFiManager om WiFi in te stellen: bij de eerste keer opstarten maak je verbinding met het SOLIS2INFLUX access point via je telefoon en voer je daar je WiFi-gegevens en InfluxDB-serveradres in.
Na het configureren begint het uitlezen direct. De data wordt pas naar InfluxDB gestuurd zodra het serienummer van de omvormer is uitgelezen (dit wordt als verplichte tag meegegeven zodat je meerdere omvormers kunt onderscheiden). In de seriële monitor zie je dan output zoals:
textDC voltage 1 = 243.70V
DC current 1 = 0.90A
Inverter temperature = 22.50°C
Grid frequency = 49.98Hz
Writing to influxDB: solis,serialnumber=1801... DC voltage 1=243.70,...
Energy today = 1.23kWh
Let op: De Arduino/InfluxDB-optie biedt alleen uitlezen van data. Het actief aansturen van de omvormer (vermogen beperken, werkmodus wijzigen) is alleen mogelijk via de ESPHome-optie.
Stap-voor-stap: S3 WiFi-stick flashen
Hieronder het volledige stappenplan om de firmware van je S3-stick te vervangen:
- ESPHome dashboard installeren — Installeer de ESPHome add-on in Home Assistant (minimaal versie 2023.9.0).
- Secrets configureren — Maak een
secrets.yamlaan met daarin minimaal:wifi_ssid,wifi_password,wifi_ap_ssid,wifi_ap_password,api_encryption_keyenota_password. - YAML-bestanden toevoegen — Voeg
solis-esphome-emw3080.yamltoe aan de ESPHome-configuratie. Kopieer daarnaast het bijbehorende Modbus-configuratiebestand voor jouw type omvormer (solis-modbus-inv.yaml,solis-modbus-esinv.yamlofsolis-modbus-epm.yaml). - Apparaattype instellen — Bewerk
solis-esphome-emw3080.yamlen uncomment de juisteinclude-regel in depackages-sectie voor jouw apparaattype (INV, ESINV of EPM). - Firmware compileren — Klik op de drie-puntjes-knop in ESPHome, kies “Install” en vervolgens “Manual Download”. Wacht tot de compilatie klaar is en download het UF2-pakket.
- Stick in bootmodus zetten — Trek de TX-pin (PA_30) laag tijdens het opstarten. Soldeerwerk is niet nodig; het insteken van jumper-draadjes volstaat.
- Originele firmware back-uppen — Gebruik ltchiptool om de huidige firmware veilig op te slaan:
bashltchiptool flash read -d /dev/ttyUSB0 RTL8710B solis-s3-firmware-backup.bin
Het bestand moet exact 8.388.608 bytes zijn (8 MiB).
- ESPHome firmware flashen — Flash het UF2-bestand:
bashltchiptool flash write -d /dev/ttyUSB0 solis-emw3080.uf2
- Stick terugplaatsen — Sluit de stick weer aan op de omvormer. De sensordata verschijnt automatisch in Home Assistant.
- Toekomstige updates — Na de eerste flash kun je firmware-updates draadloos via OTA uploaden vanuit het ESPHome-dashboard.
Vermogen beperken via Home Assistant
Na het flashen verschijnen in Home Assistant de beschikbare entiteiten.

Waaronder een number-entiteit genaamd “Limit output power”. Deze entiteit is standaard uitgeschakeld als veiligheidsmaatregel — je moet hem handmatig inschakelen in Home Assistant.
Met deze entiteit kun je het uitgangsvermogen instellen als percentage van het nominale vermogen van de omvormer:
- 100% = volledig vermogen (standaard)
- 50% = de helft van het nominale vermogen
- 0% = omvormer produceert niet (effectief uitgeschakeld)
Voorbeeld: automatisch uitschakelen bij negatieve prijzen
Combineer deze functionaliteit met een dynamische energieprijzen-integratie in Home Assistant (bijvoorbeeld via ENTSO-E of een energieleverancier-integratie) om automatisch het vermogen te beperken wanneer de energieprijs negatief wordt.
Een eenvoudige automatisering:
textautomation:
- alias: "Solis vermogen beperken bij negatieve prijzen"
trigger:
- platform: numeric_state
entity_id: sensor.energy_price
below: 0
action:
- service: number.set_value
target:
entity_id: number.solis_limit_output_power
data:
value: 0
- alias: "Solis vermogen herstellen bij positieve prijzen"
trigger:
- platform: numeric_state
entity_id: sensor.energy_price
above: 0
action:
- service: number.set_value
target:
entity_id: number.solis_limit_output_power
data:
value: 100
Voorbeeld: vermogen beperken tot eigen verbruik
Een geavanceerdere toepassing is het dynamisch aanpassen van het vermogen zodat je precies genoeg opwekt voor je eigen verbruik, zonder terug te leveren. Hiervoor heb je een energiemeter nodig (bijv. een P1-meter of Shelly EM) die je actuele verbruik en teruglevering meet.
Extra functionaliteiten
Naast het beperken van het vermogen biedt de ESPHome-firmware nog meer mogelijkheden:
- Real-time monitoring — Alle inverterdata direct beschikbaar in Home Assistant: actief vermogen, DC-spanning en -stroom per string, AC-spanning, frequentie, temperatuur, en energieopbrengst (vandaag, deze maand, totaal).
- Werkmodus wijzigen — Schakel tussen werkingsmodi zoals Volt-Watt, Volt-VAr, Fixed power factor en meer.
- Kloksynchronisatie — De interne klok van de omvormer wordt automatisch gesynchroniseerd via NTP, zodat de tijdregistratie altijd klopt.
- Status monitoring — Binaire sensoren voor werkstatus (normaal, initialiseren, grid off, fout, standby, derating, limitating, grid surge, fan fault).
Waarschuwingen en aandachtspunten
⚠️ Flashen is onomkeerbaar risicovol — Het schrijven naar het flashgeheugen kan het apparaat permanent beschadigen. Maak altijd eerst een back-up van de originele firmware.
⚠️ SolisCloud verliest verbinding — Na het flashen stuurt de stick geen data meer naar SolisCloud. Je kunt de originele firmware later terugzetten als je een back-up hebt gemaakt.
⚠️ Gebruik een goede seriële adapter — Een FTDI FT232RL USB-serieel adapter wordt aanbevolen. Andere adapters kunnen problemen hebben met de benodigde hoge overdrachtssnelheid.
⚠️ Hardware watchdog — Sinds eind 2022 bevatten nieuwere S3-sticks een hardware watchdog. Herkenbaar aan de silkscreen ‘22.34’ op de printplaat.
⚠️ Installateursverantwoordelijkheid — Deze aanpassing valt buiten de garantie van Solis. Wees je ervan bewust dat je de stick op eigen risico wijzigt.








1 Comment