@homebridge-plugins/homebridge-firstalert 0.0.1-beta.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 (121) hide show
  1. package/.gitattributes +2 -0
  2. package/.github/FUNDING.yml +4 -0
  3. package/.github/ISSUE_TEMPLATE/bug-report.yml +97 -0
  4. package/.github/ISSUE_TEMPLATE/config.yml +8 -0
  5. package/.github/ISSUE_TEMPLATE/feature-request.yml +38 -0
  6. package/.github/ISSUE_TEMPLATE/support-request.yml +85 -0
  7. package/.github/ISSUE_TEMPLATE.md +52 -0
  8. package/.github/PULL_REQUEST_TEMPLATE/pull_request.md +27 -0
  9. package/.github/dependabot.yml +17 -0
  10. package/.github/labeler.yml +38 -0
  11. package/.github/release-drafter.yml +33 -0
  12. package/.github/workflows/beta-release.yml +55 -0
  13. package/.github/workflows/build.yml +18 -0
  14. package/.github/workflows/changerelease.yml +11 -0
  15. package/.github/workflows/labeler.yml +9 -0
  16. package/.github/workflows/release-drafter.yml +14 -0
  17. package/.github/workflows/release.yml +35 -0
  18. package/.github/workflows/stale.yml +12 -0
  19. package/CHANGELOG.md +10 -0
  20. package/LICENSE +14 -0
  21. package/README.md +67 -0
  22. package/SECURITY.md +19 -0
  23. package/branding/Homebridge_x_FirstAlert.svg +48 -0
  24. package/branding/icon.png +0 -0
  25. package/config.schema.json +58 -0
  26. package/dist/homebridge-ui/public/index.html +548 -0
  27. package/dist/src/api/resideoClient.d.ts +32 -0
  28. package/dist/src/api/resideoClient.d.ts.map +1 -0
  29. package/dist/src/api/resideoClient.js +76 -0
  30. package/dist/src/api/resideoClient.js.map +1 -0
  31. package/dist/src/devices/device.d.ts +40 -0
  32. package/dist/src/devices/device.d.ts.map +1 -0
  33. package/dist/src/devices/device.js +207 -0
  34. package/dist/src/devices/device.js.map +1 -0
  35. package/dist/src/devices/leaksensors.d.ts +34 -0
  36. package/dist/src/devices/leaksensors.d.ts.map +1 -0
  37. package/dist/src/devices/leaksensors.js +163 -0
  38. package/dist/src/devices/leaksensors.js.map +1 -0
  39. package/dist/src/devices/smoke.d.ts +35 -0
  40. package/dist/src/devices/smoke.d.ts.map +1 -0
  41. package/dist/src/devices/smoke.js +150 -0
  42. package/dist/src/devices/smoke.js.map +1 -0
  43. package/dist/src/devices/thermostats.d.ts +42 -0
  44. package/dist/src/devices/thermostats.d.ts.map +1 -0
  45. package/dist/src/devices/thermostats.js +192 -0
  46. package/dist/src/devices/thermostats.js.map +1 -0
  47. package/dist/src/devices/valve.d.ts +21 -0
  48. package/dist/src/devices/valve.d.ts.map +1 -0
  49. package/dist/src/devices/valve.js +131 -0
  50. package/dist/src/devices/valve.js.map +1 -0
  51. package/dist/src/homebridge-ui/server.d.ts +5 -0
  52. package/dist/src/homebridge-ui/server.d.ts.map +1 -0
  53. package/dist/src/homebridge-ui/server.js +95 -0
  54. package/dist/src/homebridge-ui/server.js.map +1 -0
  55. package/dist/src/index.d.ts +4 -0
  56. package/dist/src/index.d.ts.map +1 -0
  57. package/dist/src/index.js +7 -0
  58. package/dist/src/index.js.map +1 -0
  59. package/dist/src/platform.d.ts +18 -0
  60. package/dist/src/platform.d.ts.map +1 -0
  61. package/dist/src/platform.js +108 -0
  62. package/dist/src/platform.js.map +1 -0
  63. package/dist/src/settings.d.ts +341 -0
  64. package/dist/src/settings.d.ts.map +1 -0
  65. package/dist/src/settings.js +25 -0
  66. package/dist/src/settings.js.map +1 -0
  67. package/dist/src/utils.d.ts +21 -0
  68. package/dist/src/utils.d.ts.map +1 -0
  69. package/dist/src/utils.js +58 -0
  70. package/dist/src/utils.js.map +1 -0
  71. package/dist/test/index.test.d.ts +2 -0
  72. package/dist/test/index.test.d.ts.map +1 -0
  73. package/dist/test/index.test.js +14 -0
  74. package/dist/test/index.test.js.map +1 -0
  75. package/dist/test/platform.test.d.ts +2 -0
  76. package/dist/test/platform.test.d.ts.map +1 -0
  77. package/dist/test/platform.test.js +56 -0
  78. package/dist/test/platform.test.js.map +1 -0
  79. package/dist/test/settings.test.d.ts +2 -0
  80. package/dist/test/settings.test.d.ts.map +1 -0
  81. package/dist/test/settings.test.js +48 -0
  82. package/dist/test/settings.test.js.map +1 -0
  83. package/dist/test/utils.test.d.ts +2 -0
  84. package/dist/test/utils.test.d.ts.map +1 -0
  85. package/dist/test/utils.test.js +17 -0
  86. package/dist/test/utils.test.js.map +1 -0
  87. package/docs/.nojekyll +1 -0
  88. package/docs/assets/hierarchy.js +1 -0
  89. package/docs/assets/highlight.css +22 -0
  90. package/docs/assets/icons.js +18 -0
  91. package/docs/assets/icons.svg +1 -0
  92. package/docs/assets/main.js +60 -0
  93. package/docs/assets/navigation.js +1 -0
  94. package/docs/assets/search.js +1 -0
  95. package/docs/assets/style.css +1633 -0
  96. package/docs/hierarchy.html +1 -0
  97. package/docs/index.html +77 -0
  98. package/docs/modules.html +1 -0
  99. package/docs/variables/default.html +1 -0
  100. package/eslint.config.js +44 -0
  101. package/nodemon.json +10 -0
  102. package/package.json +106 -0
  103. package/scripts/free-dev-ports.mjs +105 -0
  104. package/src/api/resideoClient.ts +106 -0
  105. package/src/devices/device.ts +226 -0
  106. package/src/devices/leaksensors.ts +206 -0
  107. package/src/devices/smoke.ts +173 -0
  108. package/src/devices/thermostats.ts +243 -0
  109. package/src/devices/valve.ts +162 -0
  110. package/src/homebridge-ui/public/index.html +548 -0
  111. package/src/homebridge-ui/server.ts +102 -0
  112. package/src/index.ts +13 -0
  113. package/src/platform.ts +112 -0
  114. package/src/settings.ts +402 -0
  115. package/src/utils.ts +61 -0
  116. package/test/index.test.ts +18 -0
  117. package/test/platform.test.ts +65 -0
  118. package/test/settings.test.ts +56 -0
  119. package/test/utils.test.ts +20 -0
  120. package/tsconfig.json +27 -0
  121. package/typedoc.json +22 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resideoClient.js","sourceRoot":"","sources":["../../../src/api/resideoClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { API, HAP, Logging, PlatformAccessory } from 'homebridge';
2
+ import type { ResideoDevice } from '../api/resideoClient.js';
3
+ import type { ResideoPlatform } from '../platform.js';
4
+ import type { ResideoPlatformConfig } from '../settings.js';
5
+ export declare abstract class deviceBase {
6
+ protected readonly platform: ResideoPlatform;
7
+ protected accessory: PlatformAccessory;
8
+ protected device: ResideoDevice;
9
+ readonly api: API;
10
+ readonly log: Logging;
11
+ readonly config: ResideoPlatformConfig;
12
+ protected readonly hap: HAP;
13
+ protected deviceLogging: string;
14
+ protected deviceRefreshRate: number;
15
+ protected deviceUpdateRate: number;
16
+ protected devicePushRate: number;
17
+ protected deviceFirmwareVersion: string;
18
+ protected deviceMaxRetries: number;
19
+ protected deviceDelayBetweenRetries: number;
20
+ constructor(platform: ResideoPlatform, accessory: PlatformAccessory, device: ResideoDevice);
21
+ getDeviceLogSettings(): Promise<void>;
22
+ getDeviceRateSettings(): Promise<void>;
23
+ getDeviceConfigSettings(device: ResideoDevice): Promise<void>;
24
+ getDeviceContext(accessory: PlatformAccessory, device: ResideoDevice): Promise<void>;
25
+ statusCode(statusCode: number, action: string): Promise<void>;
26
+ resideoAPIError(e: any, action: string): Promise<void>;
27
+ /**
28
+ * Logging for Device
29
+ */
30
+ infoLog(...log: any[]): Promise<void>;
31
+ successLog(...log: any[]): Promise<void>;
32
+ debugSuccessLog(...log: any[]): Promise<void>;
33
+ warnLog(...log: any[]): Promise<void>;
34
+ debugWarnLog(...log: any[]): Promise<void>;
35
+ errorLog(...log: any[]): Promise<void>;
36
+ debugErrorLog(...log: any[]): Promise<void>;
37
+ debugLog(...log: any[]): Promise<void>;
38
+ enablingDeviceLogging(): Promise<boolean>;
39
+ }
40
+ //# sourceMappingURL=device.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../../src/devices/device.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AAE3D,8BAAsB,UAAU;IAgB5B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,eAAe;IAC5C,SAAS,CAAC,SAAS,EAAE,iBAAiB;IACtC,SAAS,CAAC,MAAM,EAAE,aAAa;IAjBjC,SAAgB,GAAG,EAAE,GAAG,CAAA;IACxB,SAAgB,GAAG,EAAE,OAAO,CAAA;IAC5B,SAAgB,MAAM,EAAG,qBAAqB,CAAA;IAC9C,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;IAG3B,SAAS,CAAC,aAAa,EAAG,MAAM,CAAA;IAChC,SAAS,CAAC,iBAAiB,EAAG,MAAM,CAAA;IACpC,SAAS,CAAC,gBAAgB,EAAG,MAAM,CAAA;IACnC,SAAS,CAAC,cAAc,EAAG,MAAM,CAAA;IACjC,SAAS,CAAC,qBAAqB,EAAG,MAAM,CAAA;IACxC,SAAS,CAAC,gBAAgB,EAAG,MAAM,CAAA;IACnC,SAAS,CAAC,yBAAyB,EAAG,MAAM,CAAA;gBAGvB,QAAQ,EAAE,eAAe,EAClC,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,aAAa;IAyB3B,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrC,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtC,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7D,gBAAgB,CAAC,SAAS,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBpF,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B7D,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC5D;;OAEG;IACG,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrC,UAAU,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxC,eAAe,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7C,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrC,YAAY,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1C,QAAQ,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtC,aAAa,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3C,QAAQ,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAUtC,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC;CAGhD"}
@@ -0,0 +1,207 @@
1
+ export class deviceBase {
2
+ platform;
3
+ accessory;
4
+ device;
5
+ api;
6
+ log;
7
+ config;
8
+ hap;
9
+ // Config
10
+ deviceLogging;
11
+ deviceRefreshRate;
12
+ deviceUpdateRate;
13
+ devicePushRate;
14
+ deviceFirmwareVersion;
15
+ deviceMaxRetries;
16
+ deviceDelayBetweenRetries;
17
+ constructor(platform, accessory, device) {
18
+ this.platform = platform;
19
+ this.accessory = accessory;
20
+ this.device = device;
21
+ this.api = platform.api;
22
+ this.log = platform.log;
23
+ this.config = platform.config;
24
+ this.hap = platform.api.hap;
25
+ this.getDeviceLogSettings();
26
+ this.getDeviceRateSettings();
27
+ this.getDeviceConfigSettings(device);
28
+ this.getDeviceContext(accessory, device);
29
+ // Set accessory information
30
+ accessory
31
+ .getService(this.hap.Service.AccessoryInformation)
32
+ .setCharacteristic(this.hap.Characteristic.Manufacturer, 'FirstAlert')
33
+ .setCharacteristic(this.hap.Characteristic.Name, accessory.displayName)
34
+ .setCharacteristic(this.hap.Characteristic.ConfiguredName, accessory.displayName)
35
+ .setCharacteristic(this.hap.Characteristic.Model, accessory.context.model)
36
+ .setCharacteristic(this.hap.Characteristic.SerialNumber, accessory.context.deviceID)
37
+ .setCharacteristic(this.hap.Characteristic.FirmwareRevision, this.deviceFirmwareVersion)
38
+ .getCharacteristic(this.hap.Characteristic.FirmwareRevision)
39
+ .updateValue(this.deviceFirmwareVersion);
40
+ }
41
+ async getDeviceLogSettings() {
42
+ this.deviceLogging = 'standard';
43
+ await this.debugLog(`Using Device Logging: ${this.deviceLogging}`);
44
+ }
45
+ async getDeviceRateSettings() {
46
+ // Use default values; ResideoDevice does not have these properties
47
+ this.deviceRefreshRate = 120;
48
+ this.deviceUpdateRate = 5;
49
+ this.devicePushRate = 0.1;
50
+ await this.debugLog(`Using refreshRate: ${this.deviceRefreshRate}, updateRate: ${this.deviceUpdateRate}, pushRate: ${this.devicePushRate}`);
51
+ this.deviceMaxRetries = 5;
52
+ await this.debugLog(`Using maxRetries: ${this.deviceMaxRetries}`);
53
+ this.deviceDelayBetweenRetries = 3 * 1000;
54
+ await this.debugLog(`Using delayBetweenRetries: ${this.deviceDelayBetweenRetries}`);
55
+ }
56
+ async getDeviceConfigSettings(device) {
57
+ // No config merging; ResideoDevice does not have these properties
58
+ this.debugSuccessLog(`Config: ${JSON.stringify(device)}`);
59
+ }
60
+ async getDeviceContext(accessory, device) {
61
+ // Context Information
62
+ accessory.context.model = device.globalDeviceType;
63
+ accessory.context.deviceID = device.deviceId;
64
+ accessory.context.deviceType = device.globalDeviceType;
65
+ // FirmwareRevision
66
+ const version = '0.0.0';
67
+ this.deviceFirmwareVersion = version;
68
+ accessory
69
+ .getService(this.hap.Service.AccessoryInformation)
70
+ .setCharacteristic(this.hap.Characteristic.HardwareRevision, this.deviceFirmwareVersion)
71
+ .setCharacteristic(this.hap.Characteristic.SoftwareRevision, this.deviceFirmwareVersion)
72
+ .setCharacteristic(this.hap.Characteristic.FirmwareRevision, this.deviceFirmwareVersion)
73
+ .getCharacteristic(this.hap.Characteristic.FirmwareRevision)
74
+ .updateValue(this.deviceFirmwareVersion);
75
+ this.debugSuccessLog(`deviceFirmwareVersion: ${this.deviceFirmwareVersion}`);
76
+ }
77
+ async statusCode(statusCode, action) {
78
+ switch (statusCode) {
79
+ case 200:
80
+ this.debugLog(`${this.device.name}: ${this.accessory.displayName} Standard Response, statusCode: ${statusCode}, Action: ${action}`);
81
+ break;
82
+ case 400:
83
+ this.errorLog(`${this.device.name}: ${this.accessory.displayName} Bad Request, statusCode: ${statusCode}, Action: ${action}`);
84
+ break;
85
+ case 401:
86
+ this.errorLog(`${this.device.name}: ${this.accessory.displayName} Unauthorized, statusCode: ${statusCode}, Action: ${action}`);
87
+ break;
88
+ case 403:
89
+ this.errorLog(`${this.device.name}: ${this.accessory.displayName} Forbidden, The request has been authenticated but does not have appropriate permissions, or a requested resource is not found, statusCode: ${statusCode}`);
90
+ break;
91
+ case 404:
92
+ this.errorLog(`${this.device.name}: ${this.accessory.displayName} Not Found, statusCode: ${statusCode}, Action: ${action}`);
93
+ break;
94
+ case 429:
95
+ this.errorLog(`${this.device.name}: ${this.accessory.displayName} Too Many Requests, statusCode: ${statusCode}, Action: ${action}`);
96
+ break;
97
+ case 500:
98
+ this.errorLog(`${this.device.name}: ${this.accessory.displayName} Internal Server Error (Meater Server), statusCode: ${statusCode}, Action: ${action}`);
99
+ break;
100
+ default:
101
+ this.infoLog(`${this.device.name}: ${this.accessory.displayName} Unknown statusCode: ${statusCode}, Action: ${action}, Report Bugs Here: https://bit.ly/homebridge-firstalert-bug-report`);
102
+ }
103
+ }
104
+ async resideoAPIError(e, action) {
105
+ if (e.message.includes('400')) {
106
+ this.errorLog(`${this.device.name}: ${this.accessory.displayName} failed to ${action}, Bad Request`);
107
+ this.debugLog('The client has issued an invalid request. This is commonly used to specify validation errors in a request payload.');
108
+ }
109
+ else if (e.message.includes('401')) {
110
+ this.errorLog(`${this.device.name}: ${this.accessory.displayName} failed to ${action}, Unauthorized Request`);
111
+ this.debugLog('Authorization for the API is required, but the request has not been authenticated.');
112
+ }
113
+ else if (e.message.includes('403')) {
114
+ this.errorLog(`${this.device.name}: ${this.accessory.displayName} failed to ${action}, Forbidden Request`);
115
+ this.debugLog('The request has been authenticated but does not have appropriate permissions, or a requested resource is not found.');
116
+ }
117
+ else if (e.message.includes('404')) {
118
+ this.errorLog(`${this.device.name}: ${this.accessory.displayName} failed to ${action}, Requst Not Found`);
119
+ this.debugLog('Specifies the requested path does not exist.');
120
+ }
121
+ else if (e.message.includes('406')) {
122
+ this.errorLog(`${this.device.name}: ${this.accessory.displayName} failed to ${action}, Request Not Acceptable`);
123
+ this.debugLog('The client has requested a MIME type via the Accept header for a value not supported by the server.');
124
+ }
125
+ else if (e.message.includes('415')) {
126
+ this.errorLog(`${this.device.name}: ${this.accessory.displayName} failed to ${action}, Unsupported Requst Header`);
127
+ this.debugLog('The client has defined a contentType header that is not supported by the server.');
128
+ }
129
+ else if (e.message.includes('422')) {
130
+ this.errorLog(`${this.device.name}: ${this.accessory.displayName} failed to ${action}, Unprocessable Entity`);
131
+ this.debugLog('The client has made a valid request, but the server cannot process it.'
132
+ + ' This is often used for APIs for which certain limits have been exceeded.');
133
+ }
134
+ else if (e.message.includes('429')) {
135
+ this.errorLog(`${this.device.name}: ${this.accessory.displayName} failed to ${action}, Too Many Requests`);
136
+ this.debugLog('The client has exceeded the number of requests allowed for a given time window.');
137
+ }
138
+ else if (e.message.includes('500')) {
139
+ this.errorLog(`${this.device.name}: ${this.accessory.displayName} failed to ${action}, Internal Server Error`);
140
+ this.debugLog('An unexpected error on the SmartThings servers has occurred. These errors should be rare.');
141
+ }
142
+ else {
143
+ this.errorLog(`${this.device.name}: ${this.accessory.displayName} failed to ${action},`);
144
+ }
145
+ if (this.deviceLogging.includes('debug')) {
146
+ this.errorLog(`${this.device.name}: ${this.accessory.displayName} failed to pushChanges, Error Message: ${JSON.stringify(e.message)}`);
147
+ }
148
+ }
149
+ /**
150
+ * Logging for Device
151
+ */
152
+ async infoLog(...log) {
153
+ if (await this.enablingDeviceLogging()) {
154
+ this.log.info(`${this.device.name}: ${this.accessory.displayName}`, String(...log));
155
+ }
156
+ }
157
+ async successLog(...log) {
158
+ if (await this.enablingDeviceLogging()) {
159
+ this.log.success(`${this.device.name}: ${this.accessory.displayName}`, String(...log));
160
+ }
161
+ }
162
+ async debugSuccessLog(...log) {
163
+ if (await this.enablingDeviceLogging()) {
164
+ if (this.deviceLogging?.includes('debug')) {
165
+ this.log.success(`[DEBUG] ${this.device.name}: ${this.accessory.displayName}`, String(...log));
166
+ }
167
+ }
168
+ }
169
+ async warnLog(...log) {
170
+ if (await this.enablingDeviceLogging()) {
171
+ this.log.warn(`${this.device.name}: ${this.accessory.displayName}`, String(...log));
172
+ }
173
+ }
174
+ async debugWarnLog(...log) {
175
+ if (await this.enablingDeviceLogging()) {
176
+ if (this.deviceLogging?.includes('debug')) {
177
+ this.log.warn(`[DEBUG] ${this.device.name}: ${this.accessory.displayName}`, String(...log));
178
+ }
179
+ }
180
+ }
181
+ async errorLog(...log) {
182
+ if (await this.enablingDeviceLogging()) {
183
+ this.log.error(`${this.device.name}: ${this.accessory.displayName}`, String(...log));
184
+ }
185
+ }
186
+ async debugErrorLog(...log) {
187
+ if (await this.enablingDeviceLogging()) {
188
+ if (this.deviceLogging?.includes('debug')) {
189
+ this.log.error(`[DEBUG] ${this.device.name}: ${this.accessory.displayName}`, String(...log));
190
+ }
191
+ }
192
+ }
193
+ async debugLog(...log) {
194
+ if (await this.enablingDeviceLogging()) {
195
+ if (this.deviceLogging === 'debug') {
196
+ this.log.info(`[DEBUG] ${this.device.name}: ${this.accessory.displayName}`, String(...log));
197
+ }
198
+ else {
199
+ this.log.debug(`${this.device.name}: ${this.accessory.displayName}`, String(...log));
200
+ }
201
+ }
202
+ }
203
+ async enablingDeviceLogging() {
204
+ return this.deviceLogging.includes('debug') ?? this.deviceLogging === 'standard';
205
+ }
206
+ }
207
+ //# sourceMappingURL=device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.js","sourceRoot":"","sources":["../../../src/devices/device.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { PlatformAccessory } from 'homebridge';
2
+ import { Subject } from 'rxjs';
3
+ import type { ResideoDevice } from '../api/resideoClient.js';
4
+ import type { ResideoPlatform } from '../platform.js';
5
+ import { deviceBase } from './device.js';
6
+ /**
7
+ * Platform Accessory
8
+ * An instance of this class is created for each accessory your platform registers
9
+ * Each accessory may expose multiple services of different service types.
10
+ */
11
+ export declare class LeakSensor extends deviceBase {
12
+ readonly platform: ResideoPlatform;
13
+ private Battery;
14
+ private LeakSensor?;
15
+ private HumiditySensor?;
16
+ private TemperatureSensor?;
17
+ SensorUpdateInProgress: boolean;
18
+ doSensorUpdate: Subject<void>;
19
+ constructor(platform: ResideoPlatform, accessory: PlatformAccessory, device: ResideoDevice);
20
+ /**
21
+ * Parse the device status from the FirstAlert api
22
+ */
23
+ parseStatus(): Promise<void>;
24
+ /**
25
+ * Asks the FirstAlert Home API for the latest device information
26
+ */
27
+ refreshStatus(): Promise<void>;
28
+ /**
29
+ * Updates the status for each of the HomeKit Characteristics
30
+ */
31
+ updateHomeKitCharacteristics(): Promise<void>;
32
+ apiError(e: any): Promise<void>;
33
+ }
34
+ //# sourceMappingURL=leaksensors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaksensors.d.ts","sourceRoot":"","sources":["../../../src/devices/leaksensors.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAuB,iBAAiB,EAAW,MAAM,YAAY,CAAA;AACjF,OAAO,EAAY,OAAO,EAAE,MAAM,MAAM,CAAA;AAGxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC;;;;GAIG;AACH,qBAAa,UAAW,SAAQ,UAAU;IAkCtC,QAAQ,CAAC,QAAQ,EAAE,eAAe;IAhCpC,OAAO,CAAC,OAAO,CAMd;IAED,OAAO,CAAC,UAAU,CAAC,CAKlB;IAED,OAAO,CAAC,cAAc,CAAC,CAItB;IAED,OAAO,CAAC,iBAAiB,CAAC,CAIzB;IAGD,sBAAsB,EAAG,OAAO,CAAA;IAChC,cAAc,EAAG,OAAO,CAAC,IAAI,CAAC,CAAA;gBAGnB,QAAQ,EAAE,eAAe,EAClC,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,aAAa;IAmFvB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBlC;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAapC;;OAEG;IACG,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;IAe7C,QAAQ,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;CActC"}
@@ -0,0 +1,163 @@
1
+ import { interval, Subject } from 'rxjs';
2
+ import { skipWhile } from 'rxjs/operators';
3
+ import { deviceBase } from './device.js';
4
+ /**
5
+ * Platform Accessory
6
+ * An instance of this class is created for each accessory your platform registers
7
+ * Each accessory may expose multiple services of different service types.
8
+ */
9
+ export class LeakSensor extends deviceBase {
10
+ platform;
11
+ // Services
12
+ Battery;
13
+ LeakSensor;
14
+ HumiditySensor;
15
+ TemperatureSensor;
16
+ // Sensor Update
17
+ SensorUpdateInProgress;
18
+ doSensorUpdate;
19
+ constructor(platform, accessory, device) {
20
+ super(platform, accessory, device);
21
+ this.platform = platform;
22
+ this.doSensorUpdate = new Subject();
23
+ this.SensorUpdateInProgress = false;
24
+ // Initialize Battery Service
25
+ accessory.context.Battery = accessory.context.Battery ?? {};
26
+ this.Battery = {
27
+ Name: accessory.context.Battery.Name ?? `${accessory.displayName} Battery`,
28
+ Service: accessory.getService(this.hap.Service.Battery) ?? accessory.addService(this.hap.Service.Battery),
29
+ BatteryLevel: accessory.context.BatteryLevel ?? 100,
30
+ ChargingState: accessory.context.ChargingState ?? this.hap.Characteristic.ChargingState.NOT_CHARGEABLE,
31
+ StatusLowBattery: accessory.context.StatusLowBattery ?? this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL,
32
+ };
33
+ accessory.context.Battery = this.Battery;
34
+ this.Battery.Service
35
+ .setCharacteristic(this.hap.Characteristic.Name, this.Battery.Name)
36
+ .setCharacteristic(this.hap.Characteristic.ChargingState, this.hap.Characteristic.ChargingState.NOT_CHARGEABLE)
37
+ .getCharacteristic(this.hap.Characteristic.BatteryLevel)
38
+ .onGet(() => this.Battery.BatteryLevel);
39
+ // Leak Sensor Service
40
+ accessory.context.LeakSensor = accessory.context.LeakSensor ?? {};
41
+ this.LeakSensor = {
42
+ Name: accessory.context.LeakSensor.Name ?? `${accessory.displayName} Leak Sensor`,
43
+ Service: accessory.getService(this.hap.Service.LeakSensor) ?? accessory.addService(this.hap.Service.LeakSensor),
44
+ StatusActive: accessory.context.StatusActive ?? false,
45
+ LeakDetected: accessory.context.LeakDetected ?? this.hap.Characteristic.LeakDetected.LEAK_NOT_DETECTED,
46
+ };
47
+ accessory.context.LeakSensor = this.LeakSensor;
48
+ this.LeakSensor.Service
49
+ .setCharacteristic(this.hap.Characteristic.Name, this.LeakSensor.Name)
50
+ .getCharacteristic(this.hap.Characteristic.StatusActive)
51
+ .onGet(() => this.LeakSensor.StatusActive);
52
+ this.LeakSensor.Service
53
+ .getCharacteristic(this.hap.Characteristic.LeakDetected)
54
+ .onGet(() => this.LeakSensor.LeakDetected);
55
+ // Temperature Sensor Service
56
+ accessory.context.TemperatureSensor = accessory.context.TemperatureSensor ?? {};
57
+ this.TemperatureSensor = {
58
+ Name: accessory.context.TemperatureSensor.Name ?? `${accessory.displayName} Temperature Sensor`,
59
+ Service: accessory.getService(this.hap.Service.TemperatureSensor) ?? accessory.addService(this.hap.Service.TemperatureSensor),
60
+ CurrentTemperature: accessory.context.CurrentTemperature ?? 20,
61
+ };
62
+ accessory.context.TemperatureSensor = this.TemperatureSensor;
63
+ this.TemperatureSensor.Service
64
+ .setCharacteristic(this.hap.Characteristic.Name, this.TemperatureSensor.Name)
65
+ .getCharacteristic(this.hap.Characteristic.CurrentTemperature)
66
+ .setProps({
67
+ minValue: -273.15,
68
+ maxValue: 100,
69
+ minStep: 0.1,
70
+ })
71
+ .onGet(() => this.TemperatureSensor.CurrentTemperature);
72
+ // Humidity Sensor Service
73
+ accessory.context.HumiditySensor = accessory.context.HumiditySensor ?? {};
74
+ this.HumiditySensor = {
75
+ Name: accessory.context.HumiditySensor.Name ?? `${accessory.displayName} Humidity Sensor`,
76
+ Service: accessory.getService(this.hap.Service.HumiditySensor) ?? accessory.addService(this.hap.Service.HumiditySensor),
77
+ CurrentRelativeHumidity: accessory.context.CurrentRelativeHumidity ?? 50,
78
+ };
79
+ accessory.context.HumiditySensor = this.HumiditySensor;
80
+ this.HumiditySensor.Service
81
+ .setCharacteristic(this.hap.Characteristic.Name, this.HumiditySensor.Name);
82
+ this.HumiditySensor.Service
83
+ .getCharacteristic(this.hap.Characteristic.CurrentRelativeHumidity)
84
+ .setProps({ minStep: 0.1 })
85
+ .onGet(() => this.HumiditySensor.CurrentRelativeHumidity);
86
+ // Initial refresh
87
+ this.refreshStatus();
88
+ this.updateHomeKitCharacteristics();
89
+ interval(120 * 1000)
90
+ .pipe(skipWhile(() => this.SensorUpdateInProgress))
91
+ .subscribe(async () => {
92
+ await this.refreshStatus();
93
+ });
94
+ }
95
+ /**
96
+ * Parse the device status from the FirstAlert api
97
+ */
98
+ async parseStatus() {
99
+ // Example: parse state from API response (simulate for now)
100
+ // In a real implementation, fetch and parse state from the API
101
+ // For now, just set some dummy values
102
+ this.Battery.BatteryLevel = 100;
103
+ this.Battery.StatusLowBattery = this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL;
104
+ if (this.LeakSensor) {
105
+ this.LeakSensor.StatusActive = true;
106
+ this.LeakSensor.LeakDetected = this.hap.Characteristic.LeakDetected.LEAK_NOT_DETECTED;
107
+ }
108
+ if (this.TemperatureSensor) {
109
+ this.TemperatureSensor.CurrentTemperature = 20;
110
+ }
111
+ if (this.HumiditySensor) {
112
+ this.HumiditySensor.CurrentRelativeHumidity = 50;
113
+ }
114
+ }
115
+ /**
116
+ * Asks the FirstAlert Home API for the latest device information
117
+ */
118
+ async refreshStatus() {
119
+ try {
120
+ const deviceId = String(this.device.deviceId);
121
+ await this.platform.client.getDeviceState(deviceId);
122
+ // In a real implementation, parse deviceState and update class state
123
+ await this.parseStatus();
124
+ await this.updateHomeKitCharacteristics();
125
+ }
126
+ catch (e) {
127
+ const action = 'refreshStatus';
128
+ this.resideoAPIError(e, action);
129
+ }
130
+ }
131
+ /**
132
+ * Updates the status for each of the HomeKit Characteristics
133
+ */
134
+ async updateHomeKitCharacteristics() {
135
+ this.Battery.Service.updateCharacteristic(this.hap.Characteristic.BatteryLevel, this.Battery.BatteryLevel);
136
+ this.Battery.Service.updateCharacteristic(this.hap.Characteristic.StatusLowBattery, this.Battery.StatusLowBattery);
137
+ if (this.LeakSensor) {
138
+ this.LeakSensor.Service.updateCharacteristic(this.hap.Characteristic.LeakDetected, this.LeakSensor.LeakDetected);
139
+ this.LeakSensor.Service.updateCharacteristic(this.hap.Characteristic.StatusActive, this.LeakSensor.StatusActive);
140
+ }
141
+ if (this.TemperatureSensor) {
142
+ this.TemperatureSensor.Service.updateCharacteristic(this.hap.Characteristic.CurrentTemperature, this.TemperatureSensor.CurrentTemperature);
143
+ }
144
+ if (this.HumiditySensor) {
145
+ this.HumiditySensor.Service.updateCharacteristic(this.hap.Characteristic.CurrentRelativeHumidity, this.HumiditySensor.CurrentRelativeHumidity);
146
+ }
147
+ }
148
+ async apiError(e) {
149
+ this.Battery.Service.updateCharacteristic(this.hap.Characteristic.BatteryLevel, e);
150
+ this.Battery.Service.updateCharacteristic(this.hap.Characteristic.StatusLowBattery, e);
151
+ if (this.LeakSensor) {
152
+ this.LeakSensor.Service.updateCharacteristic(this.hap.Characteristic.LeakDetected, e);
153
+ this.LeakSensor.Service.updateCharacteristic(this.hap.Characteristic.StatusActive, e);
154
+ }
155
+ if (this.TemperatureSensor) {
156
+ this.TemperatureSensor.Service.updateCharacteristic(this.hap.Characteristic.CurrentTemperature, e);
157
+ }
158
+ if (this.HumiditySensor) {
159
+ this.HumiditySensor.Service.updateCharacteristic(this.hap.Characteristic.CurrentRelativeHumidity, e);
160
+ }
161
+ }
162
+ }
163
+ //# sourceMappingURL=leaksensors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leaksensors.js","sourceRoot":"","sources":["../../../src/devices/leaksensors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { PlatformAccessory } from 'homebridge';
2
+ import { Subject } from 'rxjs';
3
+ import type { ResideoDevice } from '../api/resideoClient.js';
4
+ import type { ResideoPlatform } from '../platform.js';
5
+ import { deviceBase } from './device.js';
6
+ /**
7
+ * HomeKit Smoke/CO/CO2 Sensor Accessory
8
+ */
9
+ export declare class SmokeSensor extends deviceBase {
10
+ readonly platform: ResideoPlatform;
11
+ private SmokeSensor;
12
+ private CarbonMonoxideSensor?;
13
+ private CarbonDioxideSensor?;
14
+ private Battery;
15
+ SensorUpdateInProgress: boolean;
16
+ doSensorUpdate: Subject<void>;
17
+ constructor(platform: ResideoPlatform, accessory: PlatformAccessory, device: ResideoDevice);
18
+ /**
19
+ * Parse the device status from the FirstAlert api
20
+ */
21
+ parseStatus(): Promise<void>;
22
+ /**
23
+ * Ask the FirstAlert API for the latest device information
24
+ */
25
+ refreshStatus(): Promise<void>;
26
+ /**
27
+ * Update HomeKit characteristics
28
+ */
29
+ updateHomeKitCharacteristics(): Promise<void>;
30
+ /**
31
+ * Called by platform polling
32
+ */
33
+ updateState(): Promise<void>;
34
+ }
35
+ //# sourceMappingURL=smoke.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smoke.d.ts","sourceRoot":"","sources":["../../../src/devices/smoke.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAuB,iBAAiB,EAAW,MAAM,YAAY,CAAA;AACjF,OAAO,EAAY,OAAO,EAAE,MAAM,MAAM,CAAA;AAGxC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC;;GAEG;AACH,qBAAa,WAAY,SAAQ,UAAU;IAYvC,QAAQ,CAAC,QAAQ,EAAE,eAAe;IAVpC,OAAO,CAAC,WAAW,CAAqF;IACxG,OAAO,CAAC,oBAAoB,CAAC,CAA8F;IAC3H,OAAO,CAAC,mBAAmB,CAAC,CAA6F;IACzH,OAAO,CAAC,OAAO,CAA+J;IAG9K,sBAAsB,EAAG,OAAO,CAAA;IAChC,cAAc,EAAG,OAAO,CAAC,IAAI,CAAC,CAAA;gBAGnB,QAAQ,EAAE,eAAe,EAClC,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,aAAa;IA6EvB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BlC;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAapC;;OAEG;IACG,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;IAYnD;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAGnC"}