@homebridge-plugins/homebridge-tuya 3.0.0-beta.26 → 3.0.0-beta.27
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.
- package/dist/shared/accessory/AirConditionerAccessory.js +98 -3
- package/dist/shared/accessory/AirConditionerAccessory.js.map +1 -1
- package/dist/shared/accessory/characteristic/RotationSpeed.js +7 -1
- package/dist/shared/accessory/characteristic/RotationSpeed.js.map +1 -1
- package/package.json +1 -1
- package/test/airConditioner.swing.test.ts +226 -0
- package/test/airConditioner.test.ts +29 -1
|
@@ -10,7 +10,7 @@ const CurrentTemperature_1 = require("./characteristic/CurrentTemperature");
|
|
|
10
10
|
const LockPhysicalControls_1 = require("./characteristic/LockPhysicalControls");
|
|
11
11
|
const RelativeHumidityDehumidifierThreshold_1 = require("./characteristic/RelativeHumidityDehumidifierThreshold");
|
|
12
12
|
const RotationSpeed_1 = require("./characteristic/RotationSpeed");
|
|
13
|
-
|
|
13
|
+
const SwingMode_1 = require("./characteristic/SwingMode");
|
|
14
14
|
const TemperatureDisplayUnits_1 = require("./characteristic/TemperatureDisplayUnits");
|
|
15
15
|
const SCHEMA_CODE = {
|
|
16
16
|
// AirConditioner
|
|
@@ -22,7 +22,14 @@ const SCHEMA_CODE = {
|
|
|
22
22
|
SPEED_LEVEL: ['fan_speed_enum', 'windspeed'],
|
|
23
23
|
LOCK: ['lock', 'child_lock'],
|
|
24
24
|
TEMP_UNIT_CONVERT: ['temp_unit_convert', 'c_f'],
|
|
25
|
-
|
|
25
|
+
// Vertical first: it is the axis most units expose and the one users reach for.
|
|
26
|
+
// HeaterCooler carries a single SwingMode characteristic, so the remaining axes are
|
|
27
|
+
// published as switches (see configureSwingSwitches).
|
|
28
|
+
SWING: ['switch_vertical', 'switch_horizontal'],
|
|
29
|
+
SWING_AXES: [
|
|
30
|
+
{ code: 'switch_vertical', name: 'Vertical Swing' },
|
|
31
|
+
{ code: 'switch_horizontal', name: 'Horizontal Swing' },
|
|
32
|
+
],
|
|
26
33
|
// Dehumidifier
|
|
27
34
|
CURRENT_HUMIDITY: ['humidity_current'],
|
|
28
35
|
TARGET_HUMIDITY: ['humidity_set'],
|
|
@@ -42,6 +49,8 @@ class AirConditionerAccessory extends BaseAccessory_1.default {
|
|
|
42
49
|
this.configureAirConditioner();
|
|
43
50
|
this.configureDehumidifier();
|
|
44
51
|
this.configureFan();
|
|
52
|
+
this.configureSwingSwitches();
|
|
53
|
+
this.configureFanSpeedTile();
|
|
45
54
|
// Add extra sensors for home automation use.
|
|
46
55
|
(0, CurrentTemperature_1.configureCurrentTemperature)(this, undefined, this.getSchema(...SCHEMA_CODE.CURRENT_TEMP));
|
|
47
56
|
(0, CurrentRelativeHumidity_1.configureCurrentRelativeHumidity)(this, undefined, this.getSchema(...SCHEMA_CODE.CURRENT_HUMIDITY));
|
|
@@ -81,7 +90,7 @@ class AirConditionerAccessory extends BaseAccessory_1.default {
|
|
|
81
90
|
// Optional Characteristics
|
|
82
91
|
(0, LockPhysicalControls_1.configureLockPhysicalControls)(this, service, this.getSchema(...SCHEMA_CODE.LOCK));
|
|
83
92
|
(0, RotationSpeed_1.configureRotationSpeedLevel)(this, service, this.getSchema(...SCHEMA_CODE.SPEED_LEVEL), ['auto']);
|
|
84
|
-
|
|
93
|
+
(0, SwingMode_1.configureSwingMode)(this, service, this.getSchema(...SCHEMA_CODE.SWING));
|
|
85
94
|
this.configureCoolingThreshouldTemp();
|
|
86
95
|
this.configureHeatingThreshouldTemp();
|
|
87
96
|
(0, TemperatureDisplayUnits_1.configureTempDisplayUnits)(this, service, this.getSchema(...SCHEMA_CODE.TEMP_UNIT_CONVERT));
|
|
@@ -92,6 +101,12 @@ class AirConditionerAccessory extends BaseAccessory_1.default {
|
|
|
92
101
|
const property = modeSchema.property;
|
|
93
102
|
const dehumidifierCode = property.range.find(code => DEHUMIDIFIER_MODE.includes(code.toLowerCase()));
|
|
94
103
|
if (!dehumidifierCode) {
|
|
104
|
+
// Subtype-less only, for the same reason as the Fanv2 cleanup below.
|
|
105
|
+
const staleDehumidifier = this.accessory.services
|
|
106
|
+
.find(s => s.UUID === this.Service.HumidifierDehumidifier.UUID && !s.subtype);
|
|
107
|
+
if (staleDehumidifier) {
|
|
108
|
+
this.accessory.removeService(staleDehumidifier);
|
|
109
|
+
}
|
|
95
110
|
return;
|
|
96
111
|
}
|
|
97
112
|
const service = this.dehumidifierService();
|
|
@@ -136,6 +151,15 @@ class AirConditionerAccessory extends BaseAccessory_1.default {
|
|
|
136
151
|
const property = modeSchema.property;
|
|
137
152
|
const fanCode = property.range.find(code => FAN_MODE.includes(code.toLowerCase()));
|
|
138
153
|
if (!fanCode) {
|
|
154
|
+
// Drop a Fanv2 created by an earlier run: it would keep showing a slider bound
|
|
155
|
+
// to the same fan-speed DP as the air conditioner, and its Active handler sends
|
|
156
|
+
// a mode change, so moving that slider switches the unit into fan mode.
|
|
157
|
+
// Match only the subtype-less service this method creates — getService() ignores
|
|
158
|
+
// subtypes and would otherwise match the fan-speed tile added below.
|
|
159
|
+
const staleFan = this.accessory.services.find(s => s.UUID === this.Service.Fanv2.UUID && !s.subtype);
|
|
160
|
+
if (staleFan) {
|
|
161
|
+
this.accessory.removeService(staleFan);
|
|
162
|
+
}
|
|
139
163
|
return;
|
|
140
164
|
}
|
|
141
165
|
const service = this.fanService();
|
|
@@ -161,6 +185,77 @@ class AirConditionerAccessory extends BaseAccessory_1.default {
|
|
|
161
185
|
(0, RotationSpeed_1.configureRotationSpeedLevel)(this, service, this.getSchema(...SCHEMA_CODE.SPEED_LEVEL), ['auto']);
|
|
162
186
|
// configureSwingMode(this, service, this.getSchema(...SCHEMA_CODE.SWING));
|
|
163
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* Publish each swing axis the device reports as its own Switch.
|
|
190
|
+
*
|
|
191
|
+
* SwingMode is set on the HeaterCooler service as well, but the Home app does not
|
|
192
|
+
* render that characteristic for a heater-cooler, so without these switches the
|
|
193
|
+
* louvres cannot be controlled from the Home app at all — on the unit this was
|
|
194
|
+
* developed against, vertical swing was running (DP reported `true`) with no
|
|
195
|
+
* control for it anywhere in the app. Switches are rendered, and other clients
|
|
196
|
+
* (Eve, Controller for HomeKit) keep using SwingMode.
|
|
197
|
+
*
|
|
198
|
+
* A switch is removed again if the device stops reporting that axis.
|
|
199
|
+
*/
|
|
200
|
+
configureSwingSwitches() {
|
|
201
|
+
for (const axis of SCHEMA_CODE.SWING_AXES) {
|
|
202
|
+
const schema = this.getSchema(axis.code);
|
|
203
|
+
const subtype = `swing-${axis.code}`;
|
|
204
|
+
const existing = this.accessory.getServiceById(this.Service.Switch, subtype);
|
|
205
|
+
if (!schema) {
|
|
206
|
+
if (existing) {
|
|
207
|
+
this.accessory.removeService(existing);
|
|
208
|
+
}
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
const service = existing
|
|
212
|
+
|| this.accessory.addService(this.Service.Switch, axis.name, subtype);
|
|
213
|
+
// Without ConfiguredName the Home app labels every extra tile with the accessory
|
|
214
|
+
// name, leaving two identical switches with no way to tell them apart.
|
|
215
|
+
service.setCharacteristic(this.Characteristic.ConfiguredName, axis.name);
|
|
216
|
+
service.getCharacteristic(this.Characteristic.On)
|
|
217
|
+
.onGet(() => this.getStatus(schema.code)?.value === true)
|
|
218
|
+
.onSet(async (value) => {
|
|
219
|
+
await this.sendCommands([{ code: schema.code, value: value === true }], true);
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Publish the blower speed as a fan tile when the device has no fan mode.
|
|
225
|
+
*
|
|
226
|
+
* RotationSpeed is set on the HeaterCooler service, but the Home app does not
|
|
227
|
+
* render it there either, so on a unit without a fan mode the speed cannot be
|
|
228
|
+
* changed from the Home app. Devices that do have a fan mode already get a Fanv2
|
|
229
|
+
* from configureFan(), so nothing is added for them.
|
|
230
|
+
*
|
|
231
|
+
* Active mirrors the power DP: this fan IS the air conditioner's blower, so unlike
|
|
232
|
+
* configureFan() it must never send a mode change.
|
|
233
|
+
*/
|
|
234
|
+
configureFanSpeedTile() {
|
|
235
|
+
const modeSchema = this.getSchema(...SCHEMA_CODE.MODE);
|
|
236
|
+
const modeProperty = modeSchema?.property;
|
|
237
|
+
const hasFanMode = modeProperty?.range.some(code => FAN_MODE.includes(code.toLowerCase()));
|
|
238
|
+
const speedSchema = this.getSchema(...SCHEMA_CODE.SPEED_LEVEL);
|
|
239
|
+
const activeSchema = this.getSchema(...SCHEMA_CODE.ACTIVE);
|
|
240
|
+
const subtype = 'fan-speed';
|
|
241
|
+
const existing = this.accessory.getServiceById(this.Service.Fanv2, subtype);
|
|
242
|
+
if (hasFanMode || !speedSchema || !activeSchema) {
|
|
243
|
+
if (existing) {
|
|
244
|
+
this.accessory.removeService(existing);
|
|
245
|
+
}
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
const name = 'Fan Speed';
|
|
249
|
+
const service = existing || this.accessory.addService(this.Service.Fanv2, name, subtype);
|
|
250
|
+
service.setCharacteristic(this.Characteristic.ConfiguredName, name);
|
|
251
|
+
const { INACTIVE, ACTIVE } = this.Characteristic.Active;
|
|
252
|
+
service.getCharacteristic(this.Characteristic.Active)
|
|
253
|
+
.onGet(() => (this.getStatus(activeSchema.code)?.value === true) ? ACTIVE : INACTIVE)
|
|
254
|
+
.onSet(async (value) => {
|
|
255
|
+
await this.sendCommands([{ code: activeSchema.code, value: value === ACTIVE }], true);
|
|
256
|
+
});
|
|
257
|
+
(0, RotationSpeed_1.configureRotationSpeedLevel)(this, service, speedSchema, ['auto']);
|
|
258
|
+
}
|
|
164
259
|
mainService() {
|
|
165
260
|
return this.accessory.getService(this.Service.HeaterCooler)
|
|
166
261
|
|| this.accessory.addService(this.Service.HeaterCooler);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AirConditionerAccessory.js","sourceRoot":"","sources":["../../../src/shared/accessory/AirConditionerAccessory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AirConditionerAccessory.js","sourceRoot":"","sources":["../../../src/shared/accessory/AirConditionerAccessory.ts"],"names":[],"mappings":"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"}
|
|
@@ -65,6 +65,9 @@ function configureRotationSpeedEnum(accessory, service, schema, ignoreValues) {
|
|
|
65
65
|
cloneProperty.range = range;
|
|
66
66
|
const rotationSpeedProperty = enumToPercentageProperty(cloneProperty);
|
|
67
67
|
const onGetHandler = () => {
|
|
68
|
+
// A device can omit this DP entirely; indexOf(undefined) yields -1, which limit()
|
|
69
|
+
// clamps to the minimum, instead of throwing inside the read handler and taking
|
|
70
|
+
// the whole accessory offline in HomeKit.
|
|
68
71
|
const status = accessory.getStatus(schema.code);
|
|
69
72
|
const index = range.indexOf(status?.value);
|
|
70
73
|
const level = index + 1;
|
|
@@ -100,8 +103,11 @@ function configureRotationSpeedLevel(accessory, service, schema, ignoreValues) {
|
|
|
100
103
|
const props = { minValue: 0, maxValue: range.length, minStep: 1, unit: 'speed' };
|
|
101
104
|
accessory.log.debug('Set props for RotationSpeed:', props);
|
|
102
105
|
const onGetHandler = () => {
|
|
106
|
+
// A device can omit this DP entirely; indexOf(undefined) yields -1, which limit()
|
|
107
|
+
// clamps to the minimum, instead of throwing inside the read handler and taking
|
|
108
|
+
// the whole accessory offline in HomeKit.
|
|
103
109
|
const status = accessory.getStatus(schema.code);
|
|
104
|
-
const index = range.indexOf(status
|
|
110
|
+
const index = range.indexOf(status?.value);
|
|
105
111
|
return (0, util_1.limit)(index + 1, props.minValue, props.maxValue);
|
|
106
112
|
};
|
|
107
113
|
service.getCharacteristic(accessory.Characteristic.RotationSpeed)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RotationSpeed.js","sourceRoot":"","sources":["../../../../src/shared/accessory/characteristic/RotationSpeed.ts"],"names":[],"mappings":";;AAUA,wDAiBC;
|
|
1
|
+
{"version":3,"file":"RotationSpeed.js","sourceRoot":"","sources":["../../../../src/shared/accessory/characteristic/RotationSpeed.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@homebridge-plugins/homebridge-tuya",
|
|
3
3
|
"displayName": "Homebridge Tuya",
|
|
4
|
-
"version": "3.0.0-beta.
|
|
4
|
+
"version": "3.0.0-beta.27",
|
|
5
5
|
"description": "Unified Homebridge Tuya plugin supporting both Tuya Cloud (REST/MQTT) and Tuya Local (direct LAN TCP) communication.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { describe, expect, test, jest, beforeEach } from '@jest/globals';
|
|
2
|
+
import AirConditionerAccessory from '../src/shared/accessory/AirConditionerAccessory';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Coverage for the extra services an air conditioner publishes:
|
|
6
|
+
*
|
|
7
|
+
* - one Switch per swing axis the device reports
|
|
8
|
+
* - a Fanv2 "Fan Speed" tile when the device has no fan mode
|
|
9
|
+
*
|
|
10
|
+
* Both exist because the Home app does not offer SwingMode or RotationSpeed as controls
|
|
11
|
+
* on a HeaterCooler service (it does on a fan service), leaving those DPs unreachable on
|
|
12
|
+
* an air conditioner that has no fan mode.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
const SWITCH_UUID = 'Switch';
|
|
16
|
+
const FANV2_UUID = 'Fanv2';
|
|
17
|
+
const HUMIDIFIER_UUID = 'HumidifierDehumidifier';
|
|
18
|
+
|
|
19
|
+
interface FakeService {
|
|
20
|
+
UUID: string;
|
|
21
|
+
displayName?: string;
|
|
22
|
+
subtype?: string;
|
|
23
|
+
characteristics: Record<string, unknown>;
|
|
24
|
+
handlers: Record<string, { get?: () => unknown; set?: (v: unknown) => unknown }>;
|
|
25
|
+
getCharacteristic: (c: unknown) => unknown;
|
|
26
|
+
setCharacteristic: (c: unknown, v: unknown) => FakeService;
|
|
27
|
+
updateCharacteristic?: (c: unknown, v: unknown) => FakeService;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** Minimal service/accessory doubles: enough to observe what gets published. */
|
|
31
|
+
function makeService(uuid: string, displayName?: string, subtype?: string): FakeService {
|
|
32
|
+
const service: FakeService = {
|
|
33
|
+
UUID: uuid,
|
|
34
|
+
displayName,
|
|
35
|
+
subtype,
|
|
36
|
+
characteristics: {},
|
|
37
|
+
handlers: {},
|
|
38
|
+
getCharacteristic(characteristic: any) {
|
|
39
|
+
const key = String(characteristic?.name ?? characteristic);
|
|
40
|
+
service.handlers[key] = service.handlers[key] || {};
|
|
41
|
+
const chain: any = {
|
|
42
|
+
onGet: (fn: any) => { service.handlers[key].get = fn; return chain; },
|
|
43
|
+
onSet: (fn: any) => { service.handlers[key].set = fn; return chain; },
|
|
44
|
+
updateValue: () => chain,
|
|
45
|
+
setProps: () => chain,
|
|
46
|
+
};
|
|
47
|
+
return chain;
|
|
48
|
+
},
|
|
49
|
+
setCharacteristic(characteristic: any, value: unknown) {
|
|
50
|
+
service.characteristics[String(characteristic?.name ?? characteristic)] = value;
|
|
51
|
+
return service;
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
return service;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function makeAccessory() {
|
|
58
|
+
const services: FakeService[] = [];
|
|
59
|
+
return {
|
|
60
|
+
services,
|
|
61
|
+
context: { deviceID: 'dev' },
|
|
62
|
+
displayName: 'AC',
|
|
63
|
+
getService: (type: any) => services.find(s => s.UUID === (type?.UUID ?? type) && !s.subtype),
|
|
64
|
+
getServiceById: (type: any, subtype: string) =>
|
|
65
|
+
services.find(s => s.UUID === (type?.UUID ?? type) && s.subtype === subtype),
|
|
66
|
+
addService: (type: any, displayName?: string, subtype?: string) => {
|
|
67
|
+
const svc = makeService(type?.UUID ?? type, displayName, subtype);
|
|
68
|
+
services.push(svc);
|
|
69
|
+
return svc;
|
|
70
|
+
},
|
|
71
|
+
removeService: (svc: FakeService) => {
|
|
72
|
+
const i = services.indexOf(svc);
|
|
73
|
+
if (i >= 0) {
|
|
74
|
+
services.splice(i, 1);
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Build an accessory instance without running the real constructor, then drive only
|
|
82
|
+
* the methods under test. Keeps the test focused on which services get published.
|
|
83
|
+
*/
|
|
84
|
+
function buildAccessory(opts: {
|
|
85
|
+
swingCodes?: string[];
|
|
86
|
+
modeRange?: string[];
|
|
87
|
+
speedCode?: string | null;
|
|
88
|
+
statuses?: Record<string, unknown>;
|
|
89
|
+
}) {
|
|
90
|
+
const { swingCodes = [], modeRange = ['cold', 'heat', 'auto'], speedCode = 'fan_speed_enum', statuses = {} } = opts;
|
|
91
|
+
|
|
92
|
+
const accessory = makeAccessory();
|
|
93
|
+
const schemas: Record<string, any> = {
|
|
94
|
+
switch: { code: 'switch', property: {} },
|
|
95
|
+
mode: { code: 'mode', property: { range: modeRange } },
|
|
96
|
+
};
|
|
97
|
+
for (const code of swingCodes) {
|
|
98
|
+
schemas[code] = { code, property: {} };
|
|
99
|
+
}
|
|
100
|
+
if (speedCode) {
|
|
101
|
+
schemas[speedCode] = { code: speedCode, property: { range: ['level_auto', 'level_1', 'level_2'] } };
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const sent: Array<Array<{ code: string; value: unknown }>> = [];
|
|
105
|
+
|
|
106
|
+
// The real constructor needs a platform, a homebridge API and a device; assembling
|
|
107
|
+
// the few members these two methods touch keeps the test focused on which services
|
|
108
|
+
// get published. Several of them are readonly, hence the single Object.assign.
|
|
109
|
+
const ac: any = Object.assign(Object.create(AirConditionerAccessory.prototype), {
|
|
110
|
+
accessory,
|
|
111
|
+
Service: {
|
|
112
|
+
Switch: { UUID: SWITCH_UUID },
|
|
113
|
+
Fanv2: { UUID: FANV2_UUID },
|
|
114
|
+
HumidifierDehumidifier: { UUID: HUMIDIFIER_UUID },
|
|
115
|
+
},
|
|
116
|
+
Characteristic: {
|
|
117
|
+
On: { name: 'On' },
|
|
118
|
+
Active: { name: 'Active', ACTIVE: 1, INACTIVE: 0 },
|
|
119
|
+
ConfiguredName: { name: 'ConfiguredName' },
|
|
120
|
+
RotationSpeed: { name: 'RotationSpeed' },
|
|
121
|
+
},
|
|
122
|
+
log: { debug: jest.fn(), info: jest.fn(), warn: jest.fn(), error: jest.fn() },
|
|
123
|
+
getSchema: (...codes: string[]) => codes.map(c => schemas[c]).find(Boolean),
|
|
124
|
+
getStatus: (code: string) => (code in statuses ? { code, value: statuses[code] } : undefined),
|
|
125
|
+
sendCommands: jest.fn(async (commands: any) => { sent.push(commands); }),
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
return { ac, accessory, sent };
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
describe('AirConditionerAccessory swing switches', () => {
|
|
132
|
+
test('publishes one switch per reported axis, with a name', () => {
|
|
133
|
+
const { ac, accessory } = buildAccessory({ swingCodes: ['switch_vertical', 'switch_horizontal'] });
|
|
134
|
+
ac.configureSwingSwitches();
|
|
135
|
+
|
|
136
|
+
const switches = accessory.services.filter(s => s.UUID === SWITCH_UUID);
|
|
137
|
+
expect(switches.map(s => s.subtype)).toEqual(['swing-switch_vertical', 'swing-switch_horizontal']);
|
|
138
|
+
// Without ConfiguredName the Home app shows both tiles under the accessory name.
|
|
139
|
+
expect(switches.map(s => s.characteristics.ConfiguredName)).toEqual(['Vertical Swing', 'Horizontal Swing']);
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
test('publishes nothing when the device reports no swing DP', () => {
|
|
143
|
+
const { ac, accessory } = buildAccessory({ swingCodes: [] });
|
|
144
|
+
ac.configureSwingSwitches();
|
|
145
|
+
|
|
146
|
+
expect(accessory.services.filter(s => s.UUID === SWITCH_UUID)).toHaveLength(0);
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
test('only the axes the device reports get a switch', () => {
|
|
150
|
+
const { ac, accessory } = buildAccessory({ swingCodes: ['switch_vertical'] });
|
|
151
|
+
ac.configureSwingSwitches();
|
|
152
|
+
|
|
153
|
+
const switches = accessory.services.filter(s => s.UUID === SWITCH_UUID);
|
|
154
|
+
expect(switches).toHaveLength(1);
|
|
155
|
+
expect(switches[0].subtype).toBe('swing-switch_vertical');
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
test('reads and writes the matching DP', async () => {
|
|
159
|
+
const { ac, accessory, sent } = buildAccessory({
|
|
160
|
+
swingCodes: ['switch_vertical'],
|
|
161
|
+
statuses: { switch_vertical: true },
|
|
162
|
+
});
|
|
163
|
+
ac.configureSwingSwitches();
|
|
164
|
+
|
|
165
|
+
const svc = accessory.services.find(s => s.subtype === 'swing-switch_vertical')!;
|
|
166
|
+
expect(svc.handlers.On.get!()).toBe(true);
|
|
167
|
+
|
|
168
|
+
await svc.handlers.On.set!(false);
|
|
169
|
+
expect(sent).toEqual([[{ code: 'switch_vertical', value: false }]]);
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
test('drops a switch when the device stops reporting that axis', () => {
|
|
173
|
+
const { ac, accessory } = buildAccessory({ swingCodes: ['switch_vertical', 'switch_horizontal'] });
|
|
174
|
+
ac.configureSwingSwitches();
|
|
175
|
+
expect(accessory.services.filter(s => s.UUID === SWITCH_UUID)).toHaveLength(2);
|
|
176
|
+
|
|
177
|
+
// Same accessory, but the device now reports only the vertical louvre
|
|
178
|
+
const reduced = buildAccessory({ swingCodes: ['switch_vertical'] });
|
|
179
|
+
reduced.accessory.services.push(...accessory.services);
|
|
180
|
+
reduced.ac.configureSwingSwitches();
|
|
181
|
+
|
|
182
|
+
const remaining = reduced.accessory.services.filter(s => s.UUID === SWITCH_UUID);
|
|
183
|
+
expect(remaining.map(s => s.subtype)).toEqual(['swing-switch_vertical']);
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
describe('AirConditionerAccessory fan-speed tile', () => {
|
|
188
|
+
test('publishes a named Fanv2 when the device has no fan mode', () => {
|
|
189
|
+
const { ac, accessory } = buildAccessory({ modeRange: ['cold', 'heat', 'auto'] });
|
|
190
|
+
ac.configureFanSpeedTile();
|
|
191
|
+
|
|
192
|
+
const fans = accessory.services.filter(s => s.UUID === FANV2_UUID);
|
|
193
|
+
expect(fans).toHaveLength(1);
|
|
194
|
+
expect(fans[0].subtype).toBe('fan-speed');
|
|
195
|
+
expect(fans[0].characteristics.ConfiguredName).toBe('Fan Speed');
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
test('publishes nothing when the device already has a fan mode', () => {
|
|
199
|
+
// configureFan() already provides a Fanv2 with RotationSpeed in that case.
|
|
200
|
+
const { ac, accessory } = buildAccessory({ modeRange: ['cold', 'fan', 'auto'] });
|
|
201
|
+
ac.configureFanSpeedTile();
|
|
202
|
+
|
|
203
|
+
expect(accessory.services.filter(s => s.UUID === FANV2_UUID)).toHaveLength(0);
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
test('publishes nothing when the device reports no fan-speed DP', () => {
|
|
207
|
+
const { ac, accessory } = buildAccessory({ speedCode: null });
|
|
208
|
+
ac.configureFanSpeedTile();
|
|
209
|
+
|
|
210
|
+
expect(accessory.services.filter(s => s.UUID === FANV2_UUID)).toHaveLength(0);
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
test('Active drives the power DP and never sends a mode change', async () => {
|
|
214
|
+
// Sending a mode alongside the speed is what made units flip into fan mode when
|
|
215
|
+
// the slider moved.
|
|
216
|
+
const { ac, accessory, sent } = buildAccessory({ statuses: { switch: false } });
|
|
217
|
+
ac.configureFanSpeedTile();
|
|
218
|
+
|
|
219
|
+
const fan = accessory.services.find(s => s.subtype === 'fan-speed')!;
|
|
220
|
+
expect(fan.handlers.Active.get!()).toBe(0);
|
|
221
|
+
|
|
222
|
+
await fan.handlers.Active.set!(1);
|
|
223
|
+
expect(sent).toEqual([[{ code: 'switch', value: true }]]);
|
|
224
|
+
expect(JSON.stringify(sent)).not.toContain('mode');
|
|
225
|
+
});
|
|
226
|
+
});
|
|
@@ -133,13 +133,20 @@ const createMockPlatform = (): any => {
|
|
|
133
133
|
};
|
|
134
134
|
};
|
|
135
135
|
|
|
136
|
+
// Services created with a subtype, keyed as `${serviceUUID}:${subtype}`
|
|
137
|
+
const subtypeServices = new Map<string, any>();
|
|
138
|
+
|
|
136
139
|
// Create mock accessory
|
|
137
140
|
const createMockAccessory = (): any => ({
|
|
138
141
|
context: { deviceID: 'test-device-001' },
|
|
139
142
|
displayName: 'Test Air Conditioner',
|
|
140
143
|
services: [],
|
|
141
144
|
getService: jest.fn(),
|
|
145
|
+
// Real PlatformAccessory exposes these too; services with a subtype are looked up
|
|
146
|
+
// and removed through them.
|
|
147
|
+
getServiceById: jest.fn(),
|
|
142
148
|
addService: jest.fn(),
|
|
149
|
+
removeService: jest.fn(),
|
|
143
150
|
});
|
|
144
151
|
|
|
145
152
|
const createMockCharacteristic = () => {
|
|
@@ -234,6 +241,9 @@ describe('AirConditionerAccessory', () => {
|
|
|
234
241
|
'Battery': mockBatteryService,
|
|
235
242
|
};
|
|
236
243
|
|
|
244
|
+
// Tracks services created with a subtype, so getServiceById can resolve them
|
|
245
|
+
subtypeServices.clear();
|
|
246
|
+
|
|
237
247
|
// Both getService and addService should return the same mock services
|
|
238
248
|
accessory.getService.mockImplementation((serviceType: any) => {
|
|
239
249
|
const serviceName = typeof serviceType === 'string' ? serviceType : serviceType?.UUID;
|
|
@@ -242,7 +252,25 @@ describe('AirConditionerAccessory', () => {
|
|
|
242
252
|
|
|
243
253
|
accessory.addService.mockImplementation((serviceType: any, ...args: any[]) => {
|
|
244
254
|
const serviceName = typeof serviceType === 'string' ? serviceType : serviceType?.UUID;
|
|
245
|
-
|
|
255
|
+
const created = serviceMap[serviceName] || mockAccessoryInformationService;
|
|
256
|
+
// args = [displayName, subtype]; remember the subtype so getServiceById finds it
|
|
257
|
+
if (args.length > 1) {
|
|
258
|
+
subtypeServices.set(`${serviceName}:${args[1]}`, created);
|
|
259
|
+
}
|
|
260
|
+
return created;
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
accessory.getServiceById.mockImplementation((serviceType: any, subtype: string) => {
|
|
264
|
+
const serviceName = typeof serviceType === 'string' ? serviceType : serviceType?.UUID;
|
|
265
|
+
return subtypeServices.get(`${serviceName}:${subtype}`);
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
accessory.removeService.mockImplementation((service: any) => {
|
|
269
|
+
for (const [key, value] of subtypeServices.entries()) {
|
|
270
|
+
if (value === service) {
|
|
271
|
+
subtypeServices.delete(key);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
246
274
|
});
|
|
247
275
|
|
|
248
276
|
// Mock characteristic getters
|