Releases: rsnodgrass/hass-xantech
v0.3.2
Fix: MRAUDIO8x8 source selection and command failures
Problem
All commands (source selection, volume, power, etc.) failed silently on Xantech MRAUDIO8x8 amplifiers. The root cause was a zone ID mismatch between two layers:
- Config flow defaults suggested zone IDs
11-18for all xantech8 models - pyxantech only validated against primary zones
1-8for xantech8, rejecting11-18withValueError
Because the integration uses optimistic state updates, the errors were swallowed — the UI appeared to work but no RS232 commands were actually sent to the amplifier.
Other xantech8 models (MRC88, MX88) were less affected because users with those models often entered zones matching pyxantech's expected format.
flowchart LR
A[Config flow defaults<br/>zones 11-18] --> B[pyxantech validates<br/>zones 1-8 only]
B --> C[ValueError: Invalid zone 11]
C --> D[Commands fail silently<br/>optimistic state masks it]Fix
pyxantech v0.10.7 (upstream dependency):
- New
_get_valid_zones()merges primaryzoneswithalternative_zonesfrom device config - All 8 command functions now accept both zone ID formats
- xantech8 now validates against the full set:
1-8,11-18,21-28,31-38
hass-xantech v0.3.2 (this release):
- Config flow and options flow now validate entered zone IDs against pyxantech's device config
- Invalid zone IDs show a clear error instead of silently failing later
- Updated zone step descriptions to explain both formats:
- Two-digit (11-18): Most Xantech models (MRC88, MX88) — first digit is controller unit, second is zone
- Single-digit (1-8): Standalone MRAUDIO8x8 units
- Defaults remain
11-18since most users have newer multi-unit models
Dependencies
- Requires pyxantech >= 0.10.7 — release notes
v0.3.1
Bug Fixes
- Fix options flow
config_entryattribute storage- Changed
self.config_entry = config_entrytoself._config_entry = config_entry - HA's OptionsFlow base class has
config_entryas a property that reads from_config_entry
- Changed
- Bump pyxantech to v0.10.5 which fixes the DAX88 treble command format string
Testing & Quality
- Add test to verify
XantechOptionsFlowstores config_entry correctly - Update test fixtures for newer Home Assistant versions
- Add mypy type checking to pre-commit hooks
- Add pytest to pre-commit hooks to run tests before every commit
v0.3.0 - Advanced Audio Controls
New Features
Optional Bass, Treble & Balance Controls
- New setting: "Enable advanced audio controls" in the zone configuration step
- When enabled, creates number entities for each zone with slider controls:
- Bass adjustment
- Treble adjustment
- Balance (left/right) adjustment
- Device-aware: Only creates controls for devices that support them
- Most Xantech, Monoprice, and Sonance devices support all three
- ZPR68-10 series only supports bass and treble (no balance control in protocol)
- Device-specific ranges: Control limits (min/max values) are loaded from the device configuration
Improved Options Flow
- Merged "Features" step into the zones configuration step for a more streamlined setup experience
- Reduced total setup steps from 4 to 3
Requirements
- Home Assistant 2025.2.0 or newer
- pyxantech >= 0.10.4 (includes device capability flags)
Notes
- The advanced audio controls are disabled by default to avoid polluting the entity database
- Existing installations can enable the feature via the integration's Options menu
v0.2.6
What's New
Bug Fixes
- Fixed
sonanceamp type key tosonance6(matches pyxantech library) - Fixed DAX88 default sources to show all 8 inputs instead of 4
UI Improvements
- Amp type selector now shows radio buttons with descriptive labels listing all supported models:
- xantech8: MRC88, MX88, MRAUDIO8X8
- monoprice6: MPR-SG6Z, DAX66, WS66i
- dax88: Dayton Audio DAX88 (6+2 Zone)
- sonance6: C4630 SE, 875D MKII
- Implemented optimistic updates for instant UI feedback on power, volume, mute, and source changes (fixes slow UI response)
- Fixed rapid-click handling to prevent UI flicker when toggling power quickly
New Features
- Options flow: Edit configuration after initial setup:
- Polling interval
- Connection settings (serial port or socket URL)
- Zone names
- Source names
This allows existing users to add more sources or rename zones without re-adding the integration.
v0.2.1 - Config Flow UX Improvements
What's New
Improved config flow user experience:
- Action-oriented step titles (Name Your Zones, Name Your Audio Sources)
- Realistic default room/source names (Living Room, Kitchen, TV, Streaming)
- Explained Xantech zone ID numbering convention
- Added model numbers to amplifier type dropdown
- Better error messages with examples
No breaking changes - existing configurations will continue to work.
Compatibility
- Home Assistant: 2025.2.0+
- Python: 3.13+
0.2.5
Changes
- DAX88 default zones now correctly set to 11-18
- Requires pyxantech>=0.10.3 which fixes:
- RateLimitException bug causing cascading timeouts
- ZoneStatus.dict returning raw strings instead of converted bools/ints (broke power status)
- Added docstring documenting expected types from pyxantech
Bug Fixes
This release addresses timeout errors and power status issues reported by DAX88 users after upgrading to 0.2.2/0.2.3.
v0.2.2
What's Changed
Bug Fixes
- Requires pyxantech 0.10.0 which fixes
AttributeError: 'NoneType' object has no attribute 'groupdict'when amplifier returns unexpected response format for zone status queries
Upgrade
Update via HACS or manually replace the custom_components/xantech folder.
v0.2.0 - Home Assistant 2025.2+ Modernization
What's New
- Modernize to Home Assistant 2025.2+ standards
- Add DataUpdateCoordinator pattern
- Update Python 3.13+ type hints and async patterns
- Add diagnostics support
- Add comprehensive test suite
- Fix ruff lint errors
Compatibility
- Home Assistant: 2025.2.0+
- Python: 3.13+
0.1.3
Bump version to 0.1.3 to see if this will trigger pyxantech 0.8.1 to download for users that have
been having problems.
https://community.home-assistant.io/t/xantech-dayton-audio-sonance-multi-zone-amps/450908/141
0.1.2
- pickup pyxantech changes to reduce min time between commands from 400ms to 50ms (allows sending multiple commands faster)