v1.9.2-beta.1
Changes since v1.7.2 (all on experimental/task-tracking-ci):
v1.9.2
- Dev tools (scan_registers.py, test_connection.py) moved to tools/ so HACS does not surface them alongside the integration. scan_registers.py now builds its register label map from SENSOR_REGISTERS at runtime - no more drift. test_connection.py now accepts --host, --port, --slave arguments.
v1.9.1
- Removed unused DEFAULT_SCAN_INTERVAL and MODBUS_HUB constants from const.py.
- time.py async_set_value now rolls back the hour register if the minute write fails, preventing the inverter schedule from being left in a half-updated state.
v1.9.0
- Reconnect storm protection: modbus_client tracks consecutive failures and enforces a 10-second backoff after 3 in a row. connect() is guarded by a lock so concurrent callers coalesce.
- Coordinator aborts a cycle early after more than 5 read errors, letting HA backoff handle the retry.
- Number, select, and switch entities expose an available property tied to coordinator.last_update_success - controls go unavailable during outages instead of showing stale data.
v1.8.1
- coordinator.data entries expire after 5x their scan_interval without a successful read - permanently failing registers report unknown instead of a stale value.
- Removed async_request_refresh() from write helpers - no extra round-trips after dispatch writes.
- async_sync_datetime now writes all three time registers in a single write_registers call (atomic, no partial-clock window).
v1.8.0
- Batch contiguous Modbus register reads: adjacent registers (gap <= 4) merged into one read_holding_registers call per cycle, reducing transactions from ~50 to ~10 per poll.
- SOC watcher samples every 2 s (down from 10 s) while a force-discharge/export switch is active.
- Number and select sliders now source their displayed value from live coordinator data rather than cached HA state - reflects changes made via the AlphaESS app immediately after restart.
- Switches no longer look up number/select values by hardcoded entity ID slugs. Values are read from coordinator.numbers / coordinator.selects, which are device-rename-safe and work with multiple inverters.
v1.7.4
- 15 dispatch-parameter ModbusNumberDef entries now have address=None, removing a footgun where a future write_register call could silently clobber live dispatch state.
v1.7.3
- Async tasks tracked with hass.async_create_task - reload mid-dispatch no longer leaks coroutines.
- Raises ConfigEntryNotReady on connect failure so HA retries automatically rather than marking the entry as permanently failed.
- Added hassfest and HACS validation CI workflows.