homebridge-smartthings-oauth 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/.devcontainer/Dockerfile +16 -0
  2. package/.devcontainer/devcontainer.json +36 -0
  3. package/LICENSE +176 -0
  4. package/README.md +114 -0
  5. package/config.schema.json +134 -0
  6. package/dist/auth/auth.d.ts +23 -0
  7. package/dist/auth/auth.d.ts.map +1 -0
  8. package/dist/auth/auth.js +168 -0
  9. package/dist/auth/auth.js.map +1 -0
  10. package/dist/auth/tokenManager.d.ts +36 -0
  11. package/dist/auth/tokenManager.d.ts.map +1 -0
  12. package/dist/auth/tokenManager.js +180 -0
  13. package/dist/auth/tokenManager.js.map +1 -0
  14. package/dist/basePlatformAccessory.d.ts +49 -0
  15. package/dist/basePlatformAccessory.d.ts.map +1 -0
  16. package/dist/basePlatformAccessory.js +209 -0
  17. package/dist/basePlatformAccessory.js.map +1 -0
  18. package/dist/index.d.ts +7 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +7 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/keyValues.d.ts +4 -0
  23. package/dist/keyValues.d.ts.map +1 -0
  24. package/dist/keyValues.js +12 -0
  25. package/dist/keyValues.js.map +1 -0
  26. package/dist/multiServiceAccessory.d.ts +60 -0
  27. package/dist/multiServiceAccessory.d.ts.map +1 -0
  28. package/dist/multiServiceAccessory.js +398 -0
  29. package/dist/multiServiceAccessory.js.map +1 -0
  30. package/dist/platform.d.ts +42 -0
  31. package/dist/platform.d.ts.map +1 -0
  32. package/dist/platform.js +302 -0
  33. package/dist/platform.js.map +1 -0
  34. package/dist/services/airConditionerService.d.ts +52 -0
  35. package/dist/services/airConditionerService.d.ts.map +1 -0
  36. package/dist/services/airConditionerService.js +438 -0
  37. package/dist/services/airConditionerService.js.map +1 -0
  38. package/dist/services/baseService.d.ts +21 -0
  39. package/dist/services/baseService.d.ts.map +1 -0
  40. package/dist/services/baseService.js +63 -0
  41. package/dist/services/baseService.js.map +1 -0
  42. package/dist/services/batteryService.d.ts +10 -0
  43. package/dist/services/batteryService.d.ts.map +1 -0
  44. package/dist/services/batteryService.js +71 -0
  45. package/dist/services/batteryService.js.map +1 -0
  46. package/dist/services/carbonMonoxideDetector.d.ts +11 -0
  47. package/dist/services/carbonMonoxideDetector.d.ts.map +1 -0
  48. package/dist/services/carbonMonoxideDetector.js +28 -0
  49. package/dist/services/carbonMonoxideDetector.js.map +1 -0
  50. package/dist/services/contactSensorService.d.ts +10 -0
  51. package/dist/services/contactSensorService.d.ts.map +1 -0
  52. package/dist/services/contactSensorService.js +28 -0
  53. package/dist/services/contactSensorService.js.map +1 -0
  54. package/dist/services/doorService.d.ts +16 -0
  55. package/dist/services/doorService.d.ts.map +1 -0
  56. package/dist/services/doorService.js +138 -0
  57. package/dist/services/doorService.js.map +1 -0
  58. package/dist/services/fanSpeedService.d.ts +15 -0
  59. package/dist/services/fanSpeedService.d.ts.map +1 -0
  60. package/dist/services/fanSpeedService.js +153 -0
  61. package/dist/services/fanSpeedService.js.map +1 -0
  62. package/dist/services/fanSwitchLevelService.d.ts +14 -0
  63. package/dist/services/fanSwitchLevelService.d.ts.map +1 -0
  64. package/dist/services/fanSwitchLevelService.js +121 -0
  65. package/dist/services/fanSwitchLevelService.js.map +1 -0
  66. package/dist/services/humidityService.d.ts +10 -0
  67. package/dist/services/humidityService.d.ts.map +1 -0
  68. package/dist/services/humidityService.js +23 -0
  69. package/dist/services/humidityService.js.map +1 -0
  70. package/dist/services/leakDetector.d.ts +10 -0
  71. package/dist/services/leakDetector.d.ts.map +1 -0
  72. package/dist/services/leakDetector.js +27 -0
  73. package/dist/services/leakDetector.js.map +1 -0
  74. package/dist/services/lightSensorService.d.ts +10 -0
  75. package/dist/services/lightSensorService.d.ts.map +1 -0
  76. package/dist/services/lightSensorService.js +24 -0
  77. package/dist/services/lightSensorService.js.map +1 -0
  78. package/dist/services/lightService.d.ts +26 -0
  79. package/dist/services/lightService.d.ts.map +1 -0
  80. package/dist/services/lightService.js +340 -0
  81. package/dist/services/lightService.js.map +1 -0
  82. package/dist/services/lockService.d.ts +16 -0
  83. package/dist/services/lockService.d.ts.map +1 -0
  84. package/dist/services/lockService.js +128 -0
  85. package/dist/services/lockService.js.map +1 -0
  86. package/dist/services/motionService.d.ts +10 -0
  87. package/dist/services/motionService.d.ts.map +1 -0
  88. package/dist/services/motionService.js +23 -0
  89. package/dist/services/motionService.js.map +1 -0
  90. package/dist/services/occupancySensorService.d.ts +10 -0
  91. package/dist/services/occupancySensorService.d.ts.map +1 -0
  92. package/dist/services/occupancySensorService.js +23 -0
  93. package/dist/services/occupancySensorService.js.map +1 -0
  94. package/dist/services/sensorService.d.ts +15 -0
  95. package/dist/services/sensorService.d.ts.map +1 -0
  96. package/dist/services/sensorService.js +69 -0
  97. package/dist/services/sensorService.js.map +1 -0
  98. package/dist/services/smartThingsCommand.d.ts +7 -0
  99. package/dist/services/smartThingsCommand.d.ts.map +1 -0
  100. package/dist/services/smartThingsCommand.js +12 -0
  101. package/dist/services/smartThingsCommand.js.map +1 -0
  102. package/dist/services/smokeDetector.d.ts +10 -0
  103. package/dist/services/smokeDetector.d.ts.map +1 -0
  104. package/dist/services/smokeDetector.js +27 -0
  105. package/dist/services/smokeDetector.js.map +1 -0
  106. package/dist/services/statelessProgrammableSwitchService.d.ts +12 -0
  107. package/dist/services/statelessProgrammableSwitchService.d.ts.map +1 -0
  108. package/dist/services/statelessProgrammableSwitchService.js +94 -0
  109. package/dist/services/statelessProgrammableSwitchService.js.map +1 -0
  110. package/dist/services/switchService.d.ts +12 -0
  111. package/dist/services/switchService.d.ts.map +1 -0
  112. package/dist/services/switchService.js +72 -0
  113. package/dist/services/switchService.js.map +1 -0
  114. package/dist/services/temperatureService.d.ts +11 -0
  115. package/dist/services/temperatureService.d.ts.map +1 -0
  116. package/dist/services/temperatureService.js +32 -0
  117. package/dist/services/temperatureService.js.map +1 -0
  118. package/dist/services/thermostatService.d.ts +22 -0
  119. package/dist/services/thermostatService.d.ts.map +1 -0
  120. package/dist/services/thermostatService.js +273 -0
  121. package/dist/services/thermostatService.js.map +1 -0
  122. package/dist/services/valveService.d.ts +12 -0
  123. package/dist/services/valveService.d.ts.map +1 -0
  124. package/dist/services/valveService.js +59 -0
  125. package/dist/services/valveService.js.map +1 -0
  126. package/dist/services/windowCoveringService.d.ts +36 -0
  127. package/dist/services/windowCoveringService.d.ts.map +1 -0
  128. package/dist/services/windowCoveringService.js +158 -0
  129. package/dist/services/windowCoveringService.js.map +1 -0
  130. package/dist/settings.d.ts +9 -0
  131. package/dist/settings.d.ts.map +1 -0
  132. package/dist/settings.js +12 -0
  133. package/dist/settings.js.map +1 -0
  134. package/dist/webhook/subscriptionHandler.d.ts +32 -0
  135. package/dist/webhook/subscriptionHandler.d.ts.map +1 -0
  136. package/dist/webhook/subscriptionHandler.js +68 -0
  137. package/dist/webhook/subscriptionHandler.js.map +1 -0
  138. package/dist/webhook/webhookServer.d.ts +19 -0
  139. package/dist/webhook/webhookServer.d.ts.map +1 -0
  140. package/dist/webhook/webhookServer.js +125 -0
  141. package/dist/webhook/webhookServer.js.map +1 -0
  142. package/package.json +57 -0
@@ -0,0 +1,398 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MultiServiceAccessory = void 0;
4
+ // import { BasePlatformAccessory } from './basePlatformAccessory';
5
+ const motionService_1 = require("./services/motionService");
6
+ const batteryService_1 = require("./services/batteryService");
7
+ const temperatureService_1 = require("./services/temperatureService");
8
+ const humidityService_1 = require("./services/humidityService");
9
+ const lightSensorService_1 = require("./services/lightSensorService");
10
+ const contactSensorService_1 = require("./services/contactSensorService");
11
+ const lockService_1 = require("./services/lockService");
12
+ const doorService_1 = require("./services/doorService");
13
+ const switchService_1 = require("./services/switchService");
14
+ const lightService_1 = require("./services/lightService");
15
+ const fanSwitchLevelService_1 = require("./services/fanSwitchLevelService");
16
+ const occupancySensorService_1 = require("./services/occupancySensorService");
17
+ const leakDetector_1 = require("./services/leakDetector");
18
+ const smokeDetector_1 = require("./services/smokeDetector");
19
+ const carbonMonoxideDetector_1 = require("./services/carbonMonoxideDetector");
20
+ const valveService_1 = require("./services/valveService");
21
+ const fanSpeedService_1 = require("./services/fanSpeedService");
22
+ const windowCoveringService_1 = require("./services/windowCoveringService");
23
+ const thermostatService_1 = require("./services/thermostatService");
24
+ const statelessProgrammableSwitchService_1 = require("./services/statelessProgrammableSwitchService");
25
+ const airConditionerService_1 = require("./services/airConditionerService");
26
+ const smartThingsCommand_1 = require("./services/smartThingsCommand");
27
+ // type DeviceStatus = {
28
+ // timestamp: number;
29
+ // //status: Record<string, unknown>;
30
+ // status: any;
31
+ // };
32
+ /**
33
+ * Platform Accessory
34
+ * An instance of this class is created for each accessory your platform registers
35
+ * Each accessory may expose multiple services of different service types.
36
+ */
37
+ // export class MultiServiceAccessory extends BasePlatformAccessory {
38
+ class MultiServiceAccessory {
39
+ get id() {
40
+ return this.accessory.UUID;
41
+ }
42
+ constructor(platform, accessory) {
43
+ // service: Service;
44
+ //capabilities;
45
+ this.components = [];
46
+ /**
47
+ * These are just used to create a working example
48
+ * You should implement your own code to track the state of your accessory
49
+ */
50
+ this.services = [];
51
+ this.online = true;
52
+ //protected deviceStatus: DeviceStatus = { timestamp: 0, status: undefined };
53
+ this.deviceStatusTimestamp = 0;
54
+ this.failureCount = 0;
55
+ this.giveUpTime = 0;
56
+ this.commandInProgress = false;
57
+ this.lastCommandCompleted = 0;
58
+ this.statusQueryInProgress = false;
59
+ this.lastStatusResult = true;
60
+ this.accessory = accessory;
61
+ this.platform = platform;
62
+ this.name = accessory.context.device.label;
63
+ this.log = platform.log;
64
+ this.baseURL = platform.config.BaseURL;
65
+ this.key = platform.config.AccessToken;
66
+ this.api = platform.api;
67
+ this.commandURL = 'devices/' + accessory.context.device.deviceId + '/commands';
68
+ this.statusURL = 'devices/' + accessory.context.device.deviceId + '/status';
69
+ this.healthURL = 'devices/' + accessory.context.device.deviceId + '/health';
70
+ this.characteristic = platform.Characteristic;
71
+ // set accessory information
72
+ accessory.getService(platform.Service.AccessoryInformation)
73
+ .setCharacteristic(platform.Characteristic.Manufacturer, accessory.context.device.manufacturerName)
74
+ .setCharacteristic(platform.Characteristic.Model, 'Default-Model')
75
+ .setCharacteristic(platform.Characteristic.SerialNumber, 'Default-Serial');
76
+ // Use platform's axios instance to benefit from token refresh handling
77
+ this.axInstance = platform.axInstance;
78
+ // Initialize device health check
79
+ this.checkDeviceHealth().catch(error => {
80
+ this.log.error(`Error checking device health for ${this.name}:`, error);
81
+ this.online = false;
82
+ });
83
+ }
84
+ async checkDeviceHealth() {
85
+ try {
86
+ const response = await this.axInstance.get(this.healthURL);
87
+ this.online = response.data.state === 'ONLINE';
88
+ this.log.debug(`Device ${this.name} is ${this.online ? 'online' : 'offline'}`);
89
+ }
90
+ catch (error) {
91
+ this.log.error(`Failed to check device health for ${this.name}:`, error);
92
+ this.online = false;
93
+ throw error; // Re-throw to be caught by the constructor
94
+ }
95
+ }
96
+ registerServiceIfMatchesCapabilities(componentId, component, capabilitiesToCover, capabilities, optionalCapabilities, serviceConstructor) {
97
+ // this.log.debug(`Testing ${serviceConstructor.name} for capabilities ${capabilitiesToCover}`);
98
+ // ignore services which cannot cover all required capabilities
99
+ if (!capabilities.every(e => capabilitiesToCover.includes(e))) {
100
+ // this.log.debug(`Ignoring ${serviceConstructor.name}`);
101
+ return capabilitiesToCover;
102
+ }
103
+ const allCapabilities = capabilities.concat(optionalCapabilities.filter(e => capabilitiesToCover.includes(e)));
104
+ this.log.debug(`Creating instance of ${serviceConstructor.name} for capabilities ${allCapabilities}`);
105
+ const serviceInstance = new serviceConstructor(this.platform, this.accessory, componentId, allCapabilities, this, this.name, component);
106
+ this.services.push(serviceInstance);
107
+ this.log.debug(`Registered ${serviceConstructor.name} for capabilities ${allCapabilities}`);
108
+ // remove covered capabilities and return unused
109
+ return capabilitiesToCover.filter(e => !allCapabilities.includes(e));
110
+ }
111
+ addComponent(componentId, capabilities) {
112
+ const component = {
113
+ componentId,
114
+ capabilities,
115
+ status: {},
116
+ };
117
+ this.components.push(component);
118
+ let capabilitiesToCover = [...capabilities];
119
+ // Start with comboServices and remove used capabilities to avoid duplicated sensors.
120
+ // For example, there is no need to expose a temperature sensor in case of a thermostat which already exposes that charateristic.
121
+ MultiServiceAccessory.comboCapabilityMap
122
+ .sort((a, b) => a.capabilities.length > b.capabilities.length ? -1 : 1) // services with larger capability set first
123
+ .forEach(entry => {
124
+ capabilitiesToCover = this.registerServiceIfMatchesCapabilities(componentId, component, capabilitiesToCover, entry.capabilities, entry.optionalCapabilities || [], entry.service);
125
+ });
126
+ Object.keys(MultiServiceAccessory.capabilityMap).forEach((capability) => {
127
+ const service = MultiServiceAccessory.capabilityMap[capability];
128
+ capabilitiesToCover = this.registerServiceIfMatchesCapabilities(componentId, component, capabilitiesToCover, [capability], [], service);
129
+ });
130
+ }
131
+ isOnline() {
132
+ return this.online;
133
+ }
134
+ // Find return if a capability is supported by the multi-service accessory
135
+ static capabilitySupported(capability) {
136
+ if (Object.keys(MultiServiceAccessory.capabilityMap).find(c => c === capability)) {
137
+ return true;
138
+ }
139
+ else {
140
+ return false;
141
+ }
142
+ }
143
+ // public async refreshStatus(): Promise<boolean> {
144
+ // return super.refreshStatus();
145
+ // }
146
+ // Called by subclasses to refresh the status for the device. Will only refresh if it has been more than
147
+ // 4 seconds since last refresh
148
+ //
149
+ async refreshStatus() {
150
+ return new Promise((resolve) => {
151
+ this.log.debug(`Refreshing status for ${this.name} - current timestamp is ${this.deviceStatusTimestamp}`);
152
+ if (Date.now() - this.deviceStatusTimestamp > 5000) {
153
+ // If there is already a call to smartthings to update status for this device, don't issue another one until
154
+ // we return from that.
155
+ if (this.statusQueryInProgress) {
156
+ this.log.debug(`Status query already in progress for ${this.name}. Waiting...`);
157
+ this.waitFor(() => !this.statusQueryInProgress).then(() => resolve(this.lastStatusResult));
158
+ return;
159
+ }
160
+ this.log.debug(`Calling Smartthings to get an update for ${this.name}`);
161
+ this.statusQueryInProgress = true;
162
+ this.failureCount = 0;
163
+ this.waitFor(() => this.commandInProgress === false).then(() => {
164
+ this.lastStatusResult = true;
165
+ this.axInstance.get(this.statusURL).then((res) => {
166
+ const componentsStatus = res.data.components;
167
+ this.components.forEach(component => {
168
+ if (componentsStatus[component.componentId] !== undefined) {
169
+ component.status = componentsStatus[component.componentId];
170
+ this.deviceStatusTimestamp = Date.now();
171
+ this.log.debug(`Updated status for ${this.name}-${component.componentId}: ${JSON.stringify(component.status)}`);
172
+ }
173
+ else {
174
+ this.log.error(`Failed to get status for ${this.name}-${component.componentId}`);
175
+ }
176
+ });
177
+ this.statusQueryInProgress = false;
178
+ resolve(true);
179
+ // if (res.data.components.main !== undefined) {
180
+ // this.deviceStatus.status = res.data.components.main;
181
+ // this.deviceStatus.timestamp = Date.now();
182
+ // this.log.debug(`Updated status for ${this.name}: ${JSON.stringify(this.deviceStatus.status)}`);
183
+ // this.statusQueryInProgress = false;
184
+ // resolve(true);
185
+ // } else {
186
+ // this.log.debug(`No status returned for ${this.name}`);
187
+ // this.statusQueryInProgress = false;
188
+ // resolve(this.lastStatusResult = false);
189
+ // }
190
+ }).catch(error => {
191
+ this.failureCount++;
192
+ this.log.error(`Failed to request status from ${this.name}: ${error}. This is failure number ${this.failureCount}`);
193
+ if (this.failureCount >= 5) {
194
+ this.log.error(`Exceeded allowed failures for ${this.name}. Device is offline`);
195
+ this.giveUpTime = Date.now();
196
+ this.online = false;
197
+ }
198
+ this.statusQueryInProgress = false;
199
+ resolve(this.lastStatusResult = false);
200
+ });
201
+ });
202
+ }
203
+ else {
204
+ resolve(true);
205
+ }
206
+ });
207
+ }
208
+ forceNextStatusRefresh() {
209
+ this.deviceStatusTimestamp = 0;
210
+ }
211
+ // public startPollingState(pollSeconds: number, getValue: () => Promise<CharacteristicValue>, service: Service,
212
+ // chracteristic: WithUUID<new () => Characteristic>, targetStateCharacteristic?: WithUUID<new () => Characteristic>,
213
+ // getTargetState?: () => Promise<CharacteristicValue>) {
214
+ // return super.startPollingState(pollSeconds, getValue, service, chracteristic, targetStateCharacteristic, getTargetState);
215
+ // }
216
+ startPollingState(pollSeconds, getValue, service, chracteristic, targetStateCharacteristic, getTargetState) {
217
+ if (this.platform.config.WebhookToken && this.platform.config.WebhookToken !== '') {
218
+ return; // Don't poll if we have a webhook token
219
+ }
220
+ if (pollSeconds > 0) {
221
+ return setInterval(() => {
222
+ // If we are in the middle of a commmand call, or it hasn't been at least 10 seconds, we don't want to poll.
223
+ if (this.commandInProgress || Date.now() - this.lastCommandCompleted < 20 * 1000) {
224
+ // Skip polling until command is complete
225
+ this.log.debug(`Command in progress, skipping polling for ${this.name}`);
226
+ return;
227
+ }
228
+ if (this.online) {
229
+ this.log.debug(`${this.name} polling...`);
230
+ // this.commandInProgress = true;
231
+ getValue().then((v) => {
232
+ service.updateCharacteristic(chracteristic, v);
233
+ this.log.debug(`${this.name} value updated.`);
234
+ }).catch(() => {
235
+ this.log.warn(`Poll failure on ${this.name}`);
236
+ return;
237
+ });
238
+ // Update target if we have to
239
+ if (targetStateCharacteristic && getTargetState) {
240
+ //service.updateCharacteristic(targetStateCharacteristic, getTargetState());
241
+ getTargetState().then(value => service.updateCharacteristic(targetStateCharacteristic, value));
242
+ }
243
+ }
244
+ else {
245
+ // If we failed this accessory due to errors. Reset the failure count and online status after 10 minutes.
246
+ if (this.giveUpTime > 0 && (Date.now() - this.giveUpTime > (10 * 60 * 1000))) {
247
+ this.axInstance.get(this.healthURL)
248
+ .then(res => {
249
+ if (res.data.state === 'ONLINE') {
250
+ this.online = true;
251
+ this.giveUpTime = 0;
252
+ this.failureCount = 0;
253
+ }
254
+ });
255
+ }
256
+ }
257
+ }, pollSeconds * 1000 + Math.floor(Math.random() * 1000)); // Add a random delay to avoid collisions
258
+ }
259
+ }
260
+ async sendCommand(capability, command, args) {
261
+ const cmd = new smartThingsCommand_1.Command(capability, command, args);
262
+ return this.sendCommands([cmd]);
263
+ }
264
+ async sendCommands(commands) {
265
+ const commandBody = JSON.stringify({ commands: commands });
266
+ return new Promise((resolve) => {
267
+ this.waitFor(() => !this.commandInProgress).then(() => {
268
+ this.commandInProgress = true;
269
+ this.axInstance.post(this.commandURL, commandBody).then(() => {
270
+ this.log.debug(`${JSON.stringify(commands)} successful for ${this.name}`);
271
+ this.deviceStatusTimestamp = 0; // Force a refresh on next poll after a state change
272
+ this.commandInProgress = false;
273
+ resolve(true);
274
+ // Force a small delay so that status fetch is correct
275
+ // setTimeout(() => {
276
+ // this.log.debug(`Delay complete for ${this.name}`);
277
+ // this.commandInProgress = false;
278
+ // resolve(true);
279
+ // }, 1500);
280
+ }).catch((error) => {
281
+ this.commandInProgress = false;
282
+ this.log.error(`${JSON.stringify(commands)} failed for ${this.name}: ${error}`);
283
+ resolve(false);
284
+ });
285
+ });
286
+ });
287
+ }
288
+ // Wait for the condition to be true. Will check every 500 ms
289
+ async waitFor(condition) {
290
+ if (condition()) {
291
+ return;
292
+ }
293
+ this.log.debug(`${this.name} command or request is waiting...`);
294
+ return new Promise(resolve => {
295
+ const interval = setInterval(() => {
296
+ if (condition()) {
297
+ this.log.debug(`${this.name} command or request is proceeding.`);
298
+ clearInterval(interval);
299
+ resolve();
300
+ }
301
+ this.log.debug(`${this.name} still waiting...`);
302
+ }, 250);
303
+ });
304
+ }
305
+ processEvent(event) {
306
+ this.log.debug(`Received events for ${this.name}`);
307
+ const service = this.services.find(s => s.componentId === event.componentId && s.capabilities.find(c => c === event.capability));
308
+ if (service) {
309
+ this.log.debug(`Event for ${this.name}:${event.componentId} - ${event.value}`);
310
+ service.processEvent(event);
311
+ }
312
+ }
313
+ }
314
+ exports.MultiServiceAccessory = MultiServiceAccessory;
315
+ // Order of these matters. Make sure secondary capabilities like 'battery' and 'contactSensor' are at the end.
316
+ MultiServiceAccessory.capabilityMap = {
317
+ 'doorControl': doorService_1.DoorService,
318
+ 'lock': lockService_1.LockService,
319
+ 'switch': switchService_1.SwitchService,
320
+ 'windowShadeLevel': windowCoveringService_1.WindowCoveringService,
321
+ 'windowShade': windowCoveringService_1.WindowCoveringService,
322
+ 'motionSensor': motionService_1.MotionService,
323
+ 'waterSensor': leakDetector_1.LeakDetectorService,
324
+ 'smokeDetector': smokeDetector_1.SmokeDetectorService,
325
+ 'carbonMonoxideDetector': carbonMonoxideDetector_1.CarbonMonoxideDetectorService,
326
+ 'presenceSensor': occupancySensorService_1.OccupancySensorService,
327
+ 'temperatureMeasurement': temperatureService_1.TemperatureService,
328
+ 'relativeHumidityMeasurement': humidityService_1.HumidityService,
329
+ 'illuminanceMeasurement': lightSensorService_1.LightSensorService,
330
+ 'contactSensor': contactSensorService_1.ContactSensorService,
331
+ 'button': statelessProgrammableSwitchService_1.StatelessProgrammableSwitchService,
332
+ 'battery': batteryService_1.BatteryService,
333
+ 'valve': valveService_1.ValveService,
334
+ };
335
+ // Maps combinations of supported capabilities to a service
336
+ MultiServiceAccessory.comboCapabilityMap = [
337
+ {
338
+ capabilities: [
339
+ 'switch',
340
+ 'airConditionerMode',
341
+ 'airConditionerFanMode',
342
+ 'thermostatCoolingSetpoint',
343
+ 'temperatureMeasurement',
344
+ ],
345
+ optionalCapabilities: [
346
+ 'fanOscillationMode',
347
+ 'relativeHumidityMeasurement',
348
+ 'custom.airConditionerOptionalMode',
349
+ ],
350
+ service: airConditionerService_1.AirConditionerService,
351
+ },
352
+ {
353
+ capabilities: ['switch', 'fanSpeed', 'switchLevel'],
354
+ service: fanSwitchLevelService_1.FanSwitchLevelService,
355
+ },
356
+ {
357
+ capabilities: ['switch', 'fanSpeed'],
358
+ service: fanSpeedService_1.FanSpeedService,
359
+ },
360
+ {
361
+ capabilities: ['switch', 'switchLevel'],
362
+ service: lightService_1.LightService,
363
+ },
364
+ {
365
+ capabilities: ['switch', 'colorControl'],
366
+ service: lightService_1.LightService,
367
+ },
368
+ {
369
+ capabilities: ['switch', 'colorTemperature'],
370
+ service: lightService_1.LightService,
371
+ },
372
+ {
373
+ capabilities: ['switch', 'valve'],
374
+ service: valveService_1.ValveService,
375
+ },
376
+ {
377
+ capabilities: ['temperatureMeasurement',
378
+ 'thermostatMode',
379
+ 'thermostatHeatingSetpoint',
380
+ 'thermostatCoolingSetpoint'],
381
+ service: thermostatService_1.ThermostatService,
382
+ },
383
+ {
384
+ // There is a heater out there that just supports thermostatMode and thermostatHeatingSetpoint
385
+ capabilities: ['temperatureMeasurement',
386
+ 'thermostatHeatingSetpoint'],
387
+ service: thermostatService_1.ThermostatService,
388
+ },
389
+ {
390
+ capabilities: ['windowShade', 'windowShadeLevel'],
391
+ service: windowCoveringService_1.WindowCoveringService,
392
+ },
393
+ {
394
+ capabilities: ['windowShade', 'switchLevel'],
395
+ service: windowCoveringService_1.WindowCoveringService,
396
+ },
397
+ ];
398
+ //# sourceMappingURL=multiServiceAccessory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiServiceAccessory.js","sourceRoot":"","sources":["../src/multiServiceAccessory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { API, DynamicPlatformPlugin, Logger, PlatformAccessory, PlatformConfig, Service, Characteristic } from 'homebridge';
2
+ import axios = require('axios');
3
+ import { MultiServiceAccessory } from './multiServiceAccessory';
4
+ import { SmartThingsAuth } from './auth/auth';
5
+ /**
6
+ * HomebridgePlatform
7
+ * This class is the main constructor for your plugin, this is where you should
8
+ * parse the user config and discover/register accessories with Homebridge.
9
+ */
10
+ export declare class IKHomeBridgeHomebridgePlatform implements DynamicPlatformPlugin {
11
+ readonly log: Logger;
12
+ readonly config: PlatformConfig;
13
+ readonly api: API;
14
+ readonly Service: typeof Service;
15
+ readonly Characteristic: typeof Characteristic;
16
+ readonly accessories: PlatformAccessory[];
17
+ private locationIDsToIgnore;
18
+ private roomsIDsToIgnore;
19
+ auth: SmartThingsAuth;
20
+ private headerDict;
21
+ readonly axInstance: axios.AxiosInstance;
22
+ private accessoryObjects;
23
+ private subscriptionHandler;
24
+ constructor(log: Logger, config: PlatformConfig, api: API);
25
+ /**
26
+ * This function is invoked when homebridge restores cached accessories from disk at startup.
27
+ * It should be used to setup event handlers for characteristics and update respective values.
28
+ */
29
+ configureAccessory(accessory: PlatformAccessory): void;
30
+ getLocationsToIgnore(): Promise<boolean>;
31
+ getOnlineDevices(): Promise<Array<object>>;
32
+ unregisterDevices(devices: any, all?: boolean): void;
33
+ /**
34
+ * This is an example method showing how to register discovered accessories.
35
+ * Accessories must only be registered once, previously created accessories
36
+ * must not be registered again to prevent "duplicate UUID" errors.
37
+ */
38
+ discoverDevices(devices: any): void;
39
+ findSupportedCapability(device: any): boolean;
40
+ createAccessoryObject(device: any, accessory: any): MultiServiceAccessory;
41
+ }
42
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI5H,OAAO,KAAK,GAAG,QAAQ,OAAO,CAAC,CAAC;AAEhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C;;;;GAIG;AACH,qBAAa,8BAA+B,YAAW,qBAAqB;aAwBxD,GAAG,EAAE,MAAM;aACX,MAAM,EAAE,cAAc;aACtB,GAAG,EAAE,GAAG;IAzB1B,SAAgB,OAAO,EAAE,OAAO,OAAO,CAAwB;IAC/D,SAAgB,cAAc,EAAE,OAAO,cAAc,CAA+B;IAGpF,SAAgB,WAAW,EAAE,iBAAiB,EAAE,CAAM;IAEtD,OAAO,CAAC,mBAAmB,CAAgB;IAC3C,OAAO,CAAC,gBAAgB,CAAgB;IACjC,IAAI,EAAE,eAAe,CAAC;IAE7B,OAAO,CAAC,UAAU,CAEhB;IAEF,SAAgB,UAAU,sBAGvB;IAEH,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,mBAAmB,CAA8C;gBAGvD,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,cAAc,EACtB,GAAG,EAAE,GAAG;IAqH1B;;;OAGG;IACH,kBAAkB,CAAC,SAAS,EAAE,iBAAiB;IAO/C,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IAkBxC,gBAAgB,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IA8C1C,iBAAiB,CAAC,OAAO,KAAA,EAAE,GAAG,UAAQ;IA0BtC;;;;OAIG;IACH,eAAe,CAAC,OAAO,KAAA;IAqDvB,uBAAuB,CAAC,MAAM,KAAA,GAAG,OAAO;IAqBxC,qBAAqB,CAAC,MAAM,KAAA,EAAE,SAAS,KAAA,GAAG,qBAAqB;CAiBhE"}