Skip to content

Feature: Native SolaX Modbus support for Growatt MIN (TOU control via solax_modbus) #92

Description

@johanzander

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:

  1. Sensor discovery: Uses entity registry platform field (solax_modbus) to find sensors, mapped via unique_id suffixes to BESS sensor keys
  2. TOU control: Writes all 9 slots via select.select_option + button.press — same logic as GrowattMinController, different API calls
  3. Time rounding: Round times to 5-minute boundaries
  4. 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

  1. Does the automation work reliably with only 1 TOU slot, or wouldn't it be better to use all 9?
  2. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bot-analyzedTriage bot has processed this issueenhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions