@homebridge-plugins/homebridge-tuya 2.6.0 → 2.7.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 (40) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +10 -10
  3. package/SUPPORTED_DEVICES.md +2 -1
  4. package/dist/accessory/AccessoryFactory.js +7 -0
  5. package/dist/accessory/AccessoryFactory.js.map +1 -1
  6. package/dist/accessory/BaseAccessory.js +2 -2
  7. package/dist/accessory/BaseAccessory.js.map +1 -1
  8. package/dist/accessory/CatToiletAccessory.js +130 -0
  9. package/dist/accessory/CatToiletAccessory.js.map +1 -0
  10. package/dist/accessory/FanAccessory.js +14 -2
  11. package/dist/accessory/FanAccessory.js.map +1 -1
  12. package/dist/accessory/IRAirConditionerAccessory.js +2 -2
  13. package/dist/accessory/IRAirConditionerAccessory.js.map +1 -1
  14. package/dist/accessory/LocationWeatherAccessory.js +2 -2
  15. package/dist/accessory/LocationWeatherAccessory.js.map +1 -1
  16. package/dist/accessory/LockAccessory.js +254 -3
  17. package/dist/accessory/LockAccessory.js.map +1 -1
  18. package/dist/accessory/SaunaAccessory.js +144 -0
  19. package/dist/accessory/SaunaAccessory.js.map +1 -0
  20. package/dist/accessory/SecuritySystemAccessory.js +2 -2
  21. package/dist/accessory/SecuritySystemAccessory.js.map +1 -1
  22. package/dist/accessory/characteristic/Light.js +25 -4
  23. package/dist/accessory/characteristic/Light.js.map +1 -1
  24. package/dist/core/TuyaOpenAPI.js +20 -6
  25. package/dist/core/TuyaOpenAPI.js.map +1 -1
  26. package/dist/core/TuyaOpenMQ.js +0 -1
  27. package/dist/core/TuyaOpenMQ.js.map +1 -1
  28. package/dist/device/TuyaDeviceManager.js +37 -0
  29. package/dist/device/TuyaDeviceManager.js.map +1 -1
  30. package/dist/platform.js +0 -1
  31. package/dist/platform.js.map +1 -1
  32. package/dist/util/Logger.js +15 -13
  33. package/dist/util/Logger.js.map +1 -1
  34. package/dist/util/TuyaStreamDelegate.js.map +1 -1
  35. package/dist/util/util.js +48 -0
  36. package/dist/util/util.js.map +1 -1
  37. package/package.json +1 -1
  38. package/test/FanAccessory.test.ts +457 -0
  39. package/test/Light.test.ts +186 -0
  40. package/test/accessory/lockAccessory.test.ts +549 -0
@@ -4,10 +4,58 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const BaseAccessory_1 = __importDefault(require("./BaseAccessory"));
7
+ const util_1 = require("../util/util");
7
8
  const SCHEMA_CODE = {
8
9
  LOCK_CURRENT_STATE: ['open_close', 'closed_opened', 'lock_motor_state'],
9
10
  LOCK_TARGET_STATE: ['lock_motor_state'],
10
11
  };
12
+ /**
13
+ * Tuya's "Door lock equipment is not online!". For a Bluetooth lock behind a
14
+ * gateway this is not a permanent error — it means the request arrived while
15
+ * the lock was not holding its link.
16
+ */
17
+ const DEVICE_NOT_ONLINE_CODE = 2312;
18
+ /**
19
+ * Measured on a Tuya BLE lock (category `ms`) behind a Tuya gateway, from the
20
+ * device's own connection log over six hours:
21
+ *
22
+ * 19:39:51 online -> 19:43:39 offline (window 3m48s, then 34m offline)
23
+ * 20:18:21 online -> 20:19:37 offline (window 1m16s, then 19m offline)
24
+ * 20:38:56 online -> 20:40:08 offline (window 1m12s, then 24m offline)
25
+ * 21:04:42 online -> 21:06:47 offline (window 2m05s, then 72m offline)
26
+ *
27
+ * The lock holds its link for one or two minutes and drops it for twenty to
28
+ * seventy. A door-operate sent into one of those gaps is rejected with 2312,
29
+ * and the lock came back online roughly 40s after a burst of four rejected
30
+ * attempts. So a 2312 is a closed window, not a failure: keep asking across
31
+ * one plausible window rather than giving up on the first no.
32
+ *
33
+ * Four attempts inside seven seconds caught nothing, which is why this is
34
+ * measured in minutes.
35
+ */
36
+ const RETRY_WINDOW = 90 * 1000;
37
+ const RETRY_INTERVAL = 10 * 1000;
38
+ /**
39
+ * How long HomeKit's `LockTargetState` stays pinned to the value the user
40
+ * asked for, while we wait for the device to report its real state over MQTT.
41
+ * Without this, `updateAllValues()` snaps the target back to the reported
42
+ * state on the very next status event, and the Home app then refuses to
43
+ * re-send an identical target on the next tap.
44
+ *
45
+ * It has to outlast the retry window, or the Home app would drop back to
46
+ * "locked" while the plugin is still trying.
47
+ */
48
+ const PENDING_TARGET_STATE_TIMEOUT = RETRY_WINDOW + 15 * 1000;
49
+ /**
50
+ * Tuya Smart Lock (categories `ms`, `jtmspro`), including Bluetooth locks
51
+ * reachable through a Tuya gateway.
52
+ *
53
+ * Unlocking does not go through the regular `/devices/{id}/commands` DP write.
54
+ * It uses the Smart Lock Open Service:
55
+ * 1. POST /v1.0/smart-lock/devices/{id}/password-ticket -> ticket_id
56
+ * 2. POST /v1.0/smart-lock/devices/{id}/password-free/door-operate
57
+ * See TuyaDeviceManager.getLockTemporaryKey / sendLockCommands.
58
+ */
11
59
  class LockAccessory extends BaseAccessory_1.default {
12
60
  requiredSchema() {
13
61
  return [SCHEMA_CODE.LOCK_CURRENT_STATE];
@@ -23,33 +71,236 @@ class LockAccessory extends BaseAccessory_1.default {
23
71
  configureLockCurrentState() {
24
72
  const schema = this.getSchema(...SCHEMA_CODE.LOCK_CURRENT_STATE);
25
73
  if (!schema) {
74
+ this.log.warn('[Lock] No schema found for LockCurrentState (tried: %s). State reporting is disabled.', SCHEMA_CODE.LOCK_CURRENT_STATE.join(', '));
26
75
  return;
27
76
  }
28
77
  const { UNSECURED, SECURED } = this.Characteristic.LockCurrentState;
29
78
  this.mainService().getCharacteristic(this.Characteristic.LockCurrentState)
30
79
  .onGet(() => {
31
80
  const status = this.getStatus(schema.code);
81
+ if (!status) {
82
+ this.log.debug('[Lock] LockCurrentState: no status reported for dp `%s` yet, assuming SECURED.', schema.code);
83
+ return SECURED;
84
+ }
32
85
  return status.value ? UNSECURED : SECURED;
33
86
  });
87
+ this.log.debug('[Lock] LockCurrentState is driven by dp `%s`.', schema.code);
34
88
  }
35
89
  configureLockTargetState() {
36
90
  const schema = this.getSchema(...SCHEMA_CODE.LOCK_TARGET_STATE);
37
91
  if (!schema) {
92
+ this.log.warn('[Lock] No schema found for LockTargetState (tried: %s). '
93
+ + 'Remote lock/unlock from HomeKit is DISABLED for this device.', SCHEMA_CODE.LOCK_TARGET_STATE.join(', '));
38
94
  return;
39
95
  }
40
96
  const { UNSECURED, SECURED } = this.Characteristic.LockTargetState;
41
97
  this.mainService().getCharacteristic(this.Characteristic.LockTargetState)
42
98
  .onGet(() => {
99
+ if (this.pendingTargetState !== undefined) {
100
+ return this.pendingTargetState;
101
+ }
43
102
  const status = this.getStatus(schema.code);
103
+ if (!status) {
104
+ return SECURED;
105
+ }
44
106
  return status.value ? UNSECURED : SECURED;
45
107
  })
46
108
  .onSet(async (value) => {
47
- const res = await this.deviceManager.getLockTemporaryKey(this.device.id);
109
+ await this.setLockTargetState(value);
110
+ });
111
+ this.log.debug('[Lock] LockTargetState handler registered (dp `%s`). '
112
+ + 'Writes are routed through the Tuya Smart Lock Open Service.', schema.code);
113
+ }
114
+ /**
115
+ * HomeKit -> Tuya. Never reports success optimistically: `LockCurrentState`
116
+ * keeps reflecting whatever the device last reported, and only a real device
117
+ * status update moves it.
118
+ */
119
+ async setLockTargetState(value) {
120
+ const { UNSECURED } = this.Characteristic.LockTargetState;
121
+ const open = (value === UNSECURED);
122
+ this.log.info('[Lock] HomeKit requested target state: %s', open ? 'UNSECURED' : 'SECURED');
123
+ // A BLE sub-device behind a gateway is routinely reported as `online:
124
+ // false` by Tuya while remote unlocking still works — the gateway is what
125
+ // has to be online. So warn, but let the Smart Lock API be the authority.
126
+ if (this.device.online === false) {
127
+ this.log.warn('[Lock] Tuya reports this device as offline. Trying the %s anyway '
128
+ + '(BLE sub-devices are often reported offline while the gateway relays fine).', open ? 'unlock' : 'lock');
129
+ }
130
+ this.setPendingTargetState(value);
131
+ const outcome = await this.performDoorOperation(open);
132
+ if (outcome === 'failed') {
133
+ this.clearPendingTargetState();
134
+ this.updateAllValues();
135
+ throw this.communicationError();
136
+ }
137
+ if (outcome === 'unreachable') {
138
+ // Deliberately not an error to HomeKit, and deliberately not awaited.
139
+ // A HAP write that takes 90s times out on the controller no matter what
140
+ // it eventually returns, so the first attempt answers and the rest runs
141
+ // behind it: the Home app shows "Unlocking…" while the pending target
142
+ // state holds, and either the device reports the unlock or the state
143
+ // falls back to what the lock actually says.
144
+ this.log.info('[Lock] Lock is not reachable through the gateway right now. '
145
+ + 'Retrying for up to %ds in the background — HomeKit will show the real state '
146
+ + 'once the lock answers.', RETRY_WINDOW / 1000);
147
+ this.scheduleRetry(open, Date.now() + RETRY_WINDOW);
148
+ return;
149
+ }
150
+ this.log.info('[Lock] Door operation accepted. Waiting for the device to report its real state '
151
+ + '(HomeKit is NOT marked as %s yet).', open ? 'unlocked' : 'locked');
152
+ }
153
+ /**
154
+ * Keeps asking until the lock's next connection window opens, the deadline
155
+ * passes, or something cancels the pending state (a device report, or the
156
+ * user asking for the opposite).
157
+ */
158
+ scheduleRetry(open, deadline) {
159
+ this.clearRetryTimer();
160
+ this.retryTimer = setTimeout(async () => {
161
+ if (this.pendingTargetState === undefined) {
162
+ this.log.debug('[Lock] Retry cancelled: no target state is pending any more.');
163
+ return;
164
+ }
165
+ const remaining = deadline - Date.now();
166
+ if (remaining <= 0) {
167
+ this.log.warn('[Lock] Gave up after %ds: the lock never became reachable through the gateway. '
168
+ + 'HomeKit is falling back to the last state the lock reported.', RETRY_WINDOW / 1000);
169
+ this.clearPendingTargetState();
170
+ this.updateAllValues();
171
+ return;
172
+ }
173
+ this.log.debug('[Lock] Retrying the door operation (%ds left in the window)...', Math.round(remaining / 1000));
174
+ const outcome = await this.performDoorOperation(open);
175
+ if (outcome === 'ok') {
176
+ this.log.info('[Lock] Door operation accepted on retry. Waiting for the device to report its real state.');
177
+ return;
178
+ }
179
+ if (outcome === 'failed') {
180
+ this.clearPendingTargetState();
181
+ this.updateAllValues();
182
+ return;
183
+ }
184
+ this.scheduleRetry(open, deadline);
185
+ }, RETRY_INTERVAL);
186
+ this.retryTimer.unref?.();
187
+ }
188
+ clearRetryTimer() {
189
+ if (this.retryTimer) {
190
+ clearTimeout(this.retryTimer);
191
+ this.retryTimer = undefined;
192
+ }
193
+ }
194
+ /**
195
+ * Runs the two-step Smart Lock Open Service flow once.
196
+ * Reports the outcome — after logging why — instead of throwing, so the
197
+ * caller owns the single HomeKit-facing error and the retry decision.
198
+ */
199
+ async performDoorOperation(open) {
200
+ this.log.debug('[Lock] Requesting Tuya password ticket...');
201
+ const ticketRes = await this.deviceManager.getLockTemporaryKey(this.device.id);
202
+ if (!ticketRes.success) {
203
+ this.log.error('[Lock] password-ticket failed:\n success=false\n code=%s\n msg=%s', ticketRes.code, ticketRes.msg);
204
+ return 'failed';
205
+ }
206
+ const ticketID = ticketRes.result?.ticket_id;
207
+ if (!ticketID) {
208
+ this.log.error('[Lock] password-ticket returned success but no ticket_id. '
209
+ + 'Result keys: %s', Object.keys(ticketRes.result || {}).join(', ') || '<empty>');
210
+ return 'failed';
211
+ }
212
+ this.log.debug('[Lock] password-ticket response:\n success=true\n ticket_id=%s\n expire_time=%s', (0, util_1.maskSecret)(ticketID), ticketRes.result?.expire_time);
213
+ this.log.debug('[Lock] Sending door operation:\n open=%s', open);
214
+ const operateRes = await this.deviceManager.sendLockCommands(this.device.id, ticketID, open);
215
+ // Tuya may answer `success: true` with `result: false`, meaning the cloud
216
+ // accepted the request but the lock refused the operation.
217
+ if (!operateRes.success) {
218
+ // 2312 is the lock being between connection windows. It is the normal
219
+ // case for a BLE lock, so it is logged as a warning and left to the
220
+ // retry loop — and the diagnostics lookup is skipped, or every attempt
221
+ // would spend an extra API call re-reading settings that cannot have
222
+ // changed since the last one.
223
+ if (operateRes.code === DEVICE_NOT_ONLINE_CODE) {
224
+ this.log.warn('[Lock] door-operate rejected:\n success=false\n code=%s\n msg=%s', operateRes.code, operateRes.msg);
225
+ return 'unreachable';
226
+ }
227
+ this.log.error('[Lock] door-operate failed:\n success=false\n code=%s\n msg=%s', operateRes.code, operateRes.msg);
228
+ await this.logRemoteUnlockDiagnostics();
229
+ return 'failed';
230
+ }
231
+ if (operateRes.result === false) {
232
+ this.log.error('[Lock] door-operate rejected by the device:\n success=true\n result=false');
233
+ await this.logRemoteUnlockDiagnostics();
234
+ return 'failed';
235
+ }
236
+ this.log.debug('[Lock] door-operate response:\n success=true\n result=%o', operateRes.result);
237
+ return 'ok';
238
+ }
239
+ /**
240
+ * Best-effort diagnostics after a rejected door operation: tells the user
241
+ * which remote unlocking methods the lock actually exposes.
242
+ */
243
+ async logRemoteUnlockDiagnostics() {
244
+ if (typeof this.deviceManager.getLockRemoteUnlockMethods !== 'function') {
245
+ return;
246
+ }
247
+ try {
248
+ const res = await this.deviceManager.getLockRemoteUnlockMethods(this.device.id);
48
249
  if (!res.success) {
250
+ this.log.warn('[Lock] Could not read the supported remote unlocking methods: code=%s, msg=%s', res.code, res.msg);
49
251
  return;
50
252
  }
51
- await this.deviceManager.sendLockCommands(this.device.id, res.result.ticket_id, (value === UNSECURED));
52
- });
253
+ this.log.warn('[Lock] Remote unlocking methods reported by this lock: %o', res.result);
254
+ this.log.warn('[Lock] If the list is empty, enable remote unlocking for this lock in the Tuya/Smart Life app.');
255
+ }
256
+ catch (error) {
257
+ this.log.debug('[Lock] Remote unlocking methods lookup threw: %s', error.message);
258
+ }
259
+ }
260
+ async onDeviceStatusUpdate(status) {
261
+ const schema = this.getSchema(...SCHEMA_CODE.LOCK_CURRENT_STATE);
262
+ const update = schema && status.find(item => item.code === schema.code);
263
+ if (update) {
264
+ this.log.debug('[Lock] Device reported %s = %o', update.code, update.value);
265
+ if (this.pendingTargetState !== undefined) {
266
+ const { UNSECURED, SECURED } = this.Characteristic.LockTargetState;
267
+ const reported = update.value ? UNSECURED : SECURED;
268
+ if (reported === this.pendingTargetState) {
269
+ this.log.debug('[Lock] Device reached the requested state. Releasing the pending target state.');
270
+ this.clearPendingTargetState();
271
+ }
272
+ }
273
+ }
274
+ await super.onDeviceStatusUpdate(status);
275
+ }
276
+ setPendingTargetState(value) {
277
+ // A fresh request supersedes whatever was still being retried, including
278
+ // one going the opposite way.
279
+ this.clearRetryTimer();
280
+ this.pendingTargetState = value;
281
+ if (this.pendingTargetStateTimer) {
282
+ clearTimeout(this.pendingTargetStateTimer);
283
+ }
284
+ this.pendingTargetStateTimer = setTimeout(() => {
285
+ this.log.debug('[Lock] Timed out after %ds waiting for the device to report the requested state. '
286
+ + 'Falling back to the reported state.', PENDING_TARGET_STATE_TIMEOUT / 1000);
287
+ this.clearPendingTargetState();
288
+ this.updateAllValues();
289
+ }, PENDING_TARGET_STATE_TIMEOUT);
290
+ // Don't hold the event loop open.
291
+ this.pendingTargetStateTimer.unref?.();
292
+ }
293
+ clearPendingTargetState() {
294
+ this.clearRetryTimer();
295
+ this.pendingTargetState = undefined;
296
+ if (this.pendingTargetStateTimer) {
297
+ clearTimeout(this.pendingTargetStateTimer);
298
+ this.pendingTargetStateTimer = undefined;
299
+ }
300
+ }
301
+ communicationError() {
302
+ const { HapStatusError, HAPStatus } = this.platform.api.hap;
303
+ return new HapStatusError(-70402 /* HAPStatus.SERVICE_COMMUNICATION_FAILURE */);
53
304
  }
54
305
  }
55
306
  exports.default = LockAccessory;
@@ -1 +1 @@
1
- {"version":3,"file":"LockAccessory.js","sourceRoot":"","sources":["../../src/accessory/LockAccessory.ts"],"names":[],"mappings":";;;;;AAAA,oEAA4C;AAE5C,MAAM,WAAW,GAAG;IAClB,kBAAkB,EAAE,CAAC,YAAY,EAAE,eAAe,EAAE,kBAAkB,CAAC;IACvE,iBAAiB,EAAE,CAAC,kBAAkB,CAAC;CACxC,CAAC;AAEF,MAAqB,aAAc,SAAQ,uBAAa;IAEtD,cAAc;QACZ,OAAO,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAC1C,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,yBAAyB,EAAE,CAAC;QACjC,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;eACvD,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC7D,CAAC;IAED,yBAAyB;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC;QACpE,IAAI,CAAC,WAAW,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC;aACvE,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAE,CAAC;YAC5C,OAAQ,MAAM,CAAC,KAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;QACzD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,wBAAwB;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,iBAAiB,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QAED,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC;QACnE,IAAI,CAAC,WAAW,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC;aACtE,KAAK,CAAC,GAAG,EAAE;YACV,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAE,CAAC;YAC5C,OAAQ,MAAM,CAAC,KAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;QACzD,CAAC,CAAC;aACD,KAAK,CAAC,KAAK,EAAC,KAAK,EAAC,EAAE;YACnB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO;YACT,CAAC;YACD,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC;QACzG,CAAC,CAAC,CAAC;IACP,CAAC;CAEF;AAnDD,gCAmDC"}
1
+ {"version":3,"file":"LockAccessory.js","sourceRoot":"","sources":["../../src/accessory/LockAccessory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const util_1 = require("../util/util");
7
+ const BaseAccessory_1 = __importDefault(require("./BaseAccessory"));
8
+ const CurrentTemperature_1 = require("./characteristic/CurrentTemperature");
9
+ const TemperatureDisplayUnits_1 = require("./characteristic/TemperatureDisplayUnits");
10
+ const Light_1 = require("./characteristic/Light");
11
+ const SCHEMA_CODE = {
12
+ ON: ['powerswitch'],
13
+ CURRENT_TEMP: ['currtemp', 'settemp'],
14
+ TARGET_TEMP: ['settemp'],
15
+ TEMP_UNIT_CONVERT: ['temp_unit_convert', 'c_f'],
16
+ LIGHT: ['lightswitch'],
17
+ LED: ['ledswitch'],
18
+ // TIMER: ['settime'], // Not currently supppored by homekit
19
+ };
20
+ class SaunaAccessory extends BaseAccessory_1.default {
21
+ requiredSchema() {
22
+ return [SCHEMA_CODE.CURRENT_TEMP, SCHEMA_CODE.TARGET_TEMP];
23
+ }
24
+ configureServices() {
25
+ this.configureCurrentState();
26
+ this.configureTargetState();
27
+ (0, CurrentTemperature_1.configureCurrentTemperature)(this, this.mainService(), this.getSchema(...SCHEMA_CODE.CURRENT_TEMP));
28
+ this.configureTargetTemp();
29
+ (0, TemperatureDisplayUnits_1.configureTempDisplayUnits)(this, this.mainService(), this.getSchema(...SCHEMA_CODE.TEMP_UNIT_CONVERT));
30
+ this.configureLight();
31
+ }
32
+ mainService() {
33
+ return this.accessory.getService(this.Service.Thermostat)
34
+ || this.accessory.addService(this.Service.Thermostat);
35
+ }
36
+ configureCurrentState() {
37
+ const { OFF, HEAT } = this.Characteristic.CurrentHeatingCoolingState;
38
+ const schema = this.getSchema(...SCHEMA_CODE.ON);
39
+ if (!schema) {
40
+ this.log.warn('Current HeatingCooling state not supported.');
41
+ return;
42
+ }
43
+ this.mainService().getCharacteristic(this.Characteristic.CurrentHeatingCoolingState)
44
+ .onGet(() => {
45
+ const on = this.getStatus(schema?.code);
46
+ if (on && on.value === false) {
47
+ return OFF;
48
+ }
49
+ else {
50
+ return HEAT;
51
+ }
52
+ });
53
+ }
54
+ configureTargetState() {
55
+ const { OFF, HEAT } = this.Characteristic.TargetHeatingCoolingState;
56
+ const schema = this.getSchema(...SCHEMA_CODE.ON);
57
+ if (!schema) {
58
+ this.log.warn('Target HeatingCooling state not supported.');
59
+ return;
60
+ }
61
+ this.mainService().getCharacteristic(this.Characteristic.TargetHeatingCoolingState)
62
+ .onGet(() => {
63
+ const on = this.getStatus(schema?.code);
64
+ if (on && on.value === false) {
65
+ return OFF;
66
+ }
67
+ else {
68
+ return HEAT;
69
+ }
70
+ })
71
+ .onSet(async (value) => {
72
+ const commands = [];
73
+ if (value === OFF) {
74
+ commands.push({
75
+ code: schema?.code,
76
+ value: false,
77
+ });
78
+ }
79
+ else if (value === HEAT) {
80
+ commands.push({
81
+ code: schema?.code,
82
+ value: true,
83
+ });
84
+ }
85
+ if (commands.length !== 0) {
86
+ await this.sendCommands(commands);
87
+ }
88
+ })
89
+ .setProps({ validValues: [OFF, HEAT] });
90
+ }
91
+ configureTargetTemp() {
92
+ const schema = this.getSchema(...SCHEMA_CODE.TARGET_TEMP);
93
+ if (!schema) {
94
+ this.log.warn('TargetTemperature not supported.');
95
+ return;
96
+ }
97
+ const property = schema.property;
98
+ let multiple = Math.pow(10, property.scale);
99
+ let props = {
100
+ minValue: Math.max(30, property.min / multiple),
101
+ maxValue: Math.min(90, property.max / multiple),
102
+ minStep: Math.max(0.1, property.step / multiple),
103
+ };
104
+ if (props.maxValue <= props.minValue) {
105
+ this.log.warn('Invalid schema: %o, props will be reset to the default value.', schema);
106
+ multiple = 1;
107
+ props = { minValue: 30, maxValue: 90, minStep: 1 };
108
+ }
109
+ this.log.debug('Set props for TargetTemperature:', props);
110
+ this.mainService().getCharacteristic(this.Characteristic.TargetTemperature)
111
+ .onGet(() => {
112
+ const status = this.getStatus(schema.code);
113
+ if (!status || typeof status.value !== 'number') {
114
+ this.log.debug('No valid settemp available, returning default.');
115
+ return props.minValue; // or any fallback value like 45
116
+ }
117
+ const temp = status.value / multiple;
118
+ return (0, util_1.limit)(temp, props.minValue, props.maxValue);
119
+ })
120
+ .onSet(async (value) => {
121
+ await this.sendCommands([{
122
+ code: schema.code,
123
+ value: value * multiple,
124
+ }]);
125
+ })
126
+ .setProps(props);
127
+ }
128
+ configureLight() {
129
+ const lightswitchSchema = this.getSchema(...SCHEMA_CODE.LIGHT);
130
+ const ledswitchSchema = this.getSchema(...SCHEMA_CODE.LED);
131
+ const light1Service = this.accessory.getService('Sauna Main Light') ||
132
+ this.accessory.addService(this.Service.Lightbulb, 'Sauna Main Light', 'lightswitch');
133
+ const light2Service = this.accessory.getService('Sauna LED Light') ||
134
+ this.accessory.addService(this.Service.Lightbulb, 'Sauna LED Light', 'ledswitch');
135
+ if (lightswitchSchema) {
136
+ (0, Light_1.configureLight)(this, light1Service, lightswitchSchema);
137
+ }
138
+ if (ledswitchSchema) {
139
+ (0, Light_1.configureLight)(this, light2Service, ledswitchSchema);
140
+ }
141
+ }
142
+ }
143
+ exports.default = SaunaAccessory;
144
+ //# sourceMappingURL=SaunaAccessory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SaunaAccessory.js","sourceRoot":"","sources":["../../src/accessory/SaunaAccessory.ts"],"names":[],"mappings":"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"}
@@ -11,8 +11,8 @@ const SCHEMA_CODE = {
11
11
  SOS_STATE: ['sos_state'],
12
12
  };
13
13
  class SecuritySystemAccessory extends BaseAccessory_1.default {
14
- constructor() {
15
- super(...arguments);
14
+ constructor(platform, accessory) {
15
+ super(platform, accessory);
16
16
  this.isNightArm = false;
17
17
  }
18
18
  requiredSchema() {
@@ -1 +1 @@
1
- {"version":3,"file":"SecuritySystemAccessory.js","sourceRoot":"","sources":["../../src/accessory/SecuritySystemAccessory.ts"],"names":[],"mappings":";;;;;AAAA,oEAA4C;AAC5C,8EAA+H;AAC/H,gDAAsD;AAEtD,MAAM,WAAW,GAAG;IAClB,WAAW,EAAE,CAAC,aAAa,CAAC;IAC5B,SAAS,EAAE,CAAC,WAAW,CAAC;CACzB,CAAC;AAEF,MAAqB,uBAAwB,SAAQ,uBAAa;IAAlE;;QAME,eAAU,GAAG,KAAK,CAAC;IAarB,CAAC;IAjBC,cAAc;QACZ,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;IAID,iBAAiB;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;eACjE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAE5D,IAAA,oBAAa,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE/C,IAAA,yDAAmC,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC,EAC3F,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5C,IAAA,wDAAkC,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC,EAC1F,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9C,CAAC;CACF;AAnBD,0CAmBC"}
1
+ {"version":3,"file":"SecuritySystemAccessory.js","sourceRoot":"","sources":["../../src/accessory/SecuritySystemAccessory.ts"],"names":[],"mappings":";;;;;AAEA,oEAA4C;AAC5C,8EAA+H;AAC/H,gDAAsD;AAEtD,MAAM,WAAW,GAAG;IAClB,WAAW,EAAE,CAAC,aAAa,CAAC;IAC5B,SAAS,EAAE,CAAC,WAAW,CAAC;CACzB,CAAC;AAEF,MAAqB,uBAAwB,SAAQ,uBAAa;IAIhE,YAAY,QAAsB,EAAE,SAA4B;QAC9D,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,cAAc;QACZ,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED,iBAAiB;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;eACjE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAE5D,IAAA,oBAAa,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE/C,IAAA,yDAAmC,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC,EAC3F,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5C,IAAA,wDAAkC,EAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,WAAW,CAAC,EAC1F,IAAI,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9C,CAAC;CACF;AAxBD,0CAwBC"}
@@ -80,6 +80,27 @@ function inColorMode(accessory, lightType, modeSchema) {
80
80
  const status = accessory.getStatus(modeSchema.code);
81
81
  return (status.value === 'colour');
82
82
  }
83
+ function configureLightOn(accessory, service, onSchema, brightSchema) {
84
+ service.getCharacteristic(accessory.Characteristic.On)
85
+ .onGet(() => {
86
+ accessory.checkOnlineStatus();
87
+ const status = accessory.getStatus(onSchema.code);
88
+ return status.value;
89
+ })
90
+ .onSet(async (value) => {
91
+ const commands = [{ code: onSchema.code, value: value }];
92
+ // Bundle cached brightness with ON to prevent the device from turning on
93
+ // at stale brightness when commands arrive in separate debounce batches
94
+ // (e.g. HomeKit automations controlling multiple services simultaneously).
95
+ if (value && brightSchema) {
96
+ const brightStatus = accessory.getStatus(brightSchema.code);
97
+ if (brightStatus) {
98
+ commands.push({ code: brightSchema.code, value: brightStatus.value });
99
+ }
100
+ }
101
+ await accessory.sendCommands(commands, true);
102
+ });
103
+ }
83
104
  function configureBrightness(accessory, service, lightType, brightSchema, colorSchema, modeSchema) {
84
105
  service.getCharacteristic(accessory.Characteristic.Brightness)
85
106
  .onGet(() => {
@@ -224,23 +245,23 @@ function configureLight(accessory, service, onSchema, brightSchema, tempSchema,
224
245
  (0, On_1.configureOn)(accessory, service, onSchema);
225
246
  break;
226
247
  case LightType.C:
227
- (0, On_1.configureOn)(accessory, service, onSchema);
248
+ configureLightOn(accessory, service, onSchema, brightSchema);
228
249
  configureBrightness(accessory, service, lightType, brightSchema, colorSchema, modeSchema);
229
250
  break;
230
251
  case LightType.CW:
231
- (0, On_1.configureOn)(accessory, service, onSchema);
252
+ configureLightOn(accessory, service, onSchema, brightSchema);
232
253
  configureBrightness(accessory, service, lightType, brightSchema, colorSchema, modeSchema);
233
254
  configureColourTemperature(accessory, service, lightType, tempSchema, modeSchema);
234
255
  break;
235
256
  case LightType.RGB:
236
- (0, On_1.configureOn)(accessory, service, onSchema);
257
+ configureLightOn(accessory, service, onSchema, brightSchema);
237
258
  configureBrightness(accessory, service, lightType, brightSchema, colorSchema, modeSchema);
238
259
  configureHue(accessory, service, lightType, colorSchema, modeSchema);
239
260
  configureSaturation(accessory, service, lightType, colorSchema, modeSchema);
240
261
  break;
241
262
  case LightType.RGBC:
242
263
  case LightType.RGBCW:
243
- (0, On_1.configureOn)(accessory, service, onSchema);
264
+ configureLightOn(accessory, service, onSchema, brightSchema);
244
265
  configureBrightness(accessory, service, lightType, brightSchema, colorSchema, modeSchema);
245
266
  configureColourTemperature(accessory, service, lightType, tempSchema, modeSchema);
246
267
  configureHue(accessory, service, lightType, colorSchema, modeSchema);
@@ -1 +1 @@
1
- {"version":3,"file":"Light.js","sourceRoot":"","sources":["../../../src/accessory/characteristic/Light.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Light.js","sourceRoot":"","sources":["../../../src/accessory/characteristic/Light.ts"],"names":[],"mappings":"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"}