matterbridge-iotas 1.2.1 → 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 +7 -0
- package/dist/src/deviceFactory.d.ts +3 -3
- package/dist/src/deviceFactory.js +14 -6
- package/dist/src/deviceFactory.js.map +1 -1
- package/dist/src/devices/thermostat.d.ts +7 -1
- package/dist/src/devices/thermostat.js +35 -23
- package/dist/src/devices/thermostat.js.map +1 -1
- package/dist/src/module.d.ts +1 -2
- package/dist/src/module.js +16 -43
- package/dist/src/module.js.map +1 -1
- package/dist/test/deviceFactory.test.js +51 -38
- package/dist/test/deviceFactory.test.js.map +1 -1
- package/dist/test/devices/helpers.d.ts +1 -0
- package/dist/test/devices/helpers.js +8 -0
- package/dist/test/devices/helpers.js.map +1 -1
- package/dist/test/devices/motionSwitch.test.js +16 -17
- package/dist/test/devices/motionSwitch.test.js.map +1 -1
- package/dist/test/devices/thermostat.test.js +28 -24
- package/dist/test/devices/thermostat.test.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
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
|
+
|
|
3
10
|
## [1.2.1](https://github.com/mezaugusto/matterbridge-iotas/compare/v1.2.0...v1.2.1) (2026-04-13)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -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
|
|
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
|
|
51
|
+
return [];
|
|
52
52
|
}
|
|
53
53
|
if (isDeviceCategory(device.category)) {
|
|
54
54
|
const handler = categoryHandlers.get(device.category);
|
|
55
55
|
if (handler) {
|
|
56
|
-
|
|
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
|
-
|
|
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
|
|
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":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAe,MAAM,UAAU,CAAC;AAEzG,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACxG,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAI9D,SAAS,YAAY,CAAC,MAAc,EAAE,GAAyB;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACvD,OAAO,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc,EAAE,GAAyB;IACnE,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,YAAY,CAAC,MAAc,EAAE,GAAyB;IAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC;IACtF,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAgC;IAC9D,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC;IACrC,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC;IACrC,CAAC,cAAc,CAAC,YAAY,EAAE,kBAAkB,CAAC;IACjD,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC;IACrC,CAAC,cAAc,CAAC,UAAU,EAAE,gBAAgB,CAAC;IAC7C,CAAC,cAAc,CAAC,IAAI,EAAE,mBAAmB,CAAC;CAC3C,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAiE;IACrF,EAAE,QAAQ,EAAE,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,oBAAoB,EAAE;IACrE,EAAE,QAAQ,EAAE,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE;CACrE,CAAC;AAEF;;
|
|
1
|
+
{"version":3,"file":"deviceFactory.js","sourceRoot":"","sources":["../../src/deviceFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAe,MAAM,UAAU,CAAC;AAEzG,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACxG,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAI9D,SAAS,YAAY,CAAC,MAAc,EAAE,GAAyB;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACvD,OAAO,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAc,EAAE,GAAyB;IACnE,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,YAAY,CAAC,MAAc,EAAE,GAAyB;IAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC;IACtF,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAgC;IAC9D,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC;IACrC,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC;IACrC,CAAC,cAAc,CAAC,YAAY,EAAE,kBAAkB,CAAC;IACjD,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC;IACrC,CAAC,cAAc,CAAC,UAAU,EAAE,gBAAgB,CAAC;IAC7C,CAAC,cAAc,CAAC,IAAI,EAAE,mBAAmB,CAAC;CAC3C,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAiE;IACrF,EAAE,QAAQ,EAAE,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,oBAAoB,EAAE;IACrE,EAAE,QAAQ,EAAE,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE;CACrE,CAAC;AAEF;;IAEI;AACJ,MAAM,UAAU,uBAAuB,CAAC,MAAc,EAAE,GAAyB;IAC/E,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1D,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,KAAK,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,gBAAgB,EAAE,CAAC;QACtE,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,KAAK,QAAQ,CAAC,EAAE,CAAC;YACpE,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,gCAAgC,MAAM,CAAC,QAAQ,eAAe,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1F,OAAO,EAAE,CAAC;AACZ,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
|
-
|
|
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 {
|
|
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
|
|
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);
|
|
@@ -91,14 +118,6 @@ export function createThermostat(device, ctx) {
|
|
|
91
118
|
.createDefaultRelativeHumidityMeasurementClusterServer(humidity)
|
|
92
119
|
.addRequiredClusterServers();
|
|
93
120
|
}
|
|
94
|
-
let fanChild;
|
|
95
|
-
if (fanModeFeature) {
|
|
96
|
-
const matterFanMode = iotasFanModeToMatter(fanModeFeature.value ?? 0);
|
|
97
|
-
fanChild = endpoint
|
|
98
|
-
.addChildDeviceType('Fan', fanDevice)
|
|
99
|
-
.createDefaultFanControlClusterServer(matterFanMode)
|
|
100
|
-
.addRequiredClusterServers();
|
|
101
|
-
}
|
|
102
121
|
if (modeFeature) {
|
|
103
122
|
endpoint.subscribeAttribute(Thermostat.Cluster.id, 'systemMode', (newValue) => {
|
|
104
123
|
const iotasMode = systemModeToIotasMode(newValue);
|
|
@@ -117,12 +136,6 @@ export function createThermostat(device, ctx) {
|
|
|
117
136
|
ctx.onFeatureUpdate(coolSetpointFeature.id, fahrenheit);
|
|
118
137
|
});
|
|
119
138
|
}
|
|
120
|
-
if (fanModeFeature && fanChild) {
|
|
121
|
-
fanChild.subscribeAttribute(FanControl.Cluster.id, 'fanMode', (newValue) => {
|
|
122
|
-
const iotasMode = matterFanModeToIotas(newValue);
|
|
123
|
-
ctx.onFeatureUpdate(fanModeFeature.id, iotasMode);
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
139
|
const handlers = new Map([
|
|
127
140
|
[
|
|
128
141
|
tempFeature.id,
|
|
@@ -151,11 +164,10 @@ export function createThermostat(device, ctx) {
|
|
|
151
164
|
humidityChild.setAttribute(RelativeHumidityMeasurement.Cluster.id, 'measuredValue', toMatterHumidity(value));
|
|
152
165
|
});
|
|
153
166
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
});
|
|
167
|
+
const results = [multiFeatureResult(endpoint, handlers)];
|
|
168
|
+
if (fanModeFeature) {
|
|
169
|
+
results.push(createFanEndpoint(device, ctx, fanModeFeature));
|
|
158
170
|
}
|
|
159
|
-
return
|
|
171
|
+
return results;
|
|
160
172
|
}
|
|
161
173
|
//# sourceMappingURL=thermostat.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thermostat.js","sourceRoot":"","sources":["../../../src/devices/thermostat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"thermostat.js","sourceRoot":"","sources":["../../../src/devices/thermostat.ts"],"names":[],"mappings":"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"}
|
package/dist/src/module.d.ts
CHANGED
|
@@ -13,12 +13,11 @@ export declare class IotasPlatform extends MatterbridgeDynamicPlatform {
|
|
|
13
13
|
iotasClient: IotasClient;
|
|
14
14
|
featureCache: FeatureCache;
|
|
15
15
|
pollingInterval: number;
|
|
16
|
-
private
|
|
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
|
}
|
package/dist/src/module.js
CHANGED
|
@@ -8,7 +8,7 @@ export class IotasPlatform extends MatterbridgeDynamicPlatform {
|
|
|
8
8
|
iotasClient;
|
|
9
9
|
featureCache;
|
|
10
10
|
pollingInterval;
|
|
11
|
-
|
|
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.
|
|
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
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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
|
}
|
package/dist/src/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,
|
|
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 {
|
|
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
|
-
|
|
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
|
|
20
|
-
assert.ok(
|
|
21
|
-
assert.ok(
|
|
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
|
|
29
|
-
assert.ok(
|
|
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
|
|
37
|
-
assert.
|
|
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
|
|
45
|
-
assert.
|
|
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
|
|
53
|
-
assert.ok(
|
|
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
|
|
61
|
-
assert.ok(
|
|
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
|
|
69
|
-
assert.ok(
|
|
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
|
|
77
|
-
assert.ok(
|
|
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
|
|
85
|
-
assert.ok(
|
|
98
|
+
const results = assertResults(createEndpointForDevice(device, ctx), 1);
|
|
99
|
+
assert.ok(results[0].featureIds.includes(50));
|
|
86
100
|
});
|
|
87
|
-
it('should return
|
|
101
|
+
it('should return empty array for unsupported category', () => {
|
|
88
102
|
const device = makeDevice({ category: 'unknown', features: [] });
|
|
89
|
-
assert.
|
|
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
|
|
100
|
-
assert.ok(
|
|
101
|
-
|
|
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
|
|
113
|
-
assert.ok(
|
|
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
|
|
124
|
-
assert.ok(
|
|
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.
|
|
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
|
|
136
|
-
assert.
|
|
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
|
|
145
|
-
assert.
|
|
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
|
|
165
|
-
assert.
|
|
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":"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,
|
|
1
|
+
{"version":3,"file":"deviceFactory.test.js","sourceRoot":"","sources":["../../test/deviceFactory.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 {
|
|
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
|
|
16
|
-
assert.ok(
|
|
17
|
-
assert.ok(
|
|
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
|
|
25
|
-
assert.ok(
|
|
26
|
-
assert.ok(!
|
|
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
|
|
37
|
-
assert.ok(
|
|
38
|
-
assert.ok(
|
|
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
|
|
49
|
-
// updateAttribute for onOff should not throw (delegates to original)
|
|
48
|
+
const results = assertResults(createEndpointForDevice(device, ctx), 1);
|
|
50
49
|
suppressLogs(() => {
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
results[0].updateAttribute(10, 0);
|
|
51
|
+
results[0].updateAttribute(50, 1);
|
|
53
52
|
});
|
|
54
53
|
});
|
|
55
|
-
it('should return
|
|
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
|
|
61
|
-
assert.
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,OAAO,EAAE,
|
|
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 {
|
|
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
|
|
14
|
-
assert.deepEqual(
|
|
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
|
|
27
|
-
assert.deepEqual(
|
|
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
|
|
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
|
|
38
|
-
assert.deepEqual(
|
|
37
|
+
const results = assertResults(createThermostat(device, ctx), 1);
|
|
38
|
+
assert.deepEqual(results[0].featureIds, [30, 34]);
|
|
39
39
|
});
|
|
40
|
-
it('should
|
|
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
|
|
49
|
-
assert.deepEqual(
|
|
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
|
|
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
|
|
64
|
-
assert.deepEqual(
|
|
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
|
|
67
|
-
|
|
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
|
|
84
|
+
const results = assertResults(createThermostat(device, ctx), 2);
|
|
82
85
|
suppressLogs(() => {
|
|
83
|
-
assert.doesNotThrow(() =>
|
|
84
|
-
assert.doesNotThrow(() =>
|
|
85
|
-
assert.doesNotThrow(() =>
|
|
86
|
-
assert.doesNotThrow(() =>
|
|
87
|
-
assert.doesNotThrow(() =>
|
|
88
|
-
assert.doesNotThrow(() =>
|
|
89
|
-
assert.doesNotThrow(() =>
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAChH,OAAO,EAAE,
|
|
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.
|
|
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.
|
|
57
|
+
"iotas-ts": "^2.1.1"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
60
|
"@eslint/js": "^9.0.0",
|