A HACS custom integration for Kidde/Ring smart smoke and CO detectors: the WiFi-only, hubless models that are not supported by the standard Ring integration.
Kidde/Ring smart smoke and CO detectors connect via WiFi and are managed through the Ring app. However, these devices don't work with the standard Ring integration because:
- Real-time alarm state (smoke detected, CO detected) is only available via a WebSocket connection
- The upstream library only creates WebSocket connections when a Ring Alarm hub or Beams bridge is present, but these Kidde detectors work without any hub
- These devices may not appear in the Ring REST API at all: they are only reliably discoverable via WebSocket
This integration establishes its own WebSocket connections that bypass the hub requirement. This approach was discovered by @tsightler and validated by @jbettcher.
| Device | Model |
|---|---|
| Kidde/Ring Smart Smoke Alarm (wired) | Smoke only |
| Kidde/Ring Smart Smoke + CO Alarm (wired) | Smoke + CO |
| Kidde/Ring Smart Smoke + CO Alarm (battery) | Smoke + CO |
Each detector exposes the following Home Assistant entities:
- Smoke:
onwhen smoke is detected (all models) - Carbon Monoxide:
onwhen CO is detected (CO models only)
- Battery: battery level percentage (all models). These detectors report
a categorical battery state (
full,low, and so on) rather than a true percentage, so the level is mapped from that state (full = 100%, low = 20%, none = 0%). The raw state, plus communication and tamper status, are exposed as attributes. A missing or unrecognized state reports unknown, never a fabricated number. - CO level: carbon monoxide level in PPM (CO models only)
- Test button: fires a
testevent when the physical test button on the detector is pressed. Use it in automations via the event entity, or listen forring_smoke_detectors_eventon the event bus.
Entities become unavailable when the WebSocket connection for their location is down, so a connection outage is never mistaken for "no smoke".
Note on test detection: Ring's API does not document the test signal. Detection uses the
alarm.testingimpulse and thepushToTestcomponent observed on real hardware. If pressing the test button does not fire the event on your device, please enable debug logging (see Troubleshooting) and open an issue with the logged payloads.
- Home Assistant 2024.11 or later
- HACS installed
- A Ring account with Kidde/Ring smoke detectors set up in the Ring app
- Open HACS in your Home Assistant instance
- Click the three dots in the top right corner and select Custom repositories
- Paste the URL of this GitHub repository and select Integration as the category
- Click Add
- Find Ring Smoke Detectors in the HACS store and click Install
- Restart Home Assistant
- Download or clone this repository
- Copy the
custom_components/ring_smoke_detectorsfolder into your Home Assistantconfig/custom_components/directory - Restart Home Assistant
- Go to Settings → Devices & Services → Add Integration
- Search for Ring Smoke Detectors
- Enter your Ring email and password
- If prompted, enter your 2FA verification code
- Your devices will be discovered automatically
Your Ring credentials are sent directly to Ring's servers and are not stored. Only the resulting refresh token is saved, and the integration automatically handles token rotation.
- Authentication: OAuth token management with automatic token rotation and persistence
- Location Discovery: Fetches all Ring locations, then probes each one via WebSocket
- WebSocket Connection: Requests a ticket from Ring's
clap/ticketsendpoint and establishes a direct WebSocket connection, even without a Ring hub - Device Discovery: Sends
DeviceInfoDocGetListrequests over the WebSocket to discover devices and their current state - Real-time Updates: Subscribes to
DataUpdatemessages for live alarm state changes (smoke, CO, battery, etc.) - Auto-reconnect: Reconnects with exponential backoff (5s to 60s) on connection loss
- Ensure your Kidde/Ring detectors are set up and online in the Ring app
- Check the Home Assistant logs for discovery messages
- Enable debug logging by adding to
configuration.yaml:logger: logs: custom_components.ring_smoke_detectors: debug
- To share the exact device payload when reporting an issue, go to Settings > Devices & Services > Ring Smoke Detectors, open the three-dot menu, and choose Download diagnostics. Device identifiers and location data are redacted automatically.
The integration automatically rotates and persists refresh tokens. If Ring revokes the token (for example after a password change), Home Assistant will prompt you to re-authenticate; enter your Ring credentials again to reconnect without losing your entities.
The integration automatically reconnects with exponential backoff (5s, 10s, 20s, up to 60s). Check Home Assistant logs for connection status messages.
This integration is based on the discovery work from dgreif/ring#1674:
- @tsightler: Discovered that Kidde smoke detectors can be accessed via WebSocket even without a hub
- @jbettcher: Built the proof-of-concept that validated the WebSocket approach
- @dgreif: Creator of ring-client-api
MIT