homebridge-ring-hksv 14.3.1 → 14.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/README.md +35 -46
- package/config.schema.json +6 -0
- package/lib/ring-platform.js +12 -7
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# homebridge-ring-hksv
|
|
2
|
+
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Add `homeKitAccessoryTag` to append a custom tag to Ring accessory names and generated HomeKit identities. This helps expose the same physical camera/accessory as a distinct HomeKit device for debugging or multi-home testing.
|
|
8
|
+
|
|
9
|
+
## 14.3.2
|
|
10
|
+
|
|
11
|
+
### Main Changes
|
|
12
|
+
|
|
13
|
+
- [`b9dbe7e`](https://github.com/dgreif/ring/commit/b9dbe7e) Thanks [@dgreif](https://github.com/dgreif)! - This is the first version of homebridge-ring-hksv, which is a fork of homebridge-ring with support for HomeKit Secure Video (HKSV).
|
|
14
|
+
|
|
1
15
|
# homebridge-ring
|
|
2
16
|
|
|
3
17
|
## 14.3.0
|
package/README.md
CHANGED
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
[](https://plugins.hoobs.org/plugin/homebridge-ring-hksv)
|
|
11
11
|
[](https://buymeacoffee.com/trinityhades)
|
|
12
12
|
|
|
13
|
-
# homebridge-ring-hksv
|
|
14
13
|
|
|
15
14
|
`homebridge-ring-hksv` is a Homebridge platform plugin for Ring devices, with HomeKit Secure Video (HKSV) support.
|
|
16
15
|
|
|
@@ -18,40 +17,27 @@
|
|
|
18
17
|
|
|
19
18
|
This project is based on Dustin Greif's original Ring Homebridge ecosystem:
|
|
20
19
|
|
|
21
|
-
- Upstream plugin:
|
|
22
|
-
- Upstream API library:
|
|
20
|
+
- Upstream plugin: [dgreif/homebridge-ring](https://github.com/dgreif/homebridge-ring)
|
|
21
|
+
- Upstream API library: [dgreif/ring-client-api](https://github.com/dgreif/ring-client-api)
|
|
23
22
|
|
|
24
23
|
Big thanks to Dustin and all upstream contributors. This fork reuses and extends that foundation.
|
|
25
24
|
|
|
26
|
-
##
|
|
27
|
-
|
|
28
|
-
This plugin integrates Ring locations and devices into HomeKit via Homebridge, including:
|
|
29
|
-
|
|
30
|
-
- Ring cameras and doorbells
|
|
31
|
-
- Ring Alarm devices and sensors
|
|
32
|
-
- Ring chimes and intercoms
|
|
33
|
-
- Ring Smart Lighting and supported alarm-connected devices
|
|
34
|
-
- Thermostats, locks, outlets/switches, valves, and other supported accessory types
|
|
35
|
-
|
|
36
|
-
It also introduces HKSV-focused controls such as:
|
|
37
|
-
|
|
38
|
-
- `enableHksv`
|
|
39
|
-
- `disableHksvOnBattery`
|
|
40
|
-
- `hksvPrebufferLengthMs`
|
|
41
|
-
- `hksvFragmentLengthMs`
|
|
42
|
-
- `hksvMaxRecordingSeconds`
|
|
43
|
-
|
|
44
|
-
## How This Fork Differs From Upstream
|
|
25
|
+
## Important Plugin Options
|
|
45
26
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
27
|
+
| Option | Purpose |
|
|
28
|
+
| --- | --- |
|
|
29
|
+
| `enableHksv` | Enables experimental HKSV support for eligible cameras |
|
|
30
|
+
| `disableHksvOnBattery` | Disables HKSV on battery cameras to reduce battery/network usage |
|
|
31
|
+
| `hksvPrebufferLengthMs` | HKSV prebuffer duration (minimum 4000ms) |
|
|
32
|
+
| `hksvFragmentLengthMs` | HKSV fragment duration target |
|
|
33
|
+
| `hksvMaxRecordingSeconds` | Optional safety cap for a recording session |
|
|
34
|
+
| `homeKitAccessoryTag` | Appends a tag to accessory names and HomeKit IDs so the same Ring device can be exposed as a distinct HomeKit accessory for debugging/testing |
|
|
35
|
+
| `cameraVideoCodec` | Preferred H.264 encoder (`h264_videotoolbox` or `libx264`) |
|
|
36
|
+
| `hideDoorbellSwitch` / `hideCameraMotionSensor` / `hideCameraSirenSwitch` | Hides specific HomeKit-exposed services |
|
|
37
|
+
| `showPanicButtons` | Adds panic switches (use with caution) |
|
|
38
|
+
| `ffmpegPath` | Override FFmpeg binary path |
|
|
39
|
+
| `debug` | Enables additional logging |
|
|
40
|
+
| `disableLogs` | Disables plugin logging |
|
|
55
41
|
|
|
56
42
|
## Installation
|
|
57
43
|
|
|
@@ -76,36 +62,39 @@ Add a platform block with your Ring refresh token:
|
|
|
76
62
|
|
|
77
63
|
```json
|
|
78
64
|
{
|
|
79
|
-
"platform": "
|
|
65
|
+
"platform": "Homebridge Ring HKSV",
|
|
80
66
|
"refreshToken": "your-refresh-token"
|
|
81
67
|
}
|
|
82
68
|
```
|
|
83
69
|
|
|
84
|
-
|
|
70
|
+
If you need Home app to treat the same physical Ring device as a different HomeKit accessory, add a `homeKitAccessoryTag`:
|
|
85
71
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
| `showPanicButtons` | Adds panic switches (use with caution) |
|
|
96
|
-
| `ffmpegPath` | Override FFmpeg binary path |
|
|
97
|
-
| `debug` | Enables additional logging |
|
|
98
|
-
| `disableLogs` | Disables plugin logging |
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"platform": "Homebridge Ring HKSV",
|
|
75
|
+
"refreshToken": "your-refresh-token",
|
|
76
|
+
"homeKitAccessoryTag": "Debug Home A"
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Changing `homeKitAccessoryTag` updates both the exposed accessory name and the generated HomeKit identity, which changes the advertised MAC-style identifier shown during manual camera pairing.
|
|
99
81
|
|
|
100
82
|
## HKSV Status
|
|
101
83
|
|
|
102
84
|
HKSV support is experimental and actively evolving. Behavior may vary by camera model, wired vs battery power, Ring API changes, and FFmpeg environment.
|
|
103
85
|
|
|
86
|
+
I currently am able to run 3 cameras with HKSV enabled on a Homebridge instance ran on a M4 Mac Mini 32GB of RAM.
|
|
87
|
+
Please report your experience and setup details to help improve support.
|
|
88
|
+
|
|
89
|
+
### Minimum specifications for HKSV:
|
|
90
|
+
[TBD - will be added as more users test and report their setups]
|
|
91
|
+
|
|
104
92
|
## Troubleshooting
|
|
105
93
|
|
|
106
94
|
For support and debugging:
|
|
107
95
|
|
|
108
96
|
- This repository issues: <https://github.com/trinityhades/homebridge-ring-hksv/issues>
|
|
97
|
+
|
|
109
98
|
- Upstream Ring wiki (token/auth/camera references): <https://github.com/dgreif/ring/wiki>
|
|
110
99
|
|
|
111
100
|
## Disclaimer
|
package/config.schema.json
CHANGED
|
@@ -53,6 +53,11 @@
|
|
|
53
53
|
"maximum": 300,
|
|
54
54
|
"description": "Optional safety cap for a single HKSV recording stream duration."
|
|
55
55
|
},
|
|
56
|
+
"homeKitAccessoryTag": {
|
|
57
|
+
"title": "HomeKit Accessory Tag",
|
|
58
|
+
"type": "string",
|
|
59
|
+
"description": "Optional tag appended to Ring accessory names and HomeKit identities. Change this to expose the same Ring devices as distinct accessories in Home app for debugging or multi-home testing."
|
|
60
|
+
},
|
|
56
61
|
"cameraVideoCodec": {
|
|
57
62
|
"title": "Camera Video Codec",
|
|
58
63
|
"type": "string",
|
|
@@ -210,6 +215,7 @@
|
|
|
210
215
|
"hksvPrebufferLengthMs",
|
|
211
216
|
"hksvFragmentLengthMs",
|
|
212
217
|
"hksvMaxRecordingSeconds",
|
|
218
|
+
"homeKitAccessoryTag",
|
|
213
219
|
"cameraVideoCodec",
|
|
214
220
|
"hideLightGroups",
|
|
215
221
|
"hideDoorbellSwitch",
|
package/lib/ring-platform.js
CHANGED
|
@@ -155,7 +155,11 @@ export class RingPlatform {
|
|
|
155
155
|
this.homebridgeAccessories[accessory.UUID] = accessory;
|
|
156
156
|
}
|
|
157
157
|
async connectToApi() {
|
|
158
|
-
const { api, config } = this, systemId = getSystemId(api.user.storagePath()),
|
|
158
|
+
const { api, config } = this, systemId = getSystemId(api.user.storagePath()), configuredHomeKitAccessoryTag = config.homeKitAccessoryTag?.trim(), accessoryIdSuffix = configuredHomeKitAccessoryTag
|
|
159
|
+
? `-${configuredHomeKitAccessoryTag}`
|
|
160
|
+
: '', accessoryNameSuffix = configuredHomeKitAccessoryTag
|
|
161
|
+
? ` (${configuredHomeKitAccessoryTag})`
|
|
162
|
+
: '', ringApi = new RingApi({
|
|
159
163
|
controlCenterDisplayName,
|
|
160
164
|
...config,
|
|
161
165
|
systemId,
|
|
@@ -182,8 +186,9 @@ export class RingPlatform {
|
|
|
182
186
|
isCamera,
|
|
183
187
|
id: device.id.toString() +
|
|
184
188
|
cameraIdDifferentiator +
|
|
185
|
-
cameraIdentitySalt
|
|
186
|
-
|
|
189
|
+
cameraIdentitySalt +
|
|
190
|
+
accessoryIdSuffix,
|
|
191
|
+
name: device.name + accessoryNameSuffix,
|
|
187
192
|
AccessoryClass,
|
|
188
193
|
};
|
|
189
194
|
}), hideDeviceIds = config.hideDeviceIds || [], onlyDeviceTypes = config.onlyDeviceTypes?.length
|
|
@@ -194,8 +199,8 @@ export class RingPlatform {
|
|
|
194
199
|
deviceType: securityPanel.deviceType,
|
|
195
200
|
device: securityPanel,
|
|
196
201
|
isCamera: false,
|
|
197
|
-
id: securityPanel.id.toString() + 'panic',
|
|
198
|
-
name: 'Panic Buttons',
|
|
202
|
+
id: securityPanel.id.toString() + 'panic' + accessoryIdSuffix,
|
|
203
|
+
name: 'Panic Buttons' + accessoryNameSuffix,
|
|
199
204
|
AccessoryClass: PanicButtons,
|
|
200
205
|
});
|
|
201
206
|
}
|
|
@@ -205,8 +210,8 @@ export class RingPlatform {
|
|
|
205
210
|
deviceType: 'location.mode',
|
|
206
211
|
device: location,
|
|
207
212
|
isCamera: false,
|
|
208
|
-
id: location.id + 'mode',
|
|
209
|
-
name: location.name + ' Mode',
|
|
213
|
+
id: location.id + 'mode' + accessoryIdSuffix,
|
|
214
|
+
name: location.name + ' Mode' + accessoryNameSuffix,
|
|
210
215
|
AccessoryClass: LocationModeSwitch,
|
|
211
216
|
});
|
|
212
217
|
}
|
package/package.json
CHANGED