@homebridge-plugins/homebridge-matter 0.2.0-beta.6 → 0.2.0-beta.7
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/README.md +1 -1
- package/dist/devices/ThermostatAccessory.d.ts +1 -0
- package/dist/devices/ThermostatAccessory.js +12 -3
- package/dist/devices/ThermostatAccessory.js.map +1 -1
- package/dist/devices/VenetianBlindAccessory.d.ts +2 -2
- package/dist/devices/VenetianBlindAccessory.js +20 -12
- package/dist/devices/VenetianBlindAccessory.js.map +1 -1
- package/dist/devices/WindowBlindAccessory.d.ts +1 -1
- package/dist/devices/WindowBlindAccessory.js +10 -6
- package/dist/devices/WindowBlindAccessory.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -67,7 +67,7 @@ This plugin provides example implementations of Matter device types in Homebridg
|
|
|
67
67
|
|
|
68
68
|
- To use this plugin, you will need to already have:
|
|
69
69
|
- [Node](https://nodejs.org): latest version of `v20`, `v22` or `v24` - any other major version is not supported.
|
|
70
|
-
- [Homebridge](https://homebridge.io): `>=2.0.0-alpha.
|
|
70
|
+
- [Homebridge](https://homebridge.io): `>=2.0.0-alpha.71 <2.0.0-beta.0` - refer to link for more information and installation instructions.
|
|
71
71
|
|
|
72
72
|
### Help/About
|
|
73
73
|
|
|
@@ -11,5 +11,6 @@ export declare class ThermostatAccessory extends BaseMatterAccessory {
|
|
|
11
11
|
private handleOccupiedCoolingSetpointChange;
|
|
12
12
|
updateCurrentTemperature(celsius: number): void;
|
|
13
13
|
updateHeatingSetpoint(celsius: number): void;
|
|
14
|
+
updateCoolingSetpoint(celsius: number): void;
|
|
14
15
|
updateSystemMode(mode: number): void;
|
|
15
16
|
}
|
|
@@ -18,10 +18,13 @@ export class ThermostatAccessory extends BaseMatterAccessory {
|
|
|
18
18
|
thermostat: {
|
|
19
19
|
localTemperature: 2100, // 21.00°C
|
|
20
20
|
occupiedHeatingSetpoint: 2000,
|
|
21
|
+
occupiedCoolingSetpoint: 2400,
|
|
21
22
|
minHeatSetpointLimit: 700,
|
|
22
23
|
maxHeatSetpointLimit: 3000,
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
minCoolSetpointLimit: 1600,
|
|
25
|
+
maxCoolSetpointLimit: 3200,
|
|
26
|
+
controlSequenceOfOperation: 4, // Cooling and Heating
|
|
27
|
+
systemMode: 0, // Off
|
|
25
28
|
},
|
|
26
29
|
},
|
|
27
30
|
handlers: {
|
|
@@ -44,7 +47,8 @@ export class ThermostatAccessory extends BaseMatterAccessory {
|
|
|
44
47
|
}
|
|
45
48
|
async handleSystemModeChange(request) {
|
|
46
49
|
this.logInfo(`SystemMode change: ${JSON.stringify(request)}`);
|
|
47
|
-
|
|
50
|
+
// Matter Thermostat SystemMode enum: 0=Off, 1=Auto, 3=Cool, 4=Heat, 5=EmergencyHeat, 6=Precooling, 7=FanOnly
|
|
51
|
+
const modeNames = ['Off', 'Auto', 'Reserved', 'Cool', 'Heat', 'Emergency Heating', 'Precooling', 'Fan Only'];
|
|
48
52
|
const modeName = modeNames[request.systemMode] || `Unknown (${request.systemMode})`;
|
|
49
53
|
this.logInfo(`system mode changed to: ${modeName}.`);
|
|
50
54
|
// TODO: await myThermostatAPI.setSystemMode(request.systemMode)
|
|
@@ -71,6 +75,11 @@ export class ThermostatAccessory extends BaseMatterAccessory {
|
|
|
71
75
|
this.updateState('thermostat', { occupiedHeatingSetpoint: value });
|
|
72
76
|
this.logInfo((`heating setpoint: ${celsius}°c.`));
|
|
73
77
|
}
|
|
78
|
+
updateCoolingSetpoint(celsius) {
|
|
79
|
+
const value = Math.round(celsius * 100);
|
|
80
|
+
this.updateState('thermostat', { occupiedCoolingSetpoint: value });
|
|
81
|
+
this.logInfo((`cooling setpoint: ${celsius}°c.`));
|
|
82
|
+
}
|
|
74
83
|
updateSystemMode(mode) {
|
|
75
84
|
this.updateState('thermostat', { systemMode: mode });
|
|
76
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThermostatAccessory.js","sourceRoot":"","sources":["../../src/devices/ThermostatAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,mBAAoB,SAAQ,mBAAmB;IAC1D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,gBAAgB,CAAA;QACrC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,YAAY;YACzB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU;YAC7C,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,sBAAsB;YAC7B,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,UAAU,EAAE;oBACV,gBAAgB,EAAE,IAAI,EAAE,UAAU;oBAClC,uBAAuB,EAAE,IAAI;oBAC7B,oBAAoB,EAAE,GAAG;oBACzB,oBAAoB,EAAE,IAAI;oBAC1B,0BAA0B,EAAE,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"ThermostatAccessory.js","sourceRoot":"","sources":["../../src/devices/ThermostatAccessory.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,6 @@ export declare class VenetianBlindAccessory extends BaseMatterAccessory {
|
|
|
11
11
|
private handleUpOrOpen;
|
|
12
12
|
private handleDownOrClose;
|
|
13
13
|
private handleStop;
|
|
14
|
-
updateLiftPosition(
|
|
15
|
-
updateTiltPosition(
|
|
14
|
+
updateLiftPosition(openPercent: number): void;
|
|
15
|
+
updateTiltPosition(openPercent: number): void;
|
|
16
16
|
}
|
|
@@ -52,15 +52,19 @@ export class VenetianBlindAccessory extends BaseMatterAccessory {
|
|
|
52
52
|
}
|
|
53
53
|
async handleGoToLift(request) {
|
|
54
54
|
this.logInfo(`GoToLiftPercentage request: ${JSON.stringify(request)}`);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
// Matter uses 0=open, 10000=closed, so invert to get open percentage
|
|
56
|
+
const closedPercent = request.liftPercent100thsValue / 100;
|
|
57
|
+
const openPercent = (100 - closedPercent).toFixed(0);
|
|
58
|
+
this.logInfo(`moving to ${openPercent}% open.`);
|
|
59
|
+
// TODO: await myBlindAPI.setPosition(openPercent)
|
|
58
60
|
}
|
|
59
61
|
async handleGoToTilt(request) {
|
|
60
62
|
this.logInfo(`GoToTiltPercentage request: ${JSON.stringify(request)}`);
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
63
|
+
// Matter uses 0=open, 10000=closed, so invert to get open percentage
|
|
64
|
+
const closedPercent = request.tiltPercent100thsValue / 100;
|
|
65
|
+
const openPercent = (100 - closedPercent).toFixed(0);
|
|
66
|
+
this.logInfo(`tilting to ${openPercent}% open.`);
|
|
67
|
+
// TODO: await myBlindAPI.setTiltAngle(openPercent)
|
|
64
68
|
}
|
|
65
69
|
async handleUpOrOpen() {
|
|
66
70
|
this.logInfo('opening blind.');
|
|
@@ -74,21 +78,25 @@ export class VenetianBlindAccessory extends BaseMatterAccessory {
|
|
|
74
78
|
this.logInfo('stopping blind.');
|
|
75
79
|
// TODO: await myBlindAPI.stop()
|
|
76
80
|
}
|
|
77
|
-
updateLiftPosition(
|
|
78
|
-
|
|
81
|
+
updateLiftPosition(openPercent) {
|
|
82
|
+
// Convert open percentage to Matter's closed percentage (0=open, 10000=closed)
|
|
83
|
+
const closedPercent = 100 - openPercent;
|
|
84
|
+
const value = Math.round(closedPercent * 100);
|
|
79
85
|
this.updateState('windowCovering', {
|
|
80
86
|
currentPositionLiftPercent100ths: value,
|
|
81
87
|
targetPositionLiftPercent100ths: value,
|
|
82
88
|
});
|
|
83
|
-
this.logInfo(`lift position: ${
|
|
89
|
+
this.logInfo(`lift position: ${openPercent}% open.`);
|
|
84
90
|
}
|
|
85
|
-
updateTiltPosition(
|
|
86
|
-
|
|
91
|
+
updateTiltPosition(openPercent) {
|
|
92
|
+
// Convert open percentage to Matter's closed percentage (0=open, 10000=closed)
|
|
93
|
+
const closedPercent = 100 - openPercent;
|
|
94
|
+
const value = Math.round(closedPercent * 100);
|
|
87
95
|
this.updateState('windowCovering', {
|
|
88
96
|
currentPositionTiltPercent100ths: value,
|
|
89
97
|
targetPositionTiltPercent100ths: value,
|
|
90
98
|
});
|
|
91
|
-
this.logInfo(`tilt position: ${
|
|
99
|
+
this.logInfo(`tilt position: ${openPercent}% open.`);
|
|
92
100
|
}
|
|
93
101
|
}
|
|
94
102
|
//# sourceMappingURL=VenetianBlindAccessory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VenetianBlindAccessory.js","sourceRoot":"","sources":["../../src/devices/VenetianBlindAccessory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,sBAAuB,SAAQ,mBAAmB;IAC7D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,WAAW,CAAA;QAEhC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,uBAAuB;YACpC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc;YACjD,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,0BAA0B;YACjC,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,cAAc,EAAE;oBACd,+BAA+B,EAAE,IAAI;oBACrC,gCAAgC,EAAE,IAAI;oBACtC,+BAA+B,EAAE,IAAI;oBACrC,gCAAgC,EAAE,IAAI;oBACtC,iBAAiB,EAAE;wBACjB,MAAM,EAAE,CAAC;wBACT,IAAI,EAAE,CAAC;wBACP,IAAI,EAAE,CAAC;qBACR;oBACD,cAAc,EAAE,CAAC;oBACjB,YAAY,EAAE;wBACZ,WAAW,EAAE,IAAI;wBACjB,cAAc,EAAE,IAAI;wBACpB,oBAAoB,EAAE,KAAK;wBAC3B,iBAAiB,EAAE,IAAI;wBACvB,iBAAiB,EAAE,IAAI;wBACvB,qBAAqB,EAAE,IAAI;wBAC3B,qBAAqB,EAAE,IAAI;qBAC5B;iBACF;aACF;YAED,QAAQ,EAAE;gBACR,cAAc,EAAE;oBACd,kBAAkB,EAAE,KAAK,EAAE,OAA0C,EAAE,EAAE,CACvE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;oBAC9B,kBAAkB,EAAE,KAAK,EAAE,OAA0C,EAAE,EAAE,CACvE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;oBAC9B,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE;oBAC3C,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE;oBACjD,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE;iBAC1C;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,OAA0C;QACrE,IAAI,CAAC,OAAO,CAAC,+BAA+B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACtE,MAAM,
|
|
1
|
+
{"version":3,"file":"VenetianBlindAccessory.js","sourceRoot":"","sources":["../../src/devices/VenetianBlindAccessory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,sBAAuB,SAAQ,mBAAmB;IAC7D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,WAAW,CAAA;QAEhC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,uBAAuB;YACpC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc;YACjD,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,0BAA0B;YACjC,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,cAAc,EAAE;oBACd,+BAA+B,EAAE,IAAI;oBACrC,gCAAgC,EAAE,IAAI;oBACtC,+BAA+B,EAAE,IAAI;oBACrC,gCAAgC,EAAE,IAAI;oBACtC,iBAAiB,EAAE;wBACjB,MAAM,EAAE,CAAC;wBACT,IAAI,EAAE,CAAC;wBACP,IAAI,EAAE,CAAC;qBACR;oBACD,cAAc,EAAE,CAAC;oBACjB,YAAY,EAAE;wBACZ,WAAW,EAAE,IAAI;wBACjB,cAAc,EAAE,IAAI;wBACpB,oBAAoB,EAAE,KAAK;wBAC3B,iBAAiB,EAAE,IAAI;wBACvB,iBAAiB,EAAE,IAAI;wBACvB,qBAAqB,EAAE,IAAI;wBAC3B,qBAAqB,EAAE,IAAI;qBAC5B;iBACF;aACF;YAED,QAAQ,EAAE;gBACR,cAAc,EAAE;oBACd,kBAAkB,EAAE,KAAK,EAAE,OAA0C,EAAE,EAAE,CACvE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;oBAC9B,kBAAkB,EAAE,KAAK,EAAE,OAA0C,EAAE,EAAE,CACvE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;oBAC9B,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE;oBAC3C,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE;oBACjD,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE;iBAC1C;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,OAA0C;QACrE,IAAI,CAAC,OAAO,CAAC,+BAA+B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACtE,qEAAqE;QACrE,MAAM,aAAa,GAAG,OAAO,CAAC,sBAAsB,GAAG,GAAG,CAAA;QAC1D,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QACpD,IAAI,CAAC,OAAO,CAAC,aAAa,WAAW,SAAS,CAAC,CAAA;QAC/C,kDAAkD;IACpD,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,OAA0C;QACrE,IAAI,CAAC,OAAO,CAAC,+BAA+B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACtE,qEAAqE;QACrE,MAAM,aAAa,GAAG,OAAO,CAAC,sBAAsB,GAAG,GAAG,CAAA;QAC1D,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QACpD,IAAI,CAAC,OAAO,CAAC,cAAc,WAAW,SAAS,CAAC,CAAA;QAChD,mDAAmD;IACrD,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAC9B,gCAAgC;IAClC,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAC9B,iCAAiC;IACnC,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;QAC/B,gCAAgC;IAClC,CAAC;IAEM,kBAAkB,CAAC,WAAmB;QAC3C,+EAA+E;QAC/E,MAAM,aAAa,GAAG,GAAG,GAAG,WAAW,CAAA;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC,CAAA;QAC7C,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE;YACjC,gCAAgC,EAAE,KAAK;YACvC,+BAA+B,EAAE,KAAK;SACvC,CAAC,CAAA;QACF,IAAI,CAAC,OAAO,CAAC,kBAAkB,WAAW,SAAS,CAAC,CAAA;IACtD,CAAC;IAEM,kBAAkB,CAAC,WAAmB;QAC3C,+EAA+E;QAC/E,MAAM,aAAa,GAAG,GAAG,GAAG,WAAW,CAAA;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC,CAAA;QAC7C,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE;YACjC,gCAAgC,EAAE,KAAK;YACvC,+BAA+B,EAAE,KAAK;SACvC,CAAC,CAAA;QACF,IAAI,CAAC,OAAO,CAAC,kBAAkB,WAAW,SAAS,CAAC,CAAA;IACtD,CAAC;CACF"}
|
|
@@ -49,9 +49,11 @@ export class WindowBlindAccessory extends BaseMatterAccessory {
|
|
|
49
49
|
}
|
|
50
50
|
async handleGoToLift(request) {
|
|
51
51
|
this.logInfo(`GoToLiftPercentage request: ${JSON.stringify(request)}`);
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
// Matter uses 0=open, 10000=closed, so invert to get open percentage
|
|
53
|
+
const closedPercent = request.liftPercent100thsValue / 100;
|
|
54
|
+
const openPercent = (100 - closedPercent).toFixed(0);
|
|
55
|
+
this.logInfo(`moving to ${openPercent}% open.`);
|
|
56
|
+
// TODO: await myBlindAPI.setPosition(openPercent)
|
|
55
57
|
}
|
|
56
58
|
async handleUpOrOpen() {
|
|
57
59
|
this.logInfo('opening blind.');
|
|
@@ -65,13 +67,15 @@ export class WindowBlindAccessory extends BaseMatterAccessory {
|
|
|
65
67
|
this.logInfo('stopping blind.');
|
|
66
68
|
// TODO: await myBlindAPI.stop()
|
|
67
69
|
}
|
|
68
|
-
updateLiftPosition(
|
|
69
|
-
|
|
70
|
+
updateLiftPosition(openPercent) {
|
|
71
|
+
// Convert open percentage to Matter's closed percentage (0=open, 10000=closed)
|
|
72
|
+
const closedPercent = 100 - openPercent;
|
|
73
|
+
const value = Math.round(closedPercent * 100);
|
|
70
74
|
this.updateState('windowCovering', {
|
|
71
75
|
currentPositionLiftPercent100ths: value,
|
|
72
76
|
targetPositionLiftPercent100ths: value,
|
|
73
77
|
});
|
|
74
|
-
this.logInfo(`lift position: ${
|
|
78
|
+
this.logInfo(`lift position: ${openPercent}% open.`);
|
|
75
79
|
}
|
|
76
80
|
}
|
|
77
81
|
//# sourceMappingURL=WindowBlindAccessory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WindowBlindAccessory.js","sourceRoot":"","sources":["../../src/devices/WindowBlindAccessory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,oBAAqB,SAAQ,mBAAmB;IAC3D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,WAAW,CAAA;QAEhC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,cAAc;YAC3B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc;YACjD,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,wBAAwB;YAC/B,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,cAAc,EAAE;oBACd,+BAA+B,EAAE,IAAI;oBACrC,gCAAgC,EAAE,IAAI;oBACtC,iBAAiB,EAAE;wBACjB,MAAM,EAAE,CAAC;wBACT,IAAI,EAAE,CAAC;wBACP,IAAI,EAAE,CAAC;qBACR;oBACD,cAAc,EAAE,CAAC;oBACjB,YAAY,EAAE;wBACZ,WAAW,EAAE,IAAI;wBACjB,cAAc,EAAE,IAAI;wBACpB,oBAAoB,EAAE,KAAK;wBAC3B,iBAAiB,EAAE,IAAI;wBACvB,iBAAiB,EAAE,KAAK;wBACxB,qBAAqB,EAAE,IAAI;wBAC3B,qBAAqB,EAAE,KAAK;qBAC7B;iBACF;aACF;YAED,QAAQ,EAAE;gBACR,cAAc,EAAE;oBACd,kBAAkB,EAAE,KAAK,EAAE,OAA0C,EAAE,EAAE,CACvE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;oBAC9B,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE;oBAC3C,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE;oBACjD,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE;iBAC1C;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,OAA0C;QACrE,IAAI,CAAC,OAAO,CAAC,+BAA+B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACtE,MAAM,
|
|
1
|
+
{"version":3,"file":"WindowBlindAccessory.js","sourceRoot":"","sources":["../../src/devices/WindowBlindAccessory.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"displayName": "Homebridge Matter",
|
|
4
4
|
"alias": "Matter",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"version": "0.2.0-beta.
|
|
6
|
+
"version": "0.2.0-beta.7",
|
|
7
7
|
"description": "Homebridge plugin to showcase examples of Matter devices in Homebridge.",
|
|
8
8
|
"author": {
|
|
9
9
|
"name": "bwp91",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"main": "dist/index.js",
|
|
50
50
|
"engines": {
|
|
51
51
|
"node": "^20.18.0 || ^22.10.0 || ^24.0.0",
|
|
52
|
-
"homebridge": ">=2.0.0-alpha.
|
|
52
|
+
"homebridge": ">=2.0.0-alpha.71 <2.0.0-beta.0"
|
|
53
53
|
},
|
|
54
54
|
"scripts": {
|
|
55
55
|
"build": "rimraf ./dist && tsc && npm run plugin-ui",
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"devDependencies": {
|
|
65
65
|
"@antfu/eslint-config": "^6.0.0",
|
|
66
66
|
"@types/node": "^24.9.1",
|
|
67
|
-
"homebridge": "2.0.0-alpha.
|
|
67
|
+
"homebridge": "2.0.0-alpha.71",
|
|
68
68
|
"rimraf": "^6.0.1",
|
|
69
69
|
"ts-node": "^10.9.2",
|
|
70
70
|
"typescript": "^5.9.3"
|