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,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BatteryService = void 0;
4
+ const baseService_1 = require("./baseService");
5
+ class BatteryService extends baseService_1.BaseService {
6
+ constructor(platform, accessory, componentId, capabilities, multiServiceAccessory, name, deviceStatus) {
7
+ super(platform, accessory, componentId, capabilities, multiServiceAccessory, name, deviceStatus);
8
+ this.setServiceType(platform.Service.Battery);
9
+ this.log.debug(`Adding BatteryService to ${this.name}`);
10
+ this.service.getCharacteristic(platform.Characteristic.BatteryLevel)
11
+ .onGet(this.getBatteryLevel.bind(this));
12
+ this.service.getCharacteristic(platform.Characteristic.StatusLowBattery)
13
+ .onGet(this.getStatusLowBattery.bind(this));
14
+ let pollSensorSeconds = 5; // default to 10 seconds
15
+ if (this.platform.config.PollSensorsSeconds !== undefined) {
16
+ pollSensorSeconds = this.platform.config.PollSensorsSeconds;
17
+ }
18
+ if (pollSensorSeconds > 0) {
19
+ multiServiceAccessory.startPollingState(pollSensorSeconds, this.getBatteryLevel.bind(this), this.service, platform.Characteristic.BatteryLevel);
20
+ }
21
+ }
22
+ async getBatteryLevel() {
23
+ // if you need to return an error to show the device as "Not Responding" in the Home app:
24
+ // throw new this.platform.api.hap.HapStatusError(this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE);
25
+ this.log.debug('Received getBatteryLevel() event for ' + this.name);
26
+ return new Promise((resolve, reject) => {
27
+ this.getStatus().then(success => {
28
+ if (success) {
29
+ const batteryLevel = this.deviceStatus.status.battery.battery.value;
30
+ if (batteryLevel === null) {
31
+ return reject(new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */));
32
+ }
33
+ this.log.debug(`Battery value from ${this.name}: ${batteryLevel}`);
34
+ resolve(batteryLevel);
35
+ }
36
+ else {
37
+ reject(new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */));
38
+ }
39
+ });
40
+ });
41
+ }
42
+ async getStatusLowBattery() {
43
+ // if you need to return an error to show the device as "Not Responding" in the Home app:
44
+ // throw new this.platform.api.hap.HapStatusError(this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE);
45
+ this.log.debug('Received getStatusLowBattery() event for ' + this.name);
46
+ return new Promise((resolve, reject) => {
47
+ this.getStatus().then(success => {
48
+ if (success) {
49
+ const batteryLevel = this.deviceStatus.status.battery.battery.value;
50
+ if (batteryLevel === null) {
51
+ return reject(new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */));
52
+ }
53
+ if (batteryLevel > 40) {
54
+ this.log.debug(`${this.name} battery level normal`);
55
+ }
56
+ else {
57
+ this.log.debug(`${this.name} battery level LOW`);
58
+ }
59
+ resolve(batteryLevel <= 30 ?
60
+ this.platform.Characteristic.StatusLowBattery.BATTERY_LEVEL_LOW :
61
+ this.platform.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL);
62
+ }
63
+ else {
64
+ reject(new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */));
65
+ }
66
+ });
67
+ });
68
+ }
69
+ }
70
+ exports.BatteryService = BatteryService;
71
+ //# sourceMappingURL=batteryService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batteryService.js","sourceRoot":"","sources":["../../src/services/batteryService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { PlatformAccessory } from 'homebridge';
2
+ import { IKHomeBridgeHomebridgePlatform } from '../platform';
3
+ import { MultiServiceAccessory } from '../multiServiceAccessory';
4
+ import { SensorService } from './sensorService';
5
+ import { ShortEvent } from '../webhook/subscriptionHandler';
6
+ export declare class CarbonMonoxideDetectorService extends SensorService {
7
+ serviceName: string;
8
+ constructor(platform: IKHomeBridgeHomebridgePlatform, accessory: PlatformAccessory, componentId: string, capabilities: string[], multiServiceAccessory: MultiServiceAccessory, name: string, deviceStatus: any);
9
+ processEvent(event: ShortEvent): void;
10
+ }
11
+ //# sourceMappingURL=carbonMonoxideDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carbonMonoxideDetector.d.ts","sourceRoot":"","sources":["../../src/services/carbonMonoxideDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,qBAAa,6BAA8B,SAAQ,aAAa;IAC9D,WAAW,SAA4B;gBAE3B,QAAQ,EAAE,8BAA8B,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAC7H,qBAAqB,EAAE,qBAAqB,EAC5C,IAAI,EAAE,MAAM,EAAE,YAAY,KAAA;IAoBrB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;CAM7C"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CarbonMonoxideDetectorService = void 0;
4
+ const sensorService_1 = require("./sensorService");
5
+ class CarbonMonoxideDetectorService extends sensorService_1.SensorService {
6
+ constructor(platform, accessory, componentId, capabilities, multiServiceAccessory, name, deviceStatus) {
7
+ super(platform, accessory, componentId, capabilities, multiServiceAccessory, name, deviceStatus);
8
+ this.serviceName = 'CarbonMonixideDetector';
9
+ this.initService(platform.Service.CarbonMonoxideSensor, platform.Characteristic.CarbonMonoxideDetected, (status) => {
10
+ const deviceStatus = status.carbonMonoxideDetector.carbonMonoxide.value;
11
+ if (deviceStatus === null || deviceStatus === undefined) {
12
+ this.log.warn(`${this.name} returned bad value for status`);
13
+ throw ('Bad Value');
14
+ }
15
+ return deviceStatus === 'detected' ?
16
+ this.platform.Characteristic.CarbonMonoxideDetected.CO_LEVELS_ABNORMAL :
17
+ this.platform.Characteristic.CarbonMonoxideDetected.CO_LEVELS_NORMAL;
18
+ });
19
+ this.log.debug(`Adding ${this.serviceName} Service to ${this.name}`);
20
+ }
21
+ processEvent(event) {
22
+ this.log.debug(`Event updating CO detection for ${this.name} to ${event.value}`);
23
+ this.service.updateCharacteristic(this.platform.Characteristic.CarbonDioxideDetected, (event.value === 'detected' ? this.platform.Characteristic.CarbonMonoxideDetected.CO_LEVELS_ABNORMAL :
24
+ this.platform.Characteristic.CarbonMonoxideDetected.CO_LEVELS_NORMAL));
25
+ }
26
+ }
27
+ exports.CarbonMonoxideDetectorService = CarbonMonoxideDetectorService;
28
+ //# sourceMappingURL=carbonMonoxideDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carbonMonoxideDetector.js","sourceRoot":"","sources":["../../src/services/carbonMonoxideDetector.ts"],"names":[],"mappings":";;;AAGA,mDAAgD;AAGhD,MAAa,6BAA8B,SAAQ,6BAAa;IAG9D,YAAY,QAAwC,EAAE,SAA4B,EAAE,WAAmB,EAAE,YAAsB,EAC7H,qBAA4C,EAC5C,IAAY,EAAE,YAAY;QAE1B,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,qBAAqB,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QANnG,gBAAW,GAAG,wBAAwB,CAAC;QAQrC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,oBAAoB,EACpD,QAAQ,CAAC,cAAc,CAAC,sBAAsB,EAC9C,CAAC,MAAM,EAAE,EAAE;YACT,MAAM,YAAY,GAAG,MAAM,CAAC,sBAAsB,CAAC,cAAc,CAAC,KAAK,CAAC;YACxE,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS,EAAE;gBACvD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,gCAAgC,CAAC,CAAC;gBAC5D,MAAK,CAAC,WAAW,CAAC,CAAC;aACpB;YACD,OAAO,YAAY,KAAK,UAAU,CAAC,CAAC;gBAClC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;gBACxE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,gBAAgB,CAAC;QACzE,CAAC,CAAC,CAAC;QAEL,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,WAAW,eAAe,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IAEM,YAAY,CAAC,KAAiB;QACnC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mCAAmC,IAAI,CAAC,IAAI,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QACjF,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,qBAAqB,EAClF,CAAC,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;YACpG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAE,CAAC;IAC9E,CAAC;CACF;AA/BD,sEA+BC"}
@@ -0,0 +1,10 @@
1
+ import { PlatformAccessory } from 'homebridge';
2
+ import { IKHomeBridgeHomebridgePlatform } from '../platform';
3
+ import { SensorService } from './sensorService';
4
+ import { MultiServiceAccessory } from '../multiServiceAccessory';
5
+ import { ShortEvent } from '../webhook/subscriptionHandler';
6
+ export declare class ContactSensorService extends SensorService {
7
+ constructor(platform: IKHomeBridgeHomebridgePlatform, accessory: PlatformAccessory, componentId: string, capabilities: string[], multiServiceAccessory: MultiServiceAccessory, name: string, deviceStatus: any);
8
+ processEvent(event: ShortEvent): void;
9
+ }
10
+ //# sourceMappingURL=contactSensorService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contactSensorService.d.ts","sourceRoot":"","sources":["../../src/services/contactSensorService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,qBAAa,oBAAqB,SAAQ,aAAa;gBAEzC,QAAQ,EAAE,8BAA8B,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAC7H,qBAAqB,EAAE,qBAAqB,EAC5C,IAAI,EAAE,MAAM,EAAE,YAAY,KAAA;IAgBrB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;CAQ7C"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ContactSensorService = void 0;
4
+ const sensorService_1 = require("./sensorService");
5
+ class ContactSensorService extends sensorService_1.SensorService {
6
+ constructor(platform, accessory, componentId, capabilities, multiServiceAccessory, name, deviceStatus) {
7
+ super(platform, accessory, componentId, capabilities, multiServiceAccessory, name, deviceStatus);
8
+ this.log.debug(`Adding ContactService to ${this.name}`);
9
+ this.initService(platform.Service.ContactSensor, platform.Characteristic.ContactSensorState, (status) => {
10
+ if (status.contactSensor.contact.value === null || status.contactSensor.contact.value === undefined) {
11
+ this.log.warn(`${this.name} returned bad value for status`);
12
+ throw ('Bad Value');
13
+ }
14
+ return status.contactSensor.contact.value === 'closed' ?
15
+ this.platform.Characteristic.ContactSensorState.CONTACT_DETECTED :
16
+ this.platform.Characteristic.ContactSensorState.CONTACT_NOT_DETECTED;
17
+ });
18
+ this.setServiceType(platform.Service.ContactSensor);
19
+ }
20
+ processEvent(event) {
21
+ this.log.debug(`Event updating contactSensor capability for ${this.name} to ${event.value}`);
22
+ this.service.updateCharacteristic(this.platform.Characteristic.ContactSensorState, event.value === 'closed' ?
23
+ this.platform.Characteristic.ContactSensorState.CONTACT_DETECTED :
24
+ this.platform.Characteristic.ContactSensorState.CONTACT_NOT_DETECTED);
25
+ }
26
+ }
27
+ exports.ContactSensorService = ContactSensorService;
28
+ //# sourceMappingURL=contactSensorService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contactSensorService.js","sourceRoot":"","sources":["../../src/services/contactSensorService.ts"],"names":[],"mappings":";;;AAEA,mDAAgD;AAIhD,MAAa,oBAAqB,SAAQ,6BAAa;IAErD,YAAY,QAAwC,EAAE,SAA4B,EAAE,WAAmB,EAAE,YAAsB,EAC7H,qBAA4C,EAC5C,IAAY,EAAE,YAAY;QAC1B,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,qBAAqB,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAEjG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,EAAE;YACtG,IAAI,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE;gBACnG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,gCAAgC,CAAC,CAAC;gBAC5D,MAAK,CAAC,WAAW,CAAC,CAAC;aACpB;YACD,OAAO,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;gBACtD,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;gBAClE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC,oBAAoB,CAAC;QACzE,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACtD,CAAC;IAEM,YAAY,CAAC,KAAiB;QACnC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,+CAA+C,IAAI,CAAC,IAAI,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7F,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAC/B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,EAC/C,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;YACxB,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;YAClE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;IAC5E,CAAC;CACF;AA5BD,oDA4BC"}
@@ -0,0 +1,16 @@
1
+ import { PlatformAccessory, CharacteristicValue } from 'homebridge';
2
+ import { IKHomeBridgeHomebridgePlatform } from '../platform';
3
+ import { BaseService } from './baseService';
4
+ import { MultiServiceAccessory } from '../multiServiceAccessory';
5
+ import { ShortEvent } from '../webhook/subscriptionHandler';
6
+ export declare class DoorService extends BaseService {
7
+ private targetState;
8
+ private doorInTransitionStart;
9
+ constructor(platform: IKHomeBridgeHomebridgePlatform, accessory: PlatformAccessory, componentId: string, capabilities: string[], multiServiceAccessory: MultiServiceAccessory, name: string, deviceStatus: any);
10
+ getTargetDoorState(): Promise<CharacteristicValue>;
11
+ setTargetDoorState(value: CharacteristicValue): Promise<void>;
12
+ getCurrentDoorState(): Promise<CharacteristicValue>;
13
+ processEvent(event: ShortEvent): void;
14
+ private mapDoorState;
15
+ }
16
+ //# sourceMappingURL=doorService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doorService.d.ts","sourceRoot":"","sources":["../../src/services/doorService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,qBAAa,WAAY,SAAQ,WAAW;IAC1C,OAAO,CAAC,WAAW,CAAqD;IACxE,OAAO,CAAC,qBAAqB,CAAK;gBAEtB,QAAQ,EAAE,8BAA8B,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAC7H,qBAAqB,EAAE,qBAAqB,EAC5C,IAAI,EAAE,MAAM,EAAE,YAAY,KAAA;IAwCtB,kBAAkB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAyBlD,kBAAkB,CAAC,KAAK,EAAE,mBAAmB;IA+B7C,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAmBlD,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAS5C,OAAO,CAAC,YAAY;CAerB"}
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DoorService = void 0;
4
+ const baseService_1 = require("./baseService");
5
+ class DoorService extends baseService_1.BaseService {
6
+ constructor(platform, accessory, componentId, capabilities, multiServiceAccessory, name, deviceStatus) {
7
+ // This can either be a Door or Garage Door Opener
8
+ super(platform, accessory, componentId, capabilities, multiServiceAccessory, name, deviceStatus);
9
+ this.targetState = this.platform.Characteristic.TargetDoorState.OPEN;
10
+ this.doorInTransitionStart = 0;
11
+ this.setServiceType(platform.Service.GarageDoorOpener);
12
+ // Set the event handlers
13
+ this.log.debug(`Adding DoorService to ${this.name}`);
14
+ this.service.getCharacteristic(platform.Characteristic.CurrentDoorState)
15
+ .onGet(this.getCurrentDoorState.bind(this));
16
+ this.service.getCharacteristic(platform.Characteristic.TargetDoorState)
17
+ .onGet(this.getTargetDoorState.bind(this))
18
+ .onSet(this.setTargetDoorState.bind(this));
19
+ this.service.getCharacteristic(platform.Characteristic.ObstructionDetected)
20
+ .onGet(() => false);
21
+ // Set Target State to current state to start
22
+ this.getCurrentDoorState().then(currentState => {
23
+ if (currentState === platform.Characteristic.CurrentDoorState.OPEN) {
24
+ this.targetState = platform.Characteristic.TargetDoorState.OPEN;
25
+ }
26
+ else {
27
+ this.targetState = platform.Characteristic.TargetDoorState.CLOSED;
28
+ }
29
+ }).catch(() => {
30
+ this.log.error(`Failed to get current state for ${this.name} on init`);
31
+ this.targetState = platform.Characteristic.TargetDoorState.CLOSED;
32
+ });
33
+ let PollDoorsSeconds = 10; // default to 10 seconds
34
+ if (this.platform.config.PollDoorsSeconds !== undefined) {
35
+ PollDoorsSeconds = this.platform.config.PollSensorsSeconds;
36
+ }
37
+ if (PollDoorsSeconds > 0) {
38
+ multiServiceAccessory.startPollingState(PollDoorsSeconds, this.getCurrentDoorState.bind(this), this.service, platform.Characteristic.CurrentDoorState);
39
+ //this.platform.Characteristic.TargetDoorState, this.getTargetDoorState.bind(this));
40
+ }
41
+ }
42
+ // Return the current target state
43
+ async getTargetDoorState() {
44
+ // If it has been more than 20 seconds since we've sent a transition command,
45
+ // reset the target state to the current state.
46
+ if (Date.now() - this.doorInTransitionStart > 20000) {
47
+ return new Promise((resolve, reject) => {
48
+ this.getStatus().then(success => {
49
+ if (!success) {
50
+ reject(new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */));
51
+ return;
52
+ }
53
+ this.targetState = this.deviceStatus.status.doorControl.door.value === 'closed' ||
54
+ this.deviceStatus.status.doorControl.door.value === 'closing' ?
55
+ this.platform.Characteristic.TargetDoorState.CLOSED :
56
+ this.platform.Characteristic.TargetDoorState.OPEN;
57
+ this.log.debug(`Reset ${this.name} to ${this.targetState}`);
58
+ resolve(this.targetState);
59
+ });
60
+ });
61
+ }
62
+ else {
63
+ return this.targetState;
64
+ }
65
+ }
66
+ // Set the target state of the door
67
+ async setTargetDoorState(value) {
68
+ this.log.debug('Received setTargetDoorState(' + value + ') event for ' + this.name);
69
+ this.targetState = value;
70
+ if (!this.multiServiceAccessory.isOnline) {
71
+ this.log.error(this.name + ' is offline');
72
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
73
+ }
74
+ this.doorInTransitionStart = Date.now();
75
+ this.service.updateCharacteristic(this.platform.Characteristic.TargetDoorState, value);
76
+ let command;
77
+ if (value === this.platform.Characteristic.TargetDoorState.CLOSED) {
78
+ command = 'close';
79
+ }
80
+ else {
81
+ command = 'open';
82
+ }
83
+ this.multiServiceAccessory.sendCommand('doorControl', command).then((success) => {
84
+ if (success) {
85
+ this.log.debug('onSet(' + value + ') SUCCESSFUL for ' + this.name);
86
+ this.multiServiceAccessory.forceNextStatusRefresh();
87
+ // this.deviceStatus.timestamp = 0; // Force refresh
88
+ }
89
+ else {
90
+ this.log.error(`Command failed for ${this.name}`);
91
+ }
92
+ });
93
+ }
94
+ // Get the current state of the door
95
+ async getCurrentDoorState() {
96
+ // if you need to return an error to show the device as "Not Responding" in the Home app:
97
+ // throw new this.platform.api.hap.HapStatusError(this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE);
98
+ this.log.debug('Received getDoorState() event for ' + this.name);
99
+ return new Promise((resolve, reject) => {
100
+ this.getStatus().then(success => {
101
+ if (success) {
102
+ const doorState = this.deviceStatus.status.doorControl.door.value;
103
+ this.log.debug(`DoorState value from ${this.name}: ${doorState}`);
104
+ resolve(this.mapDoorState(doorState));
105
+ }
106
+ else {
107
+ reject(new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */));
108
+ }
109
+ });
110
+ });
111
+ }
112
+ processEvent(event) {
113
+ this.service.updateCharacteristic(this.platform.Characteristic.CurrentDoorState, this.mapDoorState(event.value));
114
+ if (event.value === 'closed' || event.value === 'closing') {
115
+ this.service.updateCharacteristic(this.platform.Characteristic.TargetDoorState, this.platform.Characteristic.TargetDoorState.CLOSED);
116
+ }
117
+ else {
118
+ this.service.updateCharacteristic(this.platform.Characteristic.TargetDoorState, this.platform.Characteristic.TargetDoorState.OPEN);
119
+ }
120
+ }
121
+ mapDoorState(doorState) {
122
+ switch (doorState) {
123
+ case 'closed':
124
+ return (this.platform.Characteristic.CurrentDoorState.CLOSED);
125
+ case 'closing':
126
+ return (this.platform.Characteristic.CurrentDoorState.CLOSING);
127
+ case 'open':
128
+ return (this.platform.Characteristic.CurrentDoorState.OPEN);
129
+ case 'opening':
130
+ return (this.platform.Characteristic.CurrentDoorState.OPENING);
131
+ default: {
132
+ return (this.platform.Characteristic.CurrentDoorState.CLOSED);
133
+ }
134
+ }
135
+ }
136
+ }
137
+ exports.DoorService = DoorService;
138
+ //# sourceMappingURL=doorService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doorService.js","sourceRoot":"","sources":["../../src/services/doorService.ts"],"names":[],"mappings":";;;AAEA,+CAA4C;AAI5C,MAAa,WAAY,SAAQ,yBAAW;IAI1C,YAAY,QAAwC,EAAE,SAA4B,EAAE,WAAmB,EAAE,YAAsB,EAC7H,qBAA4C,EAC5C,IAAY,EAAE,YAAY;QAC1B,kDAAkD;QAElD,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,qBAAqB,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAR3F,gBAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC;QAChE,0BAAqB,GAAG,CAAC,CAAC;QAQhC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACvD,yBAAyB;QACzB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;aACrE,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC;aACpE,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACzC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,mBAAmB,CAAC;aACxE,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAEtB,6CAA6C;QAC7C,IAAI,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YAC7C,IAAI,YAAY,KAAK,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,EAAE;gBAClE,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC;aACjE;iBAAM;gBACL,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC;aACnE;QACH,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mCAAmC,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC;YACvE,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC;QACpE,CAAC,CAAC,CAAC;QAEH,IAAI,gBAAgB,GAAG,EAAE,CAAC,CAAC,wBAAwB;QACnD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,KAAK,SAAS,EAAE;YACvD,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC;SAC5D;QAED,IAAI,gBAAgB,GAAG,CAAC,EAAE;YACxB,qBAAqB,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,EACzG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;YAC5C,oFAAoF;SACrF;IACH,CAAC;IAED,kCAAkC;IAClC,KAAK,CAAC,kBAAkB;QACtB,6EAA6E;QAC7E,+CAA+C;QAE/C,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,qBAAqB,GAAG,KAAK,EAAE;YACnD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;oBAC9B,IAAI,CAAC,OAAO,EAAE;wBACZ,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,4EAA+D,CAAC,CAAC;wBAChH,OAAO;qBACR;oBACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ;wBAC7E,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;wBAC/D,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;wBACrD,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC;oBACpD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;oBAC5D,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;SACJ;aAAM;YACL,OAAO,IAAI,CAAC,WAAW,CAAC;SACzB;IACH,CAAC;IAED,mCAAmC;IACnC,KAAK,CAAC,kBAAkB,CAAC,KAA0B;QACjD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,8BAA8B,GAAG,KAAK,GAAG,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAEpF,IAAI,CAAC,WAAW,GAAG,KAAe,CAAC;QAEnC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE;YACxC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC;YAC1C,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,4EAA+D,CAAC;SAC/G;QACD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QAEvF,IAAI,OAAe,CAAC;QACpB,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,MAAM,EAAE;YACjE,OAAO,GAAG,OAAO,CAAC;SACnB;aAAM;YACL,OAAO,GAAG,MAAM,CAAC;SAClB;QACD,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9E,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,GAAG,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnE,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,CAAC;gBACpD,qDAAqD;aACtD;iBAAM;gBACL,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;aACnD;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAGD,oCAAoC;IACpC,KAAK,CAAC,mBAAmB;QACvB,yFAAyF;QACzF,iHAAiH;QACjH,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBAC9B,IAAI,OAAO,EAAE;oBACX,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;oBAClE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,wBAAwB,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC,CAAC;oBAElE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;iBACvC;qBAAM;oBACL,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,4EAA+D,CAAC,CAAC;iBACjH;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,YAAY,CAAC,KAAiB;QACnC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACjH,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE;YACzD,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;SACtI;aAAM;YACL,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;SACpI;IACH,CAAC;IAEO,YAAY,CAAC,SAAiB;QACpC,QAAQ,SAAS,EAAE;YACjB,KAAK,QAAQ;gBACX,OAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC/D,KAAK,SAAS;gBACZ,OAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAChE,KAAK,MAAM;gBACT,OAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC7D,KAAK,SAAS;gBACZ,OAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAChE,OAAO,CAAC,CAAC;gBACP,OAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;aAC9D;SACF;IACH,CAAC;CACF;AAjJD,kCAiJC"}
@@ -0,0 +1,15 @@
1
+ import { PlatformAccessory, CharacteristicValue } from 'homebridge';
2
+ import { IKHomeBridgeHomebridgePlatform } from '../platform';
3
+ import { BaseService } from './baseService';
4
+ import { MultiServiceAccessory } from '../multiServiceAccessory';
5
+ import { ShortEvent } from '../webhook/subscriptionHandler';
6
+ export declare class FanSpeedService extends BaseService {
7
+ constructor(platform: IKHomeBridgeHomebridgePlatform, accessory: PlatformAccessory, componentId: string, capabilities: string[], multiServiceAccessory: MultiServiceAccessory, name: string, deviceStatus: any);
8
+ setSwitchState(value: CharacteristicValue): Promise<void>;
9
+ getSwitchState(): Promise<CharacteristicValue>;
10
+ setLevel(value: CharacteristicValue): Promise<void>;
11
+ getLevel(): Promise<CharacteristicValue>;
12
+ processEvent(event: ShortEvent): void;
13
+ private mapLevelToPercent;
14
+ }
15
+ //# sourceMappingURL=fanSpeedService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fanSpeedService.d.ts","sourceRoot":"","sources":["../../src/services/fanSpeedService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,qBAAa,eAAgB,SAAQ,WAAW;gBAElC,QAAQ,EAAE,8BAA8B,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAC7H,qBAAqB,EAAE,qBAAqB,EAC5C,IAAI,EAAE,MAAM,EAAE,YAAY,KAAA;IA4BtB,cAAc,CAAC,KAAK,EAAE,mBAAmB;IAiBzC,cAAc,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAkB9C,QAAQ,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAqCnD,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC;IA6BvC,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAgB5C,OAAO,CAAC,iBAAiB;CAc1B"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FanSpeedService = void 0;
4
+ const baseService_1 = require("./baseService");
5
+ class FanSpeedService extends baseService_1.BaseService {
6
+ constructor(platform, accessory, componentId, capabilities, multiServiceAccessory, name, deviceStatus) {
7
+ super(platform, accessory, componentId, capabilities, multiServiceAccessory, name, deviceStatus);
8
+ this.setServiceType(platform.Service.Fan);
9
+ // Set the event handlers
10
+ this.log.debug(`Adding FanSpeedService to ${this.name}`);
11
+ this.service.getCharacteristic(platform.Characteristic.On)
12
+ .onGet(this.getSwitchState.bind(this))
13
+ .onSet(this.setSwitchState.bind(this));
14
+ this.service.getCharacteristic(platform.Characteristic.RotationSpeed)
15
+ .onSet(this.setLevel.bind(this))
16
+ .onGet(this.getLevel.bind(this));
17
+ let pollSwitchesAndLightsSeconds = 10; // default to 10 seconds
18
+ if (this.platform.config.PollSwitchesAndLightsSeconds !== undefined) {
19
+ pollSwitchesAndLightsSeconds = this.platform.config.PollSwitchesAndLightsSeconds;
20
+ }
21
+ if (pollSwitchesAndLightsSeconds > 0) {
22
+ multiServiceAccessory.startPollingState(pollSwitchesAndLightsSeconds, this.getSwitchState.bind(this), this.service, platform.Characteristic.On);
23
+ multiServiceAccessory.startPollingState(pollSwitchesAndLightsSeconds, this.getLevel.bind(this), this.service, platform.Characteristic.RotationSpeed);
24
+ }
25
+ }
26
+ // Set the target
27
+ async setSwitchState(value) {
28
+ this.log.debug('Received setSwitchState(' + value + ') event for ' + this.name);
29
+ if (!this.multiServiceAccessory.isOnline) {
30
+ this.log.error(this.name + ' is offline');
31
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
32
+ }
33
+ this.multiServiceAccessory.sendCommand('switch', value ? 'on' : 'off').then((success) => {
34
+ if (success) {
35
+ this.log.debug('onSet(' + value + ') SUCCESSFUL for ' + this.name);
36
+ }
37
+ else {
38
+ this.log.error(`Command failed for ${this.name}`);
39
+ }
40
+ });
41
+ }
42
+ // Get the current state of the lock
43
+ async getSwitchState() {
44
+ // if you need to return an error to show the device as "Not Responding" in the Home app:
45
+ // throw new this.platform.api.hap.HapStatusError(this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE);
46
+ this.log.debug('Received getSwitchState() event for ' + this.name);
47
+ return new Promise((resolve, reject) => {
48
+ this.getStatus().then(success => {
49
+ if (success) {
50
+ const switchState = this.deviceStatus.status.switch.switch.value;
51
+ this.log.debug(`SwitchState value from ${this.name}: ${switchState}`);
52
+ resolve(switchState === 'on');
53
+ }
54
+ else {
55
+ reject(new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */));
56
+ }
57
+ });
58
+ });
59
+ }
60
+ async setLevel(value) {
61
+ this.log.debug('Received setLevel(' + value + ') event for ' + this.name);
62
+ return new Promise((resolve, reject) => {
63
+ if (!this.multiServiceAccessory.isOnline()) {
64
+ this.log.error(this.accessory.context.device.label + ' is offline');
65
+ return reject(new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */));
66
+ }
67
+ let level = 0;
68
+ // Level is 0 (off), 1 (low), 2 (medium), 3 (high)
69
+ if (value === 0) {
70
+ level = 0;
71
+ }
72
+ else if (value <= 33) {
73
+ level = 1;
74
+ }
75
+ else if (value <= 66) {
76
+ level = 2;
77
+ }
78
+ else {
79
+ level = 3;
80
+ }
81
+ this.log.debug(`Setting value of ${this.name} to ${level}`);
82
+ this.multiServiceAccessory.sendCommand('fanSpeed', 'setFanSpeed', [level]).then(success => {
83
+ if (success) {
84
+ this.log.debug('setLevel(' + value + ') SUCCESSFUL for ' + this.name);
85
+ this.multiServiceAccessory.forceNextStatusRefresh();
86
+ // this.deviceStatus.timestamp = 0;
87
+ resolve();
88
+ }
89
+ else {
90
+ this.log.error(`Failed to send setLevel command for ${this.name}`);
91
+ reject(new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */));
92
+ }
93
+ });
94
+ });
95
+ }
96
+ async getLevel() {
97
+ this.log.debug('Received getLevel() event for ' + this.name);
98
+ let level = 0;
99
+ return new Promise((resolve, reject) => {
100
+ if (!this.multiServiceAccessory.isOnline()) {
101
+ this.log.error(this.accessory.context.device.label + ' is offline');
102
+ return reject(new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */));
103
+ }
104
+ this.getStatus().then((success) => {
105
+ if (!success) {
106
+ this.log.error(`Could not get device status for ${this.name}`);
107
+ return reject(new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */));
108
+ }
109
+ if (this.deviceStatus.status.fanSpeed.fanSpeed.value !== undefined) {
110
+ level = this.deviceStatus.status.fanSpeed.fanSpeed.value;
111
+ const pct = this.mapLevelToPercent(level);
112
+ this.log.debug('getLevel() SUCCESSFUL for ' + this.name + '. value = ' + pct);
113
+ resolve(pct);
114
+ }
115
+ else {
116
+ this.log.error('getLevel() FAILED for ' + this.name + '. Undefined value');
117
+ reject(new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */));
118
+ }
119
+ });
120
+ });
121
+ }
122
+ processEvent(event) {
123
+ switch (event.capability) {
124
+ case 'switch': {
125
+ this.log.debug(`Event updating switch capability for ${this.name} to ${event.value}`);
126
+ this.service.updateCharacteristic(this.platform.Characteristic.On, event.value === 'on');
127
+ return;
128
+ }
129
+ case 'fanSpeed': {
130
+ this.log.debug(`Event updating fanSpeed capability for ${this.name} to ${event.value}`);
131
+ this.service.updateCharacteristic(this.platform.Characteristic.RotationSpeed, this.mapLevelToPercent(event.value));
132
+ }
133
+ }
134
+ }
135
+ mapLevelToPercent(level) {
136
+ let pct;
137
+ if (level === 0) {
138
+ pct = 0;
139
+ }
140
+ else if (level === 1) {
141
+ pct = 33;
142
+ }
143
+ else if (level === 2) {
144
+ pct = 66;
145
+ }
146
+ else {
147
+ pct = 100;
148
+ }
149
+ return pct;
150
+ }
151
+ }
152
+ exports.FanSpeedService = FanSpeedService;
153
+ //# sourceMappingURL=fanSpeedService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fanSpeedService.js","sourceRoot":"","sources":["../../src/services/fanSpeedService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { PlatformAccessory, CharacteristicValue } from 'homebridge';
2
+ import { IKHomeBridgeHomebridgePlatform } from '../platform';
3
+ import { BaseService } from './baseService';
4
+ import { MultiServiceAccessory } from '../multiServiceAccessory';
5
+ import { ShortEvent } from '../webhook/subscriptionHandler';
6
+ export declare class FanSwitchLevelService extends BaseService {
7
+ constructor(platform: IKHomeBridgeHomebridgePlatform, accessory: PlatformAccessory, componentId: string, capabilitites: string[], multiServiceAccessory: MultiServiceAccessory, name: string, deviceStatus: any);
8
+ setSwitchState(value: CharacteristicValue): Promise<void>;
9
+ getSwitchState(): Promise<CharacteristicValue>;
10
+ setLevel(value: CharacteristicValue): Promise<void>;
11
+ getLevel(): Promise<CharacteristicValue>;
12
+ processEvent(event: ShortEvent): void;
13
+ }
14
+ //# sourceMappingURL=fanSwitchLevelService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fanSwitchLevelService.d.ts","sourceRoot":"","sources":["../../src/services/fanSwitchLevelService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,qBAAa,qBAAsB,SAAQ,WAAW;gBAExC,QAAQ,EAAE,8BAA8B,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,EAC9H,qBAAqB,EAAE,qBAAqB,EAC5C,IAAI,EAAE,MAAM,EAAE,YAAY,KAAA;IA4BtB,cAAc,CAAC,KAAK,EAAE,mBAAmB;IAiBzC,cAAc,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAkB9C,QAAQ,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBnD,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC;IA4BvC,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;CAc7C"}