Overview
This issue tracks native BESS support for controlling a Growatt MIN inverter via the homeassistant-solax-modbus integration — as an alternative to the official growatt_server cloud integration.
Background
Some users run Growatt inverters (e.g. Growatt MIN) locally via Modbus using the solax_modbus HACS integration instead of the official growatt_server cloud integration. This avoids cloud dependency and gives local control.
A community user has proven this works via a manual HA automation that bridges BESS → solax_modbus. The automation works but has limitations (described below), and ideally, BESS would have native support, making the automation script unnecessary.
How the current workaround automation works
The automation listens for growatt_server.update_time_segment service calls from BESS, then translates them to solax_modbus entity writes:
Only handles slot 1 of 9 available TOU slots — the rest of BESS's schedule is discarded.
For each slot, 5 entity operations are performed:
select.*_time_N_active → Enabled/Disabled
select.*_time_N_begin → HH:MM (rounded to 5-min boundary)
select.*_time_N_end → HH:MM
select.*_time_N_mode → Battery First / Load First / Grid First
button.*_time_N_update → commits to inverter
What solax_modbus provides for Growatt
The plugin_growatt.py in solax_modbus exposes 9 TOU time slots via HA entities — same concept as growatt_server, just different entity types.
Important: VPP (remotecontrol_*) entities are SolaX-native only — they do not exist for Growatt inverters in solax_modbus. The correct mechanism for Growatt is TOU slots.
Proposed native BESS implementation
Add a GrowattSolaxModbusController that:
- Sensor discovery: Uses entity registry platform field (
solax_modbus) to find sensors, mapped via unique_id suffixes to BESS sensor keys
- TOU control: Writes all 9 slots via
select.select_option + button.press — same logic as GrowattMinController, different API calls
- Time rounding: Round times to 5-minute boundaries
- Config: Add
inverter.platform: growatt_solax_modbus option
Sensor mapping (known)
| unique_id suffix |
BESS sensor key |
| battery_capacity |
battery_soc |
| battery_charge_power |
battery_charge_power |
| battery_discharge_power |
battery_discharge_power |
| import_power |
import_power |
| export_power |
export_power |
| total_load_power |
local_load_power |
| pv_power_1 |
pv_power |
| battery_input_energy_total |
lifetime_battery_charged |
| battery_output_energy_total |
lifetime_battery_discharged |
Questions for the community
- Does the automation work reliably with only 1 TOU slot, or wouldn't it be better to use all 9?
- How does the inverter handle adjacent slots where end of slot N equals begin of slot N+1? (e.g. slot 1: 00:00–00:15, slot 2: 00:15–00:30) — is the end time inclusive or exclusive?
Related
Overview
This issue tracks native BESS support for controlling a Growatt MIN inverter via the homeassistant-solax-modbus integration — as an alternative to the official
growatt_servercloud integration.Background
Some users run Growatt inverters (e.g. Growatt MIN) locally via Modbus using the
solax_modbusHACS integration instead of the officialgrowatt_servercloud integration. This avoids cloud dependency and gives local control.A community user has proven this works via a manual HA automation that bridges BESS → solax_modbus. The automation works but has limitations (described below), and ideally, BESS would have native support, making the automation script unnecessary.
How the current workaround automation works
The automation listens for
growatt_server.update_time_segmentservice calls from BESS, then translates them to solax_modbus entity writes:Only handles slot 1 of 9 available TOU slots — the rest of BESS's schedule is discarded.
For each slot, 5 entity operations are performed:
select.*_time_N_active→ Enabled/Disabledselect.*_time_N_begin→ HH:MM (rounded to 5-min boundary)select.*_time_N_end→ HH:MMselect.*_time_N_mode→ Battery First / Load First / Grid Firstbutton.*_time_N_update→ commits to inverterWhat solax_modbus provides for Growatt
The
plugin_growatt.pyin solax_modbus exposes 9 TOU time slots via HA entities — same concept asgrowatt_server, just different entity types.Proposed native BESS implementation
Add a
GrowattSolaxModbusControllerthat:solax_modbus) to find sensors, mapped viaunique_idsuffixes to BESS sensor keysselect.select_option+button.press— same logic asGrowattMinController, different API callsinverter.platform: growatt_solax_modbusoptionSensor mapping (known)
Questions for the community
Related