homebridge-unifi-protect 4.4.4 → 5.0.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/README.md +7 -11
- package/config.schema.json +11 -0
- package/dist/protect-accessory.js +145 -2
- package/dist/protect-accessory.js.map +1 -1
- package/dist/protect-camera.js +56 -162
- package/dist/protect-camera.js.map +1 -1
- package/dist/protect-doorbell.js +12 -12
- package/dist/protect-doorbell.js.map +1 -1
- package/dist/protect-ffmpeg.js +22 -3
- package/dist/protect-ffmpeg.js.map +1 -1
- package/dist/protect-light.js +111 -0
- package/dist/protect-light.js.map +1 -0
- package/dist/protect-liveviews.js +2 -2
- package/dist/protect-liveviews.js.map +1 -1
- package/dist/protect-mqtt.js +47 -19
- package/dist/protect-mqtt.js.map +1 -1
- package/dist/protect-nvr-events.js +203 -59
- package/dist/protect-nvr-events.js.map +1 -1
- package/dist/protect-nvr-systeminfo.js +174 -0
- package/dist/protect-nvr-systeminfo.js.map +1 -0
- package/dist/protect-nvr.js +165 -59
- package/dist/protect-nvr.js.map +1 -1
- package/dist/protect-platform.js +8 -3
- package/dist/protect-platform.js.map +1 -1
- package/dist/protect-securitysystem.js +3 -4
- package/dist/protect-securitysystem.js.map +1 -1
- package/dist/protect-sensor.js +357 -0
- package/dist/protect-sensor.js.map +1 -0
- package/dist/protect-stream.js +50 -15
- package/dist/protect-stream.js.map +1 -1
- package/dist/protect-viewer.js +170 -0
- package/dist/protect-viewer.js.map +1 -0
- package/dist/settings.js +5 -1
- package/dist/settings.js.map +1 -1
- package/package.json +8 -7
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ProtectNvrEvents = void 0;
|
|
4
|
-
const
|
|
4
|
+
const protect_accessory_1 = require("./protect-accessory");
|
|
5
5
|
const unifi_protect_1 = require("unifi-protect");
|
|
6
6
|
class ProtectNvrEvents {
|
|
7
7
|
constructor(nvr) {
|
|
8
8
|
this.api = nvr.platform.api;
|
|
9
9
|
this.debug = nvr.platform.debug.bind(nvr.platform);
|
|
10
|
+
this.eventTimers = {};
|
|
10
11
|
this.hap = nvr.platform.api.hap;
|
|
11
12
|
this.lastMotion = {};
|
|
12
13
|
this.lastRing = {};
|
|
@@ -14,8 +15,8 @@ class ProtectNvrEvents {
|
|
|
14
15
|
this.nvr = nvr;
|
|
15
16
|
this.nvrApi = nvr.nvrApi;
|
|
16
17
|
this.motionDuration = nvr.platform.config.motionDuration;
|
|
17
|
-
this.eventTimers = {};
|
|
18
18
|
this.platform = nvr.platform;
|
|
19
|
+
this.ringDuration = nvr.platform.config.ringDuration;
|
|
19
20
|
this.unsupportedDevices = {};
|
|
20
21
|
}
|
|
21
22
|
// Check for event updates.
|
|
@@ -59,16 +60,16 @@ class ProtectNvrEvents {
|
|
|
59
60
|
if (!controller) {
|
|
60
61
|
return;
|
|
61
62
|
}
|
|
62
|
-
// Find the
|
|
63
|
-
const
|
|
64
|
-
// Nothing here - we may have disabled this
|
|
65
|
-
if (!
|
|
63
|
+
// Find the device in our list of accessories so we can fire off the motion event.
|
|
64
|
+
const foundDevice = Object.keys(this.nvr.configuredDevices).find(x => this.nvr.configuredDevices[x].accessory.context.device.host === controller.info.lastMotionCameraAddress);
|
|
65
|
+
// Nothing here - we may have disabled this device or it's associated NVR.
|
|
66
|
+
if (!foundDevice) {
|
|
66
67
|
return;
|
|
67
68
|
}
|
|
68
69
|
// Now grab the accessory associated with the Protect device.
|
|
69
|
-
const accessory = this.nvr.
|
|
70
|
+
const accessory = this.nvr.configuredDevices[foundDevice].accessory;
|
|
70
71
|
// If we don't have an accessory, it's probably because we've chosen to hide it. In that case,
|
|
71
|
-
// just ignore and move on. Alternatively, it could be a new
|
|
72
|
+
// just ignore and move on. Alternatively, it could be a new device that we just don't know about yet,
|
|
72
73
|
// In either case, we keep ignore it.
|
|
73
74
|
if (!accessory) {
|
|
74
75
|
return;
|
|
@@ -88,6 +89,7 @@ class ProtectNvrEvents {
|
|
|
88
89
|
}
|
|
89
90
|
// Listen for any messages coming in from our listener.
|
|
90
91
|
this.nvrApi.eventListener.on("message", (event) => {
|
|
92
|
+
var _a, _b;
|
|
91
93
|
const updatePacket = unifi_protect_1.ProtectApiUpdates.decodeUpdatePacket(this.log, event);
|
|
92
94
|
if (!updatePacket) {
|
|
93
95
|
this.log.error("%s: Unable to process message from the realtime update events API.", this.nvrApi.getNvrName());
|
|
@@ -117,27 +119,27 @@ class ProtectNvrEvents {
|
|
|
117
119
|
if (!payload.isMotionDetected && !payload.lastRing && !payload.lcdMessage) {
|
|
118
120
|
return;
|
|
119
121
|
}
|
|
120
|
-
// Lookup the accessory associated with this
|
|
122
|
+
// Lookup the accessory associated with this device.
|
|
121
123
|
const accessory = this.nvr.accessoryLookup(updatePacket.action.id);
|
|
122
|
-
// We don't know about this
|
|
124
|
+
// We don't know about this device - we're done.
|
|
123
125
|
if (!accessory) {
|
|
124
126
|
return;
|
|
125
127
|
}
|
|
126
|
-
// Grab the
|
|
127
|
-
const
|
|
128
|
+
// Grab the device context.
|
|
129
|
+
const device = accessory.context.device;
|
|
128
130
|
// Lookup the ProtectCamera instance associated with this accessory.
|
|
129
|
-
const protectCamera = this.nvr.
|
|
131
|
+
const protectCamera = this.nvr.configuredDevices[accessory.UUID];
|
|
130
132
|
if (!protectCamera) {
|
|
131
133
|
return;
|
|
132
134
|
}
|
|
133
135
|
// It's a motion event - process it accordingly, but only if we're not configured for smart motion events - we handle those elsewhere.
|
|
134
136
|
if (payload.isMotionDetected) {
|
|
135
|
-
if (!protectCamera.smartDetectTypes.length && payload.lastMotion && this.nvr.optionEnabled(
|
|
137
|
+
if (!protectCamera.smartDetectTypes.length && payload.lastMotion && this.nvr.optionEnabled(device, "Motion.NvrEvents", true)) {
|
|
136
138
|
this.motionEventHandler(accessory, payload.lastMotion);
|
|
137
139
|
}
|
|
138
140
|
}
|
|
139
141
|
// It's a ring event - process it accordingly.
|
|
140
|
-
if (payload.lastRing && this.nvr.optionEnabled(
|
|
142
|
+
if (payload.lastRing && this.nvr.optionEnabled(device, "Doorbell.NvrEvents", true)) {
|
|
141
143
|
this.doorbellEventHandler(accessory, payload.lastRing);
|
|
142
144
|
}
|
|
143
145
|
// It's a doorbell LCD message event - process it accordingly.
|
|
@@ -165,20 +167,125 @@ class ProtectNvrEvents {
|
|
|
165
167
|
if (!accessory) {
|
|
166
168
|
return;
|
|
167
169
|
}
|
|
168
|
-
// Grab the
|
|
169
|
-
const
|
|
170
|
+
// Grab the device context.
|
|
171
|
+
const device = accessory.context.device;
|
|
170
172
|
// Lookup the ProtectCamera instance associated with this accessory.
|
|
171
|
-
const protectCamera = this.nvr.
|
|
173
|
+
const protectCamera = this.nvr.configuredDevices[accessory.UUID];
|
|
172
174
|
if (!protectCamera) {
|
|
173
175
|
return;
|
|
174
176
|
}
|
|
175
177
|
// Process the motion event.
|
|
176
|
-
if (this.nvr.optionEnabled(
|
|
178
|
+
if (this.nvr.optionEnabled(device, "Motion.SmartDetect.NvrEvents", true)) {
|
|
177
179
|
this.motionEventHandler(accessory, payload.start, payload.smartDetectTypes);
|
|
178
180
|
}
|
|
179
181
|
return;
|
|
180
182
|
break;
|
|
181
183
|
}
|
|
184
|
+
case "light": {
|
|
185
|
+
// We listen for the following light update actions:
|
|
186
|
+
// light on / off
|
|
187
|
+
// brightness adjustments
|
|
188
|
+
// We're only interested in update actions.
|
|
189
|
+
if (updatePacket.action.action !== "update") {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
// Grab the right payload type, camera update payloads.
|
|
193
|
+
const payload = updatePacket.payload;
|
|
194
|
+
// Now filter out payloads we aren't interested in. We only want light state, brightness, and motion detection.
|
|
195
|
+
if (!payload.isPirMotionDetected && !payload.isLightOn && !payload.lightDeviceSettings) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
// Lookup the accessory associated with this device.
|
|
199
|
+
const accessory = this.nvr.accessoryLookup(updatePacket.action.id);
|
|
200
|
+
// We don't know about this device - we're done.
|
|
201
|
+
if (!accessory) {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
// Grab the device context.
|
|
205
|
+
const device = accessory.context.device;
|
|
206
|
+
// Lookup the ProtectCamera instance associated with this accessory.
|
|
207
|
+
const protectLight = this.nvr.configuredDevices[accessory.UUID];
|
|
208
|
+
if (!protectLight) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
// It's a motion event - process it accordingly.
|
|
212
|
+
if (payload.isPirMotionDetected && payload.lastMotion && this.nvr.optionEnabled(device, "Motion.NvrEvents", true)) {
|
|
213
|
+
this.motionEventHandler(accessory, payload.lastMotion);
|
|
214
|
+
}
|
|
215
|
+
// It's a light power event - process it accordingly.
|
|
216
|
+
if (payload.isLightOn) {
|
|
217
|
+
this.lightPowerHandler(accessory, payload.isLightOn);
|
|
218
|
+
}
|
|
219
|
+
// It's light brightness event - process it accordingly.
|
|
220
|
+
if ((_a = payload.lightDeviceSettings) === null || _a === void 0 ? void 0 : _a.ledLevel) {
|
|
221
|
+
this.lightBrightnessHandler(accessory, payload.lightDeviceSettings.ledLevel);
|
|
222
|
+
}
|
|
223
|
+
break;
|
|
224
|
+
}
|
|
225
|
+
case "nvr": {
|
|
226
|
+
// We listen for the following sensor update actions:
|
|
227
|
+
// motion events
|
|
228
|
+
// sensor enablement / configuration changes
|
|
229
|
+
// sensor updates (humidity, light, temperature)
|
|
230
|
+
// We're only interested in update actions.
|
|
231
|
+
if (updatePacket.action.action !== "update") {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
// Grab the right payload type.
|
|
235
|
+
const payload = updatePacket.payload;
|
|
236
|
+
// Now filter out payloads we aren't interested in. We only want NVR system information updates.
|
|
237
|
+
if (!("systemInfo" in payload)) {
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
// Process it.
|
|
241
|
+
(_b = this.nvr.systemInfo) === null || _b === void 0 ? void 0 : _b.updateDevice(false, payload.systemInfo);
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
244
|
+
case "sensor": {
|
|
245
|
+
// We listen for the following sensor update actions:
|
|
246
|
+
// motion events
|
|
247
|
+
// sensor enablement / configuration changes
|
|
248
|
+
// sensor updates (humidity, light, temperature)
|
|
249
|
+
// We're only interested in update actions.
|
|
250
|
+
if (updatePacket.action.action !== "update") {
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
// Grab the right payload type.
|
|
254
|
+
const payload = updatePacket.payload;
|
|
255
|
+
// Now filter out payloads we aren't interested in. We only want motion events, stats updates, and changes in sensor configuration.
|
|
256
|
+
if (!("isMotionDetected" in payload) && !("isOpened" in payload) && !("stats" in payload) &&
|
|
257
|
+
!("mountType" in payload) && !("alarmSettings" in payload) && !("humiditySettings" in payload) &&
|
|
258
|
+
!("lightSettings" in payload) && !("motionSettings" in payload) && !("temperatureSettings" in payload) &&
|
|
259
|
+
!("batteryStatus" in payload) && !("tamperingDetectedAt" in payload) && !("alarmTriggeredAt" in payload) &&
|
|
260
|
+
!("state" in payload)) {
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
// Lookup the accessory associated with this device.
|
|
264
|
+
const accessory = this.nvr.accessoryLookup(updatePacket.action.id);
|
|
265
|
+
// We don't know about this device - we're done.
|
|
266
|
+
if (!accessory) {
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
// Grab the device context.
|
|
270
|
+
const device = accessory.context.device;
|
|
271
|
+
// Lookup the ProtectSensor instance associated with this accessory.
|
|
272
|
+
const protectSensor = this.nvr.configuredDevices[accessory.UUID];
|
|
273
|
+
if (!protectSensor) {
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
// It's a motion event - process it accordingly.
|
|
277
|
+
if (payload.isMotionDetected && payload.motionDetectedAt && this.nvr.optionEnabled(device, "Motion.NvrEvents", true)) {
|
|
278
|
+
this.motionEventHandler(accessory, payload.motionDetectedAt);
|
|
279
|
+
}
|
|
280
|
+
// Update the device JSON on the accessory.
|
|
281
|
+
accessory.context.device = {
|
|
282
|
+
...device,
|
|
283
|
+
...payload
|
|
284
|
+
};
|
|
285
|
+
// Process it.
|
|
286
|
+
this.sensorHandler(accessory, protectSensor);
|
|
287
|
+
break;
|
|
288
|
+
}
|
|
182
289
|
default:
|
|
183
290
|
// It's not a modelKey we're interested in. We're done.
|
|
184
291
|
return;
|
|
@@ -191,25 +298,25 @@ class ProtectNvrEvents {
|
|
|
191
298
|
}
|
|
192
299
|
// Motion event processing from UniFi Protect.
|
|
193
300
|
motionEventHandler(accessory, lastMotion, detectedObjects = []) {
|
|
194
|
-
const
|
|
195
|
-
if (!
|
|
301
|
+
const device = accessory.context.device;
|
|
302
|
+
if (!device || !lastMotion) {
|
|
196
303
|
return;
|
|
197
304
|
}
|
|
198
305
|
// Have we seen this event before? If so...move along.
|
|
199
|
-
if (this.lastMotion[
|
|
200
|
-
this.debug("%s: Skipping duplicate motion event.", this.nvrApi.getFullName(
|
|
306
|
+
if (this.lastMotion[device.mac] >= lastMotion) {
|
|
307
|
+
this.debug("%s: Skipping duplicate motion event.", this.nvrApi.getFullName(device));
|
|
201
308
|
return;
|
|
202
309
|
}
|
|
203
310
|
// We only consider events that have happened within the last two refresh intervals. Otherwise, we assume
|
|
204
311
|
// it's stale data and don't inform the user.
|
|
205
312
|
if ((Date.now() - lastMotion) > (this.nvr.refreshInterval * 2 * 1000)) {
|
|
206
|
-
this.debug("%s: Skipping motion event due to stale data.", this.nvrApi.getFullName(
|
|
313
|
+
this.debug("%s: Skipping motion event due to stale data.", this.nvrApi.getFullName(device));
|
|
207
314
|
return;
|
|
208
315
|
}
|
|
209
316
|
// Remember this event.
|
|
210
|
-
this.lastMotion[
|
|
317
|
+
this.lastMotion[device.mac] = lastMotion;
|
|
211
318
|
// If we already have a motion event inflight, allow it to complete so we don't spam users.
|
|
212
|
-
if (this.eventTimers[
|
|
319
|
+
if (this.eventTimers[device.mac]) {
|
|
213
320
|
return;
|
|
214
321
|
}
|
|
215
322
|
// Only notify the user if we have a motion sensor and it's active.
|
|
@@ -221,9 +328,9 @@ class ProtectNvrEvents {
|
|
|
221
328
|
// Motion event delivery to HomeKit.
|
|
222
329
|
motionEventDelivery(accessory, motionService, detectedObjects = []) {
|
|
223
330
|
var _a, _b;
|
|
224
|
-
const
|
|
331
|
+
const device = accessory.context.device;
|
|
225
332
|
// Lookup the ProtectCamera instance associated with this accessory.
|
|
226
|
-
const protectCamera = this.nvr.
|
|
333
|
+
const protectCamera = this.nvr.configuredDevices[accessory.UUID];
|
|
227
334
|
if (!protectCamera) {
|
|
228
335
|
return;
|
|
229
336
|
}
|
|
@@ -236,20 +343,20 @@ class ProtectNvrEvents {
|
|
|
236
343
|
// Trigger the motion event in HomeKit.
|
|
237
344
|
motionService.updateCharacteristic(this.hap.Characteristic.MotionDetected, true);
|
|
238
345
|
// Check to see if we have a motion trigger switch configured. If we do, update it.
|
|
239
|
-
const triggerService = accessory.getServiceById(this.hap.Service.Switch,
|
|
346
|
+
const triggerService = accessory.getServiceById(this.hap.Service.Switch, protect_accessory_1.PROTECT_SWITCH_MOTION_TRIGGER);
|
|
240
347
|
if (triggerService) {
|
|
241
348
|
triggerService.updateCharacteristic(this.hap.Characteristic.On, true);
|
|
242
349
|
}
|
|
243
350
|
// Publish the motion event to MQTT, if the user has configured it.
|
|
244
351
|
(_a = this.nvr.mqtt) === null || _a === void 0 ? void 0 : _a.publish(accessory, "motion", "true");
|
|
245
352
|
// Log the event, if configured to do so.
|
|
246
|
-
if (this.nvr.optionEnabled(
|
|
247
|
-
this.log.info("%s: Motion detected%s.", this.nvrApi.getFullName(
|
|
353
|
+
if (this.nvr.optionEnabled(device, "Log.Motion", false)) {
|
|
354
|
+
this.log.info("%s: Motion detected%s.", this.nvrApi.getFullName(device), detectedObjects.length ? ": " + detectedObjects.join(", ") : "");
|
|
248
355
|
}
|
|
249
356
|
}
|
|
250
357
|
// Trigger smart motion contact sensors, if configured.
|
|
251
358
|
for (const detectedObject of detectedObjects) {
|
|
252
|
-
const contactService = accessory.getServiceById(this.hap.Service.ContactSensor,
|
|
359
|
+
const contactService = accessory.getServiceById(this.hap.Service.ContactSensor, protect_accessory_1.PROTECT_CONTACT_MOTION_SMARTDETECT + "." + detectedObject);
|
|
253
360
|
if (contactService) {
|
|
254
361
|
contactService.updateCharacteristic(this.hap.Characteristic.ContactSensorState, true);
|
|
255
362
|
}
|
|
@@ -257,7 +364,7 @@ class ProtectNvrEvents {
|
|
|
257
364
|
(_b = this.nvr.mqtt) === null || _b === void 0 ? void 0 : _b.publish(accessory, "motion/smart/" + detectedObject, "true");
|
|
258
365
|
}
|
|
259
366
|
// Reset our motion event after motionDuration.
|
|
260
|
-
this.eventTimers[
|
|
367
|
+
this.eventTimers[device.mac] = setTimeout(() => {
|
|
261
368
|
var _a, _b;
|
|
262
369
|
// Reset the motion sensor, if it's been triggered.
|
|
263
370
|
if (!detectedObjects.length || (detectedObjects.length && detectedObjects.filter(x => protectCamera.smartDetectTypes.includes(x)).length)) {
|
|
@@ -265,49 +372,49 @@ class ProtectNvrEvents {
|
|
|
265
372
|
if (thisMotionService) {
|
|
266
373
|
thisMotionService.updateCharacteristic(this.hap.Characteristic.MotionDetected, false);
|
|
267
374
|
// Check to see if we have a motion trigger switch configured. If we do, update it.
|
|
268
|
-
const thisTriggerService = accessory.getServiceById(this.hap.Service.Switch,
|
|
375
|
+
const thisTriggerService = accessory.getServiceById(this.hap.Service.Switch, protect_accessory_1.PROTECT_SWITCH_MOTION_TRIGGER);
|
|
269
376
|
if (thisTriggerService) {
|
|
270
377
|
thisTriggerService.updateCharacteristic(this.hap.Characteristic.On, false);
|
|
271
378
|
}
|
|
272
|
-
this.debug("%s: Resetting motion event.", this.nvrApi.getFullName(
|
|
379
|
+
this.debug("%s: Resetting motion event.", this.nvrApi.getFullName(device));
|
|
273
380
|
}
|
|
274
381
|
// Publish to MQTT, if the user has configured it.
|
|
275
382
|
(_a = this.nvr.mqtt) === null || _a === void 0 ? void 0 : _a.publish(accessory, "motion", "false");
|
|
276
383
|
}
|
|
277
384
|
// Reset smart motion contact sensors, if configured.
|
|
278
385
|
for (const detectedObject of detectedObjects) {
|
|
279
|
-
const contactService = accessory.getServiceById(this.hap.Service.ContactSensor,
|
|
386
|
+
const contactService = accessory.getServiceById(this.hap.Service.ContactSensor, protect_accessory_1.PROTECT_CONTACT_MOTION_SMARTDETECT + "." + detectedObject);
|
|
280
387
|
if (contactService) {
|
|
281
388
|
contactService.updateCharacteristic(this.hap.Characteristic.ContactSensorState, false);
|
|
282
389
|
}
|
|
283
390
|
// Publish the smart motion event to MQTT, if the user has configured it.
|
|
284
391
|
(_b = this.nvr.mqtt) === null || _b === void 0 ? void 0 : _b.publish(accessory, "motion/smart/" + detectedObject, "false");
|
|
285
|
-
this.debug("%s: Resetting smart object motion event.", this.nvrApi.getFullName(
|
|
392
|
+
this.debug("%s: Resetting smart object motion event.", this.nvrApi.getFullName(device));
|
|
286
393
|
}
|
|
287
394
|
// Delete the timer from our motion event tracker.
|
|
288
|
-
delete this.eventTimers[
|
|
395
|
+
delete this.eventTimers[device.mac];
|
|
289
396
|
}, this.motionDuration * 1000);
|
|
290
397
|
}
|
|
291
398
|
// Doorbell event processing from UniFi Protect and delivered to HomeKit.
|
|
292
399
|
doorbellEventHandler(accessory, lastRing) {
|
|
293
400
|
var _a;
|
|
294
|
-
const
|
|
295
|
-
if (!
|
|
401
|
+
const device = accessory.context.device;
|
|
402
|
+
if (!device || !lastRing) {
|
|
296
403
|
return;
|
|
297
404
|
}
|
|
298
405
|
// Have we seen this event before? If so...move along. It's unlikely we hit this in a doorbell scenario, but just in case.
|
|
299
|
-
if (this.lastRing[
|
|
300
|
-
this.debug("%s: Skipping duplicate doorbell ring.", this.nvrApi.getFullName(
|
|
406
|
+
if (this.lastRing[device.mac] >= lastRing) {
|
|
407
|
+
this.debug("%s: Skipping duplicate doorbell ring.", this.nvrApi.getFullName(device));
|
|
301
408
|
return;
|
|
302
409
|
}
|
|
303
410
|
// We only consider events that have happened within the last two refresh intervals. Otherwise, we assume it's stale
|
|
304
411
|
// data and don't inform the user.
|
|
305
412
|
if ((Date.now() - lastRing) > (this.nvr.refreshInterval * 2 * 1000)) {
|
|
306
|
-
this.debug("%s: Skipping doorbell ring due to stale data.", this.nvrApi.getFullName(
|
|
413
|
+
this.debug("%s: Skipping doorbell ring due to stale data.", this.nvrApi.getFullName(device));
|
|
307
414
|
return;
|
|
308
415
|
}
|
|
309
416
|
// Remember this event.
|
|
310
|
-
this.lastRing[
|
|
417
|
+
this.lastRing[device.mac] = lastRing;
|
|
311
418
|
// Only notify the user if we have a doorbell.
|
|
312
419
|
const doorbellService = accessory.getService(this.hap.Service.Doorbell);
|
|
313
420
|
if (!doorbellService) {
|
|
@@ -316,44 +423,81 @@ class ProtectNvrEvents {
|
|
|
316
423
|
// Trigger the doorbell.
|
|
317
424
|
doorbellService.updateCharacteristic(this.hap.Characteristic.ProgrammableSwitchEvent, this.hap.Characteristic.ProgrammableSwitchEvent.SINGLE_PRESS);
|
|
318
425
|
// Check to see if we have a doorbell trigger switch configured. If we do, update it.
|
|
319
|
-
const triggerService = accessory.getServiceById(this.hap.Service.Switch,
|
|
426
|
+
const triggerService = accessory.getServiceById(this.hap.Service.Switch, protect_accessory_1.PROTECT_SWITCH_DOORBELL_TRIGGER);
|
|
320
427
|
if (triggerService) {
|
|
321
428
|
// Kill any inflight trigger reset.
|
|
322
|
-
if (this.eventTimers[
|
|
323
|
-
clearTimeout(this.eventTimers[
|
|
324
|
-
delete this.eventTimers[
|
|
429
|
+
if (this.eventTimers[device.mac + ".Doorbell.Ring.Trigger"]) {
|
|
430
|
+
clearTimeout(this.eventTimers[device.mac + ".Doorbell.Ring.Trigger"]);
|
|
431
|
+
delete this.eventTimers[device.mac + ".Doorbell.Ring.Trigger"];
|
|
325
432
|
}
|
|
326
|
-
const protectCamera = this.nvr.
|
|
433
|
+
const protectCamera = this.nvr.configuredDevices[accessory.UUID];
|
|
327
434
|
// Flag that we're ringing.
|
|
328
435
|
if (protectCamera) {
|
|
329
436
|
protectCamera.isRinging = true;
|
|
330
437
|
}
|
|
331
438
|
triggerService.updateCharacteristic(this.hap.Characteristic.On, true);
|
|
332
|
-
// Reset our doorbell trigger after
|
|
333
|
-
this.eventTimers[
|
|
439
|
+
// Reset our doorbell trigger after ringDuration.
|
|
440
|
+
this.eventTimers[device.mac + ".Doorbell.Ring.Trigger"] = setTimeout(() => {
|
|
334
441
|
if (protectCamera) {
|
|
335
442
|
protectCamera.isRinging = false;
|
|
336
443
|
}
|
|
337
444
|
triggerService.updateCharacteristic(this.hap.Characteristic.On, false);
|
|
338
|
-
this.debug("%s: Resetting doorbell ring trigger.", this.nvrApi.getFullName(
|
|
445
|
+
this.debug("%s: Resetting doorbell ring trigger.", this.nvrApi.getFullName(device));
|
|
339
446
|
// Delete the timer from our motion event tracker.
|
|
340
|
-
delete this.eventTimers[
|
|
341
|
-
},
|
|
447
|
+
delete this.eventTimers[device.mac + ".Doorbell.Ring.Trigger"];
|
|
448
|
+
}, this.ringDuration * 1000);
|
|
342
449
|
}
|
|
343
450
|
// Publish to MQTT, if the user has configured it.
|
|
344
451
|
(_a = this.nvr.mqtt) === null || _a === void 0 ? void 0 : _a.publish(accessory, "doorbell", "true");
|
|
345
|
-
if (this.nvr.optionEnabled(
|
|
346
|
-
this.log.info("%s: Doorbell ring detected.", this.nvrApi.getFullName(
|
|
452
|
+
if (this.nvr.optionEnabled(device, "Log.Doorbell", false)) {
|
|
453
|
+
this.log.info("%s: Doorbell ring detected.", this.nvrApi.getFullName(device));
|
|
454
|
+
}
|
|
455
|
+
// Kill any inflight ring reset.
|
|
456
|
+
if (this.eventTimers[device.mac + ".Doorbell.Ring"]) {
|
|
457
|
+
clearTimeout(this.eventTimers[device.mac + ".Doorbell.Ring"]);
|
|
458
|
+
delete this.eventTimers[device.mac + ".Doorbell.Ring"];
|
|
347
459
|
}
|
|
460
|
+
// Fire off our MQTT doorbell ring event after ringDuration.
|
|
461
|
+
this.eventTimers[device.mac + ".Doorbell.Ring"] = setTimeout(() => {
|
|
462
|
+
var _a;
|
|
463
|
+
(_a = this.nvr.mqtt) === null || _a === void 0 ? void 0 : _a.publish(accessory, "doorbell", "false");
|
|
464
|
+
// Delete the timer from our event tracker.
|
|
465
|
+
delete this.eventTimers[device.mac + ".Doorbell.Ring"];
|
|
466
|
+
}, this.ringDuration * 1000);
|
|
348
467
|
}
|
|
349
468
|
// LCD message event processing from UniFi Protect and delivered to HomeKit.
|
|
350
469
|
lcdMessageEventHandler(accessory, lcdMessage) {
|
|
351
470
|
var _a;
|
|
352
|
-
const
|
|
353
|
-
if (!
|
|
471
|
+
const device = accessory.context.device;
|
|
472
|
+
if (!device) {
|
|
354
473
|
return;
|
|
355
474
|
}
|
|
356
|
-
(_a = this.nvr.
|
|
475
|
+
(_a = this.nvr.configuredDevices[accessory.UUID]) === null || _a === void 0 ? void 0 : _a.updateLcdSwitch(lcdMessage);
|
|
476
|
+
}
|
|
477
|
+
// Light power state event processing from UniFi Protect.
|
|
478
|
+
lightPowerHandler(accessory, lightState) {
|
|
479
|
+
const device = accessory.context.device;
|
|
480
|
+
if (!device) {
|
|
481
|
+
return;
|
|
482
|
+
}
|
|
483
|
+
// Update the power state on the accessory.
|
|
484
|
+
const lightService = accessory.getService(this.hap.Service.Lightbulb);
|
|
485
|
+
lightService === null || lightService === void 0 ? void 0 : lightService.updateCharacteristic(this.hap.Characteristic.On, lightState);
|
|
486
|
+
}
|
|
487
|
+
// Light power state event processing from UniFi Protect.
|
|
488
|
+
lightBrightnessHandler(accessory, brightness) {
|
|
489
|
+
const device = accessory.context.device;
|
|
490
|
+
if (!device || (brightness < 1)) {
|
|
491
|
+
return;
|
|
492
|
+
}
|
|
493
|
+
// Update the power state on the accessory.
|
|
494
|
+
const lightService = accessory.getService(this.hap.Service.Lightbulb);
|
|
495
|
+
lightService === null || lightService === void 0 ? void 0 : lightService.updateCharacteristic(this.hap.Characteristic.Brightness, (brightness - 1) * 20);
|
|
496
|
+
}
|
|
497
|
+
// Sensor state event processing from UniFi Protect.
|
|
498
|
+
sensorHandler(accessory, protectSensor) {
|
|
499
|
+
// Update the sensor state in HomeKit.
|
|
500
|
+
protectSensor.updateDevice();
|
|
357
501
|
}
|
|
358
502
|
}
|
|
359
503
|
exports.ProtectNvrEvents = ProtectNvrEvents;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protect-nvr-events.js","sourceRoot":"","sources":["../src/protect-nvr-events.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"protect-nvr-events.js","sourceRoot":"","sources":["../src/protect-nvr-events.ts"],"names":[],"mappings":"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"}
|