homebridge-unifi-protect 6.19.0 → 6.21.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.
Files changed (66) hide show
  1. package/README.md +35 -49
  2. package/dist/devices/protect-camera-package.js +1 -1
  3. package/dist/devices/protect-camera-package.js.map +1 -1
  4. package/dist/devices/protect-camera.d.ts +6 -4
  5. package/dist/devices/protect-camera.js +144 -218
  6. package/dist/devices/protect-camera.js.map +1 -1
  7. package/dist/devices/protect-chime.d.ts +3 -0
  8. package/dist/devices/protect-chime.js +100 -28
  9. package/dist/devices/protect-chime.js.map +1 -1
  10. package/dist/devices/protect-device.d.ts +9 -2
  11. package/dist/devices/protect-device.js +162 -105
  12. package/dist/devices/protect-device.js.map +1 -1
  13. package/dist/devices/protect-doorbell.js +48 -81
  14. package/dist/devices/protect-doorbell.js.map +1 -1
  15. package/dist/devices/protect-light.js +33 -43
  16. package/dist/devices/protect-light.js.map +1 -1
  17. package/dist/devices/protect-liveviews.js +10 -20
  18. package/dist/devices/protect-liveviews.js.map +1 -1
  19. package/dist/devices/protect-nvr-systeminfo.js +3 -9
  20. package/dist/devices/protect-nvr-systeminfo.js.map +1 -1
  21. package/dist/devices/protect-securitysystem.d.ts +1 -2
  22. package/dist/devices/protect-securitysystem.js +31 -58
  23. package/dist/devices/protect-securitysystem.js.map +1 -1
  24. package/dist/devices/protect-sensor.d.ts +2 -3
  25. package/dist/devices/protect-sensor.js +154 -204
  26. package/dist/devices/protect-sensor.js.map +1 -1
  27. package/dist/devices/protect-viewer.js +21 -28
  28. package/dist/devices/protect-viewer.js.map +1 -1
  29. package/dist/ffmpeg/protect-ffmpeg-options.d.ts +14 -2
  30. package/dist/ffmpeg/protect-ffmpeg-options.js +61 -46
  31. package/dist/ffmpeg/protect-ffmpeg-options.js.map +1 -1
  32. package/dist/ffmpeg/protect-ffmpeg-record.js +11 -2
  33. package/dist/ffmpeg/protect-ffmpeg-record.js.map +1 -1
  34. package/dist/ffmpeg/protect-ffmpeg-stream.js +2 -2
  35. package/dist/ffmpeg/protect-ffmpeg-stream.js.map +1 -1
  36. package/dist/ffmpeg/protect-ffmpeg.js +2 -2
  37. package/dist/ffmpeg/protect-ffmpeg.js.map +1 -1
  38. package/dist/protect-events.js +25 -20
  39. package/dist/protect-events.js.map +1 -1
  40. package/dist/protect-mqtt.d.ts +2 -2
  41. package/dist/protect-mqtt.js +17 -3
  42. package/dist/protect-mqtt.js.map +1 -1
  43. package/dist/protect-nvr.d.ts +5 -0
  44. package/dist/protect-nvr.js +46 -24
  45. package/dist/protect-nvr.js.map +1 -1
  46. package/dist/protect-options.d.ts +7 -2
  47. package/dist/protect-options.js +24 -12
  48. package/dist/protect-options.js.map +1 -1
  49. package/dist/protect-record.d.ts +3 -1
  50. package/dist/protect-record.js +29 -15
  51. package/dist/protect-record.js.map +1 -1
  52. package/dist/protect-rtp.d.ts +2 -2
  53. package/dist/protect-rtp.js +8 -9
  54. package/dist/protect-rtp.js.map +1 -1
  55. package/dist/protect-snapshot.js +13 -1
  56. package/dist/protect-snapshot.js.map +1 -1
  57. package/dist/protect-stream.js +26 -8
  58. package/dist/protect-stream.js.map +1 -1
  59. package/dist/protect-types.d.ts +10 -0
  60. package/dist/protect-types.js +6 -1
  61. package/dist/protect-types.js.map +1 -1
  62. package/dist/settings.d.ts +1 -0
  63. package/dist/settings.js +2 -0
  64. package/dist/settings.js.map +1 -1
  65. package/homebridge-ui/public/index.html +11 -12
  66. package/package.json +12 -12
@@ -1,6 +1,7 @@
1
1
  import { ProtectDevice } from "./protect-device.js";
2
2
  import { ProtectReservedNames } from "../protect-types.js";
3
3
  export class ProtectSensor extends ProtectDevice {
4
+ enabledSensors;
4
5
  lastAlarm;
5
6
  lastContact;
6
7
  lastLeak;
@@ -8,6 +9,7 @@ export class ProtectSensor extends ProtectDevice {
8
9
  // Create an instance.
9
10
  constructor(nvr, device, accessory) {
10
11
  super(nvr, accessory);
12
+ this.enabledSensors = [];
11
13
  this.ufp = device;
12
14
  this.configureHints();
13
15
  this.configureDevice();
@@ -23,72 +25,57 @@ export class ProtectSensor extends ProtectDevice {
23
25
  // Configure the battery status.
24
26
  this.configureBatteryService();
25
27
  // Configure the sensor services that have been enabled.
26
- const enabledSensors = this.updateDevice(false);
28
+ this.updateDevice(false);
27
29
  // Configure MQTT services.
28
30
  this.configureMqtt();
29
31
  // Listen for events.
30
32
  this.nvr.events.on("updateEvent." + this.ufp.id, this.listeners["updateEvent." + this.ufp.id] = this.eventHandler.bind(this));
31
- // Inform the user what we're enabling on startup.
32
- if (enabledSensors.length) {
33
- this.log.info("Enabled sensor%s: %s.", enabledSensors.length > 1 ? "s" : "", enabledSensors.join(", "));
34
- }
35
- else {
36
- this.log.info("No sensors enabled.");
37
- }
38
33
  return true;
39
34
  }
40
35
  // Update battery status information for HomeKit.
41
36
  configureBatteryService() {
42
- // Find the battery service, if it exists.
43
- let batteryService = this.accessory.getService(this.hap.Service.Battery);
44
- // We don't have the battery service, let's add it to the sensor.
45
- if (!batteryService) {
46
- // We don't have it, add it to the sensor.
47
- batteryService = new this.hap.Service.Battery(this.accessoryName);
48
- if (!batteryService) {
49
- this.log.error("Unable to add the battery service.");
50
- return false;
51
- }
52
- this.accessory.addService(batteryService);
37
+ // Acquire the service.
38
+ const service = this.acquireService(this.hap.Service.Battery);
39
+ // Fail gracefully.
40
+ if (!service) {
41
+ this.log.error("Unable to add the battery service.");
42
+ return false;
53
43
  }
54
44
  // Retrieve the current battery status when requested.
55
- batteryService.getCharacteristic(this.hap.Characteristic.StatusLowBattery)?.onGet(() => {
45
+ service.getCharacteristic(this.hap.Characteristic.StatusLowBattery)?.onGet(() => {
56
46
  return this.ufp.batteryStatus?.percentage ?? 0;
57
47
  });
58
- batteryService.getCharacteristic(this.hap.Characteristic.StatusLowBattery)?.onGet(() => {
48
+ service.getCharacteristic(this.hap.Characteristic.StatusLowBattery)?.onGet(() => {
59
49
  return this.ufp.batteryStatus?.isLow ?? false;
60
50
  });
61
- // Initialize our name.
62
- batteryService.displayName = this.accessoryName;
63
- batteryService.updateCharacteristic(this.hap.Characteristic.Name, this.accessoryName);
64
51
  // Initialize the battery state.
65
52
  this.updateBatteryStatus();
66
53
  return true;
67
54
  }
68
55
  // Update accessory services and characteristics.
69
56
  updateDevice(isInitialized = true) {
70
- const enabledSensors = [];
57
+ const currentEnabledSensors = [];
71
58
  // Update the battery status for the accessory.
72
59
  this.updateBatteryStatus();
73
60
  // Configure the alarm sound sensor.
74
61
  if (this.configureAlarmSoundSensor()) {
75
- enabledSensors.push("alarm sound");
62
+ currentEnabledSensors.push("alarm sound");
76
63
  }
77
64
  // Configure the ambient light sensor.
78
65
  if (this.configureAmbientLightSensor()) {
79
- enabledSensors.push("ambient light");
66
+ currentEnabledSensors.push("ambient light");
80
67
  }
81
68
  // Configure the contact sensor.
82
69
  if (this.configureContactSensor()) {
83
- enabledSensors.push("contact");
70
+ currentEnabledSensors.push("contact");
84
71
  }
85
72
  // Configure the humidity sensor.
86
73
  if (this.configureHumiditySensor()) {
87
- enabledSensors.push("humidity");
74
+ currentEnabledSensors.push("humidity");
88
75
  }
89
76
  // Configure the alarm sound sensor.
90
77
  if (this.configureLeakSensor()) {
91
- enabledSensors.push("leak");
78
+ currentEnabledSensors.push("leak");
92
79
  }
93
80
  // Configure the motion sensor.
94
81
  if (this.configureMotionSensor(this.ufp.motionSettings?.isEnabled, isInitialized)) {
@@ -98,256 +85,230 @@ export class ProtectSensor extends ProtectDevice {
98
85
  // Update the state characteristics.
99
86
  this.configureStateCharacteristics(motionService);
100
87
  }
101
- enabledSensors.push("motion sensor");
88
+ currentEnabledSensors.push("motion sensor");
102
89
  }
103
90
  // Configure the occupancy sensor.
104
91
  this.configureOccupancySensor(this.ufp.motionSettings?.isEnabled, isInitialized);
105
92
  // Configure the temperature sensor.
106
93
  if (this.configureTemperatureSensor()) {
107
- enabledSensors.push("temperature");
94
+ currentEnabledSensors.push("temperature");
95
+ }
96
+ // Inform the user if we've had a change.
97
+ if (this.enabledSensors.join(" ") !== currentEnabledSensors.join(" ")) {
98
+ this.enabledSensors = currentEnabledSensors;
99
+ // Inform the user what we're enabling on startup.
100
+ if (this.enabledSensors.length) {
101
+ this.log.info("Enabled sensor%s: %s.", this.enabledSensors.length > 1 ? "s" : "", this.enabledSensors.join(", "));
102
+ }
103
+ else {
104
+ this.log.info("No sensors enabled.");
105
+ }
108
106
  }
109
- return enabledSensors;
110
107
  }
111
108
  // Configure the alarm sound sensor for HomeKit.
112
109
  configureAlarmSoundSensor() {
113
- // Find the service, if it exists.
114
- let contactService = this.accessory.getServiceById(this.hap.Service.ContactSensor, ProtectReservedNames.CONTACT_SENSOR_ALARM_SOUND);
115
- // Have we disabled the alarm sound sensor?
116
- if (!this.ufp.alarmSettings?.isEnabled) {
117
- if (contactService) {
118
- this.accessory.removeService(contactService);
119
- this.log.info("Disabling alarm sound contact sensor.");
110
+ // Validate whether we should have this service enabled.
111
+ if (!this.validService(this.hap.Service.ContactSensor, () => {
112
+ // Have we disabled the sensor?
113
+ if (!this.ufp.alarmSettings?.isEnabled) {
114
+ return false;
120
115
  }
116
+ return true;
117
+ }, ProtectReservedNames.CONTACT_SENSOR_ALARM_SOUND)) {
121
118
  return false;
122
119
  }
123
- const contactName = this.accessoryName + " Alarm Sound";
124
- // Add the service to the accessory, if needed.
125
- if (!contactService) {
126
- contactService = new this.hap.Service.ContactSensor(contactName, ProtectReservedNames.CONTACT_SENSOR_ALARM_SOUND);
127
- if (!contactService) {
128
- this.log.error("Unable to add alarm sound contact sensor.");
129
- return false;
130
- }
131
- contactService.addOptionalCharacteristic(this.hap.Characteristic.ConfiguredName);
132
- contactService.updateCharacteristic(this.hap.Characteristic.ConfiguredName, contactName);
133
- this.accessory.addService(contactService);
134
- this.log.info("Enabling alarm sound contact sensor.");
120
+ // Acquire the service.
121
+ const service = this.acquireService(this.hap.Service.ContactSensor, this.accessoryName + " Alarm Sound", ProtectReservedNames.CONTACT_SENSOR_ALARM_SOUND);
122
+ // Fail gracefully.
123
+ if (!service) {
124
+ this.log.error("Unable to add alarm sound contact sensor.");
125
+ return false;
135
126
  }
136
127
  // Retrieve the current contact sensor state when requested.
137
- contactService.getCharacteristic(this.hap.Characteristic.ContactSensorState)?.onGet(() => {
128
+ service.getCharacteristic(this.hap.Characteristic.ContactSensorState)?.onGet(() => {
138
129
  return this.alarmDetected;
139
130
  });
140
- // Initialize our name.
141
- contactService.displayName = contactName;
142
- contactService.updateCharacteristic(this.hap.Characteristic.Name, contactName);
143
- contactService.updateCharacteristic(this.hap.Characteristic.ConfiguredName, contactName);
144
131
  // Update the sensor.
145
- contactService.updateCharacteristic(this.hap.Characteristic.ContactSensorState, this.alarmDetected);
132
+ service.updateCharacteristic(this.hap.Characteristic.ContactSensorState, this.alarmDetected);
146
133
  // Update the state characteristics.
147
- this.configureStateCharacteristics(contactService);
134
+ this.configureStateCharacteristics(service);
135
+ // Publish the state.
136
+ this.publish("alarm", this.alarmDetected.toString());
148
137
  return true;
149
138
  }
150
139
  // Configure the ambient light sensor for HomeKit.
151
140
  configureAmbientLightSensor() {
152
- // Find the service, if it exists.
153
- let lightService = this.accessory.getService(this.hap.Service.LightSensor);
154
- // Have we disabled the light sensor?
155
- if (!this.ufp.lightSettings?.isEnabled) {
156
- if (lightService) {
157
- this.accessory.removeService(lightService);
158
- this.log.info("Disabling ambient light sensor.");
141
+ // Validate whether we should have this service enabled.
142
+ if (!this.validService(this.hap.Service.LightSensor, () => {
143
+ // Have we disabled the sensor?
144
+ if (!this.ufp.lightSettings?.isEnabled) {
145
+ return false;
159
146
  }
147
+ return true;
148
+ })) {
160
149
  return false;
161
150
  }
162
- // Add the service to the accessory, if needed.
163
- if (!lightService) {
164
- lightService = new this.hap.Service.LightSensor(this.accessoryName);
165
- if (!lightService) {
166
- this.log.error("Unable to add ambient light sensor.");
167
- return false;
168
- }
169
- this.accessory.addService(lightService);
170
- this.log.info("Enabling ambient light sensor.");
151
+ // Acquire the service.
152
+ const service = this.acquireService(this.hap.Service.LightSensor);
153
+ // Fail gracefully.
154
+ if (!service) {
155
+ this.log.error("Unable to add ambient light sensor.");
156
+ return false;
171
157
  }
172
158
  // Retrieve the current light level when requested.
173
- lightService.getCharacteristic(this.hap.Characteristic.CurrentAmbientLightLevel)?.onGet(() => {
159
+ service.getCharacteristic(this.hap.Characteristic.CurrentAmbientLightLevel)?.onGet(() => {
174
160
  // The minimum value for ambient light in HomeKit is 0.0001. I have no idea why...but it is. Honor it.
175
161
  return this.ambientLight >= 0.0001 ? this.ambientLight : 0.0001;
176
162
  });
177
- // Initialize our name.
178
- lightService.displayName = this.accessoryName;
179
- lightService.updateCharacteristic(this.hap.Characteristic.Name, this.accessoryName);
180
163
  // Update the sensor. The minimum value for ambient light in HomeKit is 0.0001. I have no idea why...but it is. Honor it.
181
- lightService.updateCharacteristic(this.hap.Characteristic.CurrentAmbientLightLevel, this.ambientLight >= 0.0001 ? this.ambientLight : 0.0001);
164
+ service.updateCharacteristic(this.hap.Characteristic.CurrentAmbientLightLevel, this.ambientLight >= 0.0001 ? this.ambientLight : 0.0001);
182
165
  // Update the state characteristics.
183
- this.configureStateCharacteristics(lightService);
166
+ this.configureStateCharacteristics(service);
167
+ // Publish the state.
168
+ this.publish("ambientlight", this.ambientLight.toString());
184
169
  return true;
185
170
  }
186
171
  // Configure the contact sensor for HomeKit.
187
172
  configureContactSensor() {
188
- // Find the service, if it exists.
189
- let contactService = this.accessory.getServiceById(this.hap.Service.ContactSensor, ProtectReservedNames.CONTACT_SENSOR);
190
- // Have we disabled the sensor or are we configured as a leak sensor?
191
- if (!this.ufp.mountType || (this.ufp.mountType === "leak") || (this.ufp.mountType === "none")) {
192
- if (contactService) {
193
- this.accessory.removeService(contactService);
194
- this.log.info("Disabling contact sensor.");
173
+ // Validate whether we should have this service enabled.
174
+ if (!this.validService(this.hap.Service.ContactSensor, () => {
175
+ // Have we disabled the sensor or are we configured as a leak sensor?
176
+ if (!this.ufp.mountType || (this.ufp.mountType === "leak") || (this.ufp.mountType === "none")) {
177
+ return false;
195
178
  }
179
+ return true;
180
+ }, ProtectReservedNames.CONTACT_SENSOR)) {
196
181
  return false;
197
182
  }
198
- // Add the service to the accessory, if needed.
199
- if (!contactService) {
200
- contactService = new this.hap.Service.ContactSensor(this.accessoryName, ProtectReservedNames.CONTACT_SENSOR);
201
- if (!contactService) {
202
- this.log.error("Unable to add contact sensor.");
203
- return false;
204
- }
205
- this.accessory.addService(contactService);
206
- this.log.info("Enabling contact sensor.");
183
+ // Acquire the service.
184
+ const service = this.acquireService(this.hap.Service.ContactSensor, undefined, ProtectReservedNames.CONTACT_SENSOR);
185
+ // Fail gracefully.
186
+ if (!service) {
187
+ this.log.error("Unable to add contact sensor.");
188
+ return false;
207
189
  }
208
190
  // Retrieve the current contact sensor state when requested.
209
- contactService.getCharacteristic(this.hap.Characteristic.ContactSensorState)?.onGet(() => {
191
+ service.getCharacteristic(this.hap.Characteristic.ContactSensorState)?.onGet(() => {
210
192
  return this.contact;
211
193
  });
212
- // Initialize our name.
213
- contactService.displayName = this.accessoryName;
214
- contactService.updateCharacteristic(this.hap.Characteristic.Name, this.accessoryName);
215
194
  // Update the sensor.
216
- contactService.updateCharacteristic(this.hap.Characteristic.ContactSensorState, this.contact);
195
+ service.updateCharacteristic(this.hap.Characteristic.ContactSensorState, this.contact);
217
196
  // Update the state characteristics.
218
- this.configureStateCharacteristics(contactService);
197
+ this.configureStateCharacteristics(service);
198
+ // Publish the state.
199
+ this.publish("contact", this.contact.toString());
219
200
  return true;
220
201
  }
221
202
  // Configure the humidity sensor for HomeKit.
222
203
  configureHumiditySensor() {
223
- // Find the service, if it exists.
224
- let humidityService = this.accessory.getService(this.hap.Service.HumiditySensor);
225
- // Have we disabled the sensor?
226
- if (!this.ufp.humiditySettings?.isEnabled) {
227
- if (humidityService) {
228
- this.accessory.removeService(humidityService);
229
- this.log.info("Disabling humidity sensor.");
204
+ // Validate whether we should have this service enabled.
205
+ if (!this.validService(this.hap.Service.HumiditySensor, () => {
206
+ // Have we disabled the sensor?
207
+ if (!this.ufp.humiditySettings?.isEnabled) {
208
+ return false;
230
209
  }
210
+ return true;
211
+ })) {
231
212
  return false;
232
213
  }
233
- // Add the service to the accessory, if needed.
234
- if (!humidityService) {
235
- humidityService = new this.hap.Service.HumiditySensor(this.accessoryName);
236
- if (!humidityService) {
237
- this.log.error("Unable to add humidity sensor.");
238
- return false;
239
- }
240
- this.accessory.addService(humidityService);
241
- this.log.info("Enabling humidity sensor.");
214
+ // Acquire the service.
215
+ const service = this.acquireService(this.hap.Service.HumiditySensor);
216
+ // Fail gracefully.
217
+ if (!service) {
218
+ this.log.error("Unable to add humidity sensor.");
219
+ return false;
242
220
  }
243
221
  // Retrieve the current humidity when requested.
244
- humidityService.getCharacteristic(this.hap.Characteristic.CurrentRelativeHumidity)?.onGet(() => {
222
+ service.getCharacteristic(this.hap.Characteristic.CurrentRelativeHumidity)?.onGet(() => {
245
223
  return this.humidity < 0 ? 0 : this.humidity;
246
224
  });
247
- // Initialize our name.
248
- humidityService.displayName = this.accessoryName;
249
- humidityService.updateCharacteristic(this.hap.Characteristic.Name, this.accessoryName);
250
225
  // Update the sensor.
251
- humidityService.updateCharacteristic(this.hap.Characteristic.CurrentRelativeHumidity, this.humidity < 0 ? 0 : this.humidity);
226
+ service.updateCharacteristic(this.hap.Characteristic.CurrentRelativeHumidity, this.humidity < 0 ? 0 : this.humidity);
252
227
  // Update the state characteristics.
253
- this.configureStateCharacteristics(humidityService);
228
+ this.configureStateCharacteristics(service);
229
+ // Publish the state.
230
+ this.publish("humidity", this.humidity.toString());
254
231
  return true;
255
232
  }
256
233
  // Configure the leak sensor for HomeKit.
257
234
  configureLeakSensor() {
258
- // Find the service, if it exists.
259
- let leakService = this.accessory.getService(this.hap.Service.LeakSensor);
260
- // Have we disabled the leak sensor?
261
- if (this.ufp.mountType !== "leak") {
262
- if (leakService) {
263
- this.accessory.removeService(leakService);
264
- this.log.info("Disabling leak sensor.");
235
+ // Validate whether we should have this service enabled.
236
+ if (!this.validService(this.hap.Service.LeakSensor, () => {
237
+ // Have we disabled the leak sensor?
238
+ if (this.ufp.mountType !== "leak") {
239
+ return false;
265
240
  }
241
+ return true;
242
+ })) {
266
243
  return false;
267
244
  }
268
- // Add the service to the accessory, if needed.
269
- if (!leakService) {
270
- leakService = new this.hap.Service.LeakSensor(this.accessoryName);
271
- if (!leakService) {
272
- this.log.error("Unable to add leak sensor.");
273
- return false;
274
- }
275
- this.accessory.addService(leakService);
276
- this.log.info("Enabling leak sensor.");
245
+ // Acquire the service.
246
+ const service = this.acquireService(this.hap.Service.LeakSensor);
247
+ // Fail gracefully.
248
+ if (!service) {
249
+ this.log.error("Unable to add leak sensor.");
250
+ return false;
277
251
  }
278
252
  // Retrieve the current contact sensor state when requested.
279
- leakService.getCharacteristic(this.hap.Characteristic.LeakDetected)?.onGet(() => {
253
+ service.getCharacteristic(this.hap.Characteristic.LeakDetected)?.onGet(() => {
280
254
  return this.leakDetected;
281
255
  });
282
- // Initialize our name.
283
- leakService.displayName = this.accessoryName;
284
- leakService.updateCharacteristic(this.hap.Characteristic.Name, this.accessoryName);
285
256
  // Update the sensor.
286
- leakService.updateCharacteristic(this.hap.Characteristic.LeakDetected, this.leakDetected);
257
+ service.updateCharacteristic(this.hap.Characteristic.LeakDetected, this.leakDetected);
287
258
  // Update the state characteristics.
288
- this.configureStateCharacteristics(leakService);
259
+ this.configureStateCharacteristics(service);
260
+ // Publish the state.
261
+ this.publish("leak", this.leakDetected.toString());
289
262
  return true;
290
263
  }
291
264
  // Configure the temperature sensor for HomeKit.
292
265
  configureTemperatureSensor() {
293
- // Find the service, if it exists.
294
- let temperatureService = this.accessory.getService(this.hap.Service.TemperatureSensor);
295
- // Have we disabled the temperature sensor?
296
- if (!this.ufp.temperatureSettings?.isEnabled) {
297
- if (temperatureService) {
298
- this.accessory.removeService(temperatureService);
299
- this.log.info("Disabling temperature sensor.");
266
+ // Validate whether we should have this service enabled.
267
+ if (!this.validService(this.hap.Service.TemperatureSensor, () => {
268
+ // Have we disabled the sensor?
269
+ if (!this.ufp.temperatureSettings?.isEnabled) {
270
+ return false;
300
271
  }
272
+ return true;
273
+ })) {
301
274
  return false;
302
275
  }
303
- // Add the service to the accessory, if needed.
304
- if (!temperatureService) {
305
- temperatureService = new this.hap.Service.TemperatureSensor(this.accessoryName);
306
- if (!temperatureService) {
307
- this.log.error("Unable to add temperature sensor.");
308
- return false;
309
- }
310
- this.accessory.addService(temperatureService);
311
- this.log.info("Enabling temperature sensor.");
276
+ // Acquire the service.
277
+ const service = this.acquireService(this.hap.Service.TemperatureSensor);
278
+ // Fail gracefully.
279
+ if (!service) {
280
+ this.log.error("Unable to add humidity sensor.");
281
+ return false;
312
282
  }
313
283
  // Retrieve the current temperature when requested.
314
- temperatureService.getCharacteristic(this.hap.Characteristic.CurrentTemperature)?.onGet(() => {
284
+ service.getCharacteristic(this.hap.Characteristic.CurrentTemperature)?.onGet(() => {
315
285
  return this.temperature < 0 ? 0 : this.temperature;
316
286
  });
317
- // Initialize our name.
318
- temperatureService.displayName = this.accessoryName;
319
- temperatureService.updateCharacteristic(this.hap.Characteristic.Name, this.accessoryName);
320
287
  // Update the sensor.
321
- temperatureService.updateCharacteristic(this.hap.Characteristic.CurrentTemperature, this.temperature < 0 ? 0 : this.temperature);
288
+ service.updateCharacteristic(this.hap.Characteristic.CurrentTemperature, this.temperature < 0 ? 0 : this.temperature);
322
289
  // Update the state characteristics.
323
- this.configureStateCharacteristics(temperatureService);
324
- return true;
325
- }
326
- // Configure the active connection status in HomeKit.
327
- configureActiveStatus(service) {
328
- // Retrieve the current connection status when requested.
329
- service.getCharacteristic(this.hap.Characteristic.StatusActive)?.onGet(() => {
330
- return this.isOnline;
331
- });
332
- // Update the current connection status.
333
- service.updateCharacteristic(this.hap.Characteristic.StatusActive, this.isOnline);
290
+ this.configureStateCharacteristics(service);
291
+ // Publish the state.
292
+ this.publish("temperature", this.temperature.toString());
334
293
  return true;
335
294
  }
336
295
  // Update the battery status in HomeKit.
337
296
  updateBatteryStatus() {
338
297
  // Find the battery service, if it exists.
339
298
  const batteryService = this.accessory.getService(this.hap.Service.Battery);
340
- // We don't have the battery service, we're done.
341
- if (!batteryService) {
342
- return false;
343
- }
344
299
  // Update the battery status.
345
- batteryService.updateCharacteristic(this.hap.Characteristic.BatteryLevel, this.ufp.batteryStatus?.percentage ?? 0);
346
- batteryService.updateCharacteristic(this.hap.Characteristic.StatusLowBattery, this.ufp.batteryStatus?.isLow);
300
+ batteryService?.updateCharacteristic(this.hap.Characteristic.BatteryLevel, this.ufp.batteryStatus?.percentage ?? 0);
301
+ batteryService?.updateCharacteristic(this.hap.Characteristic.StatusLowBattery, this.ufp.batteryStatus?.isLow);
347
302
  return true;
348
303
  }
349
- // Configure the tamper status in HomeKit.
350
- configureTamperedStatus(service) {
304
+ // Configure the additional state characteristics in HomeKit.
305
+ configureStateCharacteristics(service) {
306
+ // Retrieve the current connection status when requested.
307
+ service.getCharacteristic(this.hap.Characteristic.StatusActive)?.onGet(() => {
308
+ return this.isOnline;
309
+ });
310
+ // Update the current connection status.
311
+ service.updateCharacteristic(this.hap.Characteristic.StatusActive, this.isOnline);
351
312
  // Retrieve the current tamper status when requested.
352
313
  service.getCharacteristic(this.hap.Characteristic.StatusTampered)?.onGet(() => {
353
314
  return this.ufp.tamperingDetectedAt !== null;
@@ -356,14 +317,6 @@ export class ProtectSensor extends ProtectDevice {
356
317
  service.updateCharacteristic(this.hap.Characteristic.StatusTampered, this.ufp.tamperingDetectedAt !== null);
357
318
  return true;
358
319
  }
359
- // Configure the additional state characteristics in HomeKit.
360
- configureStateCharacteristics(service) {
361
- // Update the active connection status.
362
- this.configureActiveStatus(service);
363
- // Update the tamper status.
364
- this.configureTamperedStatus(service);
365
- return true;
366
- }
367
320
  // Get the current alarm alert detection information.
368
321
  get alarmDetected() {
369
322
  // Return true if we are not null, meaning the alarm has sounded.
@@ -371,7 +324,6 @@ export class ProtectSensor extends ProtectDevice {
371
324
  // Save the state change and publish to MQTT.
372
325
  if (value !== this.lastAlarm) {
373
326
  this.lastAlarm = value;
374
- this.nvr.mqtt?.publish(this.accessory, "alarm", value.toString());
375
327
  this.log.info("Alarm %sdetected.", value ? "" : "no longer ");
376
328
  }
377
329
  return value;
@@ -385,7 +337,6 @@ export class ProtectSensor extends ProtectDevice {
385
337
  // Save the state change and publish to MQTT.
386
338
  if (this.ufp.isOpened !== this.lastContact) {
387
339
  this.lastContact = this.ufp.isOpened;
388
- this.nvr.mqtt?.publish(this.accessory, "contact", this.ufp.isOpened.toString());
389
340
  }
390
341
  return this.ufp.isOpened;
391
342
  }
@@ -405,7 +356,6 @@ export class ProtectSensor extends ProtectDevice {
405
356
  // Save the state change and publish to MQTT.
406
357
  if (value !== this.lastLeak) {
407
358
  this.lastLeak = value;
408
- this.nvr.mqtt?.publish(this.accessory, "leak", value.toString());
409
359
  this.log.info("Leak %sdetected.", value ? "" : "no longer ");
410
360
  }
411
361
  return value;
@@ -416,22 +366,22 @@ export class ProtectSensor extends ProtectDevice {
416
366
  }
417
367
  // Configure MQTT capabilities for sensors.
418
368
  configureMqtt() {
419
- this.nvr.mqtt?.subscribeGet(this.accessory, "alarm", "Alarm detected", () => {
369
+ this.subscribeGet("alarm", "alarm detected", () => {
420
370
  return this.alarmDetected.toString();
421
371
  });
422
- this.nvr.mqtt?.subscribeGet(this.accessory, "ambientlight", "Ambient light", () => {
372
+ this.subscribeGet("ambientlight", "ambient light", () => {
423
373
  return this.ambientLight.toString();
424
374
  });
425
- this.nvr.mqtt?.subscribeGet(this.accessory, "contact", "Contact sensor", () => {
375
+ this.subscribeGet("contact", "contact sensor", () => {
426
376
  return this.contact.toString();
427
377
  });
428
- this.nvr.mqtt?.subscribeGet(this.accessory, "humidity", "Humidity", () => {
378
+ this.subscribeGet("humidity", "humidity", () => {
429
379
  return this.humidity.toString();
430
380
  });
431
- this.nvr.mqtt?.subscribeGet(this.accessory, "leak", "Leak detected", () => {
381
+ this.subscribeGet("leak", "leak detected", () => {
432
382
  return this.leakDetected.toString();
433
383
  });
434
- this.nvr.mqtt?.subscribeGet(this.accessory, "temperature", "Temperature", () => {
384
+ this.subscribeGet("temperature", "temperature", () => {
435
385
  return this.temperature.toString();
436
386
  });
437
387
  }
@@ -1 +1 @@
1
- {"version":3,"file":"protect-sensor.js","sourceRoot":"","sources":["../../src/devices/protect-sensor.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,OAAO,aAAc,SAAQ,aAAa;IAEtC,SAAS,CAAW;IACpB,WAAW,CAAW;IACtB,QAAQ,CAAW;IACpB,GAAG,CAAsB;IAEhC,sBAAsB;IACtB,YAAY,GAAe,EAAE,MAA2B,EAAE,SAA4B;QAEpF,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAEtB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC;QAElB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,6DAA6D;IACrD,eAAe;QAErB,mEAAmE;QACnE,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAC1C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;QAE9C,mCAAmC;QACnC,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,gCAAgC;QAChC,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAE/B,wDAAwD;QACxD,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAEhD,2BAA2B;QAC3B,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,qBAAqB;QACrB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE9H,kDAAkD;QAClD,IAAG,cAAc,CAAC,MAAM,EAAE,CAAC;YAEzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1G,CAAC;aAAM,CAAC;YAEN,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iDAAiD;IACzC,uBAAuB;QAE7B,0CAA0C;QAC1C,IAAI,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEzE,iEAAiE;QACjE,IAAG,CAAC,cAAc,EAAE,CAAC;YAEnB,0CAA0C;YAC1C,cAAc,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAElE,IAAG,CAAC,cAAc,EAAE,CAAC;gBAEnB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBACrD,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAC5C,CAAC;QAED,sDAAsD;QACtD,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;YAErF,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,IAAI,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;YAErF,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,IAAI,KAAK,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,uBAAuB;QACvB,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC;QAChD,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEtF,gCAAgC;QAChC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iDAAiD;IAC1C,YAAY,CAAC,aAAa,GAAG,IAAI;QAEtC,MAAM,cAAc,GAAa,EAAE,CAAC;QAEpC,+CAA+C;QAC/C,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,oCAAoC;QACpC,IAAG,IAAI,CAAC,yBAAyB,EAAE,EAAE,CAAC;YAEpC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrC,CAAC;QAED,sCAAsC;QACtC,IAAG,IAAI,CAAC,2BAA2B,EAAE,EAAE,CAAC;YAEtC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACvC,CAAC;QAED,gCAAgC;QAChC,IAAG,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAC;YAEjC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QAED,iCAAiC;QACjC,IAAG,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YAElC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,CAAC;QAED,oCAAoC;QACpC,IAAG,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;YAE9B,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAED,+BAA+B;QAC/B,IAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,CAAC;YAEjF,8GAA8G;YAC9G,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAE/E,IAAG,aAAa,EAAE,CAAC;gBAEjB,oCAAoC;gBACpC,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,CAAC;YACpD,CAAC;YAED,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACvC,CAAC;QAED,kCAAkC;QAClC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QAEjF,oCAAoC;QACpC,IAAG,IAAI,CAAC,0BAA0B,EAAE,EAAE,CAAC;YAErC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,gDAAgD;IACxC,yBAAyB;QAE/B,kCAAkC;QAClC,IAAI,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,oBAAoB,CAAC,0BAA0B,CAAC,CAAC;QAEpI,2CAA2C;QAC3C,IAAG,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC;YAEtC,IAAG,cAAc,EAAE,CAAC;gBAElB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;gBAC7C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;YACzD,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,GAAG,cAAc,CAAC;QAExD,+CAA+C;QAC/C,IAAG,CAAC,cAAc,EAAE,CAAC;YAEnB,cAAc,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,oBAAoB,CAAC,0BAA0B,CAAC,CAAC;YAElH,IAAG,CAAC,cAAc,EAAE,CAAC;gBAEnB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAC5D,OAAO,KAAK,CAAC;YACf,CAAC;YAED,cAAc,CAAC,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YACjF,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;YACzF,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YAE1C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACxD,CAAC;QAED,4DAA4D;QAC5D,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;YAEvF,OAAO,IAAI,CAAC,aAAa,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,uBAAuB;QACvB,cAAc,CAAC,WAAW,GAAG,WAAW,CAAC;QACzC,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC/E,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QAEzF,qBAAqB;QACrB,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,kBAAkB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEpG,oCAAoC;QACpC,IAAI,CAAC,6BAA6B,CAAC,cAAc,CAAC,CAAC;QAEnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kDAAkD;IAC1C,2BAA2B;QAEjC,kCAAkC;QAClC,IAAI,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE3E,qCAAqC;QACrC,IAAG,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC;YAEtC,IAAG,YAAY,EAAE,CAAC;gBAEhB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;gBAC3C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YACnD,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QAED,+CAA+C;QAC/C,IAAG,CAAC,YAAY,EAAE,CAAC;YAEjB,YAAY,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAEpE,IAAG,CAAC,YAAY,EAAE,CAAC;gBAEjB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBACtD,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YACxC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAClD,CAAC;QAED,mDAAmD;QACnD,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,wBAAwB,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;YAE3F,sGAAsG;YACtG,OAAO,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,uBAAuB;QACvB,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC;QAC9C,YAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEpF,yHAAyH;QACzH,YAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,wBAAwB,EAAE,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAE9I,oCAAoC;QACpC,IAAI,CAAC,6BAA6B,CAAC,YAAY,CAAC,CAAC;QAEjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4CAA4C;IACpC,sBAAsB;QAE5B,kCAAkC;QAClC,IAAI,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,oBAAoB,CAAC,cAAc,CAAC,CAAC;QAExH,qEAAqE;QACrE,IAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,KAAK,MAAM,CAAC,EAAE,CAAC;YAE7F,IAAG,cAAc,EAAE,CAAC;gBAElB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;gBAC7C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC7C,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QAED,+CAA+C;QAC/C,IAAG,CAAC,cAAc,EAAE,CAAC;YAEnB,cAAc,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,oBAAoB,CAAC,cAAc,CAAC,CAAC;YAE7G,IAAG,CAAC,cAAc,EAAE,CAAC;gBAEnB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;gBAChD,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YAC1C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC5C,CAAC;QAED,4DAA4D;QAC5D,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;YAEvF,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,uBAAuB;QACvB,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC;QAChD,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEtF,qBAAqB;QACrB,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAE9F,oCAAoC;QACpC,IAAI,CAAC,6BAA6B,CAAC,cAAc,CAAC,CAAC;QAEnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6CAA6C;IACrC,uBAAuB;QAE7B,kCAAkC;QAClC,IAAI,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAEjF,+BAA+B;QAC/B,IAAG,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,EAAE,CAAC;YAEzC,IAAG,eAAe,EAAE,CAAC;gBAEnB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;gBAC9C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC9C,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QAED,+CAA+C;QAC/C,IAAG,CAAC,eAAe,EAAE,CAAC;YAEpB,eAAe,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAE1E,IAAG,CAAC,eAAe,EAAE,CAAC;gBAEpB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBACjD,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YAC3C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC7C,CAAC;QAED,gDAAgD;QAChD,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,uBAAuB,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;YAE7F,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,uBAAuB;QACvB,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC;QACjD,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEvF,qBAAqB;QACrB,eAAe,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,uBAAuB,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE7H,oCAAoC;QACpC,IAAI,CAAC,6BAA6B,CAAC,eAAe,CAAC,CAAC;QAEpD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yCAAyC;IACjC,mBAAmB;QAEzB,kCAAkC;QAClC,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAEzE,oCAAoC;QACpC,IAAG,IAAI,CAAC,GAAG,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;YAEjC,IAAG,WAAW,EAAE,CAAC;gBAEf,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;gBAC1C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAC1C,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QAED,+CAA+C;QAC/C,IAAG,CAAC,WAAW,EAAE,CAAC;YAEhB,WAAW,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAElE,IAAG,CAAC,WAAW,EAAE,CAAC;gBAEhB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBAC7C,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAEvC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACzC,CAAC;QAED,4DAA4D;QAC5D,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;YAE9E,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,uBAAuB;QACvB,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC;QAC7C,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEnF,qBAAqB;QACrB,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAE1F,oCAAoC;QACpC,IAAI,CAAC,6BAA6B,CAAC,WAAW,CAAC,CAAC;QAEhD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gDAAgD;IACxC,0BAA0B;QAEhC,kCAAkC;QAClC,IAAI,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAEvF,2CAA2C;QAC3C,IAAG,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,SAAS,EAAE,CAAC;YAE5C,IAAG,kBAAkB,EAAE,CAAC;gBAEtB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;gBACjD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;YACjD,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QAED,+CAA+C;QAC/C,IAAG,CAAC,kBAAkB,EAAE,CAAC;YAEvB,kBAAkB,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAEhF,IAAG,CAAC,kBAAkB,EAAE,CAAC;gBAEvB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;gBACpD,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;YAC9C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAChD,CAAC;QAED,mDAAmD;QACnD,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;YAE3F,OAAO,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,uBAAuB;QACvB,kBAAkB,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC;QACpD,kBAAkB,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAE1F,qBAAqB;QACrB,kBAAkB,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,kBAAkB,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEjI,oCAAoC;QACpC,IAAI,CAAC,6BAA6B,CAAC,kBAAkB,CAAC,CAAC;QAEvD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qDAAqD;IAC7C,qBAAqB,CAAC,OAAgB;QAE5C,yDAAyD;QACzD,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;YAE1E,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,wCAAwC;QACxC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAElF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wCAAwC;IAChC,mBAAmB;QAEzB,0CAA0C;QAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE3E,iDAAiD;QACjD,IAAG,CAAC,cAAc,EAAE,CAAC;YAEnB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,6BAA6B;QAC7B,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC;QACnH,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAE7G,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0CAA0C;IAClC,uBAAuB,CAAC,OAAgB;QAE9C,qDAAqD;QACrD,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;YAE5E,OAAO,IAAI,CAAC,GAAG,CAAC,mBAAmB,KAAK,IAAI,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,4BAA4B;QAC5B,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,mBAAmB,KAAK,IAAI,CAAC,CAAC;QAE5G,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6DAA6D;IACrD,6BAA6B,CAAC,OAAgB;QAEpD,uCAAuC;QACvC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAEpC,4BAA4B;QAC5B,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAEtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qDAAqD;IACrD,IAAY,aAAa;QAEvB,iEAAiE;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,KAAK,IAAI,CAAC;QAEjD,6CAA6C;QAC7C,IAAG,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YAE5B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAElE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6CAA6C;IAC7C,IAAY,YAAY;QAEtB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,8CAA8C;IAC9C,IAAY,OAAO;QAEjB,6CAA6C;QAC7C,IAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YAE1C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClF,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC3B,CAAC;IAED,wCAAwC;IACxC,IAAY,QAAQ;QAElB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,2CAA2C;IAC3C,IAAY,YAAY;QAEtB,oEAAoE;QACpE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,KAAK,IAAI,CAAC;QAE/C,yIAAyI;QACzI,IAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAE3C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,6CAA6C;QAC7C,IAAG,KAAK,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YAE3B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEjE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,2CAA2C;IAC3C,IAAY,WAAW;QAErB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,2CAA2C;IACnC,aAAa;QAEnB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE;YAE1E,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,EAAE;YAEhF,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,EAAE;YAE5E,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE;YAEvE,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE;YAExE,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,EAAE;YAE7E,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gCAAgC;IACxB,YAAY,CAAC,MAA0B;QAE7C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAqC,CAAC;QAE7D,gDAAgD;QAChD,IAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAE5B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC;QAED,cAAc;QACd,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;CACF"}
1
+ {"version":3,"file":"protect-sensor.js","sourceRoot":"","sources":["../../src/devices/protect-sensor.ts"],"names":[],"mappings":"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"}