A Home Assistant custom integration for controlling StormAudio Immersive Sound Processors via TCP/IP.
Works on StormAudio, Focal, and Bryston Audio
Note that this integration was 100% vibe coded using anthropic/claude and based on the protocols laid out in https://www.stormaudio.com/wp-content/uploads/2024/10/Stormaudio_isp_tcpip_api_protocol_fw4.6r1_v23.pdf
-
Full Media Player Control
- Power on/off with boot sequence detection
- Volume control (slider and up/down buttons)
- Mute/unmute
- Input source selection
- Real-time status updates
-
Automatic Network Discovery
- Scans local network for StormAudio devices during setup
- Manual configuration option available
-
Enhanced Power-On Handling
- Automatic polling during device boot-up
- Detects when processor is fully operational
- Handles 30+ second boot sequences
-
External Change Detection
- 10-second polling interval for remote control changes
- Manual refresh service available
- Real-time status synchronization
This integration supports StormAudio Immersive Sound Processors running firmware 4.6r1 or later, including:
- StormAudio ISP series
- Focal Astral 16
- Bryston SP4
- Other StormAudio-based processors
- Open HACS in Home Assistant
- Go to "Integrations"
- Click the three dots in the top right and select "Custom repositories"
- Add this repository URL and select "Integration" as the category
- Click "Install"
- Restart Home Assistant
- Copy the
custom_components/stormaudiofolder to your Home Assistantconfig/custom_components/directory - Restart Home Assistant
- Go to Settings → Devices & Services → Integrations
- Click "+ Add Integration"
- Search for "StormAudio"
- Follow the setup wizard:
- Automatic Discovery: Select your device from the list of discovered devices
- Manual Configuration: Enter IP address, port (default: 23), and device name
| Option | Default | Description |
|---|---|---|
| Host | Required | IP address of your StormAudio device |
| Port | 23 | TCP port (Telnet) |
| Name | StormAudio | Friendly name for the device |
Once configured, the integration creates a media player entity with the following controls:
- Power: Turn device on/off
- Volume: Adjust volume level (-100dB to 0dB)
- Mute: Mute/unmute audio
- Source: Select input source (HDMI, Optical, AES, etc.)
Manually refresh the device status. Useful for immediately detecting external changes.
service: stormaudio.refresh_statusExample automation to refresh status when you suspect changes:
automation:
- alias: "Refresh StormAudio Status"
trigger:
- platform: state
entity_id: remote.harmony_hub
to: "on"
action:
- service: stormaudio.refresh_statusWhen powering on the device:
- Sends power-on command to StormAudio
- Begins enhanced polling every 2 seconds
- Monitors both power state and processor state
- Continues until processor shows fully operational (state 2)
- Automatically returns to normal 10-second polling
This ensures the UI correctly reflects the device state even during the 30+ second boot sequence.
The integration polls the device every 10 seconds to detect changes made via:
- Physical remote control
- Front panel controls
- Other control systems
- Mobile apps
For immediate updates, use the stormaudio.refresh_status service.
Check connection: Ensure your StormAudio device is powered on and network accessible:
telnet [device_ip] 23Check IP address: Verify the correct IP address is configured in the integration settings.
Check firewall: Ensure port 23 (Telnet) is not blocked between Home Assistant and StormAudio.
Wait for boot sequence: The device takes 30+ seconds to fully boot. The integration will automatically detect when ready.
Manual refresh: Use the stormaudio.refresh_status service to force an immediate status check.
Check logs: Enable debug logging to see status updates:
logger:
logs:
custom_components.stormaudio: debugEnsure your Home Assistant version supports MediaPlayerEntityFeature.VOLUME_SET. The integration requires Home Assistant 2023.8 or later.
Verify your inputs are configured in the StormAudio device web interface. The integration automatically detects available inputs from the device.
To enable detailed debug logging:
logger:
logs:
custom_components.stormaudio: debugThis will log:
- All commands sent to StormAudio
- All responses received
- Status parsing details
- Connection events
- Power-on sequence progress
The integration uses the StormAudio TCP/IP API protocol:
- Port: 23 (Telnet)
- Command format: ASCII strings terminated with
\n(LF) - Response format:
ssp.parameter.[value]
- Normal operation: 10-second intervals
- Power-on sequence: 2-second intervals for up to 30 seconds
- Manual refresh: Immediate via service call
The integration implements the following StormAudio commands:
ssp.power.on/off- Power controlssp.vol.[value]- Volume setssp.vol.up/down- Volume adjustssp.mute.on/off- Mute controlssp.input.[value]- Input selectionssp.power- Query power statessp.procstate- Query processor state
- Input list is currently static (Apple TV, Video Game, HDMI 3). Future versions will dynamically parse from device.
- Preset selection not yet implemented
- Zone control not yet implemented
- Advanced audio settings (bass, treble, etc.) not yet exposed
- Protocol documentation: StormAudio TCP/IP API
- Developed for Home Assistant community
This integration is provided as-is for use with StormAudio devices.
For issues and feature requests, please use the GitHub issue tracker.
- Initial release
- Basic media player functionality
- Network discovery
- Power-on sequence handling
- External change detection
- Manual refresh service