@homebridge-plugins/homebridge-smarthq 0.4.1 → 0.4.2

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 (35) hide show
  1. package/CHANGELOG.md +84 -0
  2. package/dist/devices/hood.d.ts +34 -0
  3. package/dist/devices/hood.d.ts.map +1 -0
  4. package/dist/devices/hood.js +306 -0
  5. package/dist/devices/hood.js.map +1 -0
  6. package/dist/platform.d.ts +1 -0
  7. package/dist/platform.d.ts.map +1 -1
  8. package/dist/platform.js +38 -0
  9. package/dist/platform.js.map +1 -1
  10. package/dist/settings.d.ts +2 -0
  11. package/dist/settings.d.ts.map +1 -1
  12. package/dist/settings.js +3 -0
  13. package/dist/settings.js.map +1 -1
  14. package/docs/assets/search.js +1 -1
  15. package/docs/classes/SmartHQPlatform.html +8 -8
  16. package/docs/interfaces/DeviceOptions.html +2 -2
  17. package/docs/interfaces/SmartHQPlatformConfig.html +2 -2
  18. package/docs/interfaces/SmartHqContext.html +2 -2
  19. package/docs/interfaces/SmartHqERDResponse.html +2 -2
  20. package/docs/interfaces/credentials.html +2 -2
  21. package/docs/interfaces/devicesConfig.html +2 -2
  22. package/docs/interfaces/options.html +2 -2
  23. package/docs/variables/API_URL.html +1 -1
  24. package/docs/variables/ERD_CODES.html +1 -1
  25. package/docs/variables/ERD_TYPES.html +1 -1
  26. package/docs/variables/KEEPALIVE_TIMEOUT.html +1 -1
  27. package/docs/variables/LOGIN_URL.html +1 -1
  28. package/docs/variables/OAUTH2_CLIENT_ID.html +1 -1
  29. package/docs/variables/OAUTH2_CLIENT_SECRET.html +1 -1
  30. package/docs/variables/OAUTH2_REDIRECT_URI.html +1 -1
  31. package/docs/variables/PLATFORM_NAME.html +1 -1
  32. package/docs/variables/PLUGIN_NAME.html +1 -1
  33. package/docs/variables/SECURE_URL.html +1 -1
  34. package/docs/variables/default.html +1 -1
  35. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,90 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. This project uses [Semantic Versioning](https://semver.org/)
4
4
 
5
+ ## [0.4.2](https://github.com/homebridge-plugins/homebridge-smarthq/compare/v0.4.1...v0.4.2) (2025-11-21)
6
+
7
+
8
+ ### Features
9
+
10
+ * support hood ([#57](https://github.com/homebridge-plugins/homebridge-smarthq/issues/57)) ([6a98928](https://github.com/homebridge-plugins/homebridge-smarthq/commit/6a989281dcac32d8c47fd78a2eb7bcd76c67c0b5))
11
+
12
+
13
+
14
+ ## [0.4.1](https://github.com/homebridge-plugins/homebridge-smarthq/compare/v0.4.0...v0.4.1) (2025-09-18)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * **air conditioner:** fix temperature setting and update switch display names ([#38](https://github.com/homebridge-plugins/homebridge-smarthq/issues/38)) ([1675205](https://github.com/homebridge-plugins/homebridge-smarthq/commit/16752059c93d6a5b26b782f2b42246e622b4b830))
20
+ * **air conditioner:** preserve decimal precision when converting Celsius to Fahrenheit ([#40](https://github.com/homebridge-plugins/homebridge-smarthq/issues/40)) ([38c8285](https://github.com/homebridge-plugins/homebridge-smarthq/commit/38c82852015d8ea0ceb0f4dd4b9ddf0622f57963))
21
+ * **air conditioner:** report all operating modes off when unit is off ([#42](https://github.com/homebridge-plugins/homebridge-smarthq/issues/42)) ([d44ebe3](https://github.com/homebridge-plugins/homebridge-smarthq/commit/d44ebe34590a2da6645e30db0db269e1dbbe4f3b))
22
+
23
+
24
+ ### Features
25
+
26
+ * add Portable AC as supported device ([#45](https://github.com/homebridge-plugins/homebridge-smarthq/issues/45)) ([50d83b1](https://github.com/homebridge-plugins/homebridge-smarthq/commit/50d83b1e003d8d238485459a5c882f357e1c61fb))
27
+
28
+
29
+
30
+ # [0.4.0](https://github.com/homebridge-plugins/homebridge-smarthq/compare/v0.2.0...v0.4.0) (2025-06-27)
31
+
32
+
33
+
34
+ # 0.2.0 (2025-02-23)
35
+
36
+ ## [0.4.2](https://github.com/homebridge-plugins/homebridge-smarthq/compare/v0.4.1...v0.4.2) (2025-11-20)
37
+
38
+
39
+ ### Features
40
+
41
+ * support hood ([#57](https://github.com/homebridge-plugins/homebridge-smarthq/issues/57)) ([8f9cb9e](https://github.com/homebridge-plugins/homebridge-smarthq/commit/8f9cb9e66c5b911093f45d6ab530a68cd75177ac))
42
+
43
+
44
+
45
+ ## [0.4.1](https://github.com/homebridge-plugins/homebridge-smarthq/compare/v0.4.0...v0.4.1) (2025-09-18)
46
+
47
+
48
+ ### Bug Fixes
49
+
50
+ * **air conditioner:** fix temperature setting and update switch display names ([#38](https://github.com/homebridge-plugins/homebridge-smarthq/issues/38)) ([1675205](https://github.com/homebridge-plugins/homebridge-smarthq/commit/16752059c93d6a5b26b782f2b42246e622b4b830))
51
+ * **air conditioner:** preserve decimal precision when converting Celsius to Fahrenheit ([#40](https://github.com/homebridge-plugins/homebridge-smarthq/issues/40)) ([38c8285](https://github.com/homebridge-plugins/homebridge-smarthq/commit/38c82852015d8ea0ceb0f4dd4b9ddf0622f57963))
52
+ * **air conditioner:** report all operating modes off when unit is off ([#42](https://github.com/homebridge-plugins/homebridge-smarthq/issues/42)) ([d44ebe3](https://github.com/homebridge-plugins/homebridge-smarthq/commit/d44ebe34590a2da6645e30db0db269e1dbbe4f3b))
53
+
54
+
55
+ ### Features
56
+
57
+ * add Portable AC as supported device ([#45](https://github.com/homebridge-plugins/homebridge-smarthq/issues/45)) ([50d83b1](https://github.com/homebridge-plugins/homebridge-smarthq/commit/50d83b1e003d8d238485459a5c882f357e1c61fb))
58
+
59
+
60
+
61
+ # [0.4.0](https://github.com/homebridge-plugins/homebridge-smarthq/compare/v0.2.0...v0.4.0) (2025-06-27)
62
+
63
+
64
+
65
+ # 0.2.0 (2025-02-23)
66
+
67
+ ## [0.4.1](https://github.com/homebridge-plugins/homebridge-smarthq/compare/v0.4.0...v0.4.1) (2025-09-18)
68
+
69
+
70
+ ### Bug Fixes
71
+
72
+ * **air conditioner:** fix temperature setting and update switch display names ([#38](https://github.com/homebridge-plugins/homebridge-smarthq/issues/38)) ([1675205](https://github.com/homebridge-plugins/homebridge-smarthq/commit/16752059c93d6a5b26b782f2b42246e622b4b830))
73
+ * **air conditioner:** preserve decimal precision when converting Celsius to Fahrenheit ([#40](https://github.com/homebridge-plugins/homebridge-smarthq/issues/40)) ([38c8285](https://github.com/homebridge-plugins/homebridge-smarthq/commit/38c82852015d8ea0ceb0f4dd4b9ddf0622f57963))
74
+ * **air conditioner:** report all operating modes off when unit is off ([#42](https://github.com/homebridge-plugins/homebridge-smarthq/issues/42)) ([d44ebe3](https://github.com/homebridge-plugins/homebridge-smarthq/commit/d44ebe34590a2da6645e30db0db269e1dbbe4f3b))
75
+
76
+
77
+ ### Features
78
+
79
+ * add Portable AC as supported device ([#45](https://github.com/homebridge-plugins/homebridge-smarthq/issues/45)) ([50d83b1](https://github.com/homebridge-plugins/homebridge-smarthq/commit/50d83b1e003d8d238485459a5c882f357e1c61fb))
80
+
81
+
82
+
83
+ # [0.4.0](https://github.com/homebridge-plugins/homebridge-smarthq/compare/v0.2.0...v0.4.0) (2025-06-27)
84
+
85
+
86
+
87
+ # 0.2.0 (2025-02-23)
88
+
5
89
  ## [0.4.0](https://github.com/homebridge-plugins/homebridge-smarthq/releases/tag/v0.4.0) (2025-06-26)
6
90
 
7
91
  ### What's Changes
@@ -0,0 +1,34 @@
1
+ import type { CharacteristicValue, PlatformAccessory } from 'homebridge';
2
+ import type { SmartHQPlatform } from '../platform.js';
3
+ import type { devicesConfig, SmartHqContext } from '../settings.js';
4
+ import { deviceBase } from './device.js';
5
+ export declare class SmartHQHood extends deviceBase {
6
+ protected readonly platform: SmartHQPlatform;
7
+ protected readonly accessory: PlatformAccessory<SmartHqContext>;
8
+ protected readonly device: SmartHqContext['device'] & devicesConfig;
9
+ private readonly FAN_SVC_NAME;
10
+ private readonly LIGHT_SVC_NAME;
11
+ private readonly fanSvc;
12
+ private readonly lightSvc;
13
+ constructor(platform: SmartHQPlatform, accessory: PlatformAccessory<SmartHqContext>, device: SmartHqContext['device'] & devicesConfig);
14
+ private getErdValue;
15
+ private setErdValue;
16
+ private getFanSpeed;
17
+ private setFanSpeed;
18
+ private getLightLevel;
19
+ private setLightLevel;
20
+ private fanSpeedToRotationSpeed;
21
+ private rotationSpeedToFanSpeed;
22
+ private lightLevelToBrightness;
23
+ private brightnessToLightLevel;
24
+ handleGetFanActive(): Promise<CharacteristicValue>;
25
+ handleSetFanActive(value: CharacteristicValue): Promise<void>;
26
+ handleGetFanRotationSpeed(): Promise<CharacteristicValue>;
27
+ handleSetFanRotationSpeed(value: CharacteristicValue): Promise<void>;
28
+ handleGetLightOn(): Promise<CharacteristicValue>;
29
+ handleSetLightOn(value: CharacteristicValue): Promise<void>;
30
+ handleGetLightBrightness(): Promise<CharacteristicValue>;
31
+ handleSetLightBrightness(value: CharacteristicValue): Promise<void>;
32
+ refreshState(): Promise<void>;
33
+ }
34
+ //# sourceMappingURL=hood.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hood.d.ts","sourceRoot":"","sources":["../../src/devices/hood.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAW,MAAM,YAAY,CAAA;AAEjF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAsB,MAAM,gBAAgB,CAAA;AAMvF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAgBxC,qBAAa,WAAY,SAAQ,UAAU;IAOvC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,eAAe;IAC5C,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC;IAC/D,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IARrE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAa;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAe;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;gBAGd,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAC5C,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,aAAa;IA+DrE,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,uBAAuB;IAiB/B,OAAO,CAAC,uBAAuB;IAgB/B,OAAO,CAAC,sBAAsB;IAa9B,OAAO,CAAC,sBAAsB;IAU9B,kBAAkB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAclD,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB7D,yBAAyB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAazD,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBpE,gBAAgB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAahD,gBAAgB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB3D,wBAAwB,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAaxD,wBAAwB,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBnE,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;CA0B9B"}
@@ -0,0 +1,306 @@
1
+ import axios from 'axios';
2
+ import { interval, startWith } from 'rxjs';
3
+ import { ERD_TYPES } from '../settings.js';
4
+ import { deviceBase } from './device.js';
5
+ var FanSpeed;
6
+ (function (FanSpeed) {
7
+ FanSpeed["OFF"] = "00";
8
+ FanSpeed["LOW"] = "01";
9
+ FanSpeed["MEDIUM"] = "02";
10
+ FanSpeed["HIGH"] = "03";
11
+ FanSpeed["BOOST"] = "04";
12
+ })(FanSpeed || (FanSpeed = {}));
13
+ var LightLevel;
14
+ (function (LightLevel) {
15
+ LightLevel["OFF"] = "00";
16
+ LightLevel["DIM"] = "01";
17
+ LightLevel["HIGH"] = "02";
18
+ })(LightLevel || (LightLevel = {}));
19
+ export class SmartHQHood extends deviceBase {
20
+ platform;
21
+ accessory;
22
+ device;
23
+ FAN_SVC_NAME = 'HOOD_FAN';
24
+ LIGHT_SVC_NAME = 'HOOD_LIGHT';
25
+ fanSvc;
26
+ lightSvc;
27
+ constructor(platform, accessory, device) {
28
+ super(platform, accessory, device);
29
+ this.platform = platform;
30
+ this.accessory = accessory;
31
+ this.device = device;
32
+ this.fanSvc = this.accessory.getService(this.FAN_SVC_NAME)
33
+ ?? this.accessory.addService(this.platform.Service.Fanv2, `${accessory.displayName} Fan`, this.FAN_SVC_NAME);
34
+ this.lightSvc = this.accessory.getService(this.LIGHT_SVC_NAME)
35
+ ?? this.accessory.addService(this.platform.Service.Lightbulb, `${accessory.displayName} Light`, this.LIGHT_SVC_NAME);
36
+ const fanSwitchSvc = this.accessory.getService('HOOD_FAN_SWITCH');
37
+ if (fanSwitchSvc) {
38
+ this.accessory.removeService(fanSwitchSvc);
39
+ }
40
+ const lightSwitchSvc = this.accessory.getService('HOOD_LIGHT_SWITCH');
41
+ if (lightSwitchSvc) {
42
+ this.accessory.removeService(lightSwitchSvc);
43
+ }
44
+ this.fanSvc
45
+ .getCharacteristic(this.platform.Characteristic.Active)
46
+ .onGet(this.handleGetFanActive.bind(this))
47
+ .onSet(this.handleSetFanActive.bind(this));
48
+ this.fanSvc
49
+ .getCharacteristic(this.platform.Characteristic.RotationSpeed)
50
+ .setProps({
51
+ minValue: 0,
52
+ maxValue: 100,
53
+ minStep: 25,
54
+ })
55
+ .onGet(this.handleGetFanRotationSpeed.bind(this))
56
+ .onSet(this.handleSetFanRotationSpeed.bind(this));
57
+ this.lightSvc
58
+ .getCharacteristic(this.platform.Characteristic.On)
59
+ .onGet(this.handleGetLightOn.bind(this))
60
+ .onSet(this.handleSetLightOn.bind(this));
61
+ this.lightSvc
62
+ .getCharacteristic(this.platform.Characteristic.Brightness)
63
+ .setProps({
64
+ minValue: 0,
65
+ maxValue: 100,
66
+ minStep: 50,
67
+ })
68
+ .onGet(this.handleGetLightBrightness.bind(this))
69
+ .onSet(this.handleSetLightBrightness.bind(this));
70
+ interval(this.deviceRefreshRate * 1000)
71
+ .pipe(startWith(0))
72
+ .subscribe(this.refreshState.bind(this));
73
+ }
74
+ getErdValue(erd) {
75
+ return axios
76
+ .get(`/appliance/${this.accessory.context.device.applianceId}/erd/${erd}`)
77
+ .then(response => response.data.value)
78
+ .catch((err) => {
79
+ const message = axios.isAxiosError(err) && err.response
80
+ ? `Failed to fetch ERD: ${err.response.data.message}`
81
+ : `Failed to fetch ERD: ${err instanceof Error ? err.message : 'An unknown error occurred'}`;
82
+ throw new Error(message, { cause: err });
83
+ });
84
+ }
85
+ setErdValue(erd, value) {
86
+ return axios
87
+ .post(`/appliance/${this.accessory.context.device.applianceId}/erd/${erd}`, {
88
+ kind: 'appliance#erdListEntry',
89
+ userId: this.accessory.context.userId,
90
+ applianceId: this.accessory.context.device.applianceId,
91
+ erd,
92
+ value,
93
+ })
94
+ .then(() => {
95
+ this.platform.log.debug(`[${this.accessory.displayName}] Set ERD ${erd}=${value}`);
96
+ })
97
+ .catch((err) => {
98
+ const message = axios.isAxiosError(err) && err.response
99
+ ? `Failed to set ERD ${erd}=${value}: ${err.response.data.message}`
100
+ : `Failed to set ERD ${erd}=${value}: ${err instanceof Error ? err.message : 'An unknown error occurred'}`;
101
+ throw new Error(message, { cause: err });
102
+ });
103
+ }
104
+ getFanSpeed() {
105
+ return this.getErdValue(ERD_TYPES.HOOD_FAN_SPEED)
106
+ .then(value => value)
107
+ .catch((err) => {
108
+ throw new Error(`Failed to get fan speed: ${err instanceof Error ? err.message : 'An unknown error occurred'}`, { cause: err });
109
+ });
110
+ }
111
+ setFanSpeed(value) {
112
+ return this.setErdValue(ERD_TYPES.HOOD_FAN_SPEED, value)
113
+ .catch((err) => {
114
+ throw new Error(`Failed to set fan speed: ${err instanceof Error ? err.message : 'An unknown error occurred'}`, { cause: err });
115
+ });
116
+ }
117
+ getLightLevel() {
118
+ return this.getErdValue(ERD_TYPES.HOOD_LIGHT_LEVEL)
119
+ .then(value => value)
120
+ .catch((err) => {
121
+ throw new Error(`Failed to get light level: ${err instanceof Error ? err.message : 'An unknown error occurred'}`, { cause: err });
122
+ });
123
+ }
124
+ setLightLevel(value) {
125
+ return this.setErdValue(ERD_TYPES.HOOD_LIGHT_LEVEL, value)
126
+ .catch((err) => {
127
+ throw new Error(`Failed to set light level: ${err instanceof Error ? err.message : 'An unknown error occurred'}`, { cause: err });
128
+ });
129
+ }
130
+ fanSpeedToRotationSpeed(fanSpeed) {
131
+ switch (fanSpeed) {
132
+ case FanSpeed.OFF:
133
+ return 0;
134
+ case FanSpeed.LOW:
135
+ return 25;
136
+ case FanSpeed.MEDIUM:
137
+ return 50;
138
+ case FanSpeed.HIGH:
139
+ return 75;
140
+ case FanSpeed.BOOST:
141
+ return 100;
142
+ default:
143
+ return 0;
144
+ }
145
+ }
146
+ rotationSpeedToFanSpeed(rotationSpeed) {
147
+ if (rotationSpeed === 0) {
148
+ return FanSpeed.OFF;
149
+ }
150
+ if (rotationSpeed <= 25) {
151
+ return FanSpeed.LOW;
152
+ }
153
+ if (rotationSpeed <= 50) {
154
+ return FanSpeed.MEDIUM;
155
+ }
156
+ if (rotationSpeed <= 75) {
157
+ return FanSpeed.HIGH;
158
+ }
159
+ return FanSpeed.BOOST;
160
+ }
161
+ lightLevelToBrightness(lightLevel) {
162
+ switch (lightLevel) {
163
+ case LightLevel.OFF:
164
+ return 0;
165
+ case LightLevel.DIM:
166
+ return 50;
167
+ case LightLevel.HIGH:
168
+ return 100;
169
+ default:
170
+ return 0;
171
+ }
172
+ }
173
+ brightnessToLightLevel(brightness) {
174
+ if (brightness === 0) {
175
+ return LightLevel.OFF;
176
+ }
177
+ if (brightness <= 50) {
178
+ return LightLevel.DIM;
179
+ }
180
+ return LightLevel.HIGH;
181
+ }
182
+ handleGetFanActive() {
183
+ return this.getFanSpeed()
184
+ .then((fanSpeed) => {
185
+ const isActive = fanSpeed !== FanSpeed.OFF;
186
+ const value = isActive ? this.platform.Characteristic.Active.ACTIVE : this.platform.Characteristic.Active.INACTIVE;
187
+ this.debugLog(`Get fan active: ${isActive}`);
188
+ return value;
189
+ })
190
+ .catch((err) => {
191
+ this.errorLog(`handleGetFanActive failed: ${err.message}`);
192
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
193
+ });
194
+ }
195
+ handleSetFanActive(value) {
196
+ const isActive = value === this.platform.Characteristic.Active.ACTIVE;
197
+ const fanSpeed = isActive ? FanSpeed.LOW : FanSpeed.OFF;
198
+ this.debugLog(`Set fan active: ${isActive}`);
199
+ return this.setFanSpeed(fanSpeed)
200
+ .then(() => {
201
+ const rotationSpeed = isActive ? 25 : 0;
202
+ this.fanSvc.updateCharacteristic(this.platform.Characteristic.RotationSpeed, rotationSpeed);
203
+ })
204
+ .catch((err) => {
205
+ this.errorLog(`handleSetFanActive failed: ${err.message}`);
206
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
207
+ });
208
+ }
209
+ handleGetFanRotationSpeed() {
210
+ return this.getFanSpeed()
211
+ .then((fanSpeed) => {
212
+ const rotationSpeed = this.fanSpeedToRotationSpeed(fanSpeed);
213
+ this.debugLog(`Get fan rotation speed: ${rotationSpeed}% (${fanSpeed})`);
214
+ return rotationSpeed;
215
+ })
216
+ .catch((err) => {
217
+ this.errorLog(`handleGetFanRotationSpeed failed: ${err.message}`);
218
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
219
+ });
220
+ }
221
+ handleSetFanRotationSpeed(value) {
222
+ const rotationSpeed = value;
223
+ const fanSpeed = this.rotationSpeedToFanSpeed(rotationSpeed);
224
+ this.debugLog(`Set fan rotation speed: ${rotationSpeed}% -> ${fanSpeed}`);
225
+ return this.setFanSpeed(fanSpeed)
226
+ .then(() => {
227
+ this.fanSvc.updateCharacteristic(this.platform.Characteristic.RotationSpeed, rotationSpeed);
228
+ })
229
+ .catch((err) => {
230
+ this.errorLog(`handleSetFanRotationSpeed failed: ${err.message}`);
231
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
232
+ });
233
+ }
234
+ handleGetLightOn() {
235
+ return this.getLightLevel()
236
+ .then((lightLevel) => {
237
+ const isOn = lightLevel !== LightLevel.OFF;
238
+ this.debugLog(`Get light on: ${isOn}`);
239
+ return isOn;
240
+ })
241
+ .catch((err) => {
242
+ this.errorLog(`handleGetLightOn failed: ${err.message}`);
243
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
244
+ });
245
+ }
246
+ handleSetLightOn(value) {
247
+ const isOn = value;
248
+ const lightLevel = isOn ? LightLevel.DIM : LightLevel.OFF;
249
+ this.debugLog(`Set light on: ${isOn}`);
250
+ return this.setLightLevel(lightLevel)
251
+ .then(() => {
252
+ const brightness = isOn ? 50 : 0;
253
+ this.lightSvc.updateCharacteristic(this.platform.Characteristic.Brightness, brightness);
254
+ })
255
+ .catch((err) => {
256
+ this.errorLog(`handleSetLightOn failed: ${err.message}`);
257
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
258
+ });
259
+ }
260
+ handleGetLightBrightness() {
261
+ return this.getLightLevel()
262
+ .then((lightLevel) => {
263
+ const brightness = this.lightLevelToBrightness(lightLevel);
264
+ this.debugLog(`Get light brightness: ${brightness}% (${lightLevel})`);
265
+ return brightness;
266
+ })
267
+ .catch((err) => {
268
+ this.errorLog(`handleGetLightBrightness failed: ${err.message}`);
269
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
270
+ });
271
+ }
272
+ handleSetLightBrightness(value) {
273
+ const brightness = value;
274
+ const lightLevel = this.brightnessToLightLevel(brightness);
275
+ this.debugLog(`Set light brightness: ${brightness}% -> ${lightLevel}`);
276
+ return this.setLightLevel(lightLevel)
277
+ .then(() => {
278
+ this.lightSvc.updateCharacteristic(this.platform.Characteristic.Brightness, brightness);
279
+ })
280
+ .catch((err) => {
281
+ this.errorLog(`handleSetLightBrightness failed: ${err.message}`);
282
+ throw new this.platform.api.hap.HapStatusError(-70402 /* this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
283
+ });
284
+ }
285
+ refreshState() {
286
+ return Promise.all([
287
+ this.getFanSpeed(),
288
+ this.getLightLevel(),
289
+ ])
290
+ .then(([fanSpeed, lightLevel]) => {
291
+ const isActive = fanSpeed !== FanSpeed.OFF;
292
+ const rotationSpeed = this.fanSpeedToRotationSpeed(fanSpeed);
293
+ const isOn = lightLevel !== LightLevel.OFF;
294
+ const brightness = this.lightLevelToBrightness(lightLevel);
295
+ this.fanSvc.updateCharacteristic(this.platform.Characteristic.Active, isActive ? this.platform.Characteristic.Active.ACTIVE : this.platform.Characteristic.Active.INACTIVE);
296
+ this.fanSvc.updateCharacteristic(this.platform.Characteristic.RotationSpeed, rotationSpeed);
297
+ this.lightSvc.updateCharacteristic(this.platform.Characteristic.On, isOn);
298
+ this.lightSvc.updateCharacteristic(this.platform.Characteristic.Brightness, brightness);
299
+ this.debugLog(`State refreshed - Fan: ${fanSpeed} (${rotationSpeed}%), Light: ${lightLevel} (${brightness}%)`);
300
+ })
301
+ .catch((err) => {
302
+ this.errorLog(`Failed to refresh state: ${err.message}`);
303
+ });
304
+ }
305
+ }
306
+ //# sourceMappingURL=hood.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hood.js","sourceRoot":"","sources":["../../src/devices/hood.ts"],"names":[],"mappings":"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"}
@@ -42,6 +42,7 @@ export declare class SmartHQPlatform implements DynamicPlatformPlugin {
42
42
  private createSmartHQIceMaker;
43
43
  private createSmartHQRefrigerator;
44
44
  private createSmartHQAirConditioner;
45
+ private createSmartHQHood;
45
46
  unregisterPlatformAccessories(existingAccessory: PlatformAccessory): Promise<void>;
46
47
  getPlatformLogSettings(): Promise<void>;
47
48
  getPlatformRateSettings(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,qBAAqB,EAAE,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAG7F,OAAO,KAAK,EAA8B,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAqB/G;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,qBAAqB;IACpD,WAAW,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAA;IACvD,SAAgB,GAAG,EAAE,GAAG,CAAA;IACxB,SAAgB,GAAG,EAAE,OAAO,CAAA;IAC5B,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;IACpB,MAAM,EAAG,qBAAqB,CAAA;IAE9B,OAAO,EAAG,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAA;IACrC,cAAc,EAAG,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAA;IAC1D,OAAO,CAAC,QAAQ,CAAW;IAE3B,cAAc,EAAG,qBAAqB,CAAA;IACtC,eAAe,EAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IACpC,mBAAmB,EAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IAC5C,gBAAgB,EAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IACtC,kBAAkB,EAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAC1C,SAAS,EAAG,OAAO,CAAA;IACnB,OAAO,EAAG,MAAM,CAAA;gBAGd,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,GAAG;IA0DV;;;OAGG;IACH,kBAAkB,CAAC,SAAS,EAAE,iBAAiB;IAO/C;;OAEG;IACG,YAAY;IAaZ,sBAAsB;IA+B5B;;;OAGG;IACG,eAAe;YA0HP,uBAAuB;YAiDvB,iBAAiB;YAiDjB,qBAAqB;YAgDrB,yBAAyB;YAiDzB,2BAA2B;IAiD5B,6BAA6B,CAAC,iBAAiB,EAAE,iBAAiB;IAMzE,sBAAsB;IAUtB,uBAAuB;IAevB,yBAAyB;IAgB/B;;;;;;;;OAQG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;;;;;OAMG;IACG,2BAA2B,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgCpG;;;OAGG;IACG,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrC,UAAU,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxC,eAAe,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7C,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrC,YAAY,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1C,QAAQ,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtC,aAAa,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3C,QAAQ,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAUtC,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAIlC,uBAAuB,IAAI,OAAO,CAAC,OAAO,CAAC;CAGlD"}
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,qBAAqB,EAAE,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAG7F,OAAO,KAAK,EAA8B,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAsB/G;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,qBAAqB;IACpD,WAAW,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAAE,CAAA;IACvD,SAAgB,GAAG,EAAE,GAAG,CAAA;IACxB,SAAgB,GAAG,EAAE,OAAO,CAAA;IAC5B,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;IACpB,MAAM,EAAG,qBAAqB,CAAA;IAE9B,OAAO,EAAG,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAA;IACrC,cAAc,EAAG,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAA;IAC1D,OAAO,CAAC,QAAQ,CAAW;IAE3B,cAAc,EAAG,qBAAqB,CAAA;IACtC,eAAe,EAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IACpC,mBAAmB,EAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IAC5C,gBAAgB,EAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IACtC,kBAAkB,EAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAC1C,SAAS,EAAG,OAAO,CAAA;IACnB,OAAO,EAAG,MAAM,CAAA;gBAGd,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,GAAG;IA0DV;;;OAGG;IACH,kBAAkB,CAAC,SAAS,EAAE,iBAAiB;IAO/C;;OAEG;IACG,YAAY;IAaZ,sBAAsB;IA+B5B;;;OAGG;IACG,eAAe;YA6HP,uBAAuB;YAiDvB,iBAAiB;YAiDjB,qBAAqB;YAgDrB,yBAAyB;YAiDzB,2BAA2B;YAiD3B,iBAAiB;IAoClB,6BAA6B,CAAC,iBAAiB,EAAE,iBAAiB;IAMzE,sBAAsB;IAUtB,uBAAuB;IAevB,yBAAyB;IAgB/B;;;;;;;;OAQG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;;;;;OAMG;IACG,2BAA2B,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgCpG;;;OAGG;IACG,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrC,UAAU,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxC,eAAe,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7C,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrC,YAAY,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1C,QAAQ,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtC,aAAa,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3C,QAAQ,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAUtC,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAIlC,uBAAuB,IAAI,OAAO,CAAC,OAAO,CAAC;CAGlD"}
package/dist/platform.js CHANGED
@@ -6,6 +6,7 @@ import pkg from 'lodash';
6
6
  import ws from 'ws';
7
7
  import { SmartHQAirConditioner } from './devices/airConditioner.js';
8
8
  import { SmartHQDishWasher } from './devices/dishwasher.js';
9
+ import { SmartHQHood } from './devices/hood.js';
9
10
  import { SmartHQOven } from './devices/oven.js';
10
11
  import { SmartHQRefrigerator } from './devices/refrigerator.js';
11
12
  import getAccessToken, { refreshAccessToken } from './getAccessToken.js';
@@ -235,6 +236,9 @@ export class SmartHQPlatform {
235
236
  case 'Split Air Conditioner':
236
237
  await this.createSmartHQAirConditioner(userId, device, details, features);
237
238
  break;
239
+ case 'Hood':
240
+ await this.createSmartHQHood(userId, device, details, features);
241
+ break;
238
242
  default:
239
243
  await this.warnLog(`Device Type Not Supported: ${device.type}`);
240
244
  break;
@@ -483,6 +487,40 @@ export class SmartHQPlatform {
483
487
  this.debugErrorLog(`Unable to Register new device: ${JSON.stringify(device.nickname)}`);
484
488
  }
485
489
  }
490
+ async createSmartHQHood(userId, device, details, features) {
491
+ const uuid = this.api.hap.uuid.generate(device.applianceId);
492
+ const existingAccessory = this.accessories.find(accessory => accessory.UUID === uuid);
493
+ if (existingAccessory) {
494
+ if (!device.hide_device) {
495
+ existingAccessory.context.device = device;
496
+ existingAccessory.context = { device: { brand: 'GE', ...details, ...features }, userId };
497
+ existingAccessory.displayName = await this.validateAndCleanDisplayName(device.nickname, 'nickname', device.nickname);
498
+ existingAccessory.context.device.firmware = device.firmware ?? await this.getVersion();
499
+ this.api.updatePlatformAccessories([existingAccessory]);
500
+ this.infoLog(`Restoring existing accessory from cache: ${existingAccessory.displayName}`);
501
+ new SmartHQHood(this, existingAccessory, device);
502
+ this.debugLog(`${device.nickname} uuid: ${device.applianceId}`);
503
+ }
504
+ else {
505
+ this.unregisterPlatformAccessories(existingAccessory);
506
+ }
507
+ }
508
+ else if (!device.hide_device && !existingAccessory) {
509
+ this.infoLog(`Adding new accessory: ${device.nickname}`);
510
+ const accessory = new this.api.platformAccessory(device.nickname, uuid);
511
+ accessory.context.device = device;
512
+ accessory.context = { device: { brand: 'GE', ...details, ...features }, userId };
513
+ accessory.displayName = await this.validateAndCleanDisplayName(device.nickname, 'nickname', device.nickname);
514
+ accessory.context.device.firmware = device.firmware ?? await this.getVersion();
515
+ new SmartHQHood(this, accessory, device);
516
+ this.debugLog(`${device.nickname} uuid: ${device.applianceId}`);
517
+ this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]);
518
+ this.accessories.push(accessory);
519
+ }
520
+ else {
521
+ this.debugErrorLog(`Unable to Register new device: ${JSON.stringify(device.nickname)}`);
522
+ }
523
+ }
486
524
  async unregisterPlatformAccessories(existingAccessory) {
487
525
  // remove platform accessories when no longer present
488
526
  this.api.unregisterPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [existingAccessory]);