Skip to content

feat(homebridge-ring): expose Ring Alarm panel volume as a HomeKit slider (opt-in)#1653

Open
salmanesm wants to merge 3 commits into
dgreif:mainfrom
salmanesm:feature/expose-panel-volume
Open

feat(homebridge-ring): expose Ring Alarm panel volume as a HomeKit slider (opt-in)#1653
salmanesm wants to merge 3 commits into
dgreif:mainfrom
salmanesm:feature/expose-panel-volume

Conversation

@salmanesm

@salmanesm salmanesm commented Sep 1, 2025

Copy link
Copy Markdown

Closes #1652

Summary

Expose the Ring Alarm Base Station / Panel volume to HomeKit as a visible slider. This is opt-in and coexists with the existing Speaker/Volume characteristic.

Why

  • Quick volume adjustments from the Home app (no need to open Ring).
  • Enable scenes/automations (e.g., “Night” → quieter chimes).
  • Keep defaults unchanged for users who don’t want the extra tile.

Implementation

  • New accessory: VolumeAccessory
    • Uses Lightbulb service so the slider is prominent.
    • Maps Brightness (0–100)volume (0.0–1.0).
    • On = volume > 0; turning Off sets volume to 0.
    • Subscribes to device.onData to keep HomeKit in sync.
    • Gracefully handles devices without setVolume().
  • Platform wiring: in ring-platform.ts, when exposeAlarmVolume is true, attach VolumeAccessory for devices that have data.volume and setVolume().
  • Config: adds exposeAlarmVolume?: boolean (default false), and reserves volumeService?: 'lightbulb' | 'speaker' for future use.
  • NodeNext-friendly imports: use explicit .ts extensions.

Behavior

  • Default: no changes unless exposeAlarmVolume is enabled.
  • When enabled, a new accessory like “<Panel Name> Volume” appears with a slider.
  • Slider changes affect the device immediately; external volume changes reflect back in HomeKit.

Config example

{
  "platform": "Ring",
  "refreshToken": "<your-token>",
  "exposeAlarmVolume": true
}

…ider (opt-in)

- Add VolumeAccessory mapping HomeKit Brightness (0–100) ↔ Ring volume (0.0–1.0)
- Wire into discovery for devices that support setVolume() and have data.volume
- Gate with config flag (no change unless enabled)
- Use NodeNext-friendly .ts import paths; follow BaseDeviceAccessory pattern

BREAKING CHANGE: none
@dgreif

dgreif commented Feb 1, 2026

Copy link
Copy Markdown
Owner

@salmanesm thanks for the PR. Could you walk me through your use case for adjusting the alarm volume? I generally try to avoid adding new options as they make maintenance and future changes harder. I'd also be cautious of adding this as a lightbulb as it makes certain siri commands more unpredictable (e.g. "turn off all the lights" will now slide your volume to zero 😬).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature: expose Base Station (and Keypad) volume to HomeKit as a dimmer slider

2 participants