matterbridge-iotas 1.2.0 → 1.2.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.2.2](https://github.com/mezaugusto/matterbridge-iotas/compare/v1.2.1...v1.2.2) (2026-04-13)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * :bug: fix thermostat (and all devices) setAttribute errors ([#24](https://github.com/mezaugusto/matterbridge-iotas/issues/24)) ([59cfdab](https://github.com/mezaugusto/matterbridge-iotas/commit/59cfdab8171fa685fda28fe44dffdbc887f3de5a))
9
+
10
+ ## [1.2.1](https://github.com/mezaugusto/matterbridge-iotas/compare/v1.2.0...v1.2.1) (2026-04-13)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * :bug: Fix child devices not working ([#22](https://github.com/mezaugusto/matterbridge-iotas/issues/22)) ([f315469](https://github.com/mezaugusto/matterbridge-iotas/commit/f3154695a0e32cc53b8dd61d10b110784e2413a4))
16
+
3
17
  ## [1.2.0](https://github.com/mezaugusto/matterbridge-iotas/compare/v1.1.6...v1.2.0) (2026-04-13)
4
18
 
5
19
 
@@ -1,6 +1,6 @@
1
1
  import { type Device } from 'iotas-ts';
2
2
  import type { DeviceFactoryContext, EndpointResult } from './devices/types.js';
3
3
  /**
4
- * Main factory function - creates appropriate endpoint based on device category.
5
- */
6
- export declare function createEndpointForDevice(device: Device, ctx: DeviceFactoryContext): EndpointResult | null;
4
+ * Main factory function - creates appropriate endpoint(s) based on device category.
5
+ \ */
6
+ export declare function createEndpointForDevice(device: Device, ctx: DeviceFactoryContext): EndpointResult[];
@@ -43,25 +43,33 @@ const featureFallbacks = [
43
43
  { category: FeatureCategory.Motion, handler: createOccupancySensor },
44
44
  ];
45
45
  /**
46
- * Main factory function - creates appropriate endpoint based on device category.
47
- */
46
+ * Main factory function - creates appropriate endpoint(s) based on device category.
47
+ \ */
48
48
  export function createEndpointForDevice(device, ctx) {
49
49
  if (!device.paired) {
50
50
  ctx.log.debug(`Skipping unpaired device: ${device.name}`);
51
- return null;
51
+ return [];
52
52
  }
53
53
  if (isDeviceCategory(device.category)) {
54
54
  const handler = categoryHandlers.get(device.category);
55
55
  if (handler) {
56
- return handler(device, ctx);
56
+ const result = handler(device, ctx);
57
+ if (!result) {
58
+ return [];
59
+ }
60
+ return Array.isArray(result) ? result : [result];
57
61
  }
58
62
  }
59
63
  for (const { category, handler: fallbackHandler } of featureFallbacks) {
60
64
  if (device.features.some((f) => f.featureTypeCategory === category)) {
61
- return fallbackHandler(device, ctx);
65
+ const result = fallbackHandler(device, ctx);
66
+ if (!result) {
67
+ return [];
68
+ }
69
+ return Array.isArray(result) ? result : [result];
62
70
  }
63
71
  }
64
72
  ctx.log.warn(`Unsupported device category: ${device.category} for device ${device.name}`);
65
- return null;
73
+ return [];
66
74
  }
67
75
  //# sourceMappingURL=deviceFactory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deviceFactory.js","sourceRoot":"","sources":["../../src/deviceFactory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deviceFactory.js","sourceRoot":"","sources":["../../src/deviceFactory.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ export function addOccupancyChild(device, result, ctx) {
8
8
  return result;
9
9
  }
10
10
  const occupied = (motionFeature.value ?? 0) === 1;
11
- result.endpoint
11
+ const occupancyChild = result.endpoint
12
12
  .addChildDeviceType('Occupancy', occupancySensor)
13
13
  .createDefaultOccupancySensingClusterServer(occupied)
14
14
  .addRequiredClusterServers();
@@ -18,7 +18,7 @@ export function addOccupancyChild(device, result, ctx) {
18
18
  featureIds: [...result.featureIds, motionFeature.id],
19
19
  updateAttribute(featureId, value) {
20
20
  if (featureId === motionFeature.id) {
21
- result.endpoint.setAttribute(OccupancySensing.Cluster.id, 'occupancy', { occupied: value === 1 });
21
+ occupancyChild.setAttribute(OccupancySensing.Cluster.id, 'occupancy', { occupied: value === 1 });
22
22
  }
23
23
  else {
24
24
  originalUpdate(featureId, value);
@@ -1 +1 @@
1
- {"version":3,"file":"motionSwitch.js","sourceRoot":"","sources":["../../../src/devices/motionSwitch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAe,MAAM,UAAU,CAAC;AAI/E,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,MAAsB,EAAE,GAAyB;IACjG,MAAM,aAAa,GAAG,qBAAqB,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAE5E,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,IAAI,kDAAkD,CAAC,CAAC;QACvF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;IAElD,MAAM,CAAC,QAAQ;SACZ,kBAAkB,CAAC,WAAW,EAAE,eAAe,CAAC;SAChD,0CAA0C,CAAC,QAAQ,CAAC;SACpD,yBAAyB,EAAE,CAAC;IAE/B,MAAM,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAE3D,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,UAAU,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC;QACpD,eAAe,CAAC,SAAS,EAAE,KAAK;YAC9B,IAAI,SAAS,KAAK,aAAa,CAAC,EAAE,EAAE,CAAC;gBACnC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;YACpG,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"motionSwitch.js","sourceRoot":"","sources":["../../../src/devices/motionSwitch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAe,MAAM,UAAU,CAAC;AAI/E,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,MAAsB,EAAE,GAAyB;IACjG,MAAM,aAAa,GAAG,qBAAqB,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IAE5E,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,IAAI,kDAAkD,CAAC,CAAC;QACvF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;IAElD,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ;SACnC,kBAAkB,CAAC,WAAW,EAAE,eAAe,CAAC;SAChD,0CAA0C,CAAC,QAAQ,CAAC;SACpD,yBAAyB,EAAE,CAAC;IAE/B,MAAM,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAE3D,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,UAAU,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC;QACpD,eAAe,CAAC,SAAS,EAAE,KAAK;YAC9B,IAAI,SAAS,KAAK,aAAa,CAAC,EAAE,EAAE,CAAC;gBACnC,cAAc,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;YACnG,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -12,4 +12,10 @@ export declare function iotasModeToSystemMode(iotasMode: number): Thermostat.Sys
12
12
  * Matter: Off=0, Low=1, Medium=2, High=3, On=4, Auto=5
13
13
  */
14
14
  export declare function iotasFanModeToMatter(iotasMode: number): FanControl.FanMode;
15
- export declare function createThermostat(device: Device, ctx: DeviceFactoryContext): EndpointResult | null;
15
+ /**
16
+ * Create endpoints for a thermostat device.
17
+ * Returns an array: the thermostat itself, plus a separate fan endpoint if present.
18
+ * Humidity is a child device type on the thermostat (matches Matter composed device pattern).
19
+ * Fan is a separate top-level endpoint (required to avoid InvalidAction errors).
20
+ */
21
+ export declare function createThermostat(device: Device, ctx: DeviceFactoryContext): EndpointResult[];
@@ -1,7 +1,8 @@
1
- import { fanDevice, humiditySensor, thermostatDevice } from 'matterbridge';
1
+ import { fanDevice, humiditySensor, MatterbridgeEndpoint, thermostatDevice } from 'matterbridge';
2
2
  import { FanControl, RelativeHumidityMeasurement, Thermostat } from 'matterbridge/matter/clusters';
3
- import { FeatureCategory, FanMode, ThermostatMode, findFeatureByCategory, DEFAULT_CURRENT_TEMPERATURE_F, DEFAULT_HEAT_SETPOINT_F, DEFAULT_COOL_SETPOINT_F, } from 'iotas-ts';
4
- import { bridgedNode, createBridgedEndpoint, fromMatterCentiCelsius, multiFeatureResult, requireFeature, toCelsius, toMatterCentiCelsius, toMatterHumidity, } from './helpers.js';
3
+ import { FeatureCategory, FanMode, ThermostatMode, findFeatureByCategory, getManufacturer, getModel, getSerialNumber, DEFAULT_CURRENT_TEMPERATURE_F, DEFAULT_HEAT_SETPOINT_F, DEFAULT_COOL_SETPOINT_F, } from 'iotas-ts';
4
+ import { VENDOR_ID } from './types.js';
5
+ import { bridgedNode, createBridgedEndpoint, fromMatterCentiCelsius, multiFeatureResult, requireFeature, singleFeatureResult, toCelsius, toMatterCentiCelsius, toMatterHumidity, } from './helpers.js';
5
6
  /**
6
7
  * Map IOTAS thermostat mode values to Matter SystemMode.
7
8
  * ThermostatMode enum values match IOTAS indices: 0=Off, 1=Heat, 2=Cool, 3=EmergencyHeat, 4=Auto
@@ -67,6 +68,32 @@ function matterFanModeToIotas(matterMode) {
67
68
  return FanMode.AutoLow;
68
69
  }
69
70
  }
71
+ /**
72
+ * Create a standalone fan endpoint for a thermostat device.
73
+ * Fan must be a separate top-level endpoint — adding it as a child device type
74
+ * on the thermostat causes InvalidAction(128) during Matter subscriptions.
75
+ */
76
+ function createFanEndpoint(device, ctx, fanModeFeature) {
77
+ const matterFanMode = iotasFanModeToMatter(fanModeFeature.value ?? 0);
78
+ const fanEndpoint = new MatterbridgeEndpoint([fanDevice, bridgedNode], { id: `iotas-${device.id}-fan` }, ctx.debug)
79
+ .createDefaultIdentifyClusterServer()
80
+ .createDefaultBridgedDeviceBasicInformationClusterServer(`${device.name} Fan`, `${getSerialNumber(device)}-fan`, VENDOR_ID, getManufacturer(device), getModel(device))
81
+ .createDefaultFanControlClusterServer(matterFanMode)
82
+ .addRequiredClusterServers();
83
+ fanEndpoint.subscribeAttribute(FanControl.Cluster.id, 'fanMode', (newValue) => {
84
+ const iotasMode = matterFanModeToIotas(newValue);
85
+ ctx.onFeatureUpdate(fanModeFeature.id, iotasMode);
86
+ });
87
+ return singleFeatureResult(fanEndpoint, fanModeFeature.id, (value) => {
88
+ fanEndpoint.setAttribute(FanControl.Cluster.id, 'fanMode', iotasFanModeToMatter(value));
89
+ });
90
+ }
91
+ /**
92
+ * Create endpoints for a thermostat device.
93
+ * Returns an array: the thermostat itself, plus a separate fan endpoint if present.
94
+ * Humidity is a child device type on the thermostat (matches Matter composed device pattern).
95
+ * Fan is a separate top-level endpoint (required to avoid InvalidAction errors).
96
+ */
70
97
  export function createThermostat(device, ctx) {
71
98
  const tempFeature = requireFeature(device, FeatureCategory.CurrentTemperature, ctx, 'thermostat');
72
99
  const modeFeature = findFeatureByCategory(device, FeatureCategory.ThermostatMode);
@@ -75,7 +102,7 @@ export function createThermostat(device, ctx) {
75
102
  const humidityFeature = findFeatureByCategory(device, FeatureCategory.Humidity);
76
103
  const fanModeFeature = findFeatureByCategory(device, FeatureCategory.FanMode);
77
104
  if (!tempFeature) {
78
- return null;
105
+ return [];
79
106
  }
80
107
  const currentTempC = toCelsius(tempFeature.value ?? DEFAULT_CURRENT_TEMPERATURE_F);
81
108
  const heatSetpointC = toCelsius(heatSetpointFeature?.value ?? DEFAULT_HEAT_SETPOINT_F);
@@ -83,20 +110,14 @@ export function createThermostat(device, ctx) {
83
110
  const endpoint = createBridgedEndpoint([thermostatDevice, bridgedNode], device, ctx)
84
111
  .createDefaultThermostatClusterServer(currentTempC, heatSetpointC, coolSetpointC)
85
112
  .addRequiredClusterServers();
113
+ let humidityChild;
86
114
  if (humidityFeature) {
87
115
  const humidity = toMatterHumidity(humidityFeature.value ?? 0);
88
- endpoint
116
+ humidityChild = endpoint
89
117
  .addChildDeviceType('Humidity', humiditySensor)
90
118
  .createDefaultRelativeHumidityMeasurementClusterServer(humidity)
91
119
  .addRequiredClusterServers();
92
120
  }
93
- if (fanModeFeature) {
94
- const matterFanMode = iotasFanModeToMatter(fanModeFeature.value ?? 0);
95
- endpoint
96
- .addChildDeviceType('Fan', fanDevice)
97
- .createDefaultFanControlClusterServer(matterFanMode)
98
- .addRequiredClusterServers();
99
- }
100
121
  if (modeFeature) {
101
122
  endpoint.subscribeAttribute(Thermostat.Cluster.id, 'systemMode', (newValue) => {
102
123
  const iotasMode = systemModeToIotasMode(newValue);
@@ -115,12 +136,6 @@ export function createThermostat(device, ctx) {
115
136
  ctx.onFeatureUpdate(coolSetpointFeature.id, fahrenheit);
116
137
  });
117
138
  }
118
- if (fanModeFeature) {
119
- endpoint.subscribeAttribute(FanControl.Cluster.id, 'fanMode', (newValue) => {
120
- const iotasMode = matterFanModeToIotas(newValue);
121
- ctx.onFeatureUpdate(fanModeFeature.id, iotasMode);
122
- });
123
- }
124
139
  const handlers = new Map([
125
140
  [
126
141
  tempFeature.id,
@@ -144,16 +159,15 @@ export function createThermostat(device, ctx) {
144
159
  endpoint.setAttribute(Thermostat.Cluster.id, 'occupiedCoolingSetpoint', toMatterCentiCelsius(value));
145
160
  });
146
161
  }
147
- if (humidityFeature) {
162
+ if (humidityFeature && humidityChild) {
148
163
  handlers.set(humidityFeature.id, (value) => {
149
- endpoint.setAttribute(RelativeHumidityMeasurement.Cluster.id, 'measuredValue', toMatterHumidity(value));
164
+ humidityChild.setAttribute(RelativeHumidityMeasurement.Cluster.id, 'measuredValue', toMatterHumidity(value));
150
165
  });
151
166
  }
167
+ const results = [multiFeatureResult(endpoint, handlers)];
152
168
  if (fanModeFeature) {
153
- handlers.set(fanModeFeature.id, (value) => {
154
- endpoint.setAttribute(FanControl.Cluster.id, 'fanMode', iotasFanModeToMatter(value));
155
- });
169
+ results.push(createFanEndpoint(device, ctx, fanModeFeature));
156
170
  }
157
- return multiFeatureResult(endpoint, handlers);
171
+ return results;
158
172
  }
159
173
  //# sourceMappingURL=thermostat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"thermostat.js","sourceRoot":"","sources":["../../../src/devices/thermostat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"thermostat.js","sourceRoot":"","sources":["../../../src/devices/thermostat.ts"],"names":[],"mappings":"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"}
@@ -13,12 +13,11 @@ export declare class IotasPlatform extends MatterbridgeDynamicPlatform {
13
13
  iotasClient: IotasClient;
14
14
  featureCache: FeatureCache;
15
15
  pollingInterval: number;
16
- private deviceMap;
16
+ private deviceEntries;
17
17
  constructor(matterbridge: PlatformMatterbridge, log: AnsiLogger, config: IotasPluginConfig);
18
18
  createSnapshotFilter(): SnapshotFilter | undefined;
19
19
  onStart(reason?: string): Promise<void>;
20
20
  onConfigure(): Promise<void>;
21
21
  onShutdown(reason?: string): Promise<void>;
22
22
  private discoverDevices;
23
- private refreshStates;
24
23
  }
@@ -8,7 +8,7 @@ export class IotasPlatform extends MatterbridgeDynamicPlatform {
8
8
  iotasClient;
9
9
  featureCache;
10
10
  pollingInterval;
11
- deviceMap = new Map();
11
+ deviceEntries = [];
12
12
  constructor(matterbridge, log, config) {
13
13
  super(matterbridge, log, config);
14
14
  if (!config.username || !config.password) {
@@ -41,7 +41,7 @@ export class IotasPlatform extends MatterbridgeDynamicPlatform {
41
41
  this.featureCache.seed(rooms);
42
42
  await this.discoverDevices(rooms);
43
43
  this.featureCache.start();
44
- this.log.info(`Discovered ${this.deviceMap.size} device(s)`);
44
+ this.log.info(`Discovered ${this.deviceEntries.length} endpoint(s)`);
45
45
  }
46
46
  catch (error) {
47
47
  this.log.error('Failed to start IOTAS platform:', error);
@@ -51,13 +51,6 @@ export class IotasPlatform extends MatterbridgeDynamicPlatform {
51
51
  async onConfigure() {
52
52
  await super.onConfigure();
53
53
  this.log.info('Configuring IOTAS platform');
54
- try {
55
- const rooms = await this.iotasClient.getRooms();
56
- this.refreshStates(rooms);
57
- }
58
- catch (error) {
59
- this.log.warn('Failed to refresh device states on configure:', error);
60
- }
61
54
  }
62
55
  async onShutdown(reason) {
63
56
  await super.onShutdown(reason);
@@ -77,40 +70,20 @@ export class IotasPlatform extends MatterbridgeDynamicPlatform {
77
70
  };
78
71
  for (const room of rooms) {
79
72
  for (const device of room.devices) {
80
- const result = createEndpointForDevice(device, ctx);
81
- if (!result) {
82
- continue;
83
- }
84
- await this.registerDevice(result.endpoint);
85
- // Subscribe to feature changes via the cache
86
- const unsubscribe = this.featureCache.subscribe(result.featureIds.map(String), (changed) => {
87
- for (const [fid, value] of changed) {
88
- result.updateAttribute(Number(fid), value);
89
- }
90
- });
91
- this.deviceMap.set(device.id, {
92
- endpoint: result.endpoint,
93
- updateAttribute: result.updateAttribute,
94
- unsubscribe,
95
- });
96
- this.log.info(`Registered device: ${device.name} (${device.category})`);
97
- }
98
- }
99
- }
100
- refreshStates(rooms) {
101
- for (const room of rooms) {
102
- for (const device of room.devices) {
103
- if (!device.paired) {
104
- continue;
105
- }
106
- const entry = this.deviceMap.get(device.id);
107
- if (!entry) {
108
- continue;
109
- }
110
- for (const feature of device.features) {
111
- if (feature.value !== undefined) {
112
- entry.updateAttribute(feature.id, feature.value);
113
- }
73
+ const results = createEndpointForDevice(device, ctx);
74
+ for (const result of results) {
75
+ await this.registerDevice(result.endpoint);
76
+ const unsubscribe = this.featureCache.subscribe(result.featureIds.map(String), (changed) => {
77
+ for (const [fid, value] of changed) {
78
+ result.updateAttribute(Number(fid), value);
79
+ }
80
+ });
81
+ this.deviceEntries.push({
82
+ endpoint: result.endpoint,
83
+ updateAttribute: result.updateAttribute,
84
+ unsubscribe,
85
+ });
86
+ this.log.info(`Registered endpoint: ${result.endpoint.id} (${device.name})`);
114
87
  }
115
88
  }
116
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,13 @@
1
1
  import { describe, it } from 'node:test';
2
2
  import assert from 'node:assert/strict';
3
3
  import { createEndpointForDevice } from '../src/deviceFactory.js';
4
- import { assertResult, makeCtx, makeDevice, makeFeature } from './devices/helpers.js';
4
+ import { assertResults, makeCtx, makeDevice, makeFeature } from './devices/helpers.js';
5
5
  describe('createEndpointForDevice (router)', () => {
6
6
  const ctx = makeCtx();
7
7
  it('should skip unpaired devices', () => {
8
8
  const device = makeDevice({ paired: false });
9
- assert.equal(createEndpointForDevice(device, ctx), null);
9
+ const results = createEndpointForDevice(device, ctx);
10
+ assert.deepEqual(results, []);
10
11
  });
11
12
  it('should route dimmer with Level to dimmable light', () => {
12
13
  const device = makeDevice({
@@ -16,77 +17,90 @@ describe('createEndpointForDevice (router)', () => {
16
17
  makeFeature({ id: 11, eventTypeName: 'Level', value: 0.5 }),
17
18
  ],
18
19
  });
19
- const result = assertResult(createEndpointForDevice(device, ctx));
20
- assert.ok(result.featureIds.includes(10));
21
- assert.ok(result.featureIds.includes(11));
20
+ const results = assertResults(createEndpointForDevice(device, ctx), 1);
21
+ assert.ok(results[0].featureIds.includes(10));
22
+ assert.ok(results[0].featureIds.includes(11));
22
23
  });
23
24
  it('should route dimmer without Level to on/off light when isLight', () => {
24
25
  const device = makeDevice({
25
26
  category: 'dimmer',
26
27
  features: [makeFeature({ id: 10, eventTypeName: 'OnOff', isLight: true, value: 1 })],
27
28
  });
28
- const result = assertResult(createEndpointForDevice(device, ctx));
29
- assert.ok(result.featureIds.includes(10));
29
+ const results = assertResults(createEndpointForDevice(device, ctx), 1);
30
+ assert.ok(results[0].featureIds.includes(10));
30
31
  });
31
32
  it('should route switch with isLight to on/off light', () => {
32
33
  const device = makeDevice({
33
34
  category: 'switch',
34
35
  features: [makeFeature({ id: 10, eventTypeName: 'OnOff', isLight: true, value: 0 })],
35
36
  });
36
- const result = createEndpointForDevice(device, ctx);
37
- assert.ok(result);
37
+ const results = createEndpointForDevice(device, ctx);
38
+ assert.equal(results.length, 1);
38
39
  });
39
40
  it('should route switch without isLight to outlet', () => {
40
41
  const device = makeDevice({
41
42
  category: 'switch',
42
43
  features: [makeFeature({ id: 10, eventTypeName: 'OnOff', isLight: false, value: 0 })],
43
44
  });
44
- const result = createEndpointForDevice(device, ctx);
45
- assert.ok(result);
45
+ const results = createEndpointForDevice(device, ctx);
46
+ assert.equal(results.length, 1);
46
47
  });
47
48
  it('should route lock category', () => {
48
49
  const device = makeDevice({
49
50
  category: 'lock',
50
51
  features: [makeFeature({ id: 20, featureTypeCategory: 'lock', value: 1 })],
51
52
  });
52
- const result = assertResult(createEndpointForDevice(device, ctx));
53
- assert.ok(result.featureIds.includes(20));
53
+ const results = assertResults(createEndpointForDevice(device, ctx), 1);
54
+ assert.ok(results[0].featureIds.includes(20));
54
55
  });
55
56
  it('should route thermostat category', () => {
56
57
  const device = makeDevice({
57
58
  category: 'thermostat',
58
59
  features: [makeFeature({ id: 30, featureTypeCategory: 'current_temperature', value: 72 })],
59
60
  });
60
- const result = assertResult(createEndpointForDevice(device, ctx));
61
- assert.ok(result.featureIds.includes(30));
61
+ const results = createEndpointForDevice(device, ctx);
62
+ assert.ok(results.length >= 1);
63
+ assert.ok(results[0].featureIds.includes(30));
64
+ });
65
+ it('should create multiple endpoints for thermostat with fan', () => {
66
+ const device = makeDevice({
67
+ category: 'thermostat',
68
+ features: [
69
+ makeFeature({ id: 30, featureTypeCategory: 'current_temperature', value: 72 }),
70
+ makeFeature({ id: 35, featureTypeCategory: 'fan_mode', eventTypeName: 'FanMode', value: 0 }),
71
+ ],
72
+ });
73
+ const results = assertResults(createEndpointForDevice(device, ctx), 2);
74
+ assert.ok(results[0].featureIds.includes(30));
75
+ assert.ok(results[1].featureIds.includes(35));
62
76
  });
63
77
  it('should route door category to contact sensor', () => {
64
78
  const device = makeDevice({
65
79
  category: 'door',
66
80
  features: [makeFeature({ id: 60, featureTypeCategory: 'door_state', value: 1 })],
67
81
  });
68
- const result = assertResult(createEndpointForDevice(device, ctx));
69
- assert.ok(result.featureIds.includes(60));
82
+ const results = assertResults(createEndpointForDevice(device, ctx), 1);
83
+ assert.ok(results[0].featureIds.includes(60));
70
84
  });
71
85
  it('should detect humidity sensor by feature category', () => {
72
86
  const device = makeDevice({
73
87
  category: 'sensor',
74
88
  features: [makeFeature({ id: 40, featureTypeCategory: 'humidity', value: 0.5 })],
75
89
  });
76
- const result = assertResult(createEndpointForDevice(device, ctx));
77
- assert.ok(result.featureIds.includes(40));
90
+ const results = assertResults(createEndpointForDevice(device, ctx), 1);
91
+ assert.ok(results[0].featureIds.includes(40));
78
92
  });
79
93
  it('should detect motion sensor by feature category', () => {
80
94
  const device = makeDevice({
81
95
  category: 'sensor',
82
96
  features: [makeFeature({ id: 50, featureTypeCategory: 'motion', value: 0 })],
83
97
  });
84
- const result = assertResult(createEndpointForDevice(device, ctx));
85
- assert.ok(result.featureIds.includes(50));
98
+ const results = assertResults(createEndpointForDevice(device, ctx), 1);
99
+ assert.ok(results[0].featureIds.includes(50));
86
100
  });
87
- it('should return null for unsupported category', () => {
101
+ it('should return empty array for unsupported category', () => {
88
102
  const device = makeDevice({ category: 'unknown', features: [] });
89
- assert.equal(createEndpointForDevice(device, ctx), null);
103
+ assert.deepEqual(createEndpointForDevice(device, ctx), []);
90
104
  });
91
105
  it('should prefer category handler over feature fallback', () => {
92
106
  const device = makeDevice({
@@ -96,10 +110,9 @@ describe('createEndpointForDevice (router)', () => {
96
110
  makeFeature({ id: 40, featureTypeCategory: 'humidity', value: 0.5 }),
97
111
  ],
98
112
  });
99
- const result = assertResult(createEndpointForDevice(device, ctx));
100
- assert.ok(result.featureIds.includes(60));
101
- // Should NOT include humidity feature (category handler wins)
102
- assert.ok(!result.featureIds.includes(40));
113
+ const results = assertResults(createEndpointForDevice(device, ctx), 1);
114
+ assert.ok(results[0].featureIds.includes(60));
115
+ assert.ok(!results[0].featureIds.includes(40));
103
116
  });
104
117
  it('should prefer humidity fallback over motion when both present', () => {
105
118
  const device = makeDevice({
@@ -109,8 +122,8 @@ describe('createEndpointForDevice (router)', () => {
109
122
  makeFeature({ id: 50, featureTypeCategory: 'motion', value: 0 }),
110
123
  ],
111
124
  });
112
- const result = assertResult(createEndpointForDevice(device, ctx));
113
- assert.ok(result.featureIds.includes(40));
125
+ const results = assertResults(createEndpointForDevice(device, ctx), 1);
126
+ assert.ok(results[0].featureIds.includes(40));
114
127
  });
115
128
  it('should use first matching feature when duplicates exist', () => {
116
129
  const device = makeDevice({
@@ -120,20 +133,20 @@ describe('createEndpointForDevice (router)', () => {
120
133
  makeFeature({ id: 11, eventTypeName: 'OnOff', isLight: true, value: 1 }),
121
134
  ],
122
135
  });
123
- const result = assertResult(createEndpointForDevice(device, ctx));
124
- assert.ok(result.featureIds.includes(10));
136
+ const results = assertResults(createEndpointForDevice(device, ctx), 1);
137
+ assert.ok(results[0].featureIds.includes(10));
125
138
  });
126
139
  it('should handle device with empty features for known category', () => {
127
140
  const device = makeDevice({ category: 'lock', features: [] });
128
- assert.equal(createEndpointForDevice(device, ctx), null);
141
+ assert.deepEqual(createEndpointForDevice(device, ctx), []);
129
142
  });
130
143
  it('should handle device with no value on features', () => {
131
144
  const device = makeDevice({
132
145
  category: 'switch',
133
146
  features: [makeFeature({ id: 10, eventTypeName: 'OnOff', isLight: false })],
134
147
  });
135
- const result = createEndpointForDevice(device, ctx);
136
- assert.ok(result);
148
+ const results = createEndpointForDevice(device, ctx);
149
+ assert.equal(results.length, 1);
137
150
  });
138
151
  it('should use serial number from device when long enough', () => {
139
152
  const device = makeDevice({
@@ -141,8 +154,8 @@ describe('createEndpointForDevice (router)', () => {
141
154
  serialNumber: 'ABC123',
142
155
  features: [makeFeature({ id: 10, eventTypeName: 'OnOff', isLight: true, value: 0 })],
143
156
  });
144
- const result = createEndpointForDevice(device, ctx);
145
- assert.ok(result);
157
+ const results = createEndpointForDevice(device, ctx);
158
+ assert.equal(results.length, 1);
146
159
  });
147
160
  it('should use manufacturer info from physicalDeviceDescription', () => {
148
161
  const device = makeDevice({
@@ -161,8 +174,8 @@ describe('createEndpointForDevice (router)', () => {
161
174
  },
162
175
  features: [makeFeature({ id: 10, eventTypeName: 'OnOff', isLight: false, value: 0 })],
163
176
  });
164
- const result = createEndpointForDevice(device, ctx);
165
- assert.ok(result);
177
+ const results = createEndpointForDevice(device, ctx);
178
+ assert.equal(results.length, 1);
166
179
  });
167
180
  });
168
181
  //# sourceMappingURL=deviceFactory.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deviceFactory.test.js","sourceRoot":"","sources":["../../test/deviceFactory.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deviceFactory.test.js","sourceRoot":"","sources":["../../test/deviceFactory.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEvF,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IAEtB,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACrD,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE;gBACR,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBACxE,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;aAC5D;SACF,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;SACrF,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;SACrF,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;SACtF,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;SAC3E,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;SAC3F,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACrD,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE;gBACR,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;gBAC9E,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;aAC7F;SACF,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;SACjF,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;SACjF,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;SAC7E,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACjE,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE,MAAM;YAChB,QAAQ,EAAE;gBACR,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBACpE,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;aACrE;SACF,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE;gBACR,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;gBACpE,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;aACjE;SACF,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE;gBACR,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBACxE,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;aACzE;SACF,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,aAAa,CAAC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9D,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;SAC5E,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE,QAAQ;YAClB,YAAY,EAAE,QAAQ;YACtB,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;SACrF,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,MAAM,GAAG,UAAU,CAAC;YACxB,QAAQ,EAAE,QAAQ;YAClB,yBAAyB,EAAE;gBACzB,EAAE,EAAE,CAAC;gBACL,IAAI,EAAE,WAAW;gBACjB,YAAY,EAAE,IAAI;gBAClB,KAAK,EAAE,QAAQ;gBACf,QAAQ,EAAE,QAAQ;gBAClB,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,KAAK;gBACf,iBAAiB,EAAE,KAAK;gBACxB,QAAQ,EAAE,IAAI;aACf;YACD,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;SACtF,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -13,6 +13,7 @@ export declare function makeLog(): AnsiLogger;
13
13
  export declare function suppressLogs(fn: () => void): void;
14
14
  /** Assert result is non-null and return it. */
15
15
  export declare function assertResult(result: EndpointResult | null): EndpointResult;
16
+ export declare function assertResults(results: EndpointResult[], expectedCount: number): EndpointResult[];
16
17
  export declare function makeCtx(overrides?: Partial<DeviceFactoryContext>): DeviceFactoryContext;
17
18
  export declare function makeFeature(overrides?: Partial<Feature>): Feature;
18
19
  export declare function makeDevice(overrides?: Partial<Device>): Device;
@@ -31,6 +31,14 @@ export function assertResult(result) {
31
31
  assert.equal(typeof result.updateAttribute, 'function', 'Expected updateAttribute function');
32
32
  return result;
33
33
  }
34
+ export function assertResults(results, expectedCount) {
35
+ assert.equal(results.length, expectedCount, `Expected ${expectedCount} result(s), got ${results.length}`);
36
+ for (const r of results) {
37
+ assert.ok(Array.isArray(r.featureIds), 'Expected featureIds array');
38
+ assert.equal(typeof r.updateAttribute, 'function', 'Expected updateAttribute function');
39
+ }
40
+ return results;
41
+ }
34
42
  export function makeCtx(overrides = {}) {
35
43
  return {
36
44
  log: makeLog(),
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../test/devices/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,OAAO,EAAE,UAAU,EAAY,MAAM,qBAAqB,CAAC;AAK3D,MAAM,UAAU,OAAO;IACrB,OAAO,IAAI,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,wBAAe,EAAE,CAAC,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,EAAc;IACzC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;IAC9B,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;IACvB,OAAO,CAAC,KAAK,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;IACzB,IAAI,CAAC;QACH,EAAE,EAAE,CAAC;IACP,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;QACtB,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,YAAY,CAAC,MAA6B;IACxD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IAC9C,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,2BAA2B,CAAC,CAAC;IACzE,MAAM,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,eAAe,EAAE,UAAU,EAAE,mCAAmC,CAAC,CAAC;IAC7F,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,YAA2C,EAAE;IACnE,OAAO;QACL,GAAG,EAAE,OAAO,EAAE;QACd,KAAK,EAAE,KAAK;QACZ,eAAe,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QAC/B,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,YAA8B,EAAE;IAC1D,OAAO;QACL,EAAE,EAAE,CAAC;QACL,MAAM,EAAE,CAAC;QACT,WAAW,EAAE,CAAC;QACd,eAAe,EAAE,MAAM;QACvB,mBAAmB,EAAE,MAAM;QAC3B,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,KAAK;QACd,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,YAA6B,EAAE;IACxD,OAAO;QACL,EAAE,EAAE,CAAC;QACL,IAAI,EAAE,CAAC;QACP,gBAAgB,EAAE,CAAC;QACnB,UAAU,EAAE,CAAC;QACb,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,EAAE;QACZ,GAAG,SAAS;KACb,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../test/devices/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,OAAO,EAAE,UAAU,EAAY,MAAM,qBAAqB,CAAC;AAK3D,MAAM,UAAU,OAAO;IACrB,OAAO,IAAI,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,wBAAe,EAAE,CAAC,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,EAAc;IACzC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;IAC9B,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;IACvB,OAAO,CAAC,KAAK,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;IACzB,IAAI,CAAC;QACH,EAAE,EAAE,CAAC;IACP,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;QACtB,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,YAAY,CAAC,MAA6B;IACxD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IAC9C,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,2BAA2B,CAAC,CAAC;IACzE,MAAM,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,eAAe,EAAE,UAAU,EAAE,mCAAmC,CAAC,CAAC;IAC7F,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAyB,EAAE,aAAqB;IAC5E,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,YAAY,aAAa,mBAAmB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1G,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,2BAA2B,CAAC,CAAC;QACpE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,eAAe,EAAE,UAAU,EAAE,mCAAmC,CAAC,CAAC;IAC1F,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,YAA2C,EAAE;IACnE,OAAO;QACL,GAAG,EAAE,OAAO,EAAE;QACd,KAAK,EAAE,KAAK;QACZ,eAAe,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;QAC/B,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,YAA8B,EAAE;IAC1D,OAAO;QACL,EAAE,EAAE,CAAC;QACL,MAAM,EAAE,CAAC;QACT,WAAW,EAAE,CAAC;QACd,eAAe,EAAE,MAAM;QACvB,mBAAmB,EAAE,MAAM;QAC3B,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,KAAK;QACd,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,YAA6B,EAAE;IACxD,OAAO;QACL,EAAE,EAAE,CAAC;QACL,IAAI,EAAE,CAAC;QACP,gBAAgB,EAAE,CAAC;QACnB,UAAU,EAAE,CAAC;QACb,IAAI,EAAE,aAAa;QACnB,QAAQ,EAAE,QAAQ;QAClB,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,EAAE;QACZ,GAAG,SAAS;KACb,CAAC;AACJ,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { describe, it } from 'node:test';
2
2
  import assert from 'node:assert/strict';
3
- import { assertResult, makeCtx, makeDevice, makeFeature, suppressLogs } from './helpers.js';
3
+ import { assertResults, makeCtx, makeDevice, makeFeature, suppressLogs } from './helpers.js';
4
4
  import { createEndpointForDevice } from '../../src/deviceFactory.js';
5
5
  describe('addOccupancyChild', () => {
6
6
  const ctx = makeCtx();
@@ -12,18 +12,18 @@ describe('addOccupancyChild', () => {
12
12
  makeFeature({ id: 50, featureTypeCategory: 'motion', value: 0 }),
13
13
  ],
14
14
  });
15
- const result = assertResult(createEndpointForDevice(device, ctx));
16
- assert.ok(result.featureIds.includes(10), 'should include onOff feature');
17
- assert.ok(result.featureIds.includes(50), 'should include motion feature');
15
+ const results = assertResults(createEndpointForDevice(device, ctx), 1);
16
+ assert.ok(results[0].featureIds.includes(10), 'should include onOff feature');
17
+ assert.ok(results[0].featureIds.includes(50), 'should include motion feature');
18
18
  });
19
19
  it('should work without motion feature (returns light only)', () => {
20
20
  const device = makeDevice({
21
21
  category: 'motion_switch',
22
22
  features: [makeFeature({ id: 10, eventTypeName: 'OnOff', isLight: true, value: 0 })],
23
23
  });
24
- const result = assertResult(createEndpointForDevice(device, ctx));
25
- assert.ok(result.featureIds.includes(10));
26
- assert.ok(!result.featureIds.includes(50), 'should not include motion feature');
24
+ const results = assertResults(createEndpointForDevice(device, ctx), 1);
25
+ assert.ok(results[0].featureIds.includes(10));
26
+ assert.ok(!results[0].featureIds.includes(50), 'should not include motion feature');
27
27
  });
28
28
  it('should create outlet with occupancy for non-light motion switch', () => {
29
29
  const device = makeDevice({
@@ -33,9 +33,9 @@ describe('addOccupancyChild', () => {
33
33
  makeFeature({ id: 50, featureTypeCategory: 'motion', value: 1 }),
34
34
  ],
35
35
  });
36
- const result = assertResult(createEndpointForDevice(device, ctx));
37
- assert.ok(result.featureIds.includes(10));
38
- assert.ok(result.featureIds.includes(50));
36
+ const results = assertResults(createEndpointForDevice(device, ctx), 1);
37
+ assert.ok(results[0].featureIds.includes(10));
38
+ assert.ok(results[0].featureIds.includes(50));
39
39
  });
40
40
  it('should delegate non-motion updates to original handler', () => {
41
41
  const device = makeDevice({
@@ -45,20 +45,19 @@ describe('addOccupancyChild', () => {
45
45
  makeFeature({ id: 50, featureTypeCategory: 'motion', value: 0 }),
46
46
  ],
47
47
  });
48
- const result = assertResult(createEndpointForDevice(device, ctx));
49
- // updateAttribute for onOff should not throw (delegates to original)
48
+ const results = assertResults(createEndpointForDevice(device, ctx), 1);
50
49
  suppressLogs(() => {
51
- result.updateAttribute(10, 0);
52
- result.updateAttribute(50, 1);
50
+ results[0].updateAttribute(10, 0);
51
+ results[0].updateAttribute(50, 1);
53
52
  });
54
53
  });
55
- it('should return null when switch has no OnOff feature', () => {
54
+ it('should return empty array when switch has no OnOff feature', () => {
56
55
  const device = makeDevice({
57
56
  category: 'motion_switch',
58
57
  features: [makeFeature({ id: 50, featureTypeCategory: 'motion', value: 0 })],
59
58
  });
60
- const result = createEndpointForDevice(device, ctx);
61
- assert.equal(result, null);
59
+ const results = createEndpointForDevice(device, ctx);
60
+ assert.deepEqual(results, []);
62
61
  });
63
62
  });
64
63
  //# sourceMappingURL=motionSwitch.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"motionSwitch.test.js","sourceRoot":"","sources":["../../../test/devices/motionSwitch.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"motionSwitch.test.js","sourceRoot":"","sources":["../../../test/devices/motionSwitch.test.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { describe, it } from 'node:test';
2
2
  import assert from 'node:assert/strict';
3
3
  import { FanControl, Thermostat } from 'matterbridge/matter/clusters';
4
4
  import { createThermostat, iotasModeToSystemMode, iotasFanModeToMatter } from '../../src/devices/thermostat.js';
5
- import { assertResult, makeCtx, makeDevice, makeFeature, suppressLogs } from './helpers.js';
5
+ import { assertResults, makeCtx, makeDevice, makeFeature, suppressLogs } from './helpers.js';
6
6
  describe('thermostat', () => {
7
7
  const ctx = makeCtx();
8
8
  it('should create a thermostat with temperature', () => {
@@ -10,8 +10,8 @@ describe('thermostat', () => {
10
10
  category: 'thermostat',
11
11
  features: [makeFeature({ id: 30, featureTypeCategory: 'current_temperature', value: 72 })],
12
12
  });
13
- const result = assertResult(createThermostat(device, ctx));
14
- assert.deepEqual(result.featureIds, [30]);
13
+ const results = assertResults(createThermostat(device, ctx), 1);
14
+ assert.deepEqual(results[0].featureIds, [30]);
15
15
  });
16
16
  it('should include setpoints and mode when present', () => {
17
17
  const device = makeDevice({
@@ -23,10 +23,10 @@ describe('thermostat', () => {
23
23
  makeFeature({ id: 33, featureTypeCategory: 'cool_set_point', value: 76 }),
24
24
  ],
25
25
  });
26
- const result = assertResult(createThermostat(device, ctx));
27
- assert.deepEqual(result.featureIds, [30, 31, 32, 33]);
26
+ const results = assertResults(createThermostat(device, ctx), 1);
27
+ assert.deepEqual(results[0].featureIds, [30, 31, 32, 33]);
28
28
  });
29
- it('should include humidity when present', () => {
29
+ it('should include humidity as child on thermostat endpoint', () => {
30
30
  const device = makeDevice({
31
31
  category: 'thermostat',
32
32
  features: [
@@ -34,10 +34,10 @@ describe('thermostat', () => {
34
34
  makeFeature({ id: 34, featureTypeCategory: 'humidity', value: 45 }),
35
35
  ],
36
36
  });
37
- const result = assertResult(createThermostat(device, ctx));
38
- assert.deepEqual(result.featureIds, [30, 34]);
37
+ const results = assertResults(createThermostat(device, ctx), 1);
38
+ assert.deepEqual(results[0].featureIds, [30, 34]);
39
39
  });
40
- it('should include fan mode when present', () => {
40
+ it('should create fan as separate endpoint', () => {
41
41
  const device = makeDevice({
42
42
  category: 'thermostat',
43
43
  features: [
@@ -45,10 +45,11 @@ describe('thermostat', () => {
45
45
  makeFeature({ id: 35, featureTypeCategory: 'fan_mode', eventTypeName: 'FanMode', value: 0 }),
46
46
  ],
47
47
  });
48
- const result = assertResult(createThermostat(device, ctx));
49
- assert.deepEqual(result.featureIds, [30, 35]);
48
+ const results = assertResults(createThermostat(device, ctx), 2);
49
+ assert.deepEqual(results[0].featureIds, [30]);
50
+ assert.deepEqual(results[1].featureIds, [35]);
50
51
  });
51
- it('should include all optional features together', () => {
52
+ it('should return all features split across thermostat and fan endpoints', () => {
52
53
  const device = makeDevice({
53
54
  category: 'thermostat',
54
55
  features: [
@@ -60,11 +61,13 @@ describe('thermostat', () => {
60
61
  makeFeature({ id: 35, featureTypeCategory: 'fan_mode', eventTypeName: 'FanMode', value: 0 }),
61
62
  ],
62
63
  });
63
- const result = assertResult(createThermostat(device, ctx));
64
- assert.deepEqual(result.featureIds, [30, 31, 32, 33, 34, 35]);
64
+ const results = assertResults(createThermostat(device, ctx), 2);
65
+ assert.deepEqual(results[0].featureIds, [30, 31, 32, 33, 34]);
66
+ assert.deepEqual(results[1].featureIds, [35]);
65
67
  });
66
- it('should return null when temperature feature is missing', () => {
67
- assert.equal(createThermostat(makeDevice({ features: [] }), ctx), null);
68
+ it('should return empty array when temperature feature is missing', () => {
69
+ const results = createThermostat(makeDevice({ features: [] }), ctx);
70
+ assert.deepEqual(results, []);
68
71
  });
69
72
  it('updateAttribute should not throw for tracked features', () => {
70
73
  const device = makeDevice({
@@ -78,15 +81,16 @@ describe('thermostat', () => {
78
81
  makeFeature({ id: 35, featureTypeCategory: 'fan_mode', eventTypeName: 'FanMode', value: 0 }),
79
82
  ],
80
83
  });
81
- const result = assertResult(createThermostat(device, ctx));
84
+ const results = assertResults(createThermostat(device, ctx), 2);
82
85
  suppressLogs(() => {
83
- assert.doesNotThrow(() => result.updateAttribute(30, 75));
84
- assert.doesNotThrow(() => result.updateAttribute(31, 2));
85
- assert.doesNotThrow(() => result.updateAttribute(32, 70));
86
- assert.doesNotThrow(() => result.updateAttribute(33, 78));
87
- assert.doesNotThrow(() => result.updateAttribute(34, 50));
88
- assert.doesNotThrow(() => result.updateAttribute(35, 1));
89
- assert.doesNotThrow(() => result.updateAttribute(999, 0));
86
+ assert.doesNotThrow(() => results[0].updateAttribute(30, 75));
87
+ assert.doesNotThrow(() => results[0].updateAttribute(31, 2));
88
+ assert.doesNotThrow(() => results[0].updateAttribute(32, 70));
89
+ assert.doesNotThrow(() => results[0].updateAttribute(33, 78));
90
+ assert.doesNotThrow(() => results[0].updateAttribute(34, 50));
91
+ assert.doesNotThrow(() => results[0].updateAttribute(999, 0));
92
+ assert.doesNotThrow(() => results[1].updateAttribute(35, 1));
93
+ assert.doesNotThrow(() => results[1].updateAttribute(999, 0));
90
94
  });
91
95
  });
92
96
  });
@@ -1 +1 @@
1
- {"version":3,"file":"thermostat.test.js","sourceRoot":"","sources":["../../../test/devices/thermostat.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"thermostat.test.js","sourceRoot":"","sources":["../../../test/devices/thermostat.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "matterbridge-iotas",
3
- "version": "1.2.0",
3
+ "version": "1.2.2",
4
4
  "description": "Matterbridge plugin for IOTAS smart home devices",
5
5
  "author": "Augusto Meza <mezaugusto@proton.me>",
6
6
  "license": "Apache-2.0",
@@ -54,7 +54,7 @@
54
54
  "printWidth": 120
55
55
  },
56
56
  "dependencies": {
57
- "iotas-ts": "^2.1.0"
57
+ "iotas-ts": "^2.1.1"
58
58
  },
59
59
  "devDependencies": {
60
60
  "@eslint/js": "^9.0.0",