AlphaESS inverter integration for Home Assistant via Modbus TCP, packaged for HACS.
- Install via HACS, then add the integration from Settings -> Devices & Services.
- This integration now uses an internal static Python entity registry and does not require external package YAML files.
- If you migrated from legacy package-based setups, remove old
integration_alpha_ess.yamlpackage includes from Home Assistant config.
- UI-based setup with config flow and options flow
- 140+ Modbus-backed sensor entities plus computed entities
- Number/select/switch/button/time helper entities for dispatch and schedule control
- Configurable polling profile (
slow/medium/fast) for RS485 and TCP users - Automatic slower diagnostic polling cadence based on selected polling profile
- Built-in SMILE-B3/B3-PLUS normalization for 12 legacy power sensors
- Local services for dispatch, reset, date/time sync, and period writes
- Optional package extras for utility-meter and legacy dashboard compatibility entities
- Open HACS in Home Assistant.
- Go to HACS -> Integrations -> ⋮ -> Custom repositories.
- Add repository URL:
https://github.com/Poshy163/homeassistant-alphaESS-modbus - Select type Integration and install AlphaESS Modbus.
- Restart Home Assistant.
- Add integration from Settings -> Devices & Services.
- Open the latest GitHub release for this repository.
- Download the asset named
alphaess_modbus-<tag>.zip. - Extract the zip and copy the extracted
alphaess_modbusfolder intoconfig/custom_components/. - Replace the existing
config/custom_components/alphaess_modbusfolder when prompted. - Restart Home Assistant to load the updated integration.
If you used package-era setups from projects.hillviewlodge.ie:
- Remove any Home Assistant include referencing
integration_alpha_ess.yaml. - Remove any local legacy AlphaESS package files that defined duplicate entities/automations.
- Keep using this integration's entities/services directly in your own automations.
Custom components cannot create input_* helpers — those are Home Assistant core
user-managed helpers, not integration entity platforms. The integration replaces them
with native entity platforms. The object ID (slug after the domain) stays the same;
only the domain prefix changes.
Find-and-replace rule: replace input_boolean. → switch., input_number. → number.,
input_select. → select., input_datetime. → time., input_button. → button. for
all alphaess_* entity IDs.
| Old Entity ID | New Entity ID |
|---|---|
input_boolean.alphaess_helper_force_charging |
switch.alphaess_helper_force_charging |
input_boolean.alphaess_helper_force_discharging |
switch.alphaess_helper_force_discharging |
input_boolean.alphaess_helper_force_export |
switch.alphaess_helper_force_export |
input_boolean.alphaess_helper_dispatch |
switch.alphaess_helper_dispatch |
input_boolean.alphaess_helper_excess_export |
switch.alphaess_helper_excess_export |
input_boolean.alphaess_helper_excess_export_pause |
switch.alphaess_helper_excess_export_pause |
| Old Entity ID | New Entity ID |
|---|---|
input_number.alphaess_helper_charging_cutoff_soc |
number.alphaess_helper_charging_cutoff_soc |
input_number.alphaess_helper_discharging_cutoff_soc |
number.alphaess_helper_discharging_cutoff_soc |
input_number.alphaess_helper_max_feed_to_grid |
number.alphaess_helper_max_feed_to_grid |
input_number.alphaess_template_force_charging_power |
number.alphaess_template_force_charging_power |
input_number.alphaess_helper_force_charging_duration |
number.alphaess_helper_force_charging_duration |
input_number.alphaess_helper_force_charging_cutoff_soc |
number.alphaess_helper_force_charging_cutoff_soc |
input_number.alphaess_template_force_discharging_power |
number.alphaess_template_force_discharging_power |
input_number.alphaess_helper_force_discharging_duration |
number.alphaess_helper_force_discharging_duration |
input_number.alphaess_helper_force_discharging_cutoff_soc |
number.alphaess_helper_force_discharging_cutoff_soc |
input_number.alphaess_template_force_export_power |
number.alphaess_template_force_export_power |
input_number.alphaess_helper_force_export_duration |
number.alphaess_helper_force_export_duration |
input_number.alphaess_helper_force_export_cutoff_soc |
number.alphaess_helper_force_export_cutoff_soc |
input_number.alphaess_template_dispatch_power |
number.alphaess_template_dispatch_power |
input_number.alphaess_helper_dispatch_duration |
number.alphaess_helper_dispatch_duration |
input_number.alphaess_helper_dispatch_cutoff_soc |
number.alphaess_helper_dispatch_cutoff_soc |
| Old Entity ID | New Entity ID |
|---|---|
input_select.alphaess_helper_charging_discharging_settings |
select.alphaess_helper_charging_discharging_settings |
input_select.alphaess_helper_dispatch_mode |
select.alphaess_helper_dispatch_mode |
input_select.alphaess_helper_inverter_ac_limit |
select.alphaess_helper_inverter_ac_limit |
| Old Entity ID | New Entity ID |
|---|---|
input_datetime.alphaess_helper_charging_period_1_start |
time.alphaess_helper_charging_period_1_start |
input_datetime.alphaess_helper_charging_period_1_stop |
time.alphaess_helper_charging_period_1_stop |
input_datetime.alphaess_helper_charging_period_2_start |
time.alphaess_helper_charging_period_2_start |
input_datetime.alphaess_helper_charging_period_2_stop |
time.alphaess_helper_charging_period_2_stop |
input_datetime.alphaess_helper_discharging_period_1_start |
time.alphaess_helper_discharging_period_1_start |
input_datetime.alphaess_helper_discharging_period_1_stop |
time.alphaess_helper_discharging_period_1_stop |
input_datetime.alphaess_helper_discharging_period_2_start |
time.alphaess_helper_discharging_period_2_start |
input_datetime.alphaess_helper_discharging_period_2_stop |
time.alphaess_helper_discharging_period_2_stop |
| Old Entity ID | New Entity ID |
|---|---|
input_button.alphaess_helper_dispatch_reset |
button.alphaess_helper_dispatch_reset |
input_button.alphaess_helper_dispatch_reset_full |
button.alphaess_helper_dispatch_reset_full |
input_button.alphaess_helper_synchronise_date_time |
button.alphaess_helper_synchronise_date_time |
Package-era timer.* entities have no direct counterpart domain in custom
components. The integration now provides dispatch time-remaining sensors instead:
| Old Entity ID | New Entity ID |
|---|---|
timer.alphaess_force_charging |
sensor.alphaess_force_charging_time_remaining |
timer.alphaess_force_discharging |
sensor.alphaess_force_discharging_time_remaining |
timer.alphaess_force_export |
sensor.alphaess_force_export_time_remaining |
timer.alphaess_dispatch |
sensor.alphaess_dispatch_time_remaining |
timer.alphaess_excess_export |
sensor.alphaess_excess_export_time_remaining |
These sensors show remaining time in minutes (0 when idle) and update each polling cycle. Timer state is in-memory; it resets if Home Assistant restarts while a dispatch is active.
If your dashboard still references old package-era today_s_* sensors, include
custom_components/alphaess_modbus/packages_extras.yaml in Home Assistant packages.
It now provides legacy
compatibility aliases with the same entity IDs, including:
sensor.alphaess_total_energy_from_pv_metersensor.alphaess_today_s_energy_from_pvsensor.alphaess_today_s_energy_consumption_from_grid_metersensor.alphaess_today_s_energy_feed_to_grid_metersensor.alphaess_today_s_energy_charge_batterysensor.alphaess_today_s_energy_discharge_batterysensor.alphaess_today_s_energy_from_pv_metersensor.alphaess_today_s_house_load
Example configuration.yaml snippet:
homeassistant:
packages:
alphaess_extras: !include custom_components/alphaess_modbus/packages_extras.yamlOne ready-to-use dashboard file is included:
alphaess_view.yaml: full dashboard config (containstitle+views)
Paste it into the dashboard-level raw config editor.
Both files are already aligned to integration-native entities (switch/number/select/time/button) and do not require legacy input_* helpers.
If your Logbook is noisy from frequent state changes, add this to your
configuration.yaml:
logbook:
exclude:
entities:
- sensor.alphaess_system_time
- automation.alphaess_excess_export- Axel Koegler (SaaX-IRL) for original AlphaESS Modbus register research and documentation.