homebridge-adt-pulse 3.0.0-beta.2 → 3.0.0-beta.21

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 (39) hide show
  1. package/LICENSE +198 -12
  2. package/README.md +174 -114
  3. package/build/config.schema.json +349 -0
  4. package/build/src/index.js +6 -0
  5. package/build/src/index.js.map +1 -0
  6. package/build/src/lib/accessory.js +432 -0
  7. package/build/src/lib/accessory.js.map +1 -0
  8. package/build/src/lib/api.js +1782 -0
  9. package/build/src/lib/api.js.map +1 -0
  10. package/build/src/lib/detect.js +480 -0
  11. package/build/src/lib/detect.js.map +1 -0
  12. package/build/src/lib/items.js +279 -0
  13. package/build/src/lib/items.js.map +1 -0
  14. package/build/src/lib/platform.js +493 -0
  15. package/build/src/lib/platform.js.map +1 -0
  16. package/{src/lib/regex.ts → build/src/lib/regex.js} +3 -145
  17. package/build/src/lib/regex.js.map +1 -0
  18. package/build/src/lib/schema.js +45 -0
  19. package/build/src/lib/schema.js.map +1 -0
  20. package/build/src/lib/utility.js +531 -0
  21. package/build/src/lib/utility.js.map +1 -0
  22. package/build/src/scripts/repl.js +176 -0
  23. package/build/src/scripts/repl.js.map +1 -0
  24. package/build/src/scripts/test-api.js +171 -0
  25. package/build/src/scripts/test-api.js.map +1 -0
  26. package/config.schema.json +330 -218
  27. package/package.json +34 -20
  28. package/src/index.ts +0 -18
  29. package/src/lib/accessory.ts +0 -405
  30. package/src/lib/api.ts +0 -3483
  31. package/src/lib/detect.ts +0 -728
  32. package/src/lib/platform.ts +0 -890
  33. package/src/lib/schema.ts +0 -34
  34. package/src/lib/utility.ts +0 -933
  35. package/src/scripts/repl.ts +0 -300
  36. package/src/scripts/test-api.ts +0 -278
  37. package/src/types/constant.d.ts +0 -308
  38. package/src/types/index.d.ts +0 -1472
  39. package/src/types/shared.d.ts +0 -517
@@ -0,0 +1,432 @@
1
+ import chalk from 'chalk';
2
+ import { condensedSensorTypeItems } from './items.js';
3
+ import { condensePanelStates, stackTracer } from './utility.js';
4
+ export class ADTPulseAccessory {
5
+ #accessory;
6
+ #api;
7
+ #characteristic;
8
+ #instance;
9
+ #log;
10
+ #services;
11
+ #state;
12
+ constructor(accessory, state, instance, service, characteristic, api, log) {
13
+ this.#accessory = accessory;
14
+ this.#api = api;
15
+ this.#characteristic = characteristic;
16
+ this.#instance = instance;
17
+ this.#log = log;
18
+ this.#services = {};
19
+ this.#state = state;
20
+ const { context } = this.#accessory;
21
+ const { firmware, hardware, id, manufacturer, model, name, serial, software, type, uuid, } = context;
22
+ this.#services.Information = this.#accessory.getService(service.AccessoryInformation) ?? this.#accessory.addService(service.AccessoryInformation);
23
+ this.#services.Information
24
+ .setCharacteristic(this.#characteristic.Identify, false)
25
+ .setCharacteristic(this.#characteristic.Manufacturer, manufacturer ?? 'ADT')
26
+ .setCharacteristic(this.#characteristic.Model, model ?? 'N/A')
27
+ .setCharacteristic(this.#characteristic.Name, name)
28
+ .setCharacteristic(this.#characteristic.SerialNumber, serial ?? 'N/A')
29
+ .setCharacteristic(this.#characteristic.FirmwareRevision, firmware ?? 'N/A')
30
+ .setCharacteristic(this.#characteristic.HardwareRevision, hardware ?? 'N/A')
31
+ .setCharacteristic(this.#characteristic.SoftwareRevision, software ?? 'N/A');
32
+ switch (type) {
33
+ case 'gateway':
34
+ break;
35
+ case 'panel':
36
+ this.#services.Primary = this.#accessory.getService(service.SecuritySystem) ?? this.#accessory.addService(service.SecuritySystem);
37
+ break;
38
+ default:
39
+ break;
40
+ }
41
+ switch (type) {
42
+ case 'co':
43
+ this.#services.Primary = this.#accessory.getService(service.CarbonMonoxideSensor) ?? this.#accessory.addService(service.CarbonMonoxideSensor);
44
+ break;
45
+ case 'doorWindow':
46
+ this.#services.Primary = this.#accessory.getService(service.ContactSensor) ?? this.#accessory.addService(service.ContactSensor);
47
+ break;
48
+ case 'fire':
49
+ this.#services.Primary = this.#accessory.getService(service.SmokeSensor) ?? this.#accessory.addService(service.SmokeSensor);
50
+ break;
51
+ case 'flood':
52
+ this.#services.Primary = this.#accessory.getService(service.LeakSensor) ?? this.#accessory.addService(service.LeakSensor);
53
+ break;
54
+ case 'glass':
55
+ this.#services.Primary = this.#accessory.getService(service.OccupancySensor) ?? this.#accessory.addService(service.OccupancySensor);
56
+ break;
57
+ case 'heat':
58
+ this.#services.Primary = this.#accessory.getService(service.OccupancySensor) ?? this.#accessory.addService(service.OccupancySensor);
59
+ break;
60
+ case 'keypad':
61
+ this.#services.Primary = this.#accessory.getService(service.OccupancySensor) ?? this.#accessory.addService(service.OccupancySensor);
62
+ break;
63
+ case 'motion':
64
+ this.#services.Primary = this.#accessory.getService(service.MotionSensor) ?? this.#accessory.addService(service.MotionSensor);
65
+ break;
66
+ case 'panic':
67
+ this.#services.Primary = this.#accessory.getService(service.OccupancySensor) ?? this.#accessory.addService(service.OccupancySensor);
68
+ break;
69
+ case 'remote':
70
+ this.#services.Primary = this.#accessory.getService(service.OccupancySensor) ?? this.#accessory.addService(service.OccupancySensor);
71
+ break;
72
+ case 'shock':
73
+ this.#services.Primary = this.#accessory.getService(service.OccupancySensor) ?? this.#accessory.addService(service.OccupancySensor);
74
+ break;
75
+ case 'supervisory':
76
+ this.#services.Primary = this.#accessory.getService(service.OccupancySensor) ?? this.#accessory.addService(service.OccupancySensor);
77
+ break;
78
+ case 'temperature':
79
+ this.#services.Primary = this.#accessory.getService(service.TemperatureSensor) ?? this.#accessory.addService(service.TemperatureSensor);
80
+ break;
81
+ case 'unknown':
82
+ this.#services.Primary = this.#accessory.getService(service.OccupancySensor) ?? this.#accessory.addService(service.OccupancySensor);
83
+ break;
84
+ default:
85
+ break;
86
+ }
87
+ if (this.#services.Primary === undefined) {
88
+ if (type !== 'gateway') {
89
+ this.#log.error(`Failed to initialize ${chalk.underline(name)} (id: ${id}, uuid: ${uuid}) accessory services ...`);
90
+ }
91
+ return;
92
+ }
93
+ switch (type) {
94
+ case 'gateway':
95
+ break;
96
+ case 'panel':
97
+ this.#services.Primary.getCharacteristic(this.#characteristic.SecuritySystemCurrentState)
98
+ .updateValue(this.getPanelStatus('current', context));
99
+ this.#services.Primary.getCharacteristic(this.#characteristic.SecuritySystemTargetState)
100
+ .updateValue(this.getPanelStatus('target', context));
101
+ this.#services.Primary.getCharacteristic(this.#characteristic.SecuritySystemTargetState)
102
+ .onSet((value) => this.setPanelStatus(value, context));
103
+ break;
104
+ default:
105
+ break;
106
+ }
107
+ switch (type) {
108
+ case 'co':
109
+ this.#services.Primary.getCharacteristic(this.#characteristic.CarbonMonoxideDetected)
110
+ .updateValue(this.getSensorStatus('status', context));
111
+ break;
112
+ case 'doorWindow':
113
+ this.#services.Primary.getCharacteristic(this.#characteristic.ContactSensorState)
114
+ .updateValue(this.getSensorStatus('status', context));
115
+ break;
116
+ case 'fire':
117
+ this.#services.Primary.getCharacteristic(this.#characteristic.SmokeDetected)
118
+ .updateValue(this.getSensorStatus('status', context));
119
+ break;
120
+ case 'flood':
121
+ this.#services.Primary.getCharacteristic(this.#characteristic.LeakDetected)
122
+ .updateValue(this.getSensorStatus('status', context));
123
+ break;
124
+ case 'glass':
125
+ this.#services.Primary.getCharacteristic(this.#characteristic.OccupancyDetected)
126
+ .updateValue(this.getSensorStatus('status', context));
127
+ break;
128
+ case 'heat':
129
+ this.#services.Primary.getCharacteristic(this.#characteristic.OccupancyDetected)
130
+ .updateValue(this.getSensorStatus('status', context));
131
+ break;
132
+ case 'keypad':
133
+ this.#services.Primary.getCharacteristic(this.#characteristic.OccupancyDetected)
134
+ .updateValue(this.getSensorStatus('status', context));
135
+ break;
136
+ case 'motion':
137
+ this.#services.Primary.getCharacteristic(this.#characteristic.MotionDetected)
138
+ .updateValue(this.getSensorStatus('status', context));
139
+ break;
140
+ case 'panic':
141
+ this.#services.Primary.getCharacteristic(this.#characteristic.OccupancyDetected)
142
+ .updateValue(this.getSensorStatus('status', context));
143
+ break;
144
+ case 'remote':
145
+ this.#services.Primary.getCharacteristic(this.#characteristic.OccupancyDetected)
146
+ .updateValue(this.getSensorStatus('status', context));
147
+ break;
148
+ case 'shock':
149
+ this.#services.Primary.getCharacteristic(this.#characteristic.OccupancyDetected)
150
+ .updateValue(this.getSensorStatus('status', context));
151
+ break;
152
+ case 'supervisory':
153
+ this.#services.Primary.getCharacteristic(this.#characteristic.OccupancyDetected)
154
+ .updateValue(this.getSensorStatus('status', context));
155
+ break;
156
+ case 'temperature':
157
+ this.#services.Primary.getCharacteristic(this.#characteristic.CurrentTemperature)
158
+ .updateValue(this.getSensorStatus('status', context));
159
+ break;
160
+ case 'unknown':
161
+ this.#services.Primary.getCharacteristic(this.#characteristic.OccupancyDetected)
162
+ .updateValue(this.getSensorStatus('status', context));
163
+ break;
164
+ default:
165
+ break;
166
+ }
167
+ switch (type) {
168
+ case 'gateway':
169
+ break;
170
+ case 'panel':
171
+ this.#services.Primary.getCharacteristic(this.#characteristic.SecuritySystemAlarmType)
172
+ .updateValue(this.getPanelStatus('alarmType', context));
173
+ this.#services.Primary.getCharacteristic(this.#characteristic.StatusFault)
174
+ .updateValue(this.getPanelStatus('fault', context));
175
+ this.#services.Primary.getCharacteristic(this.#characteristic.StatusTampered)
176
+ .updateValue(this.getPanelStatus('tamper', context));
177
+ break;
178
+ default:
179
+ break;
180
+ }
181
+ switch (type) {
182
+ case 'co':
183
+ case 'doorWindow':
184
+ case 'fire':
185
+ case 'flood':
186
+ case 'glass':
187
+ case 'heat':
188
+ case 'keypad':
189
+ case 'motion':
190
+ case 'panic':
191
+ case 'remote':
192
+ case 'shock':
193
+ case 'supervisory':
194
+ case 'temperature':
195
+ case 'unknown':
196
+ this.#services.Primary.getCharacteristic(this.#characteristic.StatusActive)
197
+ .updateValue(this.getSensorStatus('active', context));
198
+ this.#services.Primary.getCharacteristic(this.#characteristic.StatusFault)
199
+ .updateValue(this.getSensorStatus('fault', context));
200
+ this.#services.Primary.getCharacteristic(this.#characteristic.StatusLowBattery)
201
+ .updateValue(this.getSensorStatus('lowBattery', context));
202
+ this.#services.Primary.getCharacteristic(this.#characteristic.StatusTampered)
203
+ .updateValue(this.getSensorStatus('tamper', context));
204
+ break;
205
+ default:
206
+ break;
207
+ }
208
+ }
209
+ getSensorStatus(mode, context) {
210
+ const { id, name, originalName, type, uuid, zone, } = context;
211
+ const matchedSensorStatus = this.#state.data.sensorsStatus.find((sensorStatus) => originalName === sensorStatus.name && zone !== null && sensorStatus.zone === zone);
212
+ if (matchedSensorStatus === undefined
213
+ || type === 'gateway'
214
+ || type === 'panel'
215
+ || !condensedSensorTypeItems.includes(type)) {
216
+ this.#log.error(`Attempted to get sensor status on ${chalk.underline(name)} (id: ${id}, uuid: ${uuid}) accessory but sensor is not found or sensor type is not supported.`);
217
+ return new this.#api.hap.HapStatusError(-70409);
218
+ }
219
+ const { icon, statuses } = matchedSensorStatus;
220
+ if (mode === 'active') {
221
+ return !statuses.includes('Offline')
222
+ && !statuses.includes('Unknown')
223
+ && icon !== 'devStatOffline'
224
+ && icon !== 'devStatUnknown';
225
+ }
226
+ if (mode === 'fault') {
227
+ if (statuses.includes('Bypassed')
228
+ || statuses.includes('Trouble')) {
229
+ return this.#characteristic.StatusFault.GENERAL_FAULT;
230
+ }
231
+ return this.#characteristic.StatusFault.NO_FAULT;
232
+ }
233
+ if (mode === 'lowBattery') {
234
+ if (statuses.includes('Low Battery')
235
+ || icon === 'devStatLowBatt') {
236
+ return this.#characteristic.StatusLowBattery.BATTERY_LEVEL_LOW;
237
+ }
238
+ return this.#characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL;
239
+ }
240
+ if (mode === 'tamper') {
241
+ if (icon === 'devStatTamper') {
242
+ return this.#characteristic.StatusTampered.TAMPERED;
243
+ }
244
+ return this.#characteristic.StatusTampered.NOT_TAMPERED;
245
+ }
246
+ switch (type) {
247
+ case 'co':
248
+ if (statuses.includes('Tripped')) {
249
+ return this.#characteristic.CarbonMonoxideDetected.CO_LEVELS_ABNORMAL;
250
+ }
251
+ if (statuses.includes('Okay')) {
252
+ return this.#characteristic.CarbonMonoxideDetected.CO_LEVELS_NORMAL;
253
+ }
254
+ break;
255
+ case 'doorWindow':
256
+ if (statuses.includes('Open')) {
257
+ return this.#characteristic.ContactSensorState.CONTACT_NOT_DETECTED;
258
+ }
259
+ if (statuses.includes('Closed')) {
260
+ return this.#characteristic.ContactSensorState.CONTACT_DETECTED;
261
+ }
262
+ break;
263
+ case 'fire':
264
+ if (statuses.includes('Okay')) {
265
+ return this.#characteristic.SmokeDetected.SMOKE_NOT_DETECTED;
266
+ }
267
+ break;
268
+ case 'flood':
269
+ if (statuses.includes('Okay')) {
270
+ return this.#characteristic.LeakDetected.LEAK_NOT_DETECTED;
271
+ }
272
+ break;
273
+ case 'glass':
274
+ if (statuses.includes('Tripped')) {
275
+ return true;
276
+ }
277
+ if (statuses.includes('Okay')) {
278
+ return false;
279
+ }
280
+ break;
281
+ case 'heat':
282
+ break;
283
+ case 'keypad':
284
+ break;
285
+ case 'motion':
286
+ if (statuses.includes('No Motion') || statuses.includes('Okay')) {
287
+ return false;
288
+ }
289
+ if (statuses.includes('Motion')) {
290
+ return true;
291
+ }
292
+ break;
293
+ case 'panic':
294
+ break;
295
+ case 'remote':
296
+ break;
297
+ case 'shock':
298
+ break;
299
+ case 'supervisory':
300
+ break;
301
+ case 'temperature':
302
+ break;
303
+ case 'unknown':
304
+ break;
305
+ default:
306
+ break;
307
+ }
308
+ if (statuses.includes('Offline') || statuses.includes('Unknown')) {
309
+ this.#log.warn(`Attempted to get sensor status on ${chalk.underline(name)} (id: ${id}, uuid: ${uuid}) accessory but sensor is currently "Offline" or "Unknown".`);
310
+ return new this.#api.hap.HapStatusError(-70412);
311
+ }
312
+ this.#log.warn(`Attempted to get sensor status on ${chalk.underline(name)} (id: ${id}, uuid: ${uuid}) accessory but actions have not been implemented yet.`);
313
+ return new this.#api.hap.HapStatusError(-70410);
314
+ }
315
+ getPanelStatus(mode, context) {
316
+ const { id, name, type, uuid, } = context;
317
+ if (type !== 'panel') {
318
+ this.#log.error(`Attempted to get panel status on ${chalk.underline(name)} (id: ${id}, uuid: ${uuid}) accessory but device is not a security panel.`);
319
+ return new this.#api.hap.HapStatusError(-70410);
320
+ }
321
+ if (this.#state.data.panelStatus === null
322
+ || this.#state.data.panelStatus.panelStates.length === 0
323
+ || this.#state.data.panelStatus.panelStatuses.length === 0) {
324
+ this.#log.debug(`Attempted to get panel status on ${chalk.underline(name)} (id: ${id}, uuid: ${uuid}) accessory but panel status has not been retrieved yet.`);
325
+ return new this.#api.hap.HapStatusError(-70403);
326
+ }
327
+ const { panelStates, panelStatuses } = this.#state.data.panelStatus;
328
+ if (mode === 'alarmType') {
329
+ if (panelStatuses.includes('BURGLARY ALARM')
330
+ || panelStatuses.includes('Carbon Monoxide Alarm')
331
+ || panelStatuses.includes('FIRE ALARM')
332
+ || panelStatuses.includes('Uncleared Alarm')
333
+ || panelStatuses.includes('WATER ALARM')) {
334
+ return 1;
335
+ }
336
+ return 0;
337
+ }
338
+ if (mode === 'fault') {
339
+ if (!panelStatuses.includes('All Quiet')) {
340
+ return this.#characteristic.StatusFault.GENERAL_FAULT;
341
+ }
342
+ return this.#characteristic.StatusFault.NO_FAULT;
343
+ }
344
+ if (mode === 'tamper') {
345
+ return this.#characteristic.StatusTampered.NOT_TAMPERED;
346
+ }
347
+ switch (true) {
348
+ case mode === 'current' && panelStatuses.includes('BURGLARY ALARM'):
349
+ case mode === 'current' && panelStatuses.includes('Carbon Monoxide Alarm'):
350
+ case mode === 'current' && panelStatuses.includes('FIRE ALARM'):
351
+ case mode === 'current' && panelStatuses.includes('Uncleared Alarm'):
352
+ case mode === 'current' && panelStatuses.includes('WATER ALARM'):
353
+ return this.#characteristic.SecuritySystemCurrentState.ALARM_TRIGGERED;
354
+ case mode === 'current' && panelStates.includes('Armed Away'):
355
+ return this.#characteristic.SecuritySystemCurrentState.AWAY_ARM;
356
+ case mode === 'current' && panelStates.includes('Armed Stay'):
357
+ return this.#characteristic.SecuritySystemCurrentState.STAY_ARM;
358
+ case mode === 'current' && panelStates.includes('Armed Night'):
359
+ return this.#characteristic.SecuritySystemCurrentState.NIGHT_ARM;
360
+ case mode === 'current' && panelStates.includes('Disarmed'):
361
+ return this.#characteristic.SecuritySystemCurrentState.DISARMED;
362
+ default:
363
+ break;
364
+ }
365
+ switch (true) {
366
+ case mode === 'target' && panelStates.includes('Armed Away'):
367
+ return this.#characteristic.SecuritySystemTargetState.AWAY_ARM;
368
+ case mode === 'target' && panelStates.includes('Armed Stay'):
369
+ return this.#characteristic.SecuritySystemTargetState.STAY_ARM;
370
+ case mode === 'target' && panelStates.includes('Armed Night'):
371
+ return this.#characteristic.SecuritySystemTargetState.NIGHT_ARM;
372
+ case mode === 'target' && panelStates.includes('Disarmed'):
373
+ return this.#characteristic.SecuritySystemTargetState.DISARM;
374
+ default:
375
+ break;
376
+ }
377
+ if (panelStates.includes('Status Unavailable')) {
378
+ this.#log.warn(`Attempted to get panel status on ${chalk.underline(name)} (id: ${id}, uuid: ${uuid}) accessory but panel state is "Status Unavailable".`);
379
+ return new this.#api.hap.HapStatusError(-70403);
380
+ }
381
+ this.#log.warn(`Attempted to get panel status on ${chalk.underline(name)} (id: ${id}, uuid: ${uuid}) accessory but actions have not been implemented yet.`);
382
+ return new this.#api.hap.HapStatusError(-70402);
383
+ }
384
+ async setPanelStatus(arm, context) {
385
+ const { id, name, type, uuid, } = context;
386
+ let result = {
387
+ success: false,
388
+ };
389
+ let unknownArmValue = false;
390
+ if (type !== 'panel') {
391
+ this.#log.error(`Attempted to set panel status on ${chalk.underline(name)} (id: ${id}, uuid: ${uuid}) accessory but device is not a security panel.`);
392
+ throw new this.#api.hap.HapStatusError(-70410);
393
+ }
394
+ if (this.#state.data.panelStatus === null || this.#state.data.panelStatus.panelStates.length === 0) {
395
+ this.#log.warn(`Attempted to set panel status on ${chalk.underline(name)} (id: ${id}, uuid: ${uuid}) accessory but panel status has not been retrieved yet.`);
396
+ throw new this.#api.hap.HapStatusError(-70403);
397
+ }
398
+ const { panelStates } = this.#state.data.panelStatus;
399
+ const armFrom = condensePanelStates(panelStates);
400
+ if (armFrom === undefined) {
401
+ this.#log.warn(`Attempted to set panel status on ${chalk.underline(name)} (id: ${id}, uuid: ${uuid}) accessory but panel status cannot be found or most likely "Status Unavailable".`);
402
+ throw new this.#api.hap.HapStatusError(-70403);
403
+ }
404
+ switch (arm) {
405
+ case this.#characteristic.SecuritySystemTargetState.STAY_ARM:
406
+ result = await this.#instance.setPanelStatus(armFrom, 'stay');
407
+ break;
408
+ case this.#characteristic.SecuritySystemTargetState.AWAY_ARM:
409
+ result = await this.#instance.setPanelStatus(armFrom, 'away');
410
+ break;
411
+ case this.#characteristic.SecuritySystemTargetState.NIGHT_ARM:
412
+ result = await this.#instance.setPanelStatus(armFrom, 'night');
413
+ break;
414
+ case this.#characteristic.SecuritySystemTargetState.DISARM:
415
+ result = await this.#instance.setPanelStatus(armFrom, 'off');
416
+ break;
417
+ default:
418
+ unknownArmValue = true;
419
+ break;
420
+ }
421
+ if (unknownArmValue) {
422
+ this.#log.error(`Attempted to set panel status on ${chalk.underline(name)} (id: ${id}, uuid: ${uuid}) accessory but request has unknown arm value.`);
423
+ throw new this.#api.hap.HapStatusError(-70410);
424
+ }
425
+ if (!result.success) {
426
+ this.#log.error(`Attempted to set panel status on ${chalk.underline(name)} (id: ${id}, uuid: ${uuid}) accessory but request was not successful.`);
427
+ stackTracer('api-response', result);
428
+ throw new this.#api.hap.HapStatusError(-70408);
429
+ }
430
+ }
431
+ }
432
+ //# sourceMappingURL=accessory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accessory.js","sourceRoot":"","sources":["../../../src/lib/accessory.ts"],"names":[],"mappings":"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"}