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,438 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AirConditionerService = void 0;
4
+ const smartThingsCommand_1 = require("./smartThingsCommand");
5
+ const baseService_1 = require("./baseService");
6
+ var AirConditionerMode;
7
+ (function (AirConditionerMode) {
8
+ AirConditionerMode["Auto"] = "auto";
9
+ AirConditionerMode["Cool"] = "cool";
10
+ AirConditionerMode["Dry"] = "dry";
11
+ AirConditionerMode["Heat"] = "heat";
12
+ AirConditionerMode["Wind"] = "wind";
13
+ })(AirConditionerMode || (AirConditionerMode = {}));
14
+ var TemperatureUnit;
15
+ (function (TemperatureUnit) {
16
+ TemperatureUnit["Celsius"] = "C";
17
+ TemperatureUnit["Farenheit"] = "F";
18
+ })(TemperatureUnit || (TemperatureUnit = {}));
19
+ var FanMode;
20
+ (function (FanMode) {
21
+ FanMode["Auto"] = "auto";
22
+ FanMode["Low"] = "low";
23
+ FanMode["Medium"] = "medium";
24
+ FanMode["High"] = "high";
25
+ FanMode["Turbo"] = "turbo";
26
+ })(FanMode || (FanMode = {}));
27
+ var FanOscillationMode;
28
+ (function (FanOscillationMode) {
29
+ FanOscillationMode["All"] = "all";
30
+ FanOscillationMode["Fixed"] = "fixed";
31
+ FanOscillationMode["Vertical"] = "vertical";
32
+ })(FanOscillationMode || (FanOscillationMode = {}));
33
+ var SwitchState;
34
+ (function (SwitchState) {
35
+ SwitchState["On"] = "on";
36
+ SwitchState["Off"] = "off";
37
+ })(SwitchState || (SwitchState = {}));
38
+ var OptionalMode;
39
+ (function (OptionalMode) {
40
+ OptionalMode["Off"] = "off";
41
+ OptionalMode["Sleep"] = "sleep";
42
+ OptionalMode["Speed"] = "speed";
43
+ OptionalMode["WindFree"] = "windFree";
44
+ OptionalMode["WindFreeSleep"] = "windFreeSleep";
45
+ })(OptionalMode || (OptionalMode = {}));
46
+ class AirConditionerService extends baseService_1.BaseService {
47
+ constructor(platform, accessory, componentId, capabilities, multiServiceAccessory, name, deviceStatus) {
48
+ super(platform, accessory, componentId, capabilities, multiServiceAccessory, name, deviceStatus);
49
+ this.temperatureUnit = TemperatureUnit.Celsius;
50
+ this.log.debug(`Adding AirConditionerService to ${this.name}`);
51
+ // Since Homekit does not natively support air conditioners, we need to expose
52
+ // a thermostat and a fan to cover temperature settings, fan speed, and swing.
53
+ this.thermostatService = this.setupThermostat(platform, multiServiceAccessory);
54
+ this.fanService = this.setupFan(platform, multiServiceAccessory);
55
+ // Exposing this sensor is optional since some Samsung air conditioner always report 0 as relative humidity level
56
+ // or the device might not support it
57
+ if (this.isCapabilitySupported('relativeHumidityMeasurement') && this.platform.config.ExposeHumiditySensorForAirConditioners) {
58
+ this.humidityService = this.setupHumiditySensor(platform, multiServiceAccessory);
59
+ }
60
+ // Check if the device supports controlling the light
61
+ if (this.isCapabilitySupported('switchLevel')) {
62
+ this.lightService = this.setupLightSwitch(platform, multiServiceAccessory);
63
+ }
64
+ // Optional mode switch is exposed only if the related capability is suppoorted
65
+ if (this.isCapabilitySupported('custom.airConditionerOptionalMode')) {
66
+ this.optionalMode = OptionalMode[this.platform.config.OptionalModeForAirConditioners];
67
+ // Expose a switch for the optional mode.
68
+ // If the selected optional mode is undefined or not supported, changes to the switch will have no effect.
69
+ this.optionalModeSwitchService = this.setupOptionalModeSwitch(platform, multiServiceAccessory);
70
+ }
71
+ }
72
+ isCapabilitySupported(capability) {
73
+ return this.capabilities.find(c => c === capability) !== undefined;
74
+ }
75
+ setupThermostat(platform, multiServiceAccessory) {
76
+ this.log.debug(`Expose Thermostat for ${this.name}`);
77
+ // add thermostat service
78
+ this.setServiceType(platform.Service.Thermostat);
79
+ this.service.getCharacteristic(platform.Characteristic.CurrentHeatingCoolingState)
80
+ .onGet(this.getCurrentHeatingCoolingState.bind(this));
81
+ this.service.getCharacteristic(platform.Characteristic.TargetHeatingCoolingState)
82
+ .onGet(this.getTargetHeatingCoolingState.bind(this))
83
+ .onSet(this.setTargetHeatingCoolingState.bind(this));
84
+ this.service.getCharacteristic(platform.Characteristic.CurrentTemperature)
85
+ .onGet(this.getCurrentTemperature.bind(this));
86
+ this.service.getCharacteristic(platform.Characteristic.TargetTemperature)
87
+ .onGet(this.getTargetTemperature.bind(this))
88
+ .onSet(this.setTargetTemperature.bind(this));
89
+ this.service.getCharacteristic(platform.Characteristic.TemperatureDisplayUnits)
90
+ .onGet(this.getTemperatureDisplayUnits.bind(this));
91
+ multiServiceAccessory.startPollingState(this.platform.config.PollSensorsSeconds, this.getCurrentHeatingCoolingState.bind(this), this.service, platform.Characteristic.CurrentHeatingCoolingState, platform.Characteristic.TargetHeatingCoolingState, this.getTargetHeatingCoolingState.bind(this));
92
+ multiServiceAccessory.startPollingState(this.platform.config.PollSensorsSeconds, this.getCurrentTemperature.bind(this), this.service, platform.Characteristic.CurrentTemperature, platform.Characteristic.TargetTemperature, this.getTargetTemperature.bind(this));
93
+ return this.service;
94
+ }
95
+ setupFan(platform, multiServiceAccessory) {
96
+ this.log.debug(`Expose Fan for ${this.name}`);
97
+ this.setServiceType(platform.Service.Fanv2);
98
+ this.service.getCharacteristic(platform.Characteristic.Active)
99
+ .onGet(this.getSwitchState.bind(this))
100
+ .onSet(this.setSwitchState.bind(this));
101
+ if (this.isCapabilitySupported('fanOscillationMode')) {
102
+ this.service.getCharacteristic(platform.Characteristic.SwingMode)
103
+ .onGet(this.getSwingMode.bind(this))
104
+ .onSet(this.setSwingMode.bind(this));
105
+ }
106
+ this.service.getCharacteristic(platform.Characteristic.RotationSpeed)
107
+ .onSet(this.setFanLevel.bind(this))
108
+ .onGet(this.getFanLevel.bind(this));
109
+ multiServiceAccessory.startPollingState(this.platform.config.PollSensorsSeconds, this.getSwitchState.bind(this), this.service, platform.Characteristic.Active);
110
+ multiServiceAccessory.startPollingState(this.platform.config.PollSensorsSeconds, this.getFanLevel.bind(this), this.service, platform.Characteristic.RotationSpeed);
111
+ return this.service;
112
+ }
113
+ setupOptionalModeSwitch(platform, multiServiceAccessory) {
114
+ this.setServiceType(platform.Service.Switch);
115
+ this.service.getCharacteristic(platform.Characteristic.On)
116
+ .onGet(this.getOptionalModeSwitchState.bind(this))
117
+ .onSet(this.setOptionalModeSwitchState.bind(this));
118
+ multiServiceAccessory.startPollingState(this.platform.config.PollSensorsSeconds, this.getOptionalModeSwitchState.bind(this), this.service, platform.Characteristic.On);
119
+ return this.service;
120
+ }
121
+ setupHumiditySensor(platform, multiServiceAccessory) {
122
+ this.setServiceType(platform.Service.HumiditySensor);
123
+ this.service.getCharacteristic(platform.Characteristic.CurrentRelativeHumidity)
124
+ .onGet(this.getHumidityLevel.bind(this));
125
+ multiServiceAccessory.startPollingState(this.platform.config.PollSensorsSeconds, this.getHumidityLevel.bind(this), this.service, platform.Characteristic.CurrentRelativeHumidity);
126
+ return this.service;
127
+ }
128
+ setupLightSwitch(platform, multiServiceAccessory) {
129
+ this.log.debug(`Expose Light Switch for ${this.name}`);
130
+ this.setServiceType(platform.Service.Lightbulb); // Use Lightbulb service to control light intensity
131
+ this.service.getCharacteristic(platform.Characteristic.On)
132
+ .onGet(this.getLightSwitchState.bind(this))
133
+ .onSet(this.setLightSwitchState.bind(this));
134
+ this.service.getCharacteristic(platform.Characteristic.Brightness)
135
+ .onGet(this.getLightBrightness.bind(this))
136
+ .onSet(this.setLightBrightness.bind(this));
137
+ multiServiceAccessory.startPollingState(this.platform.config.PollSensorsSeconds, this.getLightSwitchState.bind(this), this.service, platform.Characteristic.On);
138
+ return this.service;
139
+ }
140
+ async getHumidityLevel() {
141
+ const deviceStatus = await this.getDeviceStatus();
142
+ return deviceStatus.relativeHumidityMeasurement.humidity.value;
143
+ }
144
+ levelToFanMode(level) {
145
+ if (level > 0 && level < 25) {
146
+ return FanMode.Low;
147
+ }
148
+ if (level > 25 && level <= 50) {
149
+ return FanMode.Medium;
150
+ }
151
+ if (level > 50 && level <= 75) {
152
+ return FanMode.High;
153
+ }
154
+ if (level > 75) {
155
+ return FanMode.Turbo;
156
+ }
157
+ return FanMode.Auto;
158
+ }
159
+ fanModeToLevel(fanMode) {
160
+ switch (fanMode) {
161
+ case FanMode.Low:
162
+ return 25;
163
+ case FanMode.Medium:
164
+ return 50;
165
+ case FanMode.High:
166
+ return 75;
167
+ case FanMode.Turbo:
168
+ return 100;
169
+ default:
170
+ return 0; // auto level
171
+ }
172
+ }
173
+ fanOscillationModeToSwingMode(fanOscillationMode) {
174
+ switch (fanOscillationMode) {
175
+ case FanOscillationMode.All:
176
+ case FanOscillationMode.Vertical:
177
+ return this.platform.Characteristic.SwingMode.SWING_ENABLED;
178
+ case FanOscillationMode.Fixed:
179
+ return this.platform.Characteristic.SwingMode.SWING_DISABLED;
180
+ }
181
+ }
182
+ async getLightSwitchState() {
183
+ const deviceStatus = await this.getDeviceStatus();
184
+ return deviceStatus.switchLevel.level.value > 0; // Light is on if level is greater than 0
185
+ }
186
+ async setLightSwitchState(value) {
187
+ const level = value ? 100 : 0; // 100 for on, 0 for off
188
+ this.log.info(`[${this.name}] set light switch state to ${value}`);
189
+ this.sendCommandsOrFail([new smartThingsCommand_1.Command('switchLevel', 'setLevel', [level])]);
190
+ }
191
+ async getLightBrightness() {
192
+ const deviceStatus = await this.getDeviceStatus();
193
+ return deviceStatus.switchLevel.level.value;
194
+ }
195
+ async setLightBrightness(value) {
196
+ this.log.info(`[${this.name}] set light brightness to ${value}`);
197
+ this.sendCommandsOrFail([new smartThingsCommand_1.Command('switchLevel', 'setLevel', [value])]);
198
+ }
199
+ async setOptionalModeSwitchState(value) {
200
+ // if optional mode is not set, skip sending command
201
+ if (!this.optionalMode) {
202
+ return;
203
+ }
204
+ const mode = value ? this.optionalMode : OptionalMode.Off;
205
+ this.log.info(`[${this.name}] set airConditionerOptionalMode to ${mode}`);
206
+ this.sendCommandsOrFail([new smartThingsCommand_1.Command('custom.airConditionerOptionalMode', 'setAcOptionalMode', [mode])]);
207
+ }
208
+ async getOptionalModeSwitchState() {
209
+ const deviceStatus = await this.getDeviceStatus();
210
+ return deviceStatus['custom.airConditionerOptionalMode'].acOptionalMode.value === this.optionalMode;
211
+ }
212
+ // Switch state is managed by the Fan service.
213
+ // If fan is turned on, and thermostat is not active, sets the air conditioner to the Wind mode or mantains the current one.
214
+ async setSwitchState(value) {
215
+ const CurrentHeatingCoolingState = this.platform.Characteristic.CurrentHeatingCoolingState;
216
+ const heatingCoolingState = await this.getCurrentHeatingCoolingState();
217
+ const currentAirConditionerMode = this.targetHeatingCoolingStateToAirConditionerMode(heatingCoolingState);
218
+ const airConditionerMode = heatingCoolingState === CurrentHeatingCoolingState.OFF ? AirConditionerMode.Wind : currentAirConditionerMode;
219
+ const switchState = value ? SwitchState.On : SwitchState.Off;
220
+ if (switchState === SwitchState.On) {
221
+ this.log.info(`[${this.name}] set switch state to ${switchState} and airConditionerMode to ${airConditionerMode}`);
222
+ await this.sendCommandsOrFail([
223
+ new smartThingsCommand_1.Command('switch', switchState),
224
+ new smartThingsCommand_1.Command('airConditionerMode', 'setAirConditionerMode', [airConditionerMode]),
225
+ ]);
226
+ return;
227
+ }
228
+ this.log.info(`[${this.name}] set switch state to ${switchState}.`);
229
+ await this.sendCommandsOrFail([new smartThingsCommand_1.Command('switch', switchState)]);
230
+ }
231
+ async getSwitchState() {
232
+ const deviceStatus = await this.getDeviceStatus();
233
+ return deviceStatus.switch.switch.value === SwitchState.On;
234
+ }
235
+ setFanLevel(value) {
236
+ const fanMode = this.levelToFanMode(value);
237
+ const command = new smartThingsCommand_1.Command('airConditionerFanMode', 'setFanMode', [fanMode]);
238
+ this.log.info(`[${this.name}] set fan level to ${fanMode}`);
239
+ return this.sendCommandsOrFail([command]);
240
+ }
241
+ async getFanLevel() {
242
+ this.log.debug(`[${this.name}] get fan level`);
243
+ const deviceStatus = await this.getDeviceStatus();
244
+ if (!deviceStatus.airConditionerFanMode.fanMode.value) {
245
+ throw new this.platform.api.hap.HapStatusError(-70409 /* this.platform.api.hap.HAPStatus.RESOURCE_DOES_NOT_EXIST */);
246
+ }
247
+ const fanMode = this.deviceStatus.status.airConditionerFanMode.fanMode.value;
248
+ return this.fanModeToLevel(fanMode);
249
+ }
250
+ setSwingMode(value) {
251
+ const mode = value === this.platform.Characteristic.SwingMode.SWING_ENABLED ? FanOscillationMode.All : FanOscillationMode.Fixed;
252
+ this.log.info(`[${this.name}] set fan swing mode to ${mode}`);
253
+ const command = new smartThingsCommand_1.Command('fanOscillationMode', 'setFanOscillationMode', [mode]);
254
+ return this.sendCommandsOrFail([command]);
255
+ }
256
+ async getSwingMode() {
257
+ this.log.debug(`[${this.name}] get fan swing mode`);
258
+ const deviceStatus = await this.getDeviceStatus();
259
+ const swingMode = deviceStatus.fanOscillationMode.fanOscillationMode.value;
260
+ return this.fanOscillationModeToSwingMode(swingMode);
261
+ }
262
+ airConditionerModeToTargetHeatingCoolingState(airConditionerMode) {
263
+ const TargetHeatingCoolingState = this.platform.Characteristic.TargetHeatingCoolingState;
264
+ switch (airConditionerMode) {
265
+ case AirConditionerMode.Dry:
266
+ case AirConditionerMode.Cool:
267
+ return TargetHeatingCoolingState.COOL;
268
+ case AirConditionerMode.Heat:
269
+ return TargetHeatingCoolingState.HEAT;
270
+ case AirConditionerMode.Auto:
271
+ return TargetHeatingCoolingState.AUTO;
272
+ case AirConditionerMode.Wind:
273
+ default:
274
+ return TargetHeatingCoolingState.OFF;
275
+ }
276
+ }
277
+ targetHeatingCoolingStateToAirConditionerMode(targetHeatingCoolingState) {
278
+ const TargetHeatingCoolingState = this.platform.Characteristic.TargetHeatingCoolingState;
279
+ switch (targetHeatingCoolingState) {
280
+ case TargetHeatingCoolingState.AUTO:
281
+ return AirConditionerMode.Auto;
282
+ case TargetHeatingCoolingState.COOL:
283
+ return AirConditionerMode.Cool;
284
+ case TargetHeatingCoolingState.HEAT:
285
+ return AirConditionerMode.Heat;
286
+ default:
287
+ return undefined;
288
+ }
289
+ }
290
+ async getTargetHeatingCoolingState() {
291
+ this.log.debug(`[${this.name}] get target heating cooling state`);
292
+ const deviceStatus = await this.getDeviceStatus();
293
+ const isOff = deviceStatus.switch.switch.value === 'off';
294
+ const airConditionerMode = deviceStatus.airConditionerMode.airConditionerMode.value;
295
+ if (isOff || !airConditionerMode) {
296
+ return this.platform.Characteristic.TargetHeatingCoolingState.OFF;
297
+ }
298
+ return this.airConditionerModeToTargetHeatingCoolingState(airConditionerMode);
299
+ }
300
+ // Set the target state of the thermostat and turns it on or off by using the switch capability
301
+ async setTargetHeatingCoolingState(value) {
302
+ const airConditionerMode = this.targetHeatingCoolingStateToAirConditionerMode(value);
303
+ this.log.info(`[${this.name}] set target heating cooling state to ${airConditionerMode}`);
304
+ // When switching between modes, we always ask to turn on the air conditioner unless
305
+ // the thermostat is set to off.
306
+ const commands = airConditionerMode ?
307
+ [
308
+ new smartThingsCommand_1.Command('switch', SwitchState.On),
309
+ new smartThingsCommand_1.Command('airConditionerMode', 'setAirConditionerMode', [airConditionerMode]),
310
+ ]
311
+ :
312
+ [
313
+ new smartThingsCommand_1.Command('switch', SwitchState.Off),
314
+ ];
315
+ await this.sendCommandsOrFail(commands);
316
+ }
317
+ async getCurrentHeatingCoolingState() {
318
+ this.log.debug(`[${this.name}] get current heating cooling state`);
319
+ const deviceStatus = await this.getDeviceStatus();
320
+ const CurrentHeatingCoolingState = this.platform.Characteristic.CurrentHeatingCoolingState;
321
+ const airConditionerMode = deviceStatus.airConditionerMode.airConditionerMode.value;
322
+ const coolingSetpoint = this.toCelsius(deviceStatus.thermostatCoolingSetpoint.coolingSetpoint.value);
323
+ const temperature = this.toCelsius(deviceStatus.temperatureMeasurement.temperature.value);
324
+ const isOff = deviceStatus.switch.switch.value === SwitchState.Off;
325
+ if (isOff) {
326
+ return this.platform.Characteristic.CurrentHeatingCoolingState.OFF;
327
+ }
328
+ switch (airConditionerMode) {
329
+ case AirConditionerMode.Cool:
330
+ return CurrentHeatingCoolingState.COOL;
331
+ case AirConditionerMode.Heat:
332
+ return CurrentHeatingCoolingState.HEAT;
333
+ case AirConditionerMode.Auto:
334
+ return temperature > coolingSetpoint ? CurrentHeatingCoolingState.COOL : CurrentHeatingCoolingState.HEAT;
335
+ default:
336
+ return this.platform.Characteristic.CurrentHeatingCoolingState.OFF;
337
+ }
338
+ }
339
+ async getCurrentTemperature() {
340
+ this.log.debug(`[${this.name}] get current temperature`);
341
+ const deviceStatus = await this.getDeviceStatus();
342
+ const temp = deviceStatus.temperatureMeasurement.temperature.value;
343
+ const unit = deviceStatus.temperatureMeasurement.temperature.unit;
344
+ this.temperatureUnit = unit;
345
+ if (!temp || !unit) {
346
+ throw new this.platform.api.hap.HapStatusError(-70409 /* this.platform.api.hap.HAPStatus.RESOURCE_DOES_NOT_EXIST */);
347
+ }
348
+ return this.toCelsius(temp);
349
+ }
350
+ async getTargetTemperature() {
351
+ this.log.debug(`[${this.name}] get target temperature`);
352
+ const deviceStatus = await this.getDeviceStatus();
353
+ const coolingSetpoint = deviceStatus.thermostatCoolingSetpoint.coolingSetpoint.value;
354
+ if (!coolingSetpoint) {
355
+ throw new this.platform.api.hap.HapStatusError(-70409 /* this.platform.api.hap.HAPStatus.RESOURCE_DOES_NOT_EXIST */);
356
+ }
357
+ return this.toCelsius(coolingSetpoint);
358
+ }
359
+ setTargetTemperature(value) {
360
+ this.log.info(`[${this.name}] set target temperature to ${value}`);
361
+ const convertedTemp = this.fromCelsius(value);
362
+ const command = new smartThingsCommand_1.Command('thermostatCoolingSetpoint', 'setCoolingSetpoint', [convertedTemp]);
363
+ return this.sendCommandsOrFail([command]);
364
+ }
365
+ getTemperatureDisplayUnits() {
366
+ this.log.debug(`[${this.name}] get temperatured dislay units`);
367
+ return this.temperatureUnit === TemperatureUnit.Celsius
368
+ ? this.platform.Characteristic.TemperatureDisplayUnits.CELSIUS
369
+ : this.platform.Characteristic.TemperatureDisplayUnits.FAHRENHEIT;
370
+ }
371
+ // converts to celsius if needed
372
+ toCelsius(value) {
373
+ return this.temperatureUnit === TemperatureUnit.Farenheit ? (value - 32) * (5 / 9) : value;
374
+ }
375
+ // converts to fahrenheit if needed
376
+ fromCelsius(value) {
377
+ return this.temperatureUnit === TemperatureUnit.Farenheit ? (value * (9 / 5)) + 32 : value;
378
+ }
379
+ async sendCommandsOrFail(commands) {
380
+ if (!this.multiServiceAccessory.isOnline) {
381
+ this.log.error(this.name + ' is offline');
382
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
383
+ }
384
+ if (!await this.multiServiceAccessory.sendCommands(commands)) {
385
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
386
+ }
387
+ }
388
+ async getDeviceStatus() {
389
+ this.multiServiceAccessory.forceNextStatusRefresh();
390
+ if (!await this.getStatus()) {
391
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
392
+ }
393
+ return this.deviceStatus.status;
394
+ }
395
+ processEvent(event) {
396
+ var _a, _b, _c, _d;
397
+ const TargetHeatingCoolingState = this.platform.Characteristic.TargetHeatingCoolingState;
398
+ this.log.info(`[${this.name}] Event updating ${event.capability} capability to ${event.value}`);
399
+ let temperature;
400
+ let targetHeatingCoolingState;
401
+ let fanOscillationMode;
402
+ switch (event.capability) {
403
+ case 'thermostatCoolingSetpoint':
404
+ temperature = this.toCelsius(event.value);
405
+ this.thermostatService.updateCharacteristic(this.platform.Characteristic.TargetTemperature, temperature);
406
+ break;
407
+ case 'airConditionerMode':
408
+ targetHeatingCoolingState = this.airConditionerModeToTargetHeatingCoolingState(event.value);
409
+ this.thermostatService.updateCharacteristic(TargetHeatingCoolingState, targetHeatingCoolingState);
410
+ break;
411
+ case 'airConditionerFanMode':
412
+ this.fanService.updateCharacteristic(this.platform.Characteristic.RotationSpeed, this.fanModeToLevel(event.value));
413
+ break;
414
+ case 'fanOscillationMode':
415
+ fanOscillationMode = event.value;
416
+ this.fanService.updateCharacteristic(this.platform.Characteristic.SwingMode, this.fanOscillationModeToSwingMode(fanOscillationMode));
417
+ break;
418
+ case 'switch':
419
+ this.fanService.updateCharacteristic(this.platform.Characteristic.Active, event.value === SwitchState.On);
420
+ break;
421
+ case 'relativeHumidityMeasurement':
422
+ (_a = this.humidityService) === null || _a === void 0 ? void 0 : _a.updateCharacteristic(this.platform.Characteristic.CurrentRelativeHumidity, event.value);
423
+ break;
424
+ case 'custom.airConditionerOptionalMode':
425
+ (_b = this.optionalModeSwitchService) === null || _b === void 0 ? void 0 : _b.updateCharacteristic(this.platform.Characteristic.On, event.value === this.optionalMode);
426
+ break;
427
+ case 'switchLevel':
428
+ (_c = this.lightService) === null || _c === void 0 ? void 0 : _c.updateCharacteristic(this.platform.Characteristic.On, event.value > 0);
429
+ (_d = this.lightService) === null || _d === void 0 ? void 0 : _d.updateCharacteristic(this.platform.Characteristic.Brightness, event.value);
430
+ break;
431
+ default:
432
+ this.log.info(`[${this.name}] Ignore event updating ${event.capability} capability to ${event.value}`);
433
+ break;
434
+ }
435
+ }
436
+ }
437
+ exports.AirConditionerService = AirConditionerService;
438
+ //# sourceMappingURL=airConditionerService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"airConditionerService.js","sourceRoot":"","sources":["../../src/services/airConditionerService.ts"],"names":[],"mappings":";;;AAGA,6DAA+C;AAE/C,+CAA4C;AAE5C,IAAK,kBAMJ;AAND,WAAK,kBAAkB;IACrB,mCAAa,CAAA;IACb,mCAAa,CAAA;IACb,iCAAW,CAAA;IACX,mCAAa,CAAA;IACb,mCAAa,CAAA;AACf,CAAC,EANI,kBAAkB,KAAlB,kBAAkB,QAMtB;AAED,IAAK,eAGJ;AAHD,WAAK,eAAe;IAClB,gCAAa,CAAA;IACb,kCAAe,CAAA;AACjB,CAAC,EAHI,eAAe,KAAf,eAAe,QAGnB;AAED,IAAK,OAMJ;AAND,WAAK,OAAO;IACV,wBAAa,CAAA;IACb,sBAAW,CAAA;IACX,4BAAiB,CAAA;IACjB,wBAAa,CAAA;IACb,0BAAe,CAAA;AACjB,CAAC,EANI,OAAO,KAAP,OAAO,QAMX;AAED,IAAK,kBAIJ;AAJD,WAAK,kBAAkB;IACrB,iCAAW,CAAA;IACX,qCAAe,CAAA;IACf,2CAAqB,CAAA;AACvB,CAAC,EAJI,kBAAkB,KAAlB,kBAAkB,QAItB;AAED,IAAK,WAGJ;AAHD,WAAK,WAAW;IACd,wBAAS,CAAA;IACT,0BAAW,CAAA;AACb,CAAC,EAHI,WAAW,KAAX,WAAW,QAGf;AAED,IAAK,YAMJ;AAND,WAAK,YAAY;IACf,2BAAW,CAAA;IACX,+BAAe,CAAA;IACf,+BAAe,CAAA;IACf,qCAAqB,CAAA;IACrB,+CAA+B,CAAA;AACjC,CAAC,EANI,YAAY,KAAZ,YAAY,QAMhB;AAED,MAAa,qBAAsB,SAAQ,yBAAW;IAWpD,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;QAZ3F,oBAAe,GAAoB,eAAe,CAAC,OAAO,CAAC;QAcjE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mCAAmC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAE/D,8EAA8E;QAC9E,8EAA8E;QAC9E,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QAC/E,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QAEjE,iHAAiH;QACjH,qCAAqC;QACrC,IAAI,IAAI,CAAC,qBAAqB,CAAC,6BAA6B,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,sCAAsC,EAAE;YAC5H,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;SAClF;QAED,qDAAqD;QACrD,IAAI,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,EAAE;YAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;SAC5E;QAED,+EAA+E;QAC/E,IAAI,IAAI,CAAC,qBAAqB,CAAC,mCAAmC,CAAC,EAAE;YACnE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;YAEtF,yCAAyC;YACzC,0GAA0G;YAC1G,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;SAChG;IAEH,CAAC;IAEO,qBAAqB,CAAC,UAAU;QACtC,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC,KAAK,SAAS,CAAC;IACrE,CAAC;IAEO,eAAe,CAAC,QAAwC,EAAE,qBAA4C;QAC5G,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAErD,yBAAyB;QACzB,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAEjD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,0BAA0B,CAAC;aAC/E,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAExD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC;aAC9E,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACnD,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEvD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC;aACvE,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEhD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC;aACtE,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC3C,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE/C,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC;aAC5E,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAErD,qBAAqB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,EAC5H,IAAI,CAAC,OAAO,EACZ,QAAQ,CAAC,cAAc,CAAC,0BAA0B,EAAE,QAAQ,CAAC,cAAc,CAAC,yBAAyB,EACrG,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEhD,qBAAqB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,EAClI,QAAQ,CAAC,cAAc,CAAC,kBAAkB,EAAE,QAAQ,CAAC,cAAc,CAAC,iBAAiB,EACrF,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAExC,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEO,QAAQ,CAAC,QAAwC,EAAE,qBAA4C;QACrG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAE9C,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE5C,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC;aAC3D,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACrC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEzC,IAAI,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,EAAE;YACpD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC;iBAC9D,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACnC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SACxC;QAED,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC;aAClE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAClC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEtC,qBAAqB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAC7E,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAEhF,qBAAqB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAC7E,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAEpF,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEO,uBAAuB,CAAC,QAAwC,EAAE,qBAA4C;QACpH,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE7C,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;aACvD,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACjD,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAErD,qBAAqB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAC7E,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAExF,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEO,mBAAmB,CAAC,QAAwC,EAAE,qBAA4C;QAChH,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAErD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC;aAC5E,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE3C,qBAAqB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,EAC7H,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC;QAEnD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEO,gBAAgB,CAAC,QAAwC,EAAE,qBAA4C;QAC7G,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,2BAA2B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAEvD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,mDAAmD;QAEpG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;aACvD,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC1C,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE9C,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC;aAC/D,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACzC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE7C,qBAAqB,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,EAChI,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAE9B,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAClD,OAAO,YAAY,CAAC,2BAA2B,CAAC,QAAQ,CAAC,KAAK,CAAC;IACjE,CAAC;IAEO,cAAc,CAAC,KAAa;QAClC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,EAAE;YAC3B,OAAO,OAAO,CAAC,GAAG,CAAC;SACpB;QAED,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,EAAE;YAC7B,OAAO,OAAO,CAAC,MAAM,CAAC;SACvB;QAED,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,IAAI,EAAE,EAAE;YAC7B,OAAO,OAAO,CAAC,IAAI,CAAC;SACrB;QAED,IAAI,KAAK,GAAG,EAAE,EAAE;YACd,OAAO,OAAO,CAAC,KAAK,CAAC;SACtB;QAED,OAAO,OAAO,CAAC,IAAI,CAAC;IACtB,CAAC;IAEO,cAAc,CAAC,OAAgB;QACrC,QAAQ,OAAO,EAAE;YACf,KAAK,OAAO,CAAC,GAAG;gBACd,OAAO,EAAE,CAAC;YACZ,KAAK,OAAO,CAAC,MAAM;gBACjB,OAAO,EAAE,CAAC;YACZ,KAAK,OAAO,CAAC,IAAI;gBACf,OAAO,EAAE,CAAC;YACZ,KAAK,OAAO,CAAC,KAAK;gBAChB,OAAO,GAAG,CAAC;YACb;gBACE,OAAO,CAAC,CAAC,CAAC,aAAa;SAC1B;IACH,CAAC;IAEO,6BAA6B,CAAC,kBAAsC;QAC1E,QAAQ,kBAAkB,EAAE;YAC1B,KAAK,kBAAkB,CAAC,GAAG,CAAC;YAC5B,KAAK,kBAAkB,CAAC,QAAQ;gBAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,aAAa,CAAC;YAC9D,KAAK,kBAAkB,CAAC,KAAK;gBAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,cAAc,CAAC;SAChE;IACH,CAAC;IAEO,KAAK,CAAC,mBAAmB;QAC/B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAClD,OAAO,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,yCAAyC;IAC5F,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,KAA0B;QAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB;QACvD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,+BAA+B,KAAK,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,4BAAO,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC9B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAClD,OAAO,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;IAC9C,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,KAA0B;QACzD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,6BAA6B,KAAK,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,4BAAO,CAAC,aAAa,EAAE,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IAEO,KAAK,CAAC,0BAA0B,CAAC,KAA0B;QACjE,oDAAoD;QACpD,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,OAAO;SACR;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC;QAC1D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,uCAAuC,IAAI,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,4BAAO,CAAC,mCAAmC,EAAE,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3G,CAAC;IAEO,KAAK,CAAC,0BAA0B;QACtC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAClD,OAAO,YAAY,CAAC,mCAAmC,CAAC,CAAC,cAAc,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC;IACtG,CAAC;IAED,8CAA8C;IAC9C,4HAA4H;IACpH,KAAK,CAAC,cAAc,CAAC,KAA0B;QACrD,MAAM,0BAA0B,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,0BAA0B,CAAC;QAC3F,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACvE,MAAM,yBAAyB,GAAG,IAAI,CAAC,6CAA6C,CAAC,mBAAmB,CAAC,CAAC;QAC1G,MAAM,kBAAkB,GAAG,mBAAmB,KAAK,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,yBAAyB,CAAC;QACxI,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC;QAG7D,IAAI,WAAW,KAAK,WAAW,CAAC,EAAE,EAAE;YAClC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,yBAAyB,WAAW,8BAA8B,kBAAkB,EAAE,CAAC,CAAC;YACnH,MAAM,IAAI,CAAC,kBAAkB,CAC3B;gBACE,IAAI,4BAAO,CAAC,QAAQ,EAAE,WAAW,CAAC;gBAClC,IAAI,4BAAO,CAAC,oBAAoB,EAAE,uBAAuB,EAAE,CAAC,kBAAkB,CAAC,CAAC;aACjF,CACF,CAAC;YACF,OAAO;SACR;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,yBAAyB,WAAW,GAAG,CAAC,CAAC;QACpE,MAAM,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,4BAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;IAGO,KAAK,CAAC,cAAc;QAC1B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAClD,OAAO,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,WAAW,CAAC,EAAE,CAAC;IAC7D,CAAC;IAEO,WAAW,CAAC,KAA0B;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAe,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,4BAAO,CAAC,uBAAuB,EAAE,YAAY,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,sBAAsB,OAAO,EAAE,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5C,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,iBAAiB,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAClD,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE;YACrD,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,sEAAyD,CAAC;SACzG;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC;QAC7E,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAGO,YAAY,CAAC,KAA0B;QAC7C,MAAM,IAAI,GAAG,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC;QAChI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,2BAA2B,IAAI,EAAE,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,IAAI,4BAAO,CAAC,oBAAoB,EAAE,uBAAuB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACnF,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5C,CAAC;IAGO,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,sBAAsB,CAAC,CAAC;QACpD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAClD,MAAM,SAAS,GAAG,YAAY,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,KAA2B,CAAC;QACjG,OAAO,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC;IAGO,6CAA6C,CAAC,kBAAsC;QAC1F,MAAM,yBAAyB,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC;QACzF,QAAQ,kBAAkB,EAAE;YAC1B,KAAK,kBAAkB,CAAC,GAAG,CAAC;YAC5B,KAAK,kBAAkB,CAAC,IAAI;gBAC1B,OAAO,yBAAyB,CAAC,IAAI,CAAC;YACxC,KAAK,kBAAkB,CAAC,IAAI;gBAC1B,OAAO,yBAAyB,CAAC,IAAI,CAAC;YACxC,KAAK,kBAAkB,CAAC,IAAI;gBAC1B,OAAO,yBAAyB,CAAC,IAAI,CAAC;YACxC,KAAK,kBAAkB,CAAC,IAAI,CAAC;YAC7B;gBACE,OAAO,yBAAyB,CAAC,GAAG,CAAC;SACxC;IACH,CAAC;IAEO,6CAA6C,CAAC,yBAA8C;QAClG,MAAM,yBAAyB,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC;QACzF,QAAQ,yBAAyB,EAAE;YACjC,KAAK,yBAAyB,CAAC,IAAI;gBACjC,OAAO,kBAAkB,CAAC,IAAI,CAAC;YACjC,KAAK,yBAAyB,CAAC,IAAI;gBACjC,OAAO,kBAAkB,CAAC,IAAI,CAAC;YACjC,KAAK,yBAAyB,CAAC,IAAI;gBACjC,OAAO,kBAAkB,CAAC,IAAI,CAAC;YACjC;gBACE,OAAO,SAAS,CAAC;SACpB;IACH,CAAC;IAEO,KAAK,CAAC,4BAA4B;QACxC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,oCAAoC,CAAC,CAAC;QAClE,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAElD,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC;QACzD,MAAM,kBAAkB,GAAG,YAAY,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,KAA2B,CAAC;QAE1G,IAAI,KAAK,IAAI,CAAC,kBAAkB,EAAE;YAChC,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC,GAAG,CAAC;SACnE;QAED,OAAO,IAAI,CAAC,6CAA6C,CAAC,kBAAkB,CAAC,CAAC;IAChF,CAAC;IAED,+FAA+F;IACvF,KAAK,CAAC,4BAA4B,CAAC,KAA0B;QACnE,MAAM,kBAAkB,GAAG,IAAI,CAAC,6CAA6C,CAAC,KAAK,CAAC,CAAC;QACrF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,yCAAyC,kBAAkB,EAAE,CAAC,CAAC;QAC1F,oFAAoF;QACpF,gCAAgC;QAEhC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,CAAC;YACnC;gBACE,IAAI,4BAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC;gBACrC,IAAI,4BAAO,CAAC,oBAAoB,EAAE,uBAAuB,EAAE,CAAC,kBAAkB,CAAC,CAAC;aACjF;YACD,CAAC;gBACD;oBACE,IAAI,4BAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC;iBACvC,CAAC;QAEJ,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAGO,KAAK,CAAC,6BAA6B;QACzC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,qCAAqC,CAAC,CAAC;QACnE,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAClD,MAAM,0BAA0B,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,0BAA0B,CAAC;QAC3F,MAAM,kBAAkB,GAAG,YAAY,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,KAA2B,CAAC;QAC1G,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,yBAAyB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACrG,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,sBAAsB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1F,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,WAAW,CAAC,GAAG,CAAC;QAEnE,IAAI,KAAK,EAAE;YACT,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,0BAA0B,CAAC,GAAG,CAAC;SACpE;QAED,QAAQ,kBAAkB,EAAE;YAC1B,KAAK,kBAAkB,CAAC,IAAI;gBAC1B,OAAO,0BAA0B,CAAC,IAAI,CAAC;YACzC,KAAK,kBAAkB,CAAC,IAAI;gBAC1B,OAAO,0BAA0B,CAAC,IAAI,CAAC;YACzC,KAAK,kBAAkB,CAAC,IAAI;gBAC1B,OAAO,WAAW,GAAG,eAAe,CAAC,CAAC,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B,CAAC,IAAI,CAAC;YAC3G;gBACE,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,0BAA0B,CAAC,GAAG,CAAC;SACtE;IACH,CAAC;IAEO,KAAK,CAAC,qBAAqB;QACjC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,2BAA2B,CAAC,CAAC;QAEzD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAElD,MAAM,IAAI,GAAG,YAAY,CAAC,sBAAsB,CAAC,WAAW,CAAC,KAAK,CAAC;QACnE,MAAM,IAAI,GAAG,YAAY,CAAC,sBAAsB,CAAC,WAAW,CAAC,IAAuB,CAAC;QACrF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAE5B,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;YAClB,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,sEAAyD,CAAC;SACzG;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAE9B,CAAC;IAGO,KAAK,CAAC,oBAAoB;QAChC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,0BAA0B,CAAC,CAAC;QACxD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAClD,MAAM,eAAe,GAAG,YAAY,CAAC,yBAAyB,CAAC,eAAe,CAAC,KAAK,CAAC;QAErF,IAAI,CAAC,eAAe,EAAE;YACpB,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,sEAAyD,CAAC;SACzG;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACzC,CAAC;IAEO,oBAAoB,CAAC,KAA0B;QACrD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,+BAA+B,KAAK,EAAE,CAAC,CAAC;QAEnE,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,KAAe,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,IAAI,4BAAO,CAAC,2BAA2B,EAAE,oBAAoB,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;QAChG,OAAO,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5C,CAAC;IAEO,0BAA0B;QAChC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,iCAAiC,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC,eAAe,KAAK,eAAe,CAAC,OAAO;YACrD,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,OAAO;YAC9D,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,UAAU,CAAC;IACtE,CAAC;IAED,gCAAgC;IACxB,SAAS,CAAC,KAAa;QAC7B,OAAO,IAAI,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7F,CAAC;IAED,mCAAmC;IAC3B,WAAW,CAAC,KAAa;QAC/B,OAAO,IAAI,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7F,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,QAAmB;QAClD,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;QAED,IAAI,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;YAC5D,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,4EAA+D,CAAC;SAC/G;IAEH,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,EAAE,CAAC;QACpD,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE;YAC3B,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,4EAA+D,CAAC;SAC/G;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;IAClC,CAAC;IAEM,YAAY,CAAC,KAAiB;;QACnC,MAAM,yBAAyB,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,yBAAyB,CAAC;QACzF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,oBAAoB,KAAK,CAAC,UAAU,kBAAkB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAEhG,IAAI,WAAmB,CAAC;QACxB,IAAI,yBAA8C,CAAC;QACnD,IAAI,kBAAsC,CAAC;QAE3C,QAAQ,KAAK,CAAC,UAAU,EAAE;YACxB,KAAK,2BAA2B;gBAC9B,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC1C,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;gBACzG,MAAM;YACR,KAAK,oBAAoB;gBACvB,yBAAyB,GAAG,IAAI,CAAC,6CAA6C,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC5F,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,yBAAyB,EAAE,yBAAyB,CAAC,CAAC;gBAClG,MAAM;YACR,KAAK,uBAAuB;gBAC1B,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gBACnH,MAAM;YACR,KAAK,oBAAoB;gBACvB,kBAAkB,GAAG,KAAK,CAAC,KAA2B,CAAC;gBACvD,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,EACzE,IAAI,CAAC,6BAA6B,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBAC1D,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,KAAK,WAAW,CAAC,EAAE,CAAC,CAAC;gBAC1G,MAAM;YACR,KAAK,6BAA6B;gBAChC,MAAA,IAAI,CAAC,eAAe,0CAAE,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC9G,MAAM;YACR,KAAK,mCAAmC;gBACtC,MAAA,IAAI,CAAC,yBAAyB,0CAAE,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC;gBACzH,MAAM;YACR,KAAK,aAAa;gBAChB,MAAA,IAAI,CAAC,YAAY,0CAAE,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAC1F,MAAA,IAAI,CAAC,YAAY,0CAAE,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC9F,MAAM;YACR;gBACE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,2BAA2B,KAAK,CAAC,UAAU,kBAAkB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;gBACvG,MAAM;SACT;IACH,CAAC;CACF;AApgBD,sDAogBC"}
@@ -0,0 +1,21 @@
1
+ import { PlatformAccessory, Logger, Service, WithUUID } from 'homebridge';
2
+ import { ShortEvent } from '../webhook/subscriptionHandler';
3
+ import { MultiServiceAccessory } from '../multiServiceAccessory';
4
+ import { IKHomeBridgeHomebridgePlatform } from '../platform';
5
+ export declare class BaseService {
6
+ protected accessory: PlatformAccessory;
7
+ protected log: Logger;
8
+ protected platform: IKHomeBridgeHomebridgePlatform;
9
+ protected name: string;
10
+ protected deviceStatus: any;
11
+ protected multiServiceAccessory: MultiServiceAccessory;
12
+ protected service: Service;
13
+ componentId: string;
14
+ capabilities: string[];
15
+ constructor(platform: IKHomeBridgeHomebridgePlatform, accessory: PlatformAccessory, componentId: string, capabilities: string[], multiServiceAccessory: MultiServiceAccessory, name: string, deviceStatus: any);
16
+ protected findCapability(capabilityToFind: string): boolean;
17
+ protected setServiceType(serviceType: WithUUID<typeof Service>): void;
18
+ protected getStatus(): Promise<boolean>;
19
+ processEvent(event: ShortEvent): void;
20
+ }
21
+ //# sourceMappingURL=baseService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseService.d.ts","sourceRoot":"","sources":["../../src/services/baseService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAE7D,qBAAa,WAAW;IACtB,SAAS,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACvC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,QAAQ,EAAE,8BAA8B,CAAC;IACnD,SAAS,CAAC,IAAI,SAAM;IACpB,SAAS,CAAC,YAAY,MAAC;IACvB,SAAS,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IACvD,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;gBAElB,QAAQ,EAAE,8BAA8B,EAClD,SAAS,EAAE,iBAAiB,EAC5B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EAAE,EACtB,qBAAqB,EAAE,qBAAqB,EAC5C,IAAI,EAAE,MAAM,EAAE,YAAY,KAAA;IAc5B,SAAS,CAAC,cAAc,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO;IAU3D,SAAS,CAAC,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,OAAO,OAAO,CAAC;cAa9C,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAqBtC,YAAY,CAAC,KAAK,EAAE,UAAU;CAGtC"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseService = void 0;
4
+ class BaseService {
5
+ constructor(platform, accessory, componentId, capabilities, multiServiceAccessory, name, deviceStatus) {
6
+ this.name = '';
7
+ this.capabilities = capabilities;
8
+ this.accessory = accessory;
9
+ // this.service = this.accessory.getService(platform.Service.MotionSensor) || this.accessory.addService(platform.Service.MotionSensor);
10
+ this.platform = platform;
11
+ this.log = platform.log;
12
+ this.multiServiceAccessory = multiServiceAccessory;
13
+ this.name = name;
14
+ this.deviceStatus = deviceStatus;
15
+ this.service = new platform.Service.Switch; // Placeholder
16
+ this.componentId = componentId;
17
+ }
18
+ findCapability(capabilityToFind) {
19
+ let component;
20
+ component = this.accessory.context.device.components.find(c => c.id === 'main');
21
+ if (component === undefined) {
22
+ component = this.accessory.context.device.components[0];
23
+ }
24
+ return component.capabilities.find(c => c.id === capabilityToFind);
25
+ }
26
+ setServiceType(serviceType) {
27
+ if (this.componentId === 'main') {
28
+ this.service = this.accessory.getService(serviceType) ||
29
+ this.accessory.addService(serviceType);
30
+ }
31
+ else {
32
+ this.log.debug(`Adding service to alternate component: ${this.componentId}`);
33
+ this.service = this.accessory.getService(`${serviceType.name}-${this.componentId}`) ||
34
+ this.accessory.addService(serviceType, `${serviceType.name}-${this.componentId}`, `${serviceType.name}-${this.componentId}`);
35
+ }
36
+ this.service.setCharacteristic(this.platform.Characteristic.Name, this.accessory.context.device.label);
37
+ }
38
+ async getStatus() {
39
+ // if you need to return an error to show the device as "Not Responding" in the Home app:
40
+ // throw new this.platform.api.hap.HapStatusError(this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE);
41
+ // this.log.debug('Received getMotion() event for ' + this.name);
42
+ return new Promise((resolve) => {
43
+ if (!this.multiServiceAccessory.isOnline()) {
44
+ this.log.info(`${this.name} is offline`);
45
+ resolve(false);
46
+ }
47
+ this.multiServiceAccessory.refreshStatus()
48
+ .then(success => {
49
+ if (!success) {
50
+ resolve(false);
51
+ }
52
+ else {
53
+ resolve(true);
54
+ }
55
+ });
56
+ });
57
+ }
58
+ processEvent(event) {
59
+ this.log.debug(`${this.name} Received event with value ${event.value} - not implemented yet`);
60
+ }
61
+ }
62
+ exports.BaseService = BaseService;
63
+ //# sourceMappingURL=baseService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseService.js","sourceRoot":"","sources":["../../src/services/baseService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { PlatformAccessory, CharacteristicValue } from 'homebridge';
2
+ import { IKHomeBridgeHomebridgePlatform } from '../platform';
3
+ import { BaseService } from './baseService';
4
+ import { MultiServiceAccessory } from '../multiServiceAccessory';
5
+ export declare class BatteryService extends BaseService {
6
+ constructor(platform: IKHomeBridgeHomebridgePlatform, accessory: PlatformAccessory, componentId: string, capabilities: string[], multiServiceAccessory: MultiServiceAccessory, name: string, deviceStatus: any);
7
+ getBatteryLevel(): Promise<CharacteristicValue>;
8
+ getStatusLowBattery(): Promise<CharacteristicValue>;
9
+ }
10
+ //# sourceMappingURL=batteryService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batteryService.d.ts","sourceRoot":"","sources":["../../src/services/batteryService.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;AAEjE,qBAAa,cAAe,SAAQ,WAAW;gBAEjC,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;IAsBtB,eAAe,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAqB/C,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,CAAC;CA0B1D"}