homebridge-unifi-protect 6.18.1 → 6.20.0
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/dist/devices/index.d.ts +11 -0
- package/dist/devices/index.js +16 -0
- package/dist/devices/index.js.map +1 -0
- package/dist/{protect-camera-package.js → devices/protect-camera-package.js} +2 -4
- package/dist/devices/protect-camera-package.js.map +1 -0
- package/dist/{protect-camera.d.ts → devices/protect-camera.d.ts} +2 -5
- package/dist/{protect-camera.js → devices/protect-camera.js} +119 -210
- package/dist/devices/protect-camera.js.map +1 -0
- package/dist/{protect-chime.d.ts → devices/protect-chime.d.ts} +4 -1
- package/dist/devices/protect-chime.js +180 -0
- package/dist/devices/protect-chime.js.map +1 -0
- package/dist/{protect-device.d.ts → devices/protect-device.d.ts} +12 -5
- package/dist/{protect-device.js → devices/protect-device.js} +159 -109
- package/dist/devices/protect-device.js.map +1 -0
- package/dist/{protect-doorbell.d.ts → devices/protect-doorbell.d.ts} +1 -1
- package/dist/{protect-doorbell.js → devices/protect-doorbell.js} +50 -83
- package/dist/devices/protect-doorbell.js.map +1 -0
- package/dist/{protect-light.d.ts → devices/protect-light.d.ts} +1 -1
- package/dist/{protect-light.js → devices/protect-light.js} +34 -44
- package/dist/devices/protect-light.js.map +1 -0
- package/dist/{protect-liveviews.d.ts → devices/protect-liveviews.d.ts} +1 -1
- package/dist/{protect-liveviews.js → devices/protect-liveviews.js} +11 -21
- package/dist/devices/protect-liveviews.js.map +1 -0
- package/dist/{protect-nvr-systeminfo.d.ts → devices/protect-nvr-systeminfo.d.ts} +1 -1
- package/dist/{protect-nvr-systeminfo.js → devices/protect-nvr-systeminfo.js} +3 -9
- package/dist/devices/protect-nvr-systeminfo.js.map +1 -0
- package/dist/{protect-securitysystem.d.ts → devices/protect-securitysystem.d.ts} +2 -3
- package/dist/{protect-securitysystem.js → devices/protect-securitysystem.js} +32 -59
- package/dist/devices/protect-securitysystem.js.map +1 -0
- package/dist/{protect-sensor.d.ts → devices/protect-sensor.d.ts} +3 -2
- package/dist/devices/protect-sensor.js +402 -0
- package/dist/devices/protect-sensor.js.map +1 -0
- package/dist/{protect-viewer.d.ts → devices/protect-viewer.d.ts} +1 -1
- package/dist/{protect-viewer.js → devices/protect-viewer.js} +21 -28
- package/dist/devices/protect-viewer.js.map +1 -0
- package/dist/ffmpeg/index.d.ts +6 -0
- package/dist/ffmpeg/index.js +11 -0
- package/dist/ffmpeg/index.js.map +1 -0
- package/dist/{protect-ffmpeg-codecs.d.ts → ffmpeg/protect-ffmpeg-codecs.d.ts} +1 -1
- package/dist/ffmpeg/protect-ffmpeg-codecs.js.map +1 -0
- package/dist/{protect-ffmpeg-exec.d.ts → ffmpeg/protect-ffmpeg-exec.d.ts} +5 -2
- package/dist/{protect-ffmpeg-exec.js → ffmpeg/protect-ffmpeg-exec.js} +13 -1
- package/dist/ffmpeg/protect-ffmpeg-exec.js.map +1 -0
- package/dist/{protect-ffmpeg-options.d.ts → ffmpeg/protect-ffmpeg-options.d.ts} +1 -1
- package/dist/{protect-ffmpeg-options.js → ffmpeg/protect-ffmpeg-options.js} +1 -1
- package/dist/ffmpeg/protect-ffmpeg-options.js.map +1 -0
- package/dist/{protect-ffmpeg-record.d.ts → ffmpeg/protect-ffmpeg-record.d.ts} +1 -1
- package/dist/{protect-ffmpeg-record.js → ffmpeg/protect-ffmpeg-record.js} +7 -3
- package/dist/ffmpeg/protect-ffmpeg-record.js.map +1 -0
- package/dist/{protect-ffmpeg-stream.d.ts → ffmpeg/protect-ffmpeg-stream.d.ts} +1 -1
- package/dist/ffmpeg/protect-ffmpeg-stream.js.map +1 -0
- package/dist/{protect-ffmpeg.d.ts → ffmpeg/protect-ffmpeg.d.ts} +3 -3
- package/dist/ffmpeg/protect-ffmpeg.js.map +1 -0
- package/dist/{protect-nvr-events.d.ts → protect-events.d.ts} +3 -4
- package/dist/{protect-nvr-events.js → protect-events.js} +4 -4
- package/dist/protect-events.js.map +1 -0
- package/dist/protect-mqtt.d.ts +3 -2
- package/dist/protect-mqtt.js +30 -6
- package/dist/protect-mqtt.js.map +1 -1
- package/dist/protect-nvr.d.ts +4 -8
- package/dist/protect-nvr.js +82 -129
- package/dist/protect-nvr.js.map +1 -1
- package/dist/protect-options.js +7 -5
- package/dist/protect-options.js.map +1 -1
- package/dist/protect-platform.d.ts +1 -1
- package/dist/protect-platform.js +1 -1
- package/dist/protect-platform.js.map +1 -1
- package/dist/protect-record.d.ts +4 -2
- package/dist/protect-record.js +37 -34
- package/dist/protect-record.js.map +1 -1
- package/dist/protect-snapshot.d.ts +21 -0
- package/dist/protect-snapshot.js +200 -0
- package/dist/protect-snapshot.js.map +1 -0
- package/dist/protect-stream.d.ts +3 -7
- package/dist/protect-stream.js +7 -86
- package/dist/protect-stream.js.map +1 -1
- package/dist/protect-timeshift.d.ts +3 -2
- package/dist/protect-timeshift.js +31 -30
- package/dist/protect-timeshift.js.map +1 -1
- package/dist/protect-types.d.ts +5 -6
- package/dist/protect-types.js +8 -0
- package/dist/protect-types.js.map +1 -1
- package/dist/settings.d.ts +3 -6
- package/dist/settings.js +6 -12
- package/dist/settings.js.map +1 -1
- package/homebridge-ui/public/index.html +2 -0
- package/package.json +12 -12
- package/dist/protect-camera-package.js.map +0 -1
- package/dist/protect-camera.js.map +0 -1
- package/dist/protect-chime.js +0 -108
- package/dist/protect-chime.js.map +0 -1
- package/dist/protect-device.js.map +0 -1
- package/dist/protect-doorbell.js.map +0 -1
- package/dist/protect-ffmpeg-codecs.js.map +0 -1
- package/dist/protect-ffmpeg-exec.js.map +0 -1
- package/dist/protect-ffmpeg-options.js.map +0 -1
- package/dist/protect-ffmpeg-record.js.map +0 -1
- package/dist/protect-ffmpeg-stream.js.map +0 -1
- package/dist/protect-ffmpeg.js.map +0 -1
- package/dist/protect-light.js.map +0 -1
- package/dist/protect-liveviews.js.map +0 -1
- package/dist/protect-nvr-events.js.map +0 -1
- package/dist/protect-nvr-systeminfo.js.map +0 -1
- package/dist/protect-securitysystem.js.map +0 -1
- package/dist/protect-sensor.js +0 -449
- package/dist/protect-sensor.js.map +0 -1
- package/dist/protect-viewer.js.map +0 -1
- /package/dist/{protect-camera-package.d.ts → devices/protect-camera-package.d.ts} +0 -0
- /package/dist/{protect-ffmpeg-codecs.js → ffmpeg/protect-ffmpeg-codecs.js} +0 -0
- /package/dist/{protect-ffmpeg-stream.js → ffmpeg/protect-ffmpeg-stream.js} +0 -0
- /package/dist/{protect-ffmpeg.js → ffmpeg/protect-ffmpeg.js} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { PROTECT_MOTION_DURATION, PROTECT_OCCUPANCY_DURATION } from "
|
|
2
|
-
import { ProtectReservedNames } from "
|
|
3
|
-
import { getOptionFloat, getOptionNumber, getOptionValue, isOptionEnabled } from "
|
|
1
|
+
import { PROTECT_MOTION_DURATION, PROTECT_OCCUPANCY_DURATION } from "../settings.js";
|
|
2
|
+
import { ProtectReservedNames } from "../protect-types.js";
|
|
3
|
+
import { getOptionFloat, getOptionNumber, getOptionValue, isOptionEnabled } from "../protect-options.js";
|
|
4
4
|
import util from "node:util";
|
|
5
5
|
export class ProtectBase {
|
|
6
6
|
api;
|
|
@@ -25,14 +25,14 @@ export class ProtectBase {
|
|
|
25
25
|
warn: (message, ...parameters) => nvr.platform.log.warn(util.format(this.name + ": " + message, ...parameters))
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
|
-
// Configure the device
|
|
28
|
+
// Configure the device information for HomeKit.
|
|
29
29
|
setInfo(accessory, device) {
|
|
30
30
|
// If we don't have a device, we're done.
|
|
31
31
|
if (!device) {
|
|
32
32
|
return false;
|
|
33
33
|
}
|
|
34
34
|
// Update the manufacturer information for this device.
|
|
35
|
-
accessory.getService(this.hap.Service.AccessoryInformation)?.updateCharacteristic(this.hap.Characteristic.Manufacturer, "Ubiquiti
|
|
35
|
+
accessory.getService(this.hap.Service.AccessoryInformation)?.updateCharacteristic(this.hap.Characteristic.Manufacturer, "Ubiquiti Inc.");
|
|
36
36
|
// Update the model information for this device.
|
|
37
37
|
let deviceModel = device.type;
|
|
38
38
|
if ("marketName" in device) {
|
|
@@ -55,7 +55,7 @@ export class ProtectBase {
|
|
|
55
55
|
}
|
|
56
56
|
return true;
|
|
57
57
|
}
|
|
58
|
-
// Utility function to return the fully enumerated name of this
|
|
58
|
+
// Utility function to return the fully enumerated name of this device.
|
|
59
59
|
get name() {
|
|
60
60
|
return this.nvr.ufpApi.name;
|
|
61
61
|
}
|
|
@@ -75,12 +75,68 @@ export class ProtectDevice extends ProtectBase {
|
|
|
75
75
|
this.accessory = accessory;
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
|
+
// Retrieve an existing service from an accessory, creating it if necessary.
|
|
79
|
+
acquireService(serviceType, name = this.accessoryName, subtype, onServiceCreate) {
|
|
80
|
+
// Services that need the ConfiguredName characteristic added and maintained.
|
|
81
|
+
const configuredNameServices = [this.hap.Service.ContactSensor, this.hap.Service.Lightbulb, this.hap.Service.MotionSensor, this.hap.Service.OccupancySensor,
|
|
82
|
+
this.hap.Service.Switch];
|
|
83
|
+
// Services that need the Name characteristic maintained.
|
|
84
|
+
const nameServices = [this.hap.Service.Battery, this.hap.Service.ContactSensor, this.hap.Service.HumiditySensor, this.hap.Service.LeakSensor,
|
|
85
|
+
this.hap.Service.Lightbulb, this.hap.Service.LightSensor, this.hap.Service.MotionSensor, this.hap.Service.TemperatureSensor];
|
|
86
|
+
// Find the service, if it exists.
|
|
87
|
+
let service = subtype ? this.accessory.getServiceById(serviceType, subtype) : this.accessory.getService(serviceType);
|
|
88
|
+
// Add the service to the accessory, if needed.
|
|
89
|
+
if (!service) {
|
|
90
|
+
// @ts-expect-error TypeScript tries to associate this with an overloaded version of the addService method. However, Homebridge/HAP-NodeJS isn't exporting
|
|
91
|
+
// a version of the method that implements the unexposed interface that's been defined for each service class (e.g. Lightbulb). The constructor on the
|
|
92
|
+
// service-type-specific version of the service takes the following arguments: constructor(displayName?: string, subtype?: string). We're safe, but because
|
|
93
|
+
// the type definitions are missing, we need to override it here.
|
|
94
|
+
service = new serviceType(name, subtype);
|
|
95
|
+
if (!service) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
this.accessory.addService(service);
|
|
99
|
+
if (onServiceCreate) {
|
|
100
|
+
onServiceCreate();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Update our name.
|
|
104
|
+
service.displayName = name;
|
|
105
|
+
if (configuredNameServices.includes(serviceType)) {
|
|
106
|
+
// Add the characteristic if we don't already have it. We do this here instead of at service creation to ensure we catch legacy situations where we may have
|
|
107
|
+
// already created the service previously without adding the optional characteristics we want.
|
|
108
|
+
if (!service.optionalCharacteristics.some(x => (x.UUID === this.hap.Characteristic.ConfiguredName.UUID))) {
|
|
109
|
+
service.addOptionalCharacteristic(this.hap.Characteristic.ConfiguredName);
|
|
110
|
+
}
|
|
111
|
+
service.updateCharacteristic(this.hap.Characteristic.ConfiguredName, name);
|
|
112
|
+
}
|
|
113
|
+
if (nameServices.includes(serviceType)) {
|
|
114
|
+
service.updateCharacteristic(this.hap.Characteristic.Name, name);
|
|
115
|
+
}
|
|
116
|
+
return service;
|
|
117
|
+
}
|
|
118
|
+
// Validate whether a service should exist, removing it if necessary.
|
|
119
|
+
validService(serviceType, validate, subtype) {
|
|
120
|
+
// Find the switch service, if it exists.
|
|
121
|
+
const service = subtype ? this.accessory.getServiceById(serviceType, subtype) : this.accessory.getService(serviceType);
|
|
122
|
+
// Validate whether we should have the service. If not, remove it.
|
|
123
|
+
if (!validate()) {
|
|
124
|
+
if (service) {
|
|
125
|
+
this.accessory.removeService(service);
|
|
126
|
+
}
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
// We have a valid service.
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
78
132
|
// Configure device-specific settings.
|
|
79
133
|
configureHints() {
|
|
134
|
+
this.hints.enabled = this.hasFeature("Device");
|
|
80
135
|
this.hints.logMotion = this.hasFeature("Log.Motion");
|
|
81
136
|
this.hints.motionDuration = this.getFeatureNumber("Motion.Duration") ?? PROTECT_MOTION_DURATION;
|
|
82
137
|
this.hints.occupancyDuration = this.getFeatureNumber("Motion.OccupancySensor.Duration") ?? PROTECT_OCCUPANCY_DURATION;
|
|
83
138
|
this.hints.smartOccupancy = [];
|
|
139
|
+
this.hints.standalone = this.hasFeature("Device.Standalone");
|
|
84
140
|
this.hints.syncName = this.hasFeature("Device.SyncName");
|
|
85
141
|
// Sanity check motion detection duration. Make sure it's never less than 2 seconds so we can actually alert the user.
|
|
86
142
|
if (this.hints.motionDuration < 2) {
|
|
@@ -117,46 +173,63 @@ export class ProtectDevice extends ProtectBase {
|
|
|
117
173
|
delete this.listeners[eventName];
|
|
118
174
|
}
|
|
119
175
|
}
|
|
176
|
+
// Utility to ease publishing of MQTT events.
|
|
177
|
+
publish(topic, message) {
|
|
178
|
+
this.nvr.mqtt?.publish(this.accessory, topic, message);
|
|
179
|
+
}
|
|
180
|
+
// Configure our MQTT get subscriptions.
|
|
181
|
+
subscribeGet(topic, type, getValue) {
|
|
182
|
+
this.nvr.mqtt?.subscribeGet(this.accessory, topic, type, getValue);
|
|
183
|
+
}
|
|
184
|
+
// Configure our MQTT set subscriptions.
|
|
185
|
+
subscribeSet(topic, type, setValue) {
|
|
186
|
+
this.nvr.mqtt?.subscribeSet(this.accessory, topic, type, setValue);
|
|
187
|
+
}
|
|
120
188
|
// Configure the Protect motion sensor for HomeKit.
|
|
121
189
|
configureMotionSensor(isEnabled = true, isInitialized = false) {
|
|
122
|
-
//
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
this.
|
|
128
|
-
this.
|
|
129
|
-
this.
|
|
190
|
+
// Validate whether we should have this service enabled.
|
|
191
|
+
if (!this.validService(this.hap.Service.MotionSensor, () => {
|
|
192
|
+
// Have we disabled the motion sensor?
|
|
193
|
+
if (!isEnabled) {
|
|
194
|
+
this.nvr.mqtt?.unsubscribe(this.accessory, "motion/get");
|
|
195
|
+
this.nvr.mqtt?.unsubscribe(this.accessory, "motion/set");
|
|
196
|
+
this.configureMotionSwitch(isEnabled);
|
|
197
|
+
this.configureMotionTrigger(isEnabled);
|
|
198
|
+
return false;
|
|
130
199
|
}
|
|
131
|
-
|
|
132
|
-
|
|
200
|
+
return true;
|
|
201
|
+
})) {
|
|
133
202
|
return false;
|
|
134
203
|
}
|
|
135
|
-
//
|
|
136
|
-
|
|
137
|
-
// We don't have it, add the motion sensor to the device.
|
|
138
|
-
motionService = new this.hap.Service.MotionSensor(this.accessoryName);
|
|
139
|
-
if (!motionService) {
|
|
140
|
-
this.log.error("Unable to add motion sensor.");
|
|
141
|
-
return false;
|
|
142
|
-
}
|
|
143
|
-
this.accessory.addService(motionService);
|
|
204
|
+
// Acquire the service.
|
|
205
|
+
const service = this.acquireService(this.hap.Service.MotionSensor, undefined, undefined, () => {
|
|
144
206
|
isInitialized = false;
|
|
145
|
-
|
|
207
|
+
});
|
|
208
|
+
if (!service) {
|
|
209
|
+
this.log.error("Unable to add motion sensor.");
|
|
210
|
+
return false;
|
|
146
211
|
}
|
|
147
212
|
// Have we previously initialized this sensor? We assume not by default, but this allows for scenarios where you may be dynamically reconfiguring a sensor at
|
|
148
213
|
// runtime (e.g. UniFi sensors can be reconfigured for various sensor modes in realtime).
|
|
149
214
|
if (!isInitialized) {
|
|
150
215
|
// Initialize the state of the motion sensor.
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
motionService.updateCharacteristic(this.hap.Characteristic.StatusActive, this.isOnline);
|
|
155
|
-
motionService.getCharacteristic(this.hap.Characteristic.StatusActive).onGet(() => {
|
|
216
|
+
service.updateCharacteristic(this.hap.Characteristic.MotionDetected, false);
|
|
217
|
+
service.updateCharacteristic(this.hap.Characteristic.StatusActive, this.isOnline);
|
|
218
|
+
service.getCharacteristic(this.hap.Characteristic.StatusActive).onGet(() => {
|
|
156
219
|
return this.isOnline;
|
|
157
220
|
});
|
|
158
221
|
// Configure our MQTT support.
|
|
159
|
-
this.
|
|
222
|
+
this.subscribeGet("motion", "motion", () => {
|
|
223
|
+
return service.getCharacteristic(this.hap.Characteristic.MotionDetected).value === true ? "true" : "false";
|
|
224
|
+
});
|
|
225
|
+
this.subscribeSet("motion", "motion event trigger", (value) => {
|
|
226
|
+
// When we get the right message, we trigger the motion event.
|
|
227
|
+
if (value !== "true") {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
// Trigger the motion event.
|
|
231
|
+
this.nvr.events.motionEventHandler(this);
|
|
232
|
+
});
|
|
160
233
|
// Configure any motion switches or triggers the user may have enabled or disabled.
|
|
161
234
|
this.configureMotionSwitch(isEnabled);
|
|
162
235
|
this.configureMotionTrigger(isEnabled);
|
|
@@ -165,36 +238,31 @@ export class ProtectDevice extends ProtectBase {
|
|
|
165
238
|
}
|
|
166
239
|
// Configure a switch to easily activate or deactivate motion sensor detection for HomeKit.
|
|
167
240
|
configureMotionSwitch(isEnabled = true) {
|
|
168
|
-
//
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
this.accessory.removeService(switchService);
|
|
241
|
+
// Validate whether we should have this service enabled.
|
|
242
|
+
if (!this.validService(this.hap.Service.Switch, () => {
|
|
243
|
+
// Motion switches are disabled by default unless the user enables them.
|
|
244
|
+
if (!isEnabled || !this.hasFeature("Motion.Switch")) {
|
|
245
|
+
return false;
|
|
174
246
|
}
|
|
175
|
-
|
|
176
|
-
|
|
247
|
+
return true;
|
|
248
|
+
}, ProtectReservedNames.SWITCH_MOTION_SENSOR)) {
|
|
249
|
+
// If we disable the switch, make sure we fully reset it's state. Otherwise, we can end up in a situation (e.g. liveview switches) where we have disabled motion
|
|
250
|
+
// detection with no meaningful way to enable it again.
|
|
177
251
|
this.accessory.context.detectMotion = true;
|
|
178
252
|
return false;
|
|
179
253
|
}
|
|
180
|
-
|
|
181
|
-
const
|
|
182
|
-
//
|
|
183
|
-
if (!
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
this.log.error("Unable to add motion sensor switch.");
|
|
187
|
-
return false;
|
|
188
|
-
}
|
|
189
|
-
switchService.addOptionalCharacteristic(this.hap.Characteristic.ConfiguredName);
|
|
190
|
-
this.accessory.addService(switchService);
|
|
254
|
+
// Acquire the service.
|
|
255
|
+
const service = this.acquireService(this.hap.Service.Switch, this.accessoryName + " Motion Events", ProtectReservedNames.SWITCH_MOTION_SENSOR);
|
|
256
|
+
// Fail gracefully.
|
|
257
|
+
if (!service) {
|
|
258
|
+
this.log.error("Unable to add motion sensor switch.");
|
|
259
|
+
return false;
|
|
191
260
|
}
|
|
192
261
|
// Activate or deactivate motion detection.
|
|
193
|
-
|
|
194
|
-
?.onGet(() => {
|
|
262
|
+
service.getCharacteristic(this.hap.Characteristic.On)?.onGet(() => {
|
|
195
263
|
return this.accessory.context.detectMotion === true;
|
|
196
|
-
})
|
|
197
|
-
|
|
264
|
+
});
|
|
265
|
+
service.getCharacteristic(this.hap.Characteristic.On)?.onSet((value) => {
|
|
198
266
|
if (this.accessory.context.detectMotion !== value) {
|
|
199
267
|
this.log.info("Motion detection %s.", (value === true) ? "enabled" : "disabled");
|
|
200
268
|
}
|
|
@@ -204,31 +272,28 @@ export class ProtectDevice extends ProtectBase {
|
|
|
204
272
|
if (!("detectMotion" in this.accessory.context)) {
|
|
205
273
|
this.accessory.context.detectMotion = true;
|
|
206
274
|
}
|
|
207
|
-
|
|
208
|
-
|
|
275
|
+
service.updateCharacteristic(this.hap.Characteristic.On, this.accessory.context.detectMotion);
|
|
276
|
+
this.log.info("Enabling motion sensor switch.");
|
|
209
277
|
return true;
|
|
210
278
|
}
|
|
211
279
|
// Configure a switch to manually trigger a motion sensor event for HomeKit.
|
|
212
280
|
configureMotionTrigger(isEnabled = true) {
|
|
213
|
-
//
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
this.accessory.removeService(triggerService);
|
|
281
|
+
// Validate whether we should have this service enabled.
|
|
282
|
+
if (!this.validService(this.hap.Service.Switch, () => {
|
|
283
|
+
// Motion triggers are disabled by default and primarily exist for automation purposes.
|
|
284
|
+
if (!isEnabled || !this.hasFeature("Motion.Trigger")) {
|
|
285
|
+
return false;
|
|
219
286
|
}
|
|
287
|
+
return true;
|
|
288
|
+
}, ProtectReservedNames.SWITCH_MOTION_TRIGGER)) {
|
|
220
289
|
return false;
|
|
221
290
|
}
|
|
222
|
-
|
|
223
|
-
|
|
291
|
+
// Acquire the service.
|
|
292
|
+
const triggerService = this.acquireService(this.hap.Service.Switch, this.accessoryName + " Motion Trigger", ProtectReservedNames.SWITCH_MOTION_TRIGGER);
|
|
293
|
+
// Fail gracefully.
|
|
224
294
|
if (!triggerService) {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
this.log.error("Unable to add motion sensor trigger.");
|
|
228
|
-
return false;
|
|
229
|
-
}
|
|
230
|
-
triggerService.addOptionalCharacteristic(this.hap.Characteristic.ConfiguredName);
|
|
231
|
-
this.accessory.addService(triggerService);
|
|
295
|
+
this.log.error("Unable to add motion sensor trigger.");
|
|
296
|
+
return false;
|
|
232
297
|
}
|
|
233
298
|
const motionService = this.accessory.getService(this.hap.Service.MotionSensor);
|
|
234
299
|
const switchService = this.accessory.getServiceById(this.hap.Service.Switch, ProtectReservedNames.SWITCH_MOTION_SENSOR);
|
|
@@ -246,7 +311,7 @@ export class ProtectDevice extends ProtectBase {
|
|
|
246
311
|
}
|
|
247
312
|
else {
|
|
248
313
|
// Trigger the motion event.
|
|
249
|
-
this.nvr.events.motionEventHandler(this
|
|
314
|
+
this.nvr.events.motionEventHandler(this);
|
|
250
315
|
// Inform the user.
|
|
251
316
|
this.log.info("Motion event triggered.");
|
|
252
317
|
}
|
|
@@ -260,55 +325,36 @@ export class ProtectDevice extends ProtectBase {
|
|
|
260
325
|
}
|
|
261
326
|
});
|
|
262
327
|
// Initialize the switch.
|
|
263
|
-
triggerService.updateCharacteristic(this.hap.Characteristic.ConfiguredName, triggerName);
|
|
264
328
|
triggerService.updateCharacteristic(this.hap.Characteristic.On, false);
|
|
265
329
|
this.log.info("Enabling motion sensor automation trigger.");
|
|
266
330
|
return true;
|
|
267
331
|
}
|
|
268
|
-
// Configure MQTT motion triggers.
|
|
269
|
-
configureMqttMotionTrigger() {
|
|
270
|
-
// Trigger a motion event in MQTT, if requested to do so.
|
|
271
|
-
this.nvr.mqtt?.subscribe(this.id, "motion/trigger", (message) => {
|
|
272
|
-
const value = message.toString();
|
|
273
|
-
// When we get the right message, we trigger the motion event.
|
|
274
|
-
if (value?.toLowerCase() !== "true") {
|
|
275
|
-
return;
|
|
276
|
-
}
|
|
277
|
-
// Trigger the motion event.
|
|
278
|
-
this.nvr.events.motionEventHandler(this, Date.now());
|
|
279
|
-
this.log.info("Motion event triggered via MQTT.");
|
|
280
|
-
});
|
|
281
|
-
return true;
|
|
282
|
-
}
|
|
283
332
|
// Configure the Protect occupancy sensor for HomeKit.
|
|
284
333
|
configureOccupancySensor(isEnabled = true, isInitialized = false) {
|
|
285
|
-
//
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
this.log.info("Disabling occupancy sensor.");
|
|
334
|
+
// Validate whether we should have this service enabled.
|
|
335
|
+
if (!this.validService(this.hap.Service.OccupancySensor, () => {
|
|
336
|
+
// Occupancy sensors are disabled by default and primarily exist for automation purposes.
|
|
337
|
+
if (!isEnabled || !this.hasFeature("Motion.OccupancySensor")) {
|
|
338
|
+
this.nvr.mqtt?.unsubscribe(this.accessory, "occupancy/get");
|
|
339
|
+
return false;
|
|
292
340
|
}
|
|
341
|
+
return true;
|
|
342
|
+
})) {
|
|
293
343
|
return false;
|
|
294
344
|
}
|
|
295
|
-
//
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
this.log.error("Unable to add occupancy sensor.");
|
|
301
|
-
return false;
|
|
302
|
-
}
|
|
303
|
-
this.accessory.addService(occupancyService);
|
|
345
|
+
// Acquire the service.
|
|
346
|
+
const service = this.acquireService(this.hap.Service.OccupancySensor);
|
|
347
|
+
if (!service) {
|
|
348
|
+
this.log.error("Unable to add occupancy sensor.");
|
|
349
|
+
return false;
|
|
304
350
|
}
|
|
305
351
|
// Have we previously initialized this sensor? We assume not by default, but this allows for scenarios where you may be dynamically reconfiguring a sensor at
|
|
306
352
|
// runtime (e.g. UniFi sensors can be reconfigured for various sensor modes in realtime).
|
|
307
353
|
if (!isInitialized) {
|
|
308
354
|
// Initialize the state of the occupancy sensor.
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
355
|
+
service.updateCharacteristic(this.hap.Characteristic.OccupancyDetected, false);
|
|
356
|
+
service.updateCharacteristic(this.hap.Characteristic.StatusActive, this.isOnline);
|
|
357
|
+
service.getCharacteristic(this.hap.Characteristic.StatusActive).onGet(() => {
|
|
312
358
|
return this.isOnline;
|
|
313
359
|
});
|
|
314
360
|
// If we have smart motion detection, allow users to choose which object types determine occupancy.
|
|
@@ -324,6 +370,10 @@ export class ProtectDevice extends ProtectBase {
|
|
|
324
370
|
this.hints.smartOccupancy.push("no smart motion detection object type configured");
|
|
325
371
|
}
|
|
326
372
|
}
|
|
373
|
+
// Configure our MQTT support.
|
|
374
|
+
this.subscribeGet("occupancy", "occupancy", () => {
|
|
375
|
+
return service.getCharacteristic(this.hap.Characteristic.OccupancyDetected).value === true ? "true" : "false";
|
|
376
|
+
});
|
|
327
377
|
this.log.info("Enabling occupancy sensor%s.", this.hints.smartDetect ? " using smart motion detection: " + this.hints.smartOccupancy.join(", ") : "");
|
|
328
378
|
}
|
|
329
379
|
return true;
|
|
@@ -358,7 +408,7 @@ export class ProtectDevice extends ProtectBase {
|
|
|
358
408
|
}
|
|
359
409
|
// Utility function to return the fully enumerated name of this device.
|
|
360
410
|
get name() {
|
|
361
|
-
return this.nvr.ufpApi.
|
|
411
|
+
return this.nvr.ufpApi.getDeviceName(this.ufp);
|
|
362
412
|
}
|
|
363
413
|
// Utility function to return the current accessory name of this device.
|
|
364
414
|
get accessoryName() {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protect-device.js","sourceRoot":"","sources":["../../src/devices/protect-device.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { PlatformAccessory } from "homebridge";
|
|
|
2
2
|
import { ProtectCameraConfig, ProtectEventPacket } from "unifi-protect";
|
|
3
3
|
import { ProtectCamera } from "./protect-camera.js";
|
|
4
4
|
import { ProtectCameraPackage } from "./protect-camera-package.js";
|
|
5
|
-
import { ProtectNvr } from "
|
|
5
|
+
import { ProtectNvr } from "../protect-nvr.js";
|
|
6
6
|
export declare class ProtectDoorbell extends ProtectCamera {
|
|
7
7
|
private chimeDigitalDuration;
|
|
8
8
|
private defaultMessageDuration;
|