- Battery cycle support:
- Native cycle counter sensor via register
34003fora,d, ande_v3. - Calculated cycle sensor (
battery_cycle_count_calc) for all device profiles (a,d,e_v3,e_v12) based ontotal_discharging_energy / battery_total_energy.
- Sensor setup in
sensor.pyrefactored to a compact grouped entity creation loop. - Cycle sensor translation labels aligned across locales and naming simplified (
Cycle Count/Cycle Count (Calc)).
- Per-field schedule support: split packed schedule blocks into individual registers and expose
schedule_1..6as separate entities (*_days,*_start,*_end,*_mode,*_enabled) in the register maps fora.yaml,d.yaml,e_v3.yamlande_v12.yaml.
- Schedule entities set to
category: configandscan_interval: very_low(default 300s); README updated with schedule rows and notes about HHMM time input and day-selection limitations. - Device-specific
schedule_*_modelimits applied (A / E-v3: -2500..2500 W, D: -2200..2200 W). - Load YAML register definitions off the Home Assistant event loop to avoid blocking (async-safe coordinator changes).
- Decoding and signed
int16handling for schedule mode values and writes improved.
- Schedule support: read/write packed schedule blocks (6 schedules × 5 registers) exposed as aggregated sensors with enriched attributes and enable switches.
- Expose raw schedule registers in entity attributes for easier debugging.
- Translations for schedule sensors added (en/nl/de).
- Avoid blocking YAML I/O on the Home Assistant event loop when loading register definitions.
- Sensor state for schedules now represents the enabled flag; full decoded schedule is available in attributes (days_list, start_time, end_time, mode, power, enabled_bool, raw).
- Modbus client returns raw register lists for schedule blocks; coordinator persists raw + decoded attrs; sensor performs decoding and formatting.
- Handle signed int16 mode values correctly when writing schedules (two's-complement conversion).
- Fixed import/indentation issues and improved debug logging for Modbus reads/writes.
- Config flow: Unit ID is now a plain input field, with validation and error handling.
- Config flow now asks for device version (v1/v2 or v3) during setup so the integration can load the correct register map at runtime.
- Per-version register modules:
registers_v12.py(v1/v2) andregisters_v3.py(v3). The integration selects the right definitions based on the chosen version.
- Options flow: removed deprecated explicit
config_entryassignment (compatibility with HA 2025.12). - Modbus client: properly handle CancelledError during shutdown; guard reconnection and client recreation to avoid NoneType errors and noisy ERROR logs on stop/reload.
- Efficiency sensors: skip calculations when denominators are zero or required inputs are missing to avoid division-by-zero errors.
- Energy sensors: ensure
state_classis set tototalortotal_increasingfor sensors withdevice_class: energy.
registers_v3.pyis generated from CSV mapping; entries are untested and require manual verification on v3 hardware before production use.
- Configurable scan intervals (high, medium, low, very_low) through integration options.
- Options flow with translated titles and descriptions.
- Coordinator now dynamically adjusts polling interval based on the lowest configured scan interval.
- Corrected calculation of Actual Conversion Efficiency to properly handle charging vs discharging, avoiding efficiencies above 100%.
- Properly handle Modbus client closing when disabling the integration.
- Correctly apply updated polling intervals after options are changed.
- New
Actual Conversion Efficiencycalculated sensor to display the real-time charging/discharging efficiency as a percentage.
- Fixed proper closing of Modbus connections when disabling and enabling entities, preventing multiple open sessions.
- Corrected state class for stored energy sensors to match energy device class requirements.
- Corrected calculation of Actual Conversion Efficiency to properly handle charging vs discharging, avoiding efficiencies above 100%.
- Corrected scaling for
Numberentities, ensuringmin,max, and current values reflect the defined scale. - Updated logging to include scale and unit when values are updated in Home Assistant.
- Switch writing fixed and now implemented with optimistic mode to handle delayed device response.
- Fixed PyModbus 3.x / Python 3.9 compatibility: replaced slave with device_id.
- Dependency keys registration so required values are always fetched even if disabled in Home Assistant.
- Polling now handled centrally via the DataUpdateCoordinator.
- Dynamic polling intervals based on sensor definitions and dependencies.
- Calculated sensors (Round-Trip Efficiency Total, Round-Trip Efficiency Monthly, Stored Energy) with dependency handling
- Improved logging for dependency mapping, calculation, and skipping disabled entities.
- Cleaned up and refactored sensor calculation logic to be reusable and PEP8 compliant.
- New Min Cell Voltage sensor (register 35043) to monitor minimum battery cell voltage
- New Max Cell Voltage sensor (register 36943) to monitor maximum battery cell voltage
- New Reset Device button (register 41000) to allow resetting the battery management system via Home Assistant
- Clean up code and improve overall code quality
- WiFi strength sensor now reports correct negative dBm values
- Corrected cell temperature reading after BMS firmware version 213
- New WiFi status sensor (register 30300): 0 = Disconnected, 1 = Connected
- New Cloud status sensor (register 30302): 0 = Disconnected, 1 = Connected
- New WiFi signal strength sensor (register 30303), value in dBm
- Fully asynchronous operation for optimal performance and responsiveness
- Background sensor update functionality temporarily disabled (to be resolved later)
- New
Charge to SOCselect entity - New
Discharge Limit Modesensor - New 'Cutoff to SOC' number entities for charge and discharge
- Improved error handling for incorrect count of received bytes during Modbus communication
- Added validation to ensure the returned Modbus register matches the requested address and expected byte length
- New fault sensor combining grid fault bits from register 36100
- Grid Status sensor with decoded standard options from register 44100
- Support for
scan_intervalper sensor inSENSOR_DEFINITIONS - Support for Modbus connection
timeoutandmessage_wait_milliseconds - Background polling for data needed by derived sensors (e.g. SOC, Energy)
- New efficiency sensors: Round-Trip Efficiency (monthly, total) and Stored Energy, calculated from other register values
- Improved polling interval resolution using fastest required scan rate
- Entities now correctly register under a device in Home Assistant
- Select entity replaces Force Charge/Discharge Mode switches (42010)
- Improved error handling with specific Modbus connection error messages
- Universal handling of Modbus types (uint16, int32, char)
- All entity types now support
enabled_by_defaultflag
- TypeError when writing to registers (fixed incorrect
register=argument) - Translation loading and fallback for config flow error messages
enabled_by_default: falseset for all sensors except key ones (e.g. voltage, current, SOC)- Example Lovelace dashboard added to the integration folder
- Support for Modbus
int32andcharregister types
- Select, Number, and Switch entities now implement
async_update()and reflect real device state - Improved state mapping for sensors using
statesdictionary
- Correct mapping of 'Trade Mode' (value 2) in select register
- All switch and number entities now generate truly unique IDs per integration instance
- Combined alarm sensor decoding multiple alarm bits into one entity
- Support for
chartype registers with proper string decoding - Improved sensor state mapping with
statesdictionary
- Fixed sensor registration to avoid duplicate unique IDs
- Corrected
read_registerto properly handleint32andchartypes
- Initial release with basic sensor and switch support
- Support for Modbus int16 and uint16 registers
- Basic configuration and polling
- Updated documentation and improved code structure