homebridge-unifi-protect 6.19.0 → 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.
Files changed (44) hide show
  1. package/dist/devices/protect-camera.d.ts +0 -2
  2. package/dist/devices/protect-camera.js +114 -189
  3. package/dist/devices/protect-camera.js.map +1 -1
  4. package/dist/devices/protect-chime.d.ts +3 -0
  5. package/dist/devices/protect-chime.js +100 -28
  6. package/dist/devices/protect-chime.js.map +1 -1
  7. package/dist/devices/protect-device.d.ts +7 -2
  8. package/dist/devices/protect-device.js +147 -98
  9. package/dist/devices/protect-device.js.map +1 -1
  10. package/dist/devices/protect-doorbell.js +48 -81
  11. package/dist/devices/protect-doorbell.js.map +1 -1
  12. package/dist/devices/protect-light.js +33 -43
  13. package/dist/devices/protect-light.js.map +1 -1
  14. package/dist/devices/protect-liveviews.js +10 -20
  15. package/dist/devices/protect-liveviews.js.map +1 -1
  16. package/dist/devices/protect-nvr-systeminfo.js +2 -8
  17. package/dist/devices/protect-nvr-systeminfo.js.map +1 -1
  18. package/dist/devices/protect-securitysystem.d.ts +1 -2
  19. package/dist/devices/protect-securitysystem.js +31 -58
  20. package/dist/devices/protect-securitysystem.js.map +1 -1
  21. package/dist/devices/protect-sensor.d.ts +2 -1
  22. package/dist/devices/protect-sensor.js +137 -184
  23. package/dist/devices/protect-sensor.js.map +1 -1
  24. package/dist/devices/protect-viewer.js +21 -28
  25. package/dist/devices/protect-viewer.js.map +1 -1
  26. package/dist/protect-mqtt.d.ts +2 -2
  27. package/dist/protect-mqtt.js +17 -3
  28. package/dist/protect-mqtt.js.map +1 -1
  29. package/dist/protect-nvr.js +5 -2
  30. package/dist/protect-nvr.js.map +1 -1
  31. package/dist/protect-options.js +6 -5
  32. package/dist/protect-options.js.map +1 -1
  33. package/dist/protect-record.js +8 -8
  34. package/dist/protect-record.js.map +1 -1
  35. package/dist/protect-snapshot.js +8 -0
  36. package/dist/protect-snapshot.js.map +1 -1
  37. package/dist/protect-types.d.ts +3 -0
  38. package/dist/protect-types.js +6 -0
  39. package/dist/protect-types.js.map +1 -1
  40. package/dist/settings.d.ts +1 -0
  41. package/dist/settings.js +2 -0
  42. package/dist/settings.js.map +1 -1
  43. package/homebridge-ui/public/index.html +2 -0
  44. package/package.json +9 -9
@@ -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,229 +85,199 @@ 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);
148
135
  return true;
149
136
  }
150
137
  // Configure the ambient light sensor for HomeKit.
151
138
  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.");
139
+ // Validate whether we should have this service enabled.
140
+ if (!this.validService(this.hap.Service.LightSensor, () => {
141
+ // Have we disabled the sensor?
142
+ if (!this.ufp.lightSettings?.isEnabled) {
143
+ return false;
159
144
  }
145
+ return true;
146
+ })) {
160
147
  return false;
161
148
  }
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.");
149
+ // Acquire the service.
150
+ const service = this.acquireService(this.hap.Service.LightSensor);
151
+ // Fail gracefully.
152
+ if (!service) {
153
+ this.log.error("Unable to add ambient light sensor.");
154
+ return false;
171
155
  }
172
156
  // Retrieve the current light level when requested.
173
- lightService.getCharacteristic(this.hap.Characteristic.CurrentAmbientLightLevel)?.onGet(() => {
157
+ service.getCharacteristic(this.hap.Characteristic.CurrentAmbientLightLevel)?.onGet(() => {
174
158
  // The minimum value for ambient light in HomeKit is 0.0001. I have no idea why...but it is. Honor it.
175
159
  return this.ambientLight >= 0.0001 ? this.ambientLight : 0.0001;
176
160
  });
177
- // Initialize our name.
178
- lightService.displayName = this.accessoryName;
179
- lightService.updateCharacteristic(this.hap.Characteristic.Name, this.accessoryName);
180
161
  // 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);
162
+ service.updateCharacteristic(this.hap.Characteristic.CurrentAmbientLightLevel, this.ambientLight >= 0.0001 ? this.ambientLight : 0.0001);
182
163
  // Update the state characteristics.
183
- this.configureStateCharacteristics(lightService);
164
+ this.configureStateCharacteristics(service);
184
165
  return true;
185
166
  }
186
167
  // Configure the contact sensor for HomeKit.
187
168
  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.");
169
+ // Validate whether we should have this service enabled.
170
+ if (!this.validService(this.hap.Service.ContactSensor, () => {
171
+ // Have we disabled the sensor or are we configured as a leak sensor?
172
+ if (!this.ufp.mountType || (this.ufp.mountType === "leak") || (this.ufp.mountType === "none")) {
173
+ return false;
195
174
  }
175
+ return true;
176
+ }, ProtectReservedNames.CONTACT_SENSOR)) {
196
177
  return false;
197
178
  }
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.");
179
+ // Acquire the service.
180
+ const service = this.acquireService(this.hap.Service.ContactSensor, undefined, ProtectReservedNames.CONTACT_SENSOR);
181
+ // Fail gracefully.
182
+ if (!service) {
183
+ this.log.error("Unable to add contact sensor.");
184
+ return false;
207
185
  }
208
186
  // Retrieve the current contact sensor state when requested.
209
- contactService.getCharacteristic(this.hap.Characteristic.ContactSensorState)?.onGet(() => {
187
+ service.getCharacteristic(this.hap.Characteristic.ContactSensorState)?.onGet(() => {
210
188
  return this.contact;
211
189
  });
212
- // Initialize our name.
213
- contactService.displayName = this.accessoryName;
214
- contactService.updateCharacteristic(this.hap.Characteristic.Name, this.accessoryName);
215
190
  // Update the sensor.
216
- contactService.updateCharacteristic(this.hap.Characteristic.ContactSensorState, this.contact);
191
+ service.updateCharacteristic(this.hap.Characteristic.ContactSensorState, this.contact);
217
192
  // Update the state characteristics.
218
- this.configureStateCharacteristics(contactService);
193
+ this.configureStateCharacteristics(service);
219
194
  return true;
220
195
  }
221
196
  // Configure the humidity sensor for HomeKit.
222
197
  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.");
198
+ // Validate whether we should have this service enabled.
199
+ if (!this.validService(this.hap.Service.HumiditySensor, () => {
200
+ // Have we disabled the sensor?
201
+ if (!this.ufp.humiditySettings?.isEnabled) {
202
+ return false;
230
203
  }
204
+ return true;
205
+ })) {
231
206
  return false;
232
207
  }
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.");
208
+ // Acquire the service.
209
+ const service = this.acquireService(this.hap.Service.HumiditySensor);
210
+ // Fail gracefully.
211
+ if (!service) {
212
+ this.log.error("Unable to add humidity sensor.");
213
+ return false;
242
214
  }
243
215
  // Retrieve the current humidity when requested.
244
- humidityService.getCharacteristic(this.hap.Characteristic.CurrentRelativeHumidity)?.onGet(() => {
216
+ service.getCharacteristic(this.hap.Characteristic.CurrentRelativeHumidity)?.onGet(() => {
245
217
  return this.humidity < 0 ? 0 : this.humidity;
246
218
  });
247
- // Initialize our name.
248
- humidityService.displayName = this.accessoryName;
249
- humidityService.updateCharacteristic(this.hap.Characteristic.Name, this.accessoryName);
250
219
  // Update the sensor.
251
- humidityService.updateCharacteristic(this.hap.Characteristic.CurrentRelativeHumidity, this.humidity < 0 ? 0 : this.humidity);
220
+ service.updateCharacteristic(this.hap.Characteristic.CurrentRelativeHumidity, this.humidity < 0 ? 0 : this.humidity);
252
221
  // Update the state characteristics.
253
- this.configureStateCharacteristics(humidityService);
222
+ this.configureStateCharacteristics(service);
254
223
  return true;
255
224
  }
256
225
  // Configure the leak sensor for HomeKit.
257
226
  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.");
227
+ // Validate whether we should have this service enabled.
228
+ if (!this.validService(this.hap.Service.LeakSensor, () => {
229
+ // Have we disabled the leak sensor?
230
+ if (this.ufp.mountType !== "leak") {
231
+ return false;
265
232
  }
233
+ return true;
234
+ })) {
266
235
  return false;
267
236
  }
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.");
237
+ // Acquire the service.
238
+ const service = this.acquireService(this.hap.Service.LeakSensor);
239
+ // Fail gracefully.
240
+ if (!service) {
241
+ this.log.error("Unable to add leak sensor.");
242
+ return false;
277
243
  }
278
244
  // Retrieve the current contact sensor state when requested.
279
- leakService.getCharacteristic(this.hap.Characteristic.LeakDetected)?.onGet(() => {
245
+ service.getCharacteristic(this.hap.Characteristic.LeakDetected)?.onGet(() => {
280
246
  return this.leakDetected;
281
247
  });
282
- // Initialize our name.
283
- leakService.displayName = this.accessoryName;
284
- leakService.updateCharacteristic(this.hap.Characteristic.Name, this.accessoryName);
285
248
  // Update the sensor.
286
- leakService.updateCharacteristic(this.hap.Characteristic.LeakDetected, this.leakDetected);
249
+ service.updateCharacteristic(this.hap.Characteristic.LeakDetected, this.leakDetected);
287
250
  // Update the state characteristics.
288
- this.configureStateCharacteristics(leakService);
251
+ this.configureStateCharacteristics(service);
289
252
  return true;
290
253
  }
291
254
  // Configure the temperature sensor for HomeKit.
292
255
  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.");
256
+ // Validate whether we should have this service enabled.
257
+ if (!this.validService(this.hap.Service.TemperatureSensor, () => {
258
+ // Have we disabled the sensor?
259
+ if (!this.ufp.temperatureSettings?.isEnabled) {
260
+ return false;
300
261
  }
262
+ return true;
263
+ })) {
301
264
  return false;
302
265
  }
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.");
266
+ // Acquire the service.
267
+ const service = this.acquireService(this.hap.Service.TemperatureSensor);
268
+ // Fail gracefully.
269
+ if (!service) {
270
+ this.log.error("Unable to add humidity sensor.");
271
+ return false;
312
272
  }
313
273
  // Retrieve the current temperature when requested.
314
- temperatureService.getCharacteristic(this.hap.Characteristic.CurrentTemperature)?.onGet(() => {
274
+ service.getCharacteristic(this.hap.Characteristic.CurrentTemperature)?.onGet(() => {
315
275
  return this.temperature < 0 ? 0 : this.temperature;
316
276
  });
317
- // Initialize our name.
318
- temperatureService.displayName = this.accessoryName;
319
- temperatureService.updateCharacteristic(this.hap.Characteristic.Name, this.accessoryName);
320
277
  // Update the sensor.
321
- temperatureService.updateCharacteristic(this.hap.Characteristic.CurrentTemperature, this.temperature < 0 ? 0 : this.temperature);
278
+ service.updateCharacteristic(this.hap.Characteristic.CurrentTemperature, this.temperature < 0 ? 0 : this.temperature);
322
279
  // Update the state characteristics.
323
- this.configureStateCharacteristics(temperatureService);
280
+ this.configureStateCharacteristics(service);
324
281
  return true;
325
282
  }
326
283
  // Configure the active connection status in HomeKit.
@@ -337,13 +294,9 @@ export class ProtectSensor extends ProtectDevice {
337
294
  updateBatteryStatus() {
338
295
  // Find the battery service, if it exists.
339
296
  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
297
  // 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);
298
+ batteryService?.updateCharacteristic(this.hap.Characteristic.BatteryLevel, this.ufp.batteryStatus?.percentage ?? 0);
299
+ batteryService?.updateCharacteristic(this.hap.Characteristic.StatusLowBattery, this.ufp.batteryStatus?.isLow);
347
300
  return true;
348
301
  }
349
302
  // Configure the tamper status in HomeKit.
@@ -371,7 +324,7 @@ 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());
327
+ this.publish("alarm", value.toString());
375
328
  this.log.info("Alarm %sdetected.", value ? "" : "no longer ");
376
329
  }
377
330
  return value;
@@ -385,7 +338,7 @@ export class ProtectSensor extends ProtectDevice {
385
338
  // Save the state change and publish to MQTT.
386
339
  if (this.ufp.isOpened !== this.lastContact) {
387
340
  this.lastContact = this.ufp.isOpened;
388
- this.nvr.mqtt?.publish(this.accessory, "contact", this.ufp.isOpened.toString());
341
+ this.publish("contact", this.ufp.isOpened.toString());
389
342
  }
390
343
  return this.ufp.isOpened;
391
344
  }
@@ -405,7 +358,7 @@ export class ProtectSensor extends ProtectDevice {
405
358
  // Save the state change and publish to MQTT.
406
359
  if (value !== this.lastLeak) {
407
360
  this.lastLeak = value;
408
- this.nvr.mqtt?.publish(this.accessory, "leak", value.toString());
361
+ this.publish("leak", value.toString());
409
362
  this.log.info("Leak %sdetected.", value ? "" : "no longer ");
410
363
  }
411
364
  return value;
@@ -416,22 +369,22 @@ export class ProtectSensor extends ProtectDevice {
416
369
  }
417
370
  // Configure MQTT capabilities for sensors.
418
371
  configureMqtt() {
419
- this.nvr.mqtt?.subscribeGet(this.accessory, "alarm", "Alarm detected", () => {
372
+ this.subscribeGet("alarm", "alarm detected", () => {
420
373
  return this.alarmDetected.toString();
421
374
  });
422
- this.nvr.mqtt?.subscribeGet(this.accessory, "ambientlight", "Ambient light", () => {
375
+ this.subscribeGet("ambientlight", "ambient light", () => {
423
376
  return this.ambientLight.toString();
424
377
  });
425
- this.nvr.mqtt?.subscribeGet(this.accessory, "contact", "Contact sensor", () => {
378
+ this.subscribeGet("contact", "contact sensor", () => {
426
379
  return this.contact.toString();
427
380
  });
428
- this.nvr.mqtt?.subscribeGet(this.accessory, "humidity", "Humidity", () => {
381
+ this.subscribeGet("humidity", "humidity", () => {
429
382
  return this.humidity.toString();
430
383
  });
431
- this.nvr.mqtt?.subscribeGet(this.accessory, "leak", "Leak detected", () => {
384
+ this.subscribeGet("leak", "leak detected", () => {
432
385
  return this.leakDetected.toString();
433
386
  });
434
- this.nvr.mqtt?.subscribeGet(this.accessory, "temperature", "Temperature", () => {
387
+ this.subscribeGet("temperature", "temperature", () => {
435
388
  return this.temperature.toString();
436
389
  });
437
390
  }
@@ -1 +1 @@
1
- {"version":3,"file":"protect-sensor.js","sourceRoot":"","sources":["../../src/devices/protect-sensor.ts"],"names":[],"mappings":"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"}
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,cAAc,CAAW;IACzB,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,cAAc,GAAG,EAAE,CAAC;QACzB,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,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAEzB,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,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iDAAiD;IACzC,uBAAuB;QAE7B,uBAAuB;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE9D,mBAAmB;QACnB,IAAG,CAAC,OAAO,EAAE,CAAC;YAEZ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YAErD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,sDAAsD;QACtD,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;YAE9E,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,IAAI,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;YAE9E,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,IAAI,KAAK,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,gCAAgC;QAChC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iDAAiD;IACzC,YAAY,CAAC,aAAa,GAAG,IAAI;QAEvC,MAAM,qBAAqB,GAAa,EAAE,CAAC;QAE3C,+CAA+C;QAC/C,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,oCAAoC;QACpC,IAAG,IAAI,CAAC,yBAAyB,EAAE,EAAE,CAAC;YAEpC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5C,CAAC;QAED,sCAAsC;QACtC,IAAG,IAAI,CAAC,2BAA2B,EAAE,EAAE,CAAC;YAEtC,qBAAqB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9C,CAAC;QAED,gCAAgC;QAChC,IAAG,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAC;YAEjC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC;QAED,iCAAiC;QACjC,IAAG,IAAI,CAAC,uBAAuB,EAAE,EAAE,CAAC;YAElC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzC,CAAC;QAED,oCAAoC;QACpC,IAAG,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;YAE9B,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,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,qBAAqB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9C,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,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5C,CAAC;QAED,yCAAyC;QACzC,IAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAErE,IAAI,CAAC,cAAc,GAAG,qBAAqB,CAAC;YAE5C,kDAAkD;YAClD,IAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;gBAE9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACpH,CAAC;iBAAM,CAAC;gBAEN,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAED,gDAAgD;IACxC,yBAAyB;QAE/B,wDAAwD;QACxD,IAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,EAAE;YAEzD,+BAA+B;YAC/B,IAAG,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC;gBAEtC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC,EAAE,oBAAoB,CAAC,0BAA0B,CAAC,EAAE,CAAC;YAEpD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,uBAAuB;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,GAAG,cAAc,EAAE,oBAAoB,CAAC,0BAA0B,CAAC,CAAC;QAE1J,mBAAmB;QACnB,IAAG,CAAC,OAAO,EAAE,CAAC;YAEZ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAE5D,OAAO,KAAK,CAAC;QACf,CAAC;QAED,4DAA4D;QAC5D,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;YAEhF,OAAO,IAAI,CAAC,aAAa,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,qBAAqB;QACrB,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,kBAAkB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAE7F,oCAAoC;QACpC,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;QAE5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kDAAkD;IAC1C,2BAA2B;QAEjC,wDAAwD;QACxD,IAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,EAAE;YAEvD,+BAA+B;YAC/B,IAAG,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,SAAS,EAAE,CAAC;gBAEtC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,EAAE,CAAC;YAEH,OAAO,KAAK,CAAC;QACf,CAAC;QAED,uBAAuB;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAElE,mBAAmB;QACnB,IAAG,CAAC,OAAO,EAAE,CAAC;YAEZ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YAEtD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,mDAAmD;QACnD,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,wBAAwB,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;YAEtF,sGAAsG;YACtG,OAAO,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,yHAAyH;QACzH,OAAO,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;QAEzI,oCAAoC;QACpC,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;QAE5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4CAA4C;IACpC,sBAAsB;QAE5B,wDAAwD;QACxD,IAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,EAAE;YAEzD,qEAAqE;YACrE,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;gBAE7F,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC,EAAE,oBAAoB,CAAC,cAAc,CAAC,EAAE,CAAC;YAExC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,uBAAuB;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,EAAE,oBAAoB,CAAC,cAAc,CAAC,CAAC;QAEpH,mBAAmB;QACnB,IAAG,CAAC,OAAO,EAAE,CAAC;YAEZ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAEhD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,4DAA4D;QAC5D,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;YAEhF,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,qBAAqB;QACrB,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAEvF,oCAAoC;QACpC,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;QAE5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6CAA6C;IACrC,uBAAuB;QAE7B,wDAAwD;QACxD,IAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,EAAE;YAE1D,+BAA+B;YAC/B,IAAG,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,EAAE,CAAC;gBAEzC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,EAAE,CAAC;YAEH,OAAO,KAAK,CAAC;QACf,CAAC;QAED,uBAAuB;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAErE,mBAAmB;QACnB,IAAG,CAAC,OAAO,EAAE,CAAC;YAEZ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAEjD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,gDAAgD;QAChD,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,uBAAuB,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;YAErF,OAAO,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,qBAAqB;QACrB,OAAO,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;QAErH,oCAAoC;QACpC,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;QAE5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yCAAyC;IACjC,mBAAmB;QAEzB,wDAAwD;QACxD,IAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE;YAEtD,oCAAoC;YACpC,IAAG,IAAI,CAAC,GAAG,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;gBAEjC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,EAAE,CAAC;YAEH,OAAO,KAAK,CAAC;QACf,CAAC;QAED,uBAAuB;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAEjE,mBAAmB;QACnB,IAAG,CAAC,OAAO,EAAE,CAAC;YAEZ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAE7C,OAAO,KAAK,CAAC;QACf,CAAC;QAED,4DAA4D;QAC5D,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;YAE1E,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,qBAAqB;QACrB,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAEtF,oCAAoC;QACpC,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;QAE5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gDAAgD;IACxC,0BAA0B;QAEhC,wDAAwD;QACxD,IAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,EAAE;YAE7D,+BAA+B;YAC/B,IAAG,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,SAAS,EAAE,CAAC;gBAE5C,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,EAAE,CAAC;YAEH,OAAO,KAAK,CAAC;QACf,CAAC;QAED,uBAAuB;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAExE,mBAAmB;QACnB,IAAG,CAAC,OAAO,EAAE,CAAC;YAEZ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAEjD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,mDAAmD;QACnD,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAC,GAAG,EAAE;YAEhF,OAAO,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,qBAAqB;QACrB,OAAO,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;QAEtH,oCAAoC;QACpC,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC;QAE5C,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,6BAA6B;QAC7B,cAAc,EAAE,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC;QACpH,cAAc,EAAE,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,gBAAgB,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAE9G,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,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAExC,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,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxD,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,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEvC,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,YAAY,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE;YAEhD,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,eAAe,EAAE,GAAG,EAAE;YAEtD,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,gBAAgB,EAAE,GAAG,EAAE;YAElD,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE;YAE7C,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,EAAE;YAE9C,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,aAAa,EAAE,GAAG,EAAE;YAEnD,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"}