@homebridge-plugins/homebridge-matter 0.4.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/README.md +2 -1
- package/config.schema.json +8 -1
- package/dist/devices/AirQualitySensorAccessory.d.ts +50 -0
- package/dist/devices/AirQualitySensorAccessory.js +130 -0
- package/dist/devices/AirQualitySensorAccessory.js.map +1 -0
- package/dist/devices/BaseMatterAccessory.d.ts +1 -1
- package/dist/devices/ColorLightAccessory.d.ts +3 -3
- package/dist/devices/ColorLightAccessory.js +41 -6
- package/dist/devices/ColorLightAccessory.js.map +1 -1
- package/dist/devices/ColorTemperatureLightAccessory.d.ts +3 -3
- package/dist/devices/ColorTemperatureLightAccessory.js +19 -6
- package/dist/devices/ColorTemperatureLightAccessory.js.map +1 -1
- package/dist/devices/ContactSensorAccessory.d.ts +1 -1
- package/dist/devices/ContactSensorAccessory.js +2 -2
- package/dist/devices/ContactSensorAccessory.js.map +1 -1
- package/dist/devices/DimmableLightAccessory.d.ts +3 -3
- package/dist/devices/DimmableLightAccessory.js +23 -7
- package/dist/devices/DimmableLightAccessory.js.map +1 -1
- package/dist/devices/DoorLockAccessory.d.ts +1 -1
- package/dist/devices/DoorLockAccessory.js +37 -2
- package/dist/devices/DoorLockAccessory.js.map +1 -1
- package/dist/devices/ExtendedColorLightAccessory.d.ts +3 -3
- package/dist/devices/ExtendedColorLightAccessory.js +24 -6
- package/dist/devices/ExtendedColorLightAccessory.js.map +1 -1
- package/dist/devices/FanAccessory.d.ts +2 -2
- package/dist/devices/FanAccessory.js +36 -4
- package/dist/devices/FanAccessory.js.map +1 -1
- package/dist/devices/HumiditySensorAccessory.d.ts +1 -1
- package/dist/devices/HumiditySensorAccessory.js +2 -2
- package/dist/devices/HumiditySensorAccessory.js.map +1 -1
- package/dist/devices/LeakSensorAccessory.d.ts +1 -1
- package/dist/devices/LeakSensorAccessory.js +2 -2
- package/dist/devices/LeakSensorAccessory.js.map +1 -1
- package/dist/devices/LightSensorAccessory.d.ts +1 -1
- package/dist/devices/LightSensorAccessory.js +2 -2
- package/dist/devices/LightSensorAccessory.js.map +1 -1
- package/dist/devices/OccupancySensorAccessory.d.ts +1 -1
- package/dist/devices/OccupancySensorAccessory.js +3 -4
- package/dist/devices/OccupancySensorAccessory.js.map +1 -1
- package/dist/devices/OnOffLightAccessory.d.ts +1 -1
- package/dist/devices/OnOffLightAccessory.js +18 -2
- package/dist/devices/OnOffLightAccessory.js.map +1 -1
- package/dist/devices/OnOffOutletAccessory.d.ts +1 -1
- package/dist/devices/OnOffOutletAccessory.js +18 -2
- package/dist/devices/OnOffOutletAccessory.js.map +1 -1
- package/dist/devices/OnOffSwitchAccessory.d.ts +1 -1
- package/dist/devices/OnOffSwitchAccessory.js +14 -2
- package/dist/devices/OnOffSwitchAccessory.js.map +1 -1
- package/dist/devices/RoboticVacuumAccessory.d.ts +6 -6
- package/dist/devices/RoboticVacuumAccessory.js +65 -25
- package/dist/devices/RoboticVacuumAccessory.js.map +1 -1
- package/dist/devices/SmokeCOAlarmAccessory.d.ts +2 -2
- package/dist/devices/SmokeCOAlarmAccessory.js +5 -6
- package/dist/devices/SmokeCOAlarmAccessory.js.map +1 -1
- package/dist/devices/TemperatureSensorAccessory.d.ts +1 -1
- package/dist/devices/TemperatureSensorAccessory.js +2 -2
- package/dist/devices/TemperatureSensorAccessory.js.map +1 -1
- package/dist/devices/ThermostatAccessory.d.ts +4 -4
- package/dist/devices/ThermostatAccessory.js +39 -8
- package/dist/devices/ThermostatAccessory.js.map +1 -1
- package/dist/devices/VenetianBlindAccessory.d.ts +2 -2
- package/dist/devices/VenetianBlindAccessory.js +22 -5
- package/dist/devices/VenetianBlindAccessory.js.map +1 -1
- package/dist/devices/WindowBlindAccessory.d.ts +1 -1
- package/dist/devices/WindowBlindAccessory.js +25 -4
- package/dist/devices/WindowBlindAccessory.js.map +1 -1
- package/dist/devices/custom/PowerStripAccessory.d.ts +2 -2
- package/dist/devices/custom/PowerStripAccessory.js +41 -8
- package/dist/devices/custom/PowerStripAccessory.js.map +1 -1
- package/dist/devices/index.d.ts +1 -0
- package/dist/devices/index.js +1 -0
- package/dist/devices/index.js.map +1 -1
- package/dist/homebridge-ui/public/index.html +1 -0
- package/dist/platform.js +7 -1
- package/dist/platform.js.map +1 -1
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `@homebridge-plugins/homebridge-matter` will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## v0.6.0 (2025-11-07)
|
|
6
|
+
|
|
7
|
+
### Changes
|
|
8
|
+
|
|
9
|
+
- add example for air quality sensor
|
|
10
|
+
- update device examples to use `async/await` syntax
|
|
11
|
+
|
|
12
|
+
## v0.5.0 (2025-11-02)
|
|
13
|
+
|
|
14
|
+
### Changes
|
|
15
|
+
|
|
16
|
+
- added examples of correct error handling
|
|
17
|
+
|
|
5
18
|
## v0.4.1 (2025-10-28)
|
|
6
19
|
|
|
7
20
|
### Changes
|
package/README.md
CHANGED
|
@@ -29,7 +29,7 @@ This plugin provides example implementations of Matter device types in Homebridg
|
|
|
29
29
|
|
|
30
30
|
- To use this plugin, you will need to already have:
|
|
31
31
|
- [Node](https://nodejs.org): latest version of `v20`, `v22` or `v24` - any other major version is not supported.
|
|
32
|
-
- [Homebridge](https://homebridge.io): `>=2.0.0-beta.
|
|
32
|
+
- [Homebridge](https://homebridge.io): `>=2.0.0-beta.50` - refer to link for more information and installation instructions.
|
|
33
33
|
|
|
34
34
|
### Getting Started
|
|
35
35
|
|
|
@@ -43,6 +43,7 @@ This plugin provides example implementations of Matter device types in Homebridg
|
|
|
43
43
|
- [Getting Started](https://github.com/homebridge-plugins/homebridge-matter/wiki/Getting-Started)
|
|
44
44
|
- [State Management](https://github.com/homebridge-plugins/homebridge-matter/wiki/State-Management)
|
|
45
45
|
- [Monitoring External Changes](https://github.com/homebridge-plugins/homebridge-matter/wiki/Monitoring-External-Changes)
|
|
46
|
+
- [Error Handling](https://github.com/homebridge-plugins/homebridge-matter/wiki/Error-Handling)
|
|
46
47
|
- [Best Practices](https://github.com/homebridge-plugins/homebridge-matter/wiki/Best-Practices)
|
|
47
48
|
- [Advanced Patterns](https://github.com/homebridge-plugins/homebridge-matter/wiki/Advanced-Patterns)
|
|
48
49
|
|
package/config.schema.json
CHANGED
|
@@ -58,6 +58,12 @@
|
|
|
58
58
|
"default": false,
|
|
59
59
|
"description": "Enable the on/off light switch example accessory (Matter Spec § 6.1)."
|
|
60
60
|
},
|
|
61
|
+
"enableAirQualitySensor": {
|
|
62
|
+
"title": "Enable Air Quality Sensor",
|
|
63
|
+
"type": "boolean",
|
|
64
|
+
"default": false,
|
|
65
|
+
"description": "Enable the air quality sensor example accessory (Matter Spec § 7.6). Monitors air quality, PM2.5, PM10, temperature, and humidity."
|
|
66
|
+
},
|
|
61
67
|
"enableContactSensor": {
|
|
62
68
|
"title": "Enable Contact Sensor",
|
|
63
69
|
"type": "boolean",
|
|
@@ -187,10 +193,11 @@
|
|
|
187
193
|
{
|
|
188
194
|
"type": "fieldset",
|
|
189
195
|
"title": "Section 7: Sensors",
|
|
190
|
-
"description": "Matter Specification § 7 - All sensor types (
|
|
196
|
+
"description": "Matter Specification § 7 - All sensor types (8 devices implemented).",
|
|
191
197
|
"expandable": true,
|
|
192
198
|
"expanded": false,
|
|
193
199
|
"items": [
|
|
200
|
+
"enableAirQualitySensor",
|
|
194
201
|
"enableContactSensor",
|
|
195
202
|
"enableLightSensor",
|
|
196
203
|
"enableOccupancySensor",
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Air Quality Sensor Accessory Class
|
|
3
|
+
*
|
|
4
|
+
* This device combines multiple environmental sensors commonly found in air quality monitors:
|
|
5
|
+
* - Air Quality (overall rating)
|
|
6
|
+
* - PM2.5 (fine particulate matter)
|
|
7
|
+
* - PM10 (coarse particulate matter)
|
|
8
|
+
* - Temperature
|
|
9
|
+
* - Relative Humidity
|
|
10
|
+
*/
|
|
11
|
+
import type { API, Logger } from 'homebridge';
|
|
12
|
+
import { BaseMatterAccessory } from './BaseMatterAccessory.js';
|
|
13
|
+
export declare class AirQualitySensorAccessory extends BaseMatterAccessory {
|
|
14
|
+
constructor(api: API, log: Logger);
|
|
15
|
+
/**
|
|
16
|
+
* Update the overall air quality rating
|
|
17
|
+
* @param quality 0 = Unknown, 1 = Good, 2 = Fair, 3 = Moderate, 4 = Poor, 5 = VeryPoor, 6 = ExtremelyPoor
|
|
18
|
+
*/
|
|
19
|
+
updateAirQuality(quality: 0 | 1 | 2 | 3 | 4 | 5 | 6): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Update PM2.5 concentration
|
|
22
|
+
* @param value Concentration in µg/m³ (micrograms per cubic meter)
|
|
23
|
+
*/
|
|
24
|
+
updatePM25(value: number): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Update PM10 concentration
|
|
27
|
+
* @param value Concentration in µg/m³ (micrograms per cubic meter)
|
|
28
|
+
*/
|
|
29
|
+
updatePM10(value: number): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Update temperature
|
|
32
|
+
* @param celsius Temperature in degrees Celsius
|
|
33
|
+
*/
|
|
34
|
+
updateTemperature(celsius: number): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Update relative humidity
|
|
37
|
+
* @param percent Humidity as a percentage (0-100)
|
|
38
|
+
*/
|
|
39
|
+
updateHumidity(percent: number): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Update all sensor values at once
|
|
42
|
+
*/
|
|
43
|
+
updateAllValues(values: {
|
|
44
|
+
airQuality?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
45
|
+
pm25?: number;
|
|
46
|
+
pm10?: number;
|
|
47
|
+
temperature?: number;
|
|
48
|
+
humidity?: number;
|
|
49
|
+
}): Promise<void>;
|
|
50
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Air Quality Sensor Accessory Class
|
|
3
|
+
*
|
|
4
|
+
* This device combines multiple environmental sensors commonly found in air quality monitors:
|
|
5
|
+
* - Air Quality (overall rating)
|
|
6
|
+
* - PM2.5 (fine particulate matter)
|
|
7
|
+
* - PM10 (coarse particulate matter)
|
|
8
|
+
* - Temperature
|
|
9
|
+
* - Relative Humidity
|
|
10
|
+
*/
|
|
11
|
+
import { BaseMatterAccessory } from './BaseMatterAccessory.js';
|
|
12
|
+
export class AirQualitySensorAccessory extends BaseMatterAccessory {
|
|
13
|
+
constructor(api, log) {
|
|
14
|
+
const serialNumber = 'SENSOR-007';
|
|
15
|
+
super(api, log, {
|
|
16
|
+
uuid: api.matter.uuid.generate(serialNumber),
|
|
17
|
+
displayName: 'Air Quality Sensor',
|
|
18
|
+
deviceType: api.matter.deviceTypes.AirQualitySensor,
|
|
19
|
+
serialNumber,
|
|
20
|
+
manufacturer: 'Homebridge Matter',
|
|
21
|
+
model: 'HB-MATTER-SENSOR-AIR-QUALITY',
|
|
22
|
+
firmwareRevision: '1.0.0',
|
|
23
|
+
hardwareRevision: '1.0.0',
|
|
24
|
+
clusters: {
|
|
25
|
+
// Overall air quality rating
|
|
26
|
+
// 0 = Unknown, 1 = Good, 2 = Fair, 3 = Moderate, 4 = Poor, 5 = VeryPoor, 6 = ExtremelyPoor
|
|
27
|
+
airQuality: {
|
|
28
|
+
airQuality: 1, // Default: Good
|
|
29
|
+
},
|
|
30
|
+
// Note: the only cluster that appears in the Home app is the Air Quality cluster.
|
|
31
|
+
// The other measurements can be accessed by other Matter-compatible apps.
|
|
32
|
+
// PM2.5 - Fine particulate matter (≤2.5 micrometers)
|
|
33
|
+
// Values in µg/m³ (micrograms per cubic meter)
|
|
34
|
+
pm25ConcentrationMeasurement: {
|
|
35
|
+
measuredValue: 12, // 12 µg/m³ (Good air quality)
|
|
36
|
+
minMeasuredValue: 0,
|
|
37
|
+
maxMeasuredValue: 1000,
|
|
38
|
+
measurementUnit: 0, // 0 = µg/m³
|
|
39
|
+
measurementMedium: 0, // 0 = Air
|
|
40
|
+
},
|
|
41
|
+
// PM10 - Coarse particulate matter (≤10 micrometers)
|
|
42
|
+
// Values in µg/m³
|
|
43
|
+
pm10ConcentrationMeasurement: {
|
|
44
|
+
measuredValue: 25, // 25 µg/m³ (Good air quality)
|
|
45
|
+
minMeasuredValue: 0,
|
|
46
|
+
maxMeasuredValue: 1000,
|
|
47
|
+
measurementUnit: 0, // 0 = µg/m³
|
|
48
|
+
measurementMedium: 0, // 0 = Air
|
|
49
|
+
},
|
|
50
|
+
// Temperature measurement (in hundredths of °C)
|
|
51
|
+
temperatureMeasurement: {
|
|
52
|
+
measuredValue: 2100, // 21.00°C
|
|
53
|
+
minMeasuredValue: -5000, // -50°C
|
|
54
|
+
maxMeasuredValue: 10000, // 100°C
|
|
55
|
+
},
|
|
56
|
+
// Relative humidity (in hundredths of a percent)
|
|
57
|
+
relativeHumidityMeasurement: {
|
|
58
|
+
measuredValue: 5500, // 55%
|
|
59
|
+
minMeasuredValue: 0,
|
|
60
|
+
maxMeasuredValue: 10000, // 100%
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
this.logInfo('initialized.');
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Update the overall air quality rating
|
|
68
|
+
* @param quality 0 = Unknown, 1 = Good, 2 = Fair, 3 = Moderate, 4 = Poor, 5 = VeryPoor, 6 = ExtremelyPoor
|
|
69
|
+
*/
|
|
70
|
+
async updateAirQuality(quality) {
|
|
71
|
+
await this.updateState('airQuality', { airQuality: quality });
|
|
72
|
+
const qualityStr = ['Unknown', 'Good', 'Fair', 'Moderate', 'Poor', 'Very Poor', 'Extremely Poor'][quality];
|
|
73
|
+
this.logInfo(`air quality: ${qualityStr}.`);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Update PM2.5 concentration
|
|
77
|
+
* @param value Concentration in µg/m³ (micrograms per cubic meter)
|
|
78
|
+
*/
|
|
79
|
+
async updatePM25(value) {
|
|
80
|
+
await this.updateState('pm25ConcentrationMeasurement', { measuredValue: value });
|
|
81
|
+
this.logInfo(`PM2.5: ${value} µg/m³.`);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Update PM10 concentration
|
|
85
|
+
* @param value Concentration in µg/m³ (micrograms per cubic meter)
|
|
86
|
+
*/
|
|
87
|
+
async updatePM10(value) {
|
|
88
|
+
await this.updateState('pm10ConcentrationMeasurement', { measuredValue: value });
|
|
89
|
+
this.logInfo(`PM10: ${value} µg/m³.`);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Update temperature
|
|
93
|
+
* @param celsius Temperature in degrees Celsius
|
|
94
|
+
*/
|
|
95
|
+
async updateTemperature(celsius) {
|
|
96
|
+
const value = Math.round(celsius * 100); // convert to hundredths
|
|
97
|
+
await this.updateState('temperatureMeasurement', { measuredValue: value });
|
|
98
|
+
this.logInfo(`temperature: ${celsius}°C.`);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Update relative humidity
|
|
102
|
+
* @param percent Humidity as a percentage (0-100)
|
|
103
|
+
*/
|
|
104
|
+
async updateHumidity(percent) {
|
|
105
|
+
const value = Math.round(percent * 100); // convert to hundredths
|
|
106
|
+
await this.updateState('relativeHumidityMeasurement', { measuredValue: value });
|
|
107
|
+
this.logInfo(`humidity: ${percent}%.`);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Update all sensor values at once
|
|
111
|
+
*/
|
|
112
|
+
async updateAllValues(values) {
|
|
113
|
+
if (values.airQuality !== undefined) {
|
|
114
|
+
await this.updateAirQuality(values.airQuality);
|
|
115
|
+
}
|
|
116
|
+
if (values.pm25 !== undefined) {
|
|
117
|
+
await this.updatePM25(values.pm25);
|
|
118
|
+
}
|
|
119
|
+
if (values.pm10 !== undefined) {
|
|
120
|
+
await this.updatePM10(values.pm10);
|
|
121
|
+
}
|
|
122
|
+
if (values.temperature !== undefined) {
|
|
123
|
+
await this.updateTemperature(values.temperature);
|
|
124
|
+
}
|
|
125
|
+
if (values.humidity !== undefined) {
|
|
126
|
+
await this.updateHumidity(values.humidity);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=AirQualitySensorAccessory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AirQualitySensorAccessory.js","sourceRoot":"","sources":["../../src/devices/AirQualitySensorAccessory.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,7 +41,7 @@ export declare abstract class BaseMatterAccessory implements MatterAccessory {
|
|
|
41
41
|
readonly parts?: MatterAccessory['parts'];
|
|
42
42
|
protected readonly api: API;
|
|
43
43
|
protected readonly log: Logger;
|
|
44
|
-
constructor(api: API, log: Logger, config: BaseMatterAccessoryConfig);
|
|
44
|
+
protected constructor(api: API, log: Logger, config: BaseMatterAccessoryConfig);
|
|
45
45
|
/**
|
|
46
46
|
* Update the accessory state
|
|
47
47
|
* Helper method to update cluster attributes
|
|
@@ -11,7 +11,7 @@ export declare class ColorLightAccessory extends BaseMatterAccessory {
|
|
|
11
11
|
private handleSetLevel;
|
|
12
12
|
private handleSetColor;
|
|
13
13
|
private handleSetHueSaturation;
|
|
14
|
-
updateOnOffState(isOn: boolean): void
|
|
15
|
-
updateBrightness(percent: number): void
|
|
16
|
-
updateHueSaturation(hue: number, saturation: number): void
|
|
14
|
+
updateOnOffState(isOn: boolean): Promise<void>;
|
|
15
|
+
updateBrightness(percent: number): Promise<void>;
|
|
16
|
+
updateHueSaturation(hue: number, saturation: number): Promise<void>;
|
|
17
17
|
}
|
|
@@ -48,6 +48,21 @@ export class ColorLightAccessory extends BaseMatterAccessory {
|
|
|
48
48
|
}
|
|
49
49
|
async handleOn() {
|
|
50
50
|
this.logInfo('turning on.');
|
|
51
|
+
// Example: Check if device is already processing another command
|
|
52
|
+
// if (this.isDeviceBusy) {
|
|
53
|
+
// throw new MatterStatus.Busy('Light is processing another command')
|
|
54
|
+
// }
|
|
55
|
+
// Example: Make API call with timeout
|
|
56
|
+
// try {
|
|
57
|
+
// await this.lightAPI.turnOn({ timeout: 5000 })
|
|
58
|
+
// } catch (error) {
|
|
59
|
+
// // If the API call times out, throw a Timeout error
|
|
60
|
+
// if (error.code === 'ETIMEDOUT') {
|
|
61
|
+
// throw new MatterStatus.Timeout('Light did not respond within 5 seconds')
|
|
62
|
+
// }
|
|
63
|
+
// // For other errors, let Homebridge wrap it as a generic Failure
|
|
64
|
+
// throw error
|
|
65
|
+
// }
|
|
51
66
|
// TODO: await myLightAPI.turnOn()
|
|
52
67
|
}
|
|
53
68
|
async handleOff() {
|
|
@@ -59,6 +74,16 @@ export class ColorLightAccessory extends BaseMatterAccessory {
|
|
|
59
74
|
const { level } = request;
|
|
60
75
|
const brightnessPercent = Math.round((level / 254) * 100);
|
|
61
76
|
this.logInfo(`setting brightness to ${brightnessPercent}%.`);
|
|
77
|
+
// Example: Validate the value meets device constraints
|
|
78
|
+
// if (brightnessPercent < 1 || brightnessPercent > 100) {
|
|
79
|
+
// throw new MatterStatus.ConstraintError(`Brightness ${brightnessPercent}% is out of range (1-100)`)
|
|
80
|
+
// }
|
|
81
|
+
// Example: Check if device supports this brightness level
|
|
82
|
+
// if (brightnessPercent < this.deviceMinBrightness) {
|
|
83
|
+
// throw new MatterStatus.ConstraintError(
|
|
84
|
+
// `Device minimum brightness is ${this.deviceMinBrightness}%`
|
|
85
|
+
// )
|
|
86
|
+
// }
|
|
62
87
|
// TODO: await myLightAPI.setBrightness(brightnessPercent)
|
|
63
88
|
}
|
|
64
89
|
async handleSetColor(request) {
|
|
@@ -75,19 +100,29 @@ export class ColorLightAccessory extends BaseMatterAccessory {
|
|
|
75
100
|
const hueDegrees = Math.round((hue / 254) * 360);
|
|
76
101
|
const saturationPercent = Math.round((saturation / 254) * 100);
|
|
77
102
|
this.logInfo(`setting color to ${hueDegrees}°, ${saturationPercent}%.`);
|
|
103
|
+
// Example: Check if device is in the right mode for color control
|
|
104
|
+
// if (this.currentColorMode !== 'hs') {
|
|
105
|
+
// throw new MatterStatus.InvalidInState(
|
|
106
|
+
// 'Light must be in HS color mode to set hue and saturation'
|
|
107
|
+
// )
|
|
108
|
+
// }
|
|
109
|
+
// Example: Check if light is on before setting color
|
|
110
|
+
// if (!this.isLightOn) {
|
|
111
|
+
// throw new MatterStatus.InvalidInState('Cannot set color while light is off')
|
|
112
|
+
// }
|
|
78
113
|
// TODO: await myLightAPI.setColor(hueDegrees, saturationPercent, transitionTime)
|
|
79
114
|
}
|
|
80
|
-
updateOnOffState(isOn) {
|
|
81
|
-
this.updateState(this.api.matter.clusterNames.OnOff, { onOff: isOn });
|
|
115
|
+
async updateOnOffState(isOn) {
|
|
116
|
+
await this.updateState(this.api.matter.clusterNames.OnOff, { onOff: isOn });
|
|
82
117
|
}
|
|
83
|
-
updateBrightness(percent) {
|
|
118
|
+
async updateBrightness(percent) {
|
|
84
119
|
const matterLevel = Math.max(1, Math.round((percent / 100) * 254));
|
|
85
|
-
this.updateState(this.api.matter.clusterNames.LevelControl, { currentLevel: matterLevel });
|
|
120
|
+
await this.updateState(this.api.matter.clusterNames.LevelControl, { currentLevel: matterLevel });
|
|
86
121
|
}
|
|
87
|
-
updateHueSaturation(hue, saturation) {
|
|
122
|
+
async updateHueSaturation(hue, saturation) {
|
|
88
123
|
const matterHue = Math.round((hue / 360) * 254);
|
|
89
124
|
const matterSat = Math.round((saturation / 100) * 254);
|
|
90
|
-
this.updateState(this.api.matter.clusterNames.ColorControl, {
|
|
125
|
+
await this.updateState(this.api.matter.clusterNames.ColorControl, {
|
|
91
126
|
currentHue: matterHue,
|
|
92
127
|
currentSaturation: matterSat,
|
|
93
128
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColorLightAccessory.js","sourceRoot":"","sources":["../../src/devices/ColorLightAccessory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,mBAAoB,SAAQ,mBAAmB;IAC1D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,WAAW,CAAA;QAChC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,mBAAmB;YAChC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,kBAAkB;YACrD,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,2BAA2B;YAClC,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;gBACvB,YAAY,EAAE;oBACZ,YAAY,EAAE,GAAG;oBACjB,QAAQ,EAAE,CAAC;oBACX,QAAQ,EAAE,GAAG;iBACd;gBACD,YAAY,EAAE;oBACZ,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,8BAA8B;oBACjF,UAAU,EAAE,CAAC;oBACb,iBAAiB,EAAE,GAAG;oBACtB,QAAQ,EAAE,KAAK;oBACf,QAAQ,EAAE,KAAK;iBAChB;aACF;YAED,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;oBAC/B,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE;iBAClC;gBACD,YAAY,EAAE;oBACZ,oBAAoB,EAAE,KAAK,EAAE,OAAmC,EAAE,EAAE,CAClE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;iBAC/B;gBACD,YAAY,EAAE;oBACZ,gBAAgB,EAAE,KAAK,EAAE,OAAmC,EAAE,EAAE,CAC9D,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;oBAC9B,2BAA2B,EAAE,KAAK,EAAE,OAA8C,EAAE,EAAE,CACpF,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;iBACvC;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QAC3B,kCAAkC;IACpC,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QAC5B,mCAAmC;IACrC,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,OAAmC;QAC9D,IAAI,CAAC,OAAO,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC/D,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;QACzB,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAA;QACzD,IAAI,CAAC,OAAO,CAAC,yBAAyB,iBAAiB,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"ColorLightAccessory.js","sourceRoot":"","sources":["../../src/devices/ColorLightAccessory.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ export declare class ColorTemperatureLightAccessory extends BaseMatterAccessory
|
|
|
9
9
|
private handleOff;
|
|
10
10
|
private handleSetLevel;
|
|
11
11
|
private handleSetColorTemperature;
|
|
12
|
-
updateOnOffState(isOn: boolean): void
|
|
13
|
-
updateBrightness(percent: number): void
|
|
14
|
-
updateColorTemperature(kelvin: number): void
|
|
12
|
+
updateOnOffState(isOn: boolean): Promise<void>;
|
|
13
|
+
updateBrightness(percent: number): Promise<void>;
|
|
14
|
+
updateColorTemperature(kelvin: number): Promise<void>;
|
|
15
15
|
}
|
|
@@ -66,18 +66,31 @@ export class ColorTemperatureLightAccessory extends BaseMatterAccessory {
|
|
|
66
66
|
const { colorTemperatureMireds, transitionTime } = request;
|
|
67
67
|
const kelvin = Math.round(1000000 / colorTemperatureMireds);
|
|
68
68
|
this.logInfo(`setting color temp to ${kelvin}k (${colorTemperatureMireds} mireds).`);
|
|
69
|
+
// Example: Validate against physical limits defined in cluster
|
|
70
|
+
// const minMireds = 147 // ~6800K (cool daylight)
|
|
71
|
+
// const maxMireds = 454 // ~2200K (warm candlelight)
|
|
72
|
+
// if (colorTemperatureMireds < minMireds) {
|
|
73
|
+
// throw new MatterStatus.ConstraintError(`Color temp ${kelvin}K exceeds maximum 6800K`)
|
|
74
|
+
// }
|
|
75
|
+
// if (colorTemperatureMireds > maxMireds) {
|
|
76
|
+
// throw new MatterStatus.ConstraintError(`Color temp ${kelvin}K below minimum 2200K`)
|
|
77
|
+
// }
|
|
78
|
+
// Example: Check if adjustment requires recalibration
|
|
79
|
+
// if (this.needsRecalibration && Math.abs(colorTemperatureMireds - this.lastMireds) > 100) {
|
|
80
|
+
// throw new MatterStatus.InvalidInState('Large color temp change requires recalibration')
|
|
81
|
+
// }
|
|
69
82
|
// TODO: await myLightAPI.setColorTemperature(kelvin, transitionTime)
|
|
70
83
|
}
|
|
71
|
-
updateOnOffState(isOn) {
|
|
72
|
-
this.updateState(this.api.matter.clusterNames.OnOff, { onOff: isOn });
|
|
84
|
+
async updateOnOffState(isOn) {
|
|
85
|
+
await this.updateState(this.api.matter.clusterNames.OnOff, { onOff: isOn });
|
|
73
86
|
}
|
|
74
|
-
updateBrightness(percent) {
|
|
87
|
+
async updateBrightness(percent) {
|
|
75
88
|
const matterLevel = Math.max(1, Math.round((percent / 100) * 254));
|
|
76
|
-
this.updateState(this.api.matter.clusterNames.LevelControl, { currentLevel: matterLevel });
|
|
89
|
+
await this.updateState(this.api.matter.clusterNames.LevelControl, { currentLevel: matterLevel });
|
|
77
90
|
}
|
|
78
|
-
updateColorTemperature(kelvin) {
|
|
91
|
+
async updateColorTemperature(kelvin) {
|
|
79
92
|
const mireds = Math.round(1000000 / kelvin);
|
|
80
|
-
this.updateState(this.api.matter.clusterNames.ColorControl, { colorTemperatureMireds: mireds });
|
|
93
|
+
await this.updateState(this.api.matter.clusterNames.ColorControl, { colorTemperatureMireds: mireds });
|
|
81
94
|
}
|
|
82
95
|
}
|
|
83
96
|
//# sourceMappingURL=ColorTemperatureLightAccessory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColorTemperatureLightAccessory.js","sourceRoot":"","sources":["../../src/devices/ColorTemperatureLightAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,8BAA+B,SAAQ,mBAAmB;IACrE,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,WAAW,CAAA;QAChC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,0BAA0B;YACvC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,qBAAqB;YACxD,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,6BAA6B;YACpC,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,KAAK,EAAE,KAAK;iBACb;gBACD,YAAY,EAAE;oBACZ,YAAY,EAAE,GAAG;oBACjB,QAAQ,EAAE,CAAC;oBACX,QAAQ,EAAE,GAAG;iBACd;gBACD,YAAY,EAAE;oBACZ,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,sBAAsB;oBACzE,sBAAsB,EAAE,GAAG;oBAC3B,0BAA0B,EAAE,GAAG;oBAC/B,0BAA0B,EAAE,GAAG;oBAC/B,+BAA+B,EAAE,GAAG;iBACrC;aACF;YAED,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;oBAC/B,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE;iBAClC;gBACD,YAAY,EAAE;oBACZ,oBAAoB,EAAE,KAAK,EAAE,OAAmC,EAAE,EAAE,CAClE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;iBAC/B;gBACD,YAAY,EAAE;oBACZ,2BAA2B,EAAE,KAAK,EAAE,OAA8C,EAAE,EAAE,CACpF,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC;iBAC1C;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QAC3B,kCAAkC;IACpC,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QAC5B,mCAAmC;IACrC,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,OAAmC;QAC9D,IAAI,CAAC,OAAO,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC/D,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;QACzB,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAA;QACzD,IAAI,CAAC,OAAO,CAAC,yBAAyB,iBAAiB,aAAa,KAAK,IAAI,CAAC,CAAA;QAC9E,0DAA0D;IAC5D,CAAC;IAEO,KAAK,CAAC,yBAAyB,CAAC,OAA8C;QACpF,IAAI,CAAC,OAAO,CAAC,mCAAmC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC1E,MAAM,EAAE,sBAAsB,EAAE,cAAc,EAAE,GAAG,OAAO,CAAA;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,sBAAsB,CAAC,CAAA;QAC3D,IAAI,CAAC,OAAO,CAAC,yBAAyB,MAAM,MAAM,sBAAsB,WAAW,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"ColorTemperatureLightAccessory.js","sourceRoot":"","sources":["../../src/devices/ColorTemperatureLightAccessory.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,5 +5,5 @@ import type { API, Logger } from 'homebridge';
|
|
|
5
5
|
import { BaseMatterAccessory } from './BaseMatterAccessory.js';
|
|
6
6
|
export declare class ContactSensorAccessory extends BaseMatterAccessory {
|
|
7
7
|
constructor(api: API, log: Logger);
|
|
8
|
-
updateContactState(isOpen: boolean): void
|
|
8
|
+
updateContactState(isOpen: boolean): Promise<void>;
|
|
9
9
|
}
|
|
@@ -22,9 +22,9 @@ export class ContactSensorAccessory extends BaseMatterAccessory {
|
|
|
22
22
|
});
|
|
23
23
|
this.logInfo('initialized.');
|
|
24
24
|
}
|
|
25
|
-
updateContactState(isOpen) {
|
|
25
|
+
async updateContactState(isOpen) {
|
|
26
26
|
// Matter BooleanState: false = open/triggered, true = closed/normal (inverted!)
|
|
27
|
-
this.updateState(this.api.matter.clusterNames.BooleanState, { stateValue: !isOpen });
|
|
27
|
+
await this.updateState(this.api.matter.clusterNames.BooleanState, { stateValue: !isOpen });
|
|
28
28
|
this.logInfo(`contact state: ${isOpen ? 'OPEN' : 'CLOSED'}.`);
|
|
29
29
|
}
|
|
30
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContactSensorAccessory.js","sourceRoot":"","sources":["../../src/devices/ContactSensorAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,sBAAuB,SAAQ,mBAAmB;IAC7D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,YAAY,CAAA;QACjC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,gBAAgB;YAC7B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa;YAChD,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,0BAA0B;YACjC,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,YAAY,EAAE;oBACZ,UAAU,EAAE,IAAI,EAAE,uDAAuD;iBAC1E;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEM,kBAAkB,CAAC,MAAe;
|
|
1
|
+
{"version":3,"file":"ContactSensorAccessory.js","sourceRoot":"","sources":["../../src/devices/ContactSensorAccessory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,sBAAuB,SAAQ,mBAAmB;IAC7D,YAAY,GAAQ,EAAE,GAAW;QAC/B,MAAM,YAAY,GAAG,YAAY,CAAA;QACjC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;YACd,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC5C,WAAW,EAAE,gBAAgB;YAC7B,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa;YAChD,YAAY;YACZ,YAAY,EAAE,mBAAmB;YACjC,KAAK,EAAE,0BAA0B;YACjC,gBAAgB,EAAE,OAAO;YACzB,gBAAgB,EAAE,OAAO;YAEzB,QAAQ,EAAE;gBACR,YAAY,EAAE;oBACZ,UAAU,EAAE,IAAI,EAAE,uDAAuD;iBAC1E;aACF;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC9B,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAAC,MAAe;QAC7C,gFAAgF;QAChF,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,CAAC,MAAM,EAAE,CAAC,CAAA;QAC1F,IAAI,CAAC,OAAO,CAAC,kBAAkB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAA;IAC/D,CAAC;CACF"}
|
|
@@ -33,12 +33,12 @@ export declare class DimmableLightAccessory extends BaseMatterAccessory {
|
|
|
33
33
|
/**
|
|
34
34
|
* Update on/off state from external source
|
|
35
35
|
*/
|
|
36
|
-
updateOnOffState(isOn: boolean): void
|
|
36
|
+
updateOnOffState(isOn: boolean): Promise<void>;
|
|
37
37
|
/**
|
|
38
38
|
* Update brightness level from external source
|
|
39
39
|
* @param percent - Brightness percentage (0-100)
|
|
40
40
|
*/
|
|
41
|
-
updateBrightness(percent: number): void
|
|
41
|
+
updateBrightness(percent: number): Promise<void>;
|
|
42
42
|
/**
|
|
43
43
|
* Get current brightness as percentage
|
|
44
44
|
*/
|
|
@@ -47,7 +47,7 @@ export declare class DimmableLightAccessory extends BaseMatterAccessory {
|
|
|
47
47
|
* Set brightness and power state together
|
|
48
48
|
* Useful for syncing complete state from external source
|
|
49
49
|
*/
|
|
50
|
-
updateFullState(isOn: boolean, percent: number): void
|
|
50
|
+
updateFullState(isOn: boolean, percent: number): Promise<void>;
|
|
51
51
|
/**
|
|
52
52
|
* Example monitoring setup
|
|
53
53
|
*/
|
|
@@ -95,6 +95,18 @@ export class DimmableLightAccessory extends BaseMatterAccessory {
|
|
|
95
95
|
const brightnessPercent = Math.round((level / 254) * 100);
|
|
96
96
|
this.currentLevel = level;
|
|
97
97
|
this.logInfo(`setting brightness to ${brightnessPercent}% (level: ${level}).`);
|
|
98
|
+
// Example: Validate the brightness level meets device constraints
|
|
99
|
+
// if (level < 10) {
|
|
100
|
+
// throw new MatterStatus.ConstraintError('Minimum brightness is 10 (4%) for this bulb')
|
|
101
|
+
// }
|
|
102
|
+
// Example: Check if device supports the transition time requested
|
|
103
|
+
// if (transitionTime !== null && transitionTime > 300) {
|
|
104
|
+
// throw new MatterStatus.ConstraintError('Maximum transition time is 300 (30 seconds)')
|
|
105
|
+
// }
|
|
106
|
+
// Example: Check if dimming is supported
|
|
107
|
+
// if (!this.supportsDimming) {
|
|
108
|
+
// throw new MatterStatus.InvalidAction('This bulb does not support dimming')
|
|
109
|
+
// }
|
|
98
110
|
try {
|
|
99
111
|
// TODO: Control your physical device
|
|
100
112
|
// await myLightAPI.setBrightness(brightnessPercent, transitionTime)
|
|
@@ -102,21 +114,25 @@ export class DimmableLightAccessory extends BaseMatterAccessory {
|
|
|
102
114
|
}
|
|
103
115
|
catch (error) {
|
|
104
116
|
this.logError('Failed to set brightness:', error);
|
|
117
|
+
// Example: Handle dimming hardware failures
|
|
118
|
+
// if (error.code === 'DIMMER_FAULT') {
|
|
119
|
+
// throw new MatterStatus.Failure('Dimmer circuit malfunction - bulb may need replacement')
|
|
120
|
+
// }
|
|
105
121
|
throw error;
|
|
106
122
|
}
|
|
107
123
|
}
|
|
108
124
|
/**
|
|
109
125
|
* Update on/off state from external source
|
|
110
126
|
*/
|
|
111
|
-
updateOnOffState(isOn) {
|
|
112
|
-
this.updateState(this.api.matter.clusterNames.OnOff, { onOff: isOn });
|
|
127
|
+
async updateOnOffState(isOn) {
|
|
128
|
+
await this.updateState(this.api.matter.clusterNames.OnOff, { onOff: isOn });
|
|
113
129
|
this.logInfo(`state synced: ${isOn ? 'ON' : 'OFF'}.`);
|
|
114
130
|
}
|
|
115
131
|
/**
|
|
116
132
|
* Update brightness level from external source
|
|
117
133
|
* @param percent - Brightness percentage (0-100)
|
|
118
134
|
*/
|
|
119
|
-
updateBrightness(percent) {
|
|
135
|
+
async updateBrightness(percent) {
|
|
120
136
|
// Validate input
|
|
121
137
|
if (percent < 0 || percent > 100) {
|
|
122
138
|
this.logWarn(`Invalid brightness percentage: ${percent}. Must be 0-100.`);
|
|
@@ -125,7 +141,7 @@ export class DimmableLightAccessory extends BaseMatterAccessory {
|
|
|
125
141
|
// Convert percent to Matter level (1-254)
|
|
126
142
|
const matterLevel = Math.max(1, Math.round((percent / 100) * 254));
|
|
127
143
|
this.currentLevel = matterLevel;
|
|
128
|
-
this.updateState(this.api.matter.clusterNames.LevelControl, {
|
|
144
|
+
await this.updateState(this.api.matter.clusterNames.LevelControl, {
|
|
129
145
|
currentLevel: matterLevel,
|
|
130
146
|
});
|
|
131
147
|
this.logInfo(`brightness synced: ${percent}% (level: ${matterLevel}).`);
|
|
@@ -140,10 +156,10 @@ export class DimmableLightAccessory extends BaseMatterAccessory {
|
|
|
140
156
|
* Set brightness and power state together
|
|
141
157
|
* Useful for syncing complete state from external source
|
|
142
158
|
*/
|
|
143
|
-
updateFullState(isOn, percent) {
|
|
144
|
-
this.updateOnOffState(isOn);
|
|
159
|
+
async updateFullState(isOn, percent) {
|
|
160
|
+
await this.updateOnOffState(isOn);
|
|
145
161
|
if (isOn) {
|
|
146
|
-
this.updateBrightness(percent);
|
|
162
|
+
await this.updateBrightness(percent);
|
|
147
163
|
}
|
|
148
164
|
}
|
|
149
165
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DimmableLightAccessory.js","sourceRoot":"","sources":["../../src/devices/DimmableLightAccessory.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"DimmableLightAccessory.js","sourceRoot":"","sources":["../../src/devices/DimmableLightAccessory.ts"],"names":[],"mappings":"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"}
|