@homebridge-plugins/homebridge-matter 0.0.2 → 0.0.3
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/.claude/settings.local.json +24 -0
- package/CHANGELOG.md +11 -0
- package/dist/platform.d.ts +1 -21
- package/dist/platform.js +170 -535
- package/dist/platform.js.map +1 -1
- package/package.json +7 -7
- package/dist/exampleStateManagement.d.ts +0 -42
- package/dist/exampleStateManagement.js +0 -236
- package/dist/exampleStateManagement.js.map +0 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"Bash(git -C ../homebridge log -1 --oneline)",
|
|
5
|
+
"Bash(git -C ../homebridge show --stat 481784d)",
|
|
6
|
+
"Read(//Users/benpotter/Documents/GitHub/homebridge/src/matter/**)",
|
|
7
|
+
"Read(//Users/benpotter/Documents/GitHub/homebridge/src/**)",
|
|
8
|
+
"Bash(npm run build)",
|
|
9
|
+
"Read(//Users/benpotter/Documents/GitHub/homebridge/node_modules/@matter/**)",
|
|
10
|
+
"WebFetch(domain:github.com)",
|
|
11
|
+
"WebSearch",
|
|
12
|
+
"Read(//Users/benpotter/Documents/GitHub/homebridge/**)",
|
|
13
|
+
"Bash(git -C ../homebridge show --stat HEAD)",
|
|
14
|
+
"Bash(git -C ../homebridge log -10 --oneline)",
|
|
15
|
+
"Bash(git -C ../homebridge show --stat 0420d2b)",
|
|
16
|
+
"Bash(find:*)",
|
|
17
|
+
"Bash(cat:*)",
|
|
18
|
+
"Read(//Users/benpotter/.homebridge/matter/**)",
|
|
19
|
+
"Read(//Users/benpotter/.homebridge/**)"
|
|
20
|
+
],
|
|
21
|
+
"deny": [],
|
|
22
|
+
"ask": []
|
|
23
|
+
}
|
|
24
|
+
}
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `@homebridge-plugins/homebridge-matter` will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## v0.0.3 (2025-10-17)
|
|
6
|
+
|
|
7
|
+
### Changes
|
|
8
|
+
|
|
9
|
+
- added more examples for lights, examples provided:
|
|
10
|
+
- light on/off
|
|
11
|
+
- light + brightness
|
|
12
|
+
- light + brightness + color
|
|
13
|
+
- light + brightness + color temperature
|
|
14
|
+
- light + brightness + color temperature + color
|
|
15
|
+
|
|
5
16
|
## v0.0.2 (2025-10-15)
|
|
6
17
|
|
|
7
18
|
### Changes
|
package/dist/platform.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export declare class ExampleHomebridgePlatform implements DynamicPlatformPlugin
|
|
|
13
13
|
* Required for DynamicPlatformPlugin
|
|
14
14
|
* Called when homebridge restores cached accessories from disk at startup
|
|
15
15
|
*/
|
|
16
|
-
configureAccessory(
|
|
16
|
+
configureAccessory(): void;
|
|
17
17
|
/**
|
|
18
18
|
* Register all Matter accessory examples
|
|
19
19
|
*/
|
|
@@ -22,24 +22,4 @@ export declare class ExampleHomebridgePlatform implements DynamicPlatformPlugin
|
|
|
22
22
|
* Lighting Devices
|
|
23
23
|
*/
|
|
24
24
|
private registerLightingDevices;
|
|
25
|
-
/**
|
|
26
|
-
* Switches and Outlets
|
|
27
|
-
*/
|
|
28
|
-
private registerSwitchesAndOutlets;
|
|
29
|
-
/**
|
|
30
|
-
* Sensors
|
|
31
|
-
*/
|
|
32
|
-
private registerSensors;
|
|
33
|
-
/**
|
|
34
|
-
* HVAC Devices
|
|
35
|
-
*/
|
|
36
|
-
private registerHVAC;
|
|
37
|
-
/**
|
|
38
|
-
* Security Devices
|
|
39
|
-
*/
|
|
40
|
-
private registerSecurity;
|
|
41
|
-
/**
|
|
42
|
-
* Other Devices
|
|
43
|
-
*/
|
|
44
|
-
private registerOtherDevices;
|
|
45
25
|
}
|
package/dist/platform.js
CHANGED
|
@@ -28,9 +28,8 @@ export class ExampleHomebridgePlatform {
|
|
|
28
28
|
* Required for DynamicPlatformPlugin
|
|
29
29
|
* Called when homebridge restores cached accessories from disk at startup
|
|
30
30
|
*/
|
|
31
|
-
configureAccessory(accessory) {
|
|
32
|
-
this
|
|
33
|
-
this.accessories.set(accessory.UUID, accessory);
|
|
31
|
+
configureAccessory( /* accessory: PlatformAccessory */) {
|
|
32
|
+
// Note this is not used for Matter accessories, as they are registered dynamically
|
|
34
33
|
}
|
|
35
34
|
/**
|
|
36
35
|
* Register all Matter accessory examples
|
|
@@ -45,287 +44,105 @@ export class ExampleHomebridgePlatform {
|
|
|
45
44
|
// this.registerSecurity();
|
|
46
45
|
// this.registerOtherDevices();
|
|
47
46
|
this.log.info('Finished registering Matter accessories');
|
|
47
|
+
// You can read current state using the API
|
|
48
|
+
const onOffState = this.api.matter.getAccessoryState('matter-dimmable-light', this.api.matter.clusterNames.OnOff);
|
|
49
|
+
if (onOffState) {
|
|
50
|
+
this.log.info(`[On/Off Light] 📖 Reading Dimmable Light on/off via API: ${onOffState.onOff ? 'ON' : 'OFF'}`);
|
|
51
|
+
}
|
|
52
|
+
const levelState = this.api.matter.getAccessoryState('matter-dimmable-light', this.api.matter.clusterNames.LevelControl);
|
|
53
|
+
if (levelState) {
|
|
54
|
+
this.log.info(`[On/Off Light] 📖 Reading Dimmable Light brightness via API: ${levelState.currentLevel} (${Math.round((levelState?.currentLevel || 0) / 254 * 100)}%)`);
|
|
55
|
+
}
|
|
56
|
+
// // ═══════════════════════════════════════════════════════════════
|
|
57
|
+
// // PATTERN 2 DEMONSTRATION: Update Dimmable Light WITHOUT handler
|
|
58
|
+
// // ═══════════════════════════════════════════════════════════════
|
|
59
|
+
// // Simulating: Dimmable light state changed externally (like via native app)
|
|
60
|
+
// // This will update the Home app WITHOUT triggering the dimmable light's handler
|
|
61
|
+
// // Note: Homebridge automatically defers the update to avoid transaction conflicts
|
|
62
|
+
// this.log.info('[On/Off Light] → Updating Dimmable Light state using updateMatterAccessoryState (no handler!)')
|
|
63
|
+
//
|
|
64
|
+
// this.api.matter.updateAccessoryState(uuidLightDimmable, this.api.matter.clusterNames.OnOff, {
|
|
65
|
+
// onOff: true,
|
|
66
|
+
// })
|
|
48
67
|
}
|
|
49
68
|
/**
|
|
50
69
|
* Lighting Devices
|
|
51
70
|
*/
|
|
52
71
|
registerLightingDevices() {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
this.api.registerMatterAccessory({
|
|
62
|
-
uuid: 'matter-onoff-light',
|
|
72
|
+
const uuidLightOnOff = this.api.matter.uuid.generate('matter-onoff-light');
|
|
73
|
+
const uuidLightDimmable = this.api.matter.uuid.generate('matter-dimmable-light');
|
|
74
|
+
const uuidLightColourTemp = this.api.matter.uuid.generate('matter-colour-temp-light');
|
|
75
|
+
const uuidLightColour = this.api.matter.uuid.generate('matter-colour-light');
|
|
76
|
+
const uuidLightExtendedColour = this.api.matter.uuid.generate('matter-extended-colour-light');
|
|
77
|
+
// 1. On/Off Light
|
|
78
|
+
this.api.matter.registerAccessory({
|
|
79
|
+
uuid: uuidLightOnOff,
|
|
63
80
|
displayName: 'On/Off Light',
|
|
64
|
-
deviceType: this.api.
|
|
81
|
+
deviceType: this.api.matter.deviceTypes.OnOffLight,
|
|
65
82
|
serialNumber: 'LIGHT-001',
|
|
66
83
|
manufacturer: 'Matter Examples',
|
|
67
84
|
model: 'OnOffLight v1',
|
|
68
|
-
clusters: {
|
|
69
|
-
// clusters: {
|
|
70
|
-
// onOff: {
|
|
71
|
-
// onOff: onOffLightState,
|
|
72
|
-
// },
|
|
73
|
-
// },
|
|
74
|
-
// PATTERN 1: Handlers (Home app → Device)
|
|
75
|
-
// These execute when user controls via Home app
|
|
76
|
-
handlers: {
|
|
85
|
+
clusters: {
|
|
77
86
|
onOff: {
|
|
78
|
-
|
|
79
|
-
this.log.info('[On/Off Light] ✓ Turned ON via Home app handler');
|
|
80
|
-
// Update local state
|
|
81
|
-
onOffLightState = true;
|
|
82
|
-
// NOTE: This light's state automatically updates after handler completes!
|
|
83
|
-
// ═══════════════════════════════════════════════════════════════
|
|
84
|
-
// PATTERN 3: Reading Current State (api.getAccessoryState)
|
|
85
|
-
// ═══════════════════════════════════════════════════════════════
|
|
86
|
-
// You can read current state using the API (useful after plugin restarts)
|
|
87
|
-
const onOffState = this.api.getAccessoryState('matter-dimmable-light', 'onOff');
|
|
88
|
-
const levelState = this.api.getAccessoryState('matter-dimmable-light', 'levelControl');
|
|
89
|
-
this.log.error(`[On/Off Light] 📖 Reading Dimmable Light on/off via API: ${onOffState?.onOff ? 'ON' : 'OFF'}`);
|
|
90
|
-
this.log.error(`[On/Off Light] 📖 Reading Dimmable Light brightness via API: ${levelState?.currentLevel} (${Math.round((levelState?.currentLevel || 0) / 254 * 100)}%)`);
|
|
91
|
-
// Note: You can also track state in local variables (same as HAP pattern)
|
|
92
|
-
this.log.error(`[On/Off Light] 📖 Reading from local variable: ${dimmableBrightness} (${Math.round(dimmableBrightness / 254 * 100)}%)`);
|
|
93
|
-
// ═══════════════════════════════════════════════════════════════
|
|
94
|
-
// PATTERN 2 DEMONSTRATION: Update Dimmable Light WITHOUT handler
|
|
95
|
-
// ═══════════════════════════════════════════════════════════════
|
|
96
|
-
// Simulating: Dimmable light state changed externally (like via native app)
|
|
97
|
-
// This will update the Home app WITHOUT triggering the dimmable light's handler
|
|
98
|
-
// Note: Homebridge automatically defers the update to avoid transaction conflicts
|
|
99
|
-
this.log.info('[On/Off Light] → Updating Dimmable Light state using updateMatterAccessoryState (no handler!)');
|
|
100
|
-
dimmableLightOn = true;
|
|
101
|
-
this.api.updateMatterAccessoryState('matter-dimmable-light', 'onOff', {
|
|
102
|
-
onOff: true,
|
|
103
|
-
});
|
|
104
|
-
this.log.info('[On/Off Light] ✓ Dimmable Light state updated (handler was NOT called)');
|
|
105
|
-
},
|
|
106
|
-
off: async () => {
|
|
107
|
-
this.log.info('[On/Off Light] ✓ Turned OFF via Home app handler');
|
|
108
|
-
// Update local state
|
|
109
|
-
onOffLightState = false;
|
|
110
|
-
// Reading current state using the API
|
|
111
|
-
const onOffState = this.api.getAccessoryState('matter-dimmable-light', 'onOff');
|
|
112
|
-
const levelState = this.api.getAccessoryState('matter-dimmable-light', 'levelControl');
|
|
113
|
-
this.log.error(`[On/Off Light] 📖 Reading Dimmable Light on/off via API: ${onOffState?.onOff ? 'ON' : 'OFF'}`);
|
|
114
|
-
this.log.error(`[On/Off Light] 📖 Reading Dimmable Light brightness via API: ${levelState?.currentLevel} (${Math.round((levelState?.currentLevel || 0) / 254 * 100)}%)`);
|
|
115
|
-
// Update Dimmable Light WITHOUT triggering its handler
|
|
116
|
-
this.log.info('[On/Off Light] → Updating Dimmable Light state using updateMatterAccessoryState (no handler!)');
|
|
117
|
-
dimmableLightOn = false;
|
|
118
|
-
this.api.updateMatterAccessoryState('matter-dimmable-light', 'onOff', {
|
|
119
|
-
onOff: false,
|
|
120
|
-
});
|
|
121
|
-
this.log.info('[On/Off Light] ✓ Dimmable Light state updated (handler was NOT called)');
|
|
122
|
-
},
|
|
87
|
+
onOff: true,
|
|
123
88
|
},
|
|
124
89
|
},
|
|
125
|
-
|
|
126
|
-
// 2. Dimmable Light - Will be updated by On/Off Light
|
|
127
|
-
// This demonstrates receiving state updates WITHOUT handler execution
|
|
128
|
-
this.api.registerMatterAccessory({
|
|
129
|
-
uuid: 'matter-dimmable-light',
|
|
130
|
-
displayName: 'Dimmable Light',
|
|
131
|
-
deviceType: this.api.matterDeviceTypes.DimmableLight,
|
|
132
|
-
serialNumber: 'LIGHT-002',
|
|
133
|
-
manufacturer: 'Matter Examples',
|
|
134
|
-
model: 'DimmableLight v1',
|
|
135
|
-
clusters: {},
|
|
136
|
-
// onOff: {
|
|
137
|
-
// onOff: dimmableLightOn,
|
|
138
|
-
// },
|
|
139
|
-
// levelControl: {
|
|
140
|
-
// currentLevel: dimmableBrightness,
|
|
141
|
-
// minLevel: 1,
|
|
142
|
-
// maxLevel: 254,
|
|
143
|
-
// },
|
|
144
|
-
// },
|
|
145
|
-
// These handlers will NOT be called when On/Off Light updates this accessory's state
|
|
90
|
+
// These are called when the user controls the accessory via the Home app
|
|
146
91
|
handlers: {
|
|
147
92
|
onOff: {
|
|
148
|
-
on: async () => {
|
|
149
|
-
this.log.info('[
|
|
150
|
-
dimmableLightOn = true;
|
|
93
|
+
on: async ( /* no args */) => {
|
|
94
|
+
this.log.info('[On/Off Light] ✓ Handler `on` called (user controlled via Home app)');
|
|
151
95
|
},
|
|
152
|
-
off: async () => {
|
|
153
|
-
this.log.info('[
|
|
154
|
-
dimmableLightOn = false;
|
|
155
|
-
},
|
|
156
|
-
},
|
|
157
|
-
levelControl: {
|
|
158
|
-
moveToLevel: async (args) => {
|
|
159
|
-
this.log.info(`[Dimmable Light] ✓ Handler moveToLevel called with ${args.level} (${Math.round(args.level / 254 * 100)}%)`);
|
|
160
|
-
dimmableBrightness = args.level;
|
|
96
|
+
off: async ( /* no args */) => {
|
|
97
|
+
this.log.info('[On/Off Light] ✓ Handler `off` called (user controlled via Home app)');
|
|
161
98
|
},
|
|
162
99
|
},
|
|
163
100
|
},
|
|
164
101
|
});
|
|
165
|
-
//
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
// serialNumber: 'LIGHT-003',
|
|
172
|
-
// manufacturer: 'Matter Examples',
|
|
173
|
-
// model: 'ColorTempLight v1',
|
|
174
|
-
//
|
|
175
|
-
// clusters: {
|
|
176
|
-
// onOff: {
|
|
177
|
-
// onOff: false,
|
|
178
|
-
// },
|
|
179
|
-
// levelControl: {
|
|
180
|
-
// currentLevel: 127,
|
|
181
|
-
// minLevel: 1,
|
|
182
|
-
// maxLevel: 254,
|
|
183
|
-
// },
|
|
184
|
-
// colorControl: {
|
|
185
|
-
// colorMode: 2, // Color temperature mode
|
|
186
|
-
// colorTemperatureMireds: 250, // ~4000K
|
|
187
|
-
// colorTempPhysicalMinMireds: 147, // 6800K
|
|
188
|
-
// colorTempPhysicalMaxMireds: 454, // 2200K
|
|
189
|
-
// },
|
|
190
|
-
// },
|
|
191
|
-
//
|
|
192
|
-
// handlers: {
|
|
193
|
-
// onOff: {
|
|
194
|
-
// on: async () => {
|
|
195
|
-
// this.log.info('[Color Temp Light] Turned ON');
|
|
196
|
-
// },
|
|
197
|
-
// off: async () => {
|
|
198
|
-
// this.log.info('[Color Temp Light] Turned OFF');
|
|
199
|
-
// },
|
|
200
|
-
// },
|
|
201
|
-
// levelControl: {
|
|
202
|
-
// moveToLevel: async (args: any) => {
|
|
203
|
-
// this.log.info(`[Color Temp Light] Brightness changed to ${args.level}`);
|
|
204
|
-
// },
|
|
205
|
-
// },
|
|
206
|
-
// colorControl: {
|
|
207
|
-
// moveToColorTemperature: async (args: any) => {
|
|
208
|
-
// const kelvin = Math.round(1000000 / args.colorTemperatureMireds);
|
|
209
|
-
// this.log.info(`[Color Temp Light] Color temperature changed to ${args.colorTemperatureMireds} mireds (~${kelvin}K)`);
|
|
210
|
-
// },
|
|
211
|
-
// },
|
|
212
|
-
// },
|
|
213
|
-
// });
|
|
214
|
-
//
|
|
215
|
-
// // 4. Extended Color Light (RGB)
|
|
216
|
-
// this.api.registerMatterAccessory({
|
|
217
|
-
// uuid: 'matter-rgb-light',
|
|
218
|
-
// displayName: 'RGB Color Light',
|
|
219
|
-
// deviceType: this.api.matterDeviceTypes.ExtendedColorLight,
|
|
220
|
-
// serialNumber: 'LIGHT-004',
|
|
221
|
-
// manufacturer: 'Matter Examples',
|
|
222
|
-
// model: 'RGBLight v1',
|
|
223
|
-
//
|
|
224
|
-
// clusters: {
|
|
225
|
-
// onOff: {
|
|
226
|
-
// onOff: false,
|
|
227
|
-
// },
|
|
228
|
-
// levelControl: {
|
|
229
|
-
// currentLevel: 127,
|
|
230
|
-
// minLevel: 1,
|
|
231
|
-
// maxLevel: 254,
|
|
232
|
-
// },
|
|
233
|
-
// colorControl: {
|
|
234
|
-
// colorMode: 1, // Hue/Saturation mode
|
|
235
|
-
// currentHue: 0, // Red
|
|
236
|
-
// currentSaturation: 254, // Full saturation
|
|
237
|
-
// colorCapabilities: 0x0001, // Hue/Saturation support
|
|
238
|
-
// },
|
|
239
|
-
// },
|
|
240
|
-
//
|
|
241
|
-
// handlers: {
|
|
242
|
-
// onOff: {
|
|
243
|
-
// on: async () => {
|
|
244
|
-
// this.log.info('[RGB Light] Turned ON');
|
|
245
|
-
// },
|
|
246
|
-
// off: async () => {
|
|
247
|
-
// this.log.info('[RGB Light] Turned OFF');
|
|
248
|
-
// },
|
|
249
|
-
// },
|
|
250
|
-
// levelControl: {
|
|
251
|
-
// moveToLevel: async (args: any) => {
|
|
252
|
-
// this.log.info(`[RGB Light] Brightness changed to ${args.level}`);
|
|
253
|
-
// },
|
|
254
|
-
// },
|
|
255
|
-
// colorControl: {
|
|
256
|
-
// moveToHue: async (args: any) => {
|
|
257
|
-
// this.log.info(`[RGB Light] Hue changed to ${args.hue}`);
|
|
258
|
-
// },
|
|
259
|
-
// moveToSaturation: async (args: any) => {
|
|
260
|
-
// this.log.info(`[RGB Light] Saturation changed to ${args.saturation}`);
|
|
261
|
-
// },
|
|
262
|
-
// moveToHueAndSaturation: async (args: any) => {
|
|
263
|
-
// this.log.info(`[RGB Light] Color changed to H:${args.hue} S:${args.saturation}`);
|
|
264
|
-
// },
|
|
265
|
-
// },
|
|
266
|
-
// },
|
|
267
|
-
// });
|
|
268
|
-
}
|
|
269
|
-
/**
|
|
270
|
-
* Switches and Outlets
|
|
271
|
-
*/
|
|
272
|
-
registerSwitchesAndOutlets() {
|
|
273
|
-
// 5. On/Off Switch
|
|
274
|
-
this.api.registerMatterAccessory({
|
|
275
|
-
uuid: 'matter-switch',
|
|
276
|
-
displayName: 'On/Off Switch',
|
|
277
|
-
deviceType: this.api.matterDeviceTypes.OnOffSwitch,
|
|
278
|
-
serialNumber: 'SWITCH-001',
|
|
102
|
+
// 2. Dimmable Light
|
|
103
|
+
this.api.matter.registerAccessory({
|
|
104
|
+
uuid: uuidLightDimmable,
|
|
105
|
+
displayName: 'Dimmable Light',
|
|
106
|
+
deviceType: this.api.matter.deviceTypes.DimmableLight,
|
|
107
|
+
serialNumber: 'LIGHT-002',
|
|
279
108
|
manufacturer: 'Matter Examples',
|
|
280
|
-
model: '
|
|
109
|
+
model: 'DimmableLight v1',
|
|
281
110
|
clusters: {
|
|
282
111
|
onOff: {
|
|
283
112
|
onOff: false,
|
|
284
113
|
},
|
|
114
|
+
levelControl: {
|
|
115
|
+
currentLevel: 127,
|
|
116
|
+
minLevel: 1,
|
|
117
|
+
maxLevel: 254,
|
|
118
|
+
},
|
|
285
119
|
},
|
|
120
|
+
// These are called when the user controls the accessory via the Home app
|
|
286
121
|
handlers: {
|
|
287
122
|
onOff: {
|
|
288
123
|
on: async () => {
|
|
289
|
-
this.log.info('[
|
|
124
|
+
this.log.info('[Dimmable Light] ✓ Handler `on` called (user controlled via Home app)');
|
|
290
125
|
},
|
|
291
126
|
off: async () => {
|
|
292
|
-
this.log.info('[
|
|
127
|
+
this.log.info('[Dimmable Light] ✓ Handler `off` called (user controlled via Home app)');
|
|
293
128
|
},
|
|
294
129
|
},
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
uuid: 'matter-outlet',
|
|
300
|
-
displayName: 'Smart Outlet',
|
|
301
|
-
deviceType: this.api.matterDeviceTypes.OnOffOutlet,
|
|
302
|
-
serialNumber: 'OUTLET-001',
|
|
303
|
-
manufacturer: 'Matter Examples',
|
|
304
|
-
model: 'Outlet v1',
|
|
305
|
-
clusters: {
|
|
306
|
-
onOff: {
|
|
307
|
-
onOff: false,
|
|
308
|
-
},
|
|
309
|
-
},
|
|
310
|
-
handlers: {
|
|
311
|
-
onOff: {
|
|
312
|
-
on: async () => {
|
|
313
|
-
this.log.info('[Outlet] Turned ON');
|
|
314
|
-
},
|
|
315
|
-
off: async () => {
|
|
316
|
-
this.log.info('[Outlet] Turned OFF');
|
|
130
|
+
levelControl: {
|
|
131
|
+
moveToLevelWithOnOff: async (request) => {
|
|
132
|
+
const { level } = request;
|
|
133
|
+
this.log.info(`[Dimmable Light] ✓ Handler \`moveToLevel\` called with ${level} (${Math.round(level / 254 * 100)}%)`);
|
|
317
134
|
},
|
|
318
135
|
},
|
|
319
136
|
},
|
|
320
137
|
});
|
|
321
|
-
//
|
|
322
|
-
this.api.
|
|
323
|
-
uuid:
|
|
324
|
-
displayName: '
|
|
325
|
-
deviceType: this.api.
|
|
326
|
-
serialNumber: '
|
|
138
|
+
// 3. Colour Temperature Light
|
|
139
|
+
this.api.matter.registerAccessory({
|
|
140
|
+
uuid: uuidLightColourTemp,
|
|
141
|
+
displayName: 'Colour Temperature Light',
|
|
142
|
+
deviceType: this.api.matter.deviceTypes.ColorTemperatureLight,
|
|
143
|
+
serialNumber: 'LIGHT-003',
|
|
327
144
|
manufacturer: 'Matter Examples',
|
|
328
|
-
model: '
|
|
145
|
+
model: 'ColourTempLight v1',
|
|
329
146
|
clusters: {
|
|
330
147
|
onOff: {
|
|
331
148
|
onOff: false,
|
|
@@ -335,341 +152,159 @@ export class ExampleHomebridgePlatform {
|
|
|
335
152
|
minLevel: 1,
|
|
336
153
|
maxLevel: 254,
|
|
337
154
|
},
|
|
155
|
+
colorControl: {
|
|
156
|
+
colorMode: 2, // Colour temperature mode
|
|
157
|
+
colorTemperatureMireds: 250, // ~4000K
|
|
158
|
+
colorTempPhysicalMinMireds: 147, // 6800K (coolest)
|
|
159
|
+
colorTempPhysicalMaxMireds: 454, // 2200K (warmest)
|
|
160
|
+
coupleColorTempToLevelMinMireds: 147,
|
|
161
|
+
},
|
|
338
162
|
},
|
|
163
|
+
// These are called when the user controls the accessory via the Home app
|
|
339
164
|
handlers: {
|
|
340
165
|
onOff: {
|
|
341
|
-
on: async () => {
|
|
342
|
-
this.log.info('[
|
|
166
|
+
on: async ( /* no args */) => {
|
|
167
|
+
this.log.info('[Colour Temp Light] handler `on` called (user controlled via Home app)');
|
|
343
168
|
},
|
|
344
|
-
off: async () => {
|
|
345
|
-
this.log.info('[
|
|
169
|
+
off: async ( /* no args */) => {
|
|
170
|
+
this.log.info('[Colour Temp Light] Turned `off` called (user controlled via Home app)');
|
|
346
171
|
},
|
|
347
172
|
},
|
|
348
173
|
levelControl: {
|
|
349
|
-
|
|
350
|
-
|
|
174
|
+
moveToLevelWithOnOff: async (request) => {
|
|
175
|
+
const { level } = request;
|
|
176
|
+
this.log.info(`[Colour Light] ✓ Handler \`moveToLevel\` called with ${level} (${Math.round(level / 254 * 100)}%)`);
|
|
351
177
|
},
|
|
352
178
|
},
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
*/
|
|
359
|
-
registerSensors() {
|
|
360
|
-
// 8. Temperature Sensor
|
|
361
|
-
this.api.registerMatterAccessory({
|
|
362
|
-
uuid: 'matter-temp-sensor',
|
|
363
|
-
displayName: 'Temperature Sensor',
|
|
364
|
-
deviceType: this.api.matterDeviceTypes.TemperatureSensor,
|
|
365
|
-
serialNumber: 'TEMP-001',
|
|
366
|
-
manufacturer: 'Matter Examples',
|
|
367
|
-
model: 'TempSensor v1',
|
|
368
|
-
clusters: {
|
|
369
|
-
temperatureMeasurement: {
|
|
370
|
-
measuredValue: 2100, // 21.00°C (in hundredths of degree Celsius)
|
|
371
|
-
minMeasuredValue: -5000, // -50°C
|
|
372
|
-
maxMeasuredValue: 10000, // 100°C
|
|
373
|
-
},
|
|
374
|
-
},
|
|
375
|
-
});
|
|
376
|
-
// 9. Humidity Sensor
|
|
377
|
-
this.api.registerMatterAccessory({
|
|
378
|
-
uuid: 'matter-humidity-sensor',
|
|
379
|
-
displayName: 'Humidity Sensor',
|
|
380
|
-
deviceType: this.api.matterDeviceTypes.HumiditySensor,
|
|
381
|
-
serialNumber: 'HUM-001',
|
|
382
|
-
manufacturer: 'Matter Examples',
|
|
383
|
-
model: 'HumiditySensor v1',
|
|
384
|
-
clusters: {
|
|
385
|
-
relativeHumidityMeasurement: {
|
|
386
|
-
measuredValue: 5000, // 50% (in hundredths of percent)
|
|
387
|
-
minMeasuredValue: 0,
|
|
388
|
-
maxMeasuredValue: 10000, // 100%
|
|
389
|
-
},
|
|
390
|
-
},
|
|
391
|
-
});
|
|
392
|
-
// 10. Light Sensor
|
|
393
|
-
this.api.registerMatterAccessory({
|
|
394
|
-
uuid: 'matter-light-sensor',
|
|
395
|
-
displayName: 'Light Sensor',
|
|
396
|
-
deviceType: this.api.matterDeviceTypes.LightSensor,
|
|
397
|
-
serialNumber: 'LIGHT-SENSOR-001',
|
|
398
|
-
manufacturer: 'Matter Examples',
|
|
399
|
-
model: 'LightSensor v1',
|
|
400
|
-
clusters: {
|
|
401
|
-
illuminanceMeasurement: {
|
|
402
|
-
measuredValue: 1000, // Lux value
|
|
403
|
-
minMeasuredValue: 1,
|
|
404
|
-
maxMeasuredValue: 65535,
|
|
405
|
-
},
|
|
406
|
-
},
|
|
407
|
-
});
|
|
408
|
-
// 11. Motion Sensor
|
|
409
|
-
this.api.registerMatterAccessory({
|
|
410
|
-
uuid: 'matter-motion-sensor',
|
|
411
|
-
displayName: 'Motion Sensor',
|
|
412
|
-
deviceType: this.api.matterDeviceTypes.MotionSensor,
|
|
413
|
-
serialNumber: 'MOTION-001',
|
|
414
|
-
manufacturer: 'Matter Examples',
|
|
415
|
-
model: 'MotionSensor v1',
|
|
416
|
-
clusters: {
|
|
417
|
-
occupancySensing: {
|
|
418
|
-
occupancy: 0, // 0 = not occupied, 1 = occupied
|
|
419
|
-
occupancySensorType: 0, // PIR sensor
|
|
420
|
-
},
|
|
421
|
-
},
|
|
422
|
-
});
|
|
423
|
-
// 12. Contact Sensor
|
|
424
|
-
this.api.registerMatterAccessory({
|
|
425
|
-
uuid: 'matter-contact-sensor',
|
|
426
|
-
displayName: 'Contact Sensor',
|
|
427
|
-
deviceType: this.api.matterDeviceTypes.ContactSensor,
|
|
428
|
-
serialNumber: 'CONTACT-001',
|
|
429
|
-
manufacturer: 'Matter Examples',
|
|
430
|
-
model: 'ContactSensor v1',
|
|
431
|
-
clusters: {
|
|
432
|
-
booleanState: {
|
|
433
|
-
stateValue: false, // false = contact, true = no contact
|
|
434
|
-
},
|
|
435
|
-
},
|
|
436
|
-
});
|
|
437
|
-
// 13. Leak Sensor
|
|
438
|
-
this.api.registerMatterAccessory({
|
|
439
|
-
uuid: 'matter-leak-sensor',
|
|
440
|
-
displayName: 'Water Leak Sensor',
|
|
441
|
-
deviceType: this.api.matterDeviceTypes.LeakSensor,
|
|
442
|
-
serialNumber: 'LEAK-001',
|
|
443
|
-
manufacturer: 'Matter Examples',
|
|
444
|
-
model: 'LeakSensor v1',
|
|
445
|
-
clusters: {
|
|
446
|
-
booleanState: {
|
|
447
|
-
stateValue: false, // false = no leak, true = leak detected
|
|
448
|
-
},
|
|
449
|
-
},
|
|
450
|
-
});
|
|
451
|
-
// 14. Smoke Sensor
|
|
452
|
-
this.api.registerMatterAccessory({
|
|
453
|
-
uuid: 'matter-smoke-sensor',
|
|
454
|
-
displayName: 'Smoke/CO Alarm',
|
|
455
|
-
deviceType: this.api.matterDeviceTypes.SmokeSensor,
|
|
456
|
-
serialNumber: 'SMOKE-001',
|
|
457
|
-
manufacturer: 'Matter Examples',
|
|
458
|
-
model: 'SmokeCOAlarm v1',
|
|
459
|
-
clusters: {
|
|
460
|
-
smokeCoAlarm: {
|
|
461
|
-
smokeState: 0, // 0 = normal, 1 = warning, 2 = critical
|
|
462
|
-
coState: 0, // 0 = normal, 1 = warning, 2 = critical
|
|
463
|
-
batteryAlert: 0, // 0 = normal, 1 = warning, 2 = critical
|
|
464
|
-
},
|
|
465
|
-
},
|
|
466
|
-
});
|
|
467
|
-
}
|
|
468
|
-
/**
|
|
469
|
-
* HVAC Devices
|
|
470
|
-
*/
|
|
471
|
-
registerHVAC() {
|
|
472
|
-
// 15. Thermostat
|
|
473
|
-
this.api.registerMatterAccessory({
|
|
474
|
-
uuid: 'matter-thermostat',
|
|
475
|
-
displayName: 'Thermostat',
|
|
476
|
-
deviceType: this.api.matterDeviceTypes.Thermostat,
|
|
477
|
-
serialNumber: 'THERMO-001',
|
|
478
|
-
manufacturer: 'Matter Examples',
|
|
479
|
-
model: 'Thermostat v1',
|
|
480
|
-
clusters: {
|
|
481
|
-
thermostat: {
|
|
482
|
-
localTemperature: 2100, // 21°C (in hundredths)
|
|
483
|
-
occupiedCoolingSetpoint: 2400, // 24°C
|
|
484
|
-
occupiedHeatingSetpoint: 2000, // 20°C
|
|
485
|
-
systemMode: 1, // 0 = Off, 1 = Auto, 3 = Cool, 4 = Heat
|
|
486
|
-
controlSequenceOfOperation: 4, // Cooling and heating
|
|
487
|
-
},
|
|
488
|
-
},
|
|
489
|
-
handlers: {
|
|
490
|
-
thermostat: {
|
|
491
|
-
setpointRaiseLower: async (args) => {
|
|
492
|
-
this.log.info(`[Thermostat] Setpoint changed by ${args.amount / 10}°C`);
|
|
179
|
+
colorControl: {
|
|
180
|
+
moveToColorTemperatureLogic: async (request) => {
|
|
181
|
+
const { targetMireds, transitionTime } = request;
|
|
182
|
+
const kelvin = Math.round(1000000 / targetMireds);
|
|
183
|
+
this.log.info(`[Colour Temp Light] ✓ Handler \`moveToColorTemperatureLogic\` called with ${targetMireds} mireds (~${kelvin}K), transition: ${transitionTime}s`);
|
|
493
184
|
},
|
|
494
185
|
},
|
|
495
186
|
},
|
|
496
187
|
});
|
|
497
|
-
//
|
|
498
|
-
this.api.
|
|
499
|
-
uuid:
|
|
500
|
-
displayName: '
|
|
501
|
-
deviceType: this.api.
|
|
502
|
-
serialNumber: '
|
|
188
|
+
// 4. Colour Light (Hue/Saturation ONLY - no CCT)
|
|
189
|
+
this.api.matter.registerAccessory({
|
|
190
|
+
uuid: uuidLightColour,
|
|
191
|
+
displayName: 'Colour Light (HS)',
|
|
192
|
+
deviceType: this.api.matter.deviceTypes.ExtendedColorLight,
|
|
193
|
+
serialNumber: 'LIGHT-004',
|
|
503
194
|
manufacturer: 'Matter Examples',
|
|
504
|
-
model: '
|
|
195
|
+
model: 'ColorLight v1',
|
|
505
196
|
clusters: {
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
percentCurrent: 0,
|
|
509
|
-
percentSetting: 0,
|
|
197
|
+
onOff: {
|
|
198
|
+
onOff: false,
|
|
510
199
|
},
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
this.log.info(`[Fan] Step ${args.direction === 0 ? 'increase' : 'decrease'}`);
|
|
516
|
-
},
|
|
200
|
+
levelControl: {
|
|
201
|
+
currentLevel: 127,
|
|
202
|
+
minLevel: 1,
|
|
203
|
+
maxLevel: 254,
|
|
517
204
|
},
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
registerSecurity() {
|
|
525
|
-
// 17. Door Lock
|
|
526
|
-
this.api.registerMatterAccessory({
|
|
527
|
-
uuid: 'matter-door-lock',
|
|
528
|
-
displayName: 'Smart Door Lock',
|
|
529
|
-
deviceType: this.api.matterDeviceTypes.DoorLock,
|
|
530
|
-
serialNumber: 'LOCK-001',
|
|
531
|
-
manufacturer: 'Matter Examples',
|
|
532
|
-
model: 'DoorLock v1',
|
|
533
|
-
clusters: {
|
|
534
|
-
doorLock: {
|
|
535
|
-
lockState: 1, // 0 = not fully locked, 1 = locked, 2 = unlocked
|
|
536
|
-
lockType: 0, // 0 = dead bolt
|
|
537
|
-
actuatorEnabled: true,
|
|
205
|
+
colorControl: {
|
|
206
|
+
colorMode: 0, // Hue/Saturation mode
|
|
207
|
+
currentHue: 0, // Red (0 degrees)
|
|
208
|
+
currentSaturation: 254, // Full saturation
|
|
209
|
+
currentX: 41942, // Also provide XY for compatibility
|
|
210
|
+
currentY: 21626,
|
|
538
211
|
},
|
|
539
212
|
},
|
|
213
|
+
// These are called when the user controls the accessory via the Home app
|
|
540
214
|
handlers: {
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
this.log.info('[
|
|
215
|
+
onOff: {
|
|
216
|
+
on: async () => {
|
|
217
|
+
this.log.info('[Colour Light HS] ✓ Handler `on` called (user controlled via Home app)');
|
|
544
218
|
},
|
|
545
|
-
|
|
546
|
-
this.log.info('[
|
|
219
|
+
off: async () => {
|
|
220
|
+
this.log.info('[Colour Light HS] ✓ Handler `off` called (user controlled via Home app)');
|
|
547
221
|
},
|
|
548
222
|
},
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
* Other Devices
|
|
554
|
-
*/
|
|
555
|
-
registerOtherDevices() {
|
|
556
|
-
// 18. Window Covering
|
|
557
|
-
this.api.registerMatterAccessory({
|
|
558
|
-
uuid: 'matter-window-covering',
|
|
559
|
-
displayName: 'Window Blinds',
|
|
560
|
-
deviceType: this.api.matterDeviceTypes.WindowCovering,
|
|
561
|
-
serialNumber: 'BLIND-001',
|
|
562
|
-
manufacturer: 'Matter Examples',
|
|
563
|
-
model: 'WindowCovering v1',
|
|
564
|
-
clusters: {
|
|
565
|
-
windowCovering: {
|
|
566
|
-
currentPositionLiftPercent100ths: 0, // 0 = fully open, 10000 = fully closed
|
|
567
|
-
targetPositionLiftPercent100ths: 0,
|
|
568
|
-
type: 0, // 0 = rollershade
|
|
569
|
-
configStatus: 0x03, // operational and online
|
|
570
|
-
},
|
|
571
|
-
},
|
|
572
|
-
handlers: {
|
|
573
|
-
windowCovering: {
|
|
574
|
-
upOrOpen: async () => {
|
|
575
|
-
this.log.info('[Window Covering] Opening');
|
|
576
|
-
},
|
|
577
|
-
downOrClose: async () => {
|
|
578
|
-
this.log.info('[Window Covering] Closing');
|
|
579
|
-
},
|
|
580
|
-
stopMotion: async () => {
|
|
581
|
-
this.log.info('[Window Covering] Stopped');
|
|
582
|
-
},
|
|
583
|
-
goToLiftPercentage: async (args) => {
|
|
584
|
-
this.log.info(`[Window Covering] Moving to ${args.liftPercent100thsValue / 100}%`);
|
|
223
|
+
levelControl: {
|
|
224
|
+
moveToLevelWithOnOff: async (request) => {
|
|
225
|
+
const { level } = request;
|
|
226
|
+
this.log.info(`[Colour Light HS] ✓ Handler \`moveToLevel\` called with ${level} (${Math.round(level / 254 * 100)}%)`);
|
|
585
227
|
},
|
|
586
228
|
},
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
deviceType: this.api.matterDeviceTypes.GenericSwitch,
|
|
594
|
-
serialNumber: 'GSWITCH-001',
|
|
595
|
-
manufacturer: 'Matter Examples',
|
|
596
|
-
model: 'GenericSwitch v1',
|
|
597
|
-
clusters: {
|
|
598
|
-
switch: {
|
|
599
|
-
numberOfPositions: 2,
|
|
600
|
-
currentPosition: 0,
|
|
601
|
-
},
|
|
602
|
-
},
|
|
603
|
-
});
|
|
604
|
-
// 20. Pump
|
|
605
|
-
this.api.registerMatterAccessory({
|
|
606
|
-
uuid: 'matter-pump',
|
|
607
|
-
displayName: 'Water Pump',
|
|
608
|
-
deviceType: this.api.matterDeviceTypes.Pump,
|
|
609
|
-
serialNumber: 'PUMP-001',
|
|
610
|
-
manufacturer: 'Matter Examples',
|
|
611
|
-
model: 'Pump v1',
|
|
612
|
-
clusters: {
|
|
613
|
-
onOff: {
|
|
614
|
-
onOff: false,
|
|
615
|
-
},
|
|
616
|
-
pumpConfigurationAndControl: {
|
|
617
|
-
effectiveOperationMode: 0, // 0 = normal
|
|
618
|
-
effectiveControlMode: 0, // 0 = constant speed
|
|
619
|
-
},
|
|
620
|
-
},
|
|
621
|
-
handlers: {
|
|
622
|
-
onOff: {
|
|
623
|
-
on: async () => {
|
|
624
|
-
this.log.info('[Pump] Turned ON');
|
|
229
|
+
colorControl: {
|
|
230
|
+
moveToColorLogic: async (request) => {
|
|
231
|
+
const { targetX, targetY, transitionTime } = request;
|
|
232
|
+
const xFloat = (targetX / 65535).toFixed(4);
|
|
233
|
+
const yFloat = (targetY / 65535).toFixed(4);
|
|
234
|
+
this.log.info(`[Colour Light HS] ✓ Handler \`moveToColorLogic\` called with x=${targetX} (~${xFloat}), y=${targetY} (~${yFloat}), transition: ${transitionTime}s`);
|
|
625
235
|
},
|
|
626
|
-
|
|
627
|
-
|
|
236
|
+
moveToHueAndSaturationLogic: async (request) => {
|
|
237
|
+
const { targetHue, targetSaturation, transitionTime } = request;
|
|
238
|
+
const hueDegrees = Math.round((targetHue / 254) * 360);
|
|
239
|
+
const saturationPercent = Math.round((targetSaturation / 254) * 100);
|
|
240
|
+
this.log.info(`[Colour Light HS] ✓ Handler \`moveToHueAndSaturationLogic\` called with hue=${targetHue} (~${hueDegrees}°), saturation=${targetSaturation} (~${saturationPercent}%), transition: ${transitionTime}s`);
|
|
628
241
|
},
|
|
242
|
+
// NOTE: No moveToColorTemperatureLogic handler - this light only supports color, not CCT
|
|
629
243
|
},
|
|
630
244
|
},
|
|
631
245
|
});
|
|
632
|
-
//
|
|
633
|
-
this.api.
|
|
634
|
-
uuid:
|
|
635
|
-
displayName: '
|
|
636
|
-
deviceType: this.api.
|
|
637
|
-
serialNumber: '
|
|
246
|
+
// 5. Extended Colour Light (Hue/Saturation + CCT)
|
|
247
|
+
this.api.matter.registerAccessory({
|
|
248
|
+
uuid: uuidLightExtendedColour,
|
|
249
|
+
displayName: 'Extended Colour Light (HS+CCT)',
|
|
250
|
+
deviceType: this.api.matter.deviceTypes.ExtendedColorLight,
|
|
251
|
+
serialNumber: 'LIGHT-005',
|
|
638
252
|
manufacturer: 'Matter Examples',
|
|
639
|
-
model: '
|
|
253
|
+
model: 'ExtendedColorLight v1',
|
|
640
254
|
clusters: {
|
|
641
255
|
onOff: {
|
|
642
256
|
onOff: false,
|
|
643
257
|
},
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
controlSequenceOfOperation: 2, // Cooling only
|
|
258
|
+
levelControl: {
|
|
259
|
+
currentLevel: 127,
|
|
260
|
+
minLevel: 1,
|
|
261
|
+
maxLevel: 254,
|
|
649
262
|
},
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
263
|
+
colorControl: {
|
|
264
|
+
colorMode: 0, // Hue/Saturation mode
|
|
265
|
+
currentHue: 0, // Red (0 degrees)
|
|
266
|
+
currentSaturation: 254, // Full saturation
|
|
267
|
+
currentX: 41942, // Also provide XY for compatibility
|
|
268
|
+
currentY: 21626,
|
|
269
|
+
colorTemperatureMireds: 250, // ~4000K (for CCT mode)
|
|
270
|
+
colorTempPhysicalMinMireds: 147, // 6800K (coolest)
|
|
271
|
+
colorTempPhysicalMaxMireds: 454, // 2200K (warmest)
|
|
272
|
+
coupleColorTempToLevelMinMireds: 147,
|
|
654
273
|
},
|
|
655
274
|
},
|
|
275
|
+
// These are called when the user controls the accessory via the Home app
|
|
656
276
|
handlers: {
|
|
657
277
|
onOff: {
|
|
658
278
|
on: async () => {
|
|
659
|
-
this.log.info('[
|
|
279
|
+
this.log.info('[Extended Colour Light] ✓ Handler `on` called (user controlled via Home app)');
|
|
660
280
|
},
|
|
661
281
|
off: async () => {
|
|
662
|
-
this.log.info('[
|
|
282
|
+
this.log.info('[Extended Colour Light] ✓ Handler `off` called (user controlled via Home app)');
|
|
663
283
|
},
|
|
664
284
|
},
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
285
|
+
levelControl: {
|
|
286
|
+
moveToLevelWithOnOff: async (request) => {
|
|
287
|
+
const { level } = request;
|
|
288
|
+
this.log.info(`[Extended Colour Light] ✓ Handler \`moveToLevel\` called with ${level} (${Math.round(level / 254 * 100)}%)`);
|
|
668
289
|
},
|
|
669
290
|
},
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
291
|
+
colorControl: {
|
|
292
|
+
moveToColorLogic: async (request) => {
|
|
293
|
+
const { targetX, targetY, transitionTime } = request;
|
|
294
|
+
const xFloat = (targetX / 65535).toFixed(4);
|
|
295
|
+
const yFloat = (targetY / 65535).toFixed(4);
|
|
296
|
+
this.log.info(`[Extended Colour Light] ✓ Handler \`moveToColorLogic\` called with x=${targetX} (~${xFloat}), y=${targetY} (~${yFloat}), transition: ${transitionTime}s`);
|
|
297
|
+
},
|
|
298
|
+
moveToHueAndSaturationLogic: async (request) => {
|
|
299
|
+
const { targetHue, targetSaturation, transitionTime } = request;
|
|
300
|
+
const hueDegrees = Math.round((targetHue / 254) * 360);
|
|
301
|
+
const saturationPercent = Math.round((targetSaturation / 254) * 100);
|
|
302
|
+
this.log.info(`[Extended Colour Light] ✓ Handler \`moveToHueAndSaturationLogic\` called with hue=${targetHue} (~${hueDegrees}°), saturation=${targetSaturation} (~${saturationPercent}%), transition: ${transitionTime}s`);
|
|
303
|
+
},
|
|
304
|
+
moveToColorTemperatureLogic: async (request) => {
|
|
305
|
+
const { targetMireds, transitionTime } = request;
|
|
306
|
+
const kelvin = Math.round(1000000 / targetMireds);
|
|
307
|
+
this.log.info(`[Extended Colour Light] ✓ Handler \`moveToColorTemperatureLogic\` called with ${targetMireds} mireds (~${kelvin}K), transition: ${transitionTime}s`);
|
|
673
308
|
},
|
|
674
309
|
},
|
|
675
310
|
},
|
package/dist/platform.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,yBAAyB;IAKlB;IACA;IACA;IANlB,yEAAyE;IACzD,WAAW,GAAmC,IAAI,GAAG,EAAE,CAAA;IAEvE,YACkB,GAAY,EACZ,MAAsB,EACtB,GAAQ;QAFR,QAAG,GAAH,GAAG,CAAS;QACZ,WAAM,GAAN,MAAM,CAAgB;QACtB,QAAG,GAAH,GAAG,CAAK;QAExB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iCAAiC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAEnE,uCAAuC;QACvC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0GAA0G,CAAC,CAAA;YACzH,OAAM;QACR,CAAC;QAED,qEAAqE;QACrE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YACrC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAA;YACtD,IAAI,CAAC,yBAAyB,EAAE,CAAA;QAClC,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,SAA4B;QAC7C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,+BAA+B,EAAE,SAAS,CAAC,WAAW,CAAC,CAAA;QACrE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IACjD,CAAC;IAED;;OAEG;IACK,yBAAyB;QAC/B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;QAElD,4BAA4B;QAC5B,IAAI,CAAC,uBAAuB,EAAE,CAAA;QAC9B,qCAAqC;QACrC,0BAA0B;QAC1B,uBAAuB;QACvB,2BAA2B;QAC3B,+BAA+B;QAE/B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAA;IAC1D,CAAC;IAED;;OAEG;IACK,uBAAuB;QAC7B,8BAA8B;QAC9B,yDAAyD;QACzD,IAAI,eAAe,GAAG,KAAK,CAAA;QAE3B,yDAAyD;QACzD,IAAI,eAAe,GAAG,KAAK,CAAA;QAC3B,IAAI,kBAAkB,GAAG,GAAG,CAAA,CAAC,+BAA+B;QAE5D,kDAAkD;QAClD,qEAAqE;QACrE,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC/B,IAAI,EAAE,oBAAoB;YAC1B,WAAW,EAAE,cAAc;YAC3B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,UAAU;YACjD,YAAY,EAAE,WAAW;YACzB,YAAY,EAAE,iBAAiB;YAC/B,KAAK,EAAE,eAAe;YACtB,QAAQ,EAAE,EAAE;YAEZ,cAAc;YACd,aAAa;YACb,8BAA8B;YAC9B,OAAO;YACP,KAAK;YAEL,0CAA0C;YAC1C,gDAAgD;YAChD,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,EAAE,EAAE,KAAK,IAAI,EAAE;wBACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;wBAEhE,qBAAqB;wBACrB,eAAe,GAAG,IAAI,CAAA;wBAEtB,0EAA0E;wBAE1E,kEAAkE;wBAClE,2DAA2D;wBAC3D,kEAAkE;wBAClE,0EAA0E;wBAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAA;wBAC/E,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,uBAAuB,EAAE,cAAc,CAAC,CAAA;wBAEtF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4DAA4D,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;wBAC9G,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gEAAgE,UAAU,EAAE,YAAY,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,YAAsB,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAA;wBAElL,0EAA0E;wBAC1E,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kDAAkD,kBAAkB,KAAK,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAA;wBAEvI,kEAAkE;wBAClE,iEAAiE;wBACjE,kEAAkE;wBAClE,4EAA4E;wBAC5E,gFAAgF;wBAChF,kFAAkF;wBAClF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,+FAA+F,CAAC,CAAA;wBAE9G,eAAe,GAAG,IAAI,CAAA;wBACtB,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,uBAAuB,EAAE,OAAO,EAAE;4BACpE,KAAK,EAAE,IAAI;yBACZ,CAAC,CAAA;wBAEF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAA;oBACzF,CAAC;oBACD,GAAG,EAAE,KAAK,IAAI,EAAE;wBACd,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAA;wBAEjE,qBAAqB;wBACrB,eAAe,GAAG,KAAK,CAAA;wBAEvB,sCAAsC;wBACtC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAA;wBAC/E,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,uBAAuB,EAAE,cAAc,CAAC,CAAA;wBAEtF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4DAA4D,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;wBAC9G,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gEAAgE,UAAU,EAAE,YAAY,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,YAAsB,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAA;wBAElL,uDAAuD;wBACvD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,+FAA+F,CAAC,CAAA;wBAE9G,eAAe,GAAG,KAAK,CAAA;wBACvB,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,uBAAuB,EAAE,OAAO,EAAE;4BACpE,KAAK,EAAE,KAAK;yBACb,CAAC,CAAA;wBAEF,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAA;oBACzF,CAAC;iBACF;aACF;SACF,CAAC,CAAA;QAEF,sDAAsD;QACtD,sEAAsE;QACtE,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC/B,IAAI,EAAE,uBAAuB;YAC7B,WAAW,EAAE,gBAAgB;YAC7B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,aAAa;YACpD,YAAY,EAAE,WAAW;YACzB,YAAY,EAAE,iBAAiB;YAC/B,KAAK,EAAE,kBAAkB;YAEzB,QAAQ,EAAE,EAAE;YAEZ,aAAa;YACb,8BAA8B;YAC9B,OAAO;YACP,oBAAoB;YACpB,wCAAwC;YACxC,mBAAmB;YACnB,qBAAqB;YACrB,OAAO;YACP,KAAK;YAEL,qFAAqF;YACrF,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,EAAE,EAAE,KAAK,IAAI,EAAE;wBACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAA;wBACpF,eAAe,GAAG,IAAI,CAAA;oBACxB,CAAC;oBACD,GAAG,EAAE,KAAK,IAAI,EAAE;wBACd,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAA;wBACrF,eAAe,GAAG,KAAK,CAAA;oBACzB,CAAC;iBACF;gBACD,YAAY,EAAE;oBACZ,WAAW,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;wBAC/B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,sDAAsD,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAA;wBAC1H,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAA;oBACjC,CAAC;iBACF;aACF;SACF,CAAC,CAAA;QAEF,EAAE;QACF,gCAAgC;QAChC,qCAAqC;QACrC,qCAAqC;QACrC,4CAA4C;QAC5C,kEAAkE;QAClE,+BAA+B;QAC/B,qCAAqC;QACrC,gCAAgC;QAChC,EAAE;QACF,gBAAgB;QAChB,eAAe;QACf,sBAAsB;QACtB,SAAS;QACT,sBAAsB;QACtB,2BAA2B;QAC3B,qBAAqB;QACrB,uBAAuB;QACvB,SAAS;QACT,sBAAsB;QACtB,gDAAgD;QAChD,+CAA+C;QAC/C,kDAAkD;QAClD,kDAAkD;QAClD,SAAS;QACT,OAAO;QACP,EAAE;QACF,gBAAgB;QAChB,eAAe;QACf,0BAA0B;QAC1B,yDAAyD;QACzD,WAAW;QACX,2BAA2B;QAC3B,0DAA0D;QAC1D,WAAW;QACX,SAAS;QACT,sBAAsB;QACtB,4CAA4C;QAC5C,mFAAmF;QACnF,WAAW;QACX,SAAS;QACT,sBAAsB;QACtB,uDAAuD;QACvD,4EAA4E;QAC5E,gIAAgI;QAChI,WAAW;QACX,SAAS;QACT,OAAO;QACP,MAAM;QACN,EAAE;QACF,mCAAmC;QACnC,qCAAqC;QACrC,8BAA8B;QAC9B,oCAAoC;QACpC,+DAA+D;QAC/D,+BAA+B;QAC/B,qCAAqC;QACrC,0BAA0B;QAC1B,EAAE;QACF,gBAAgB;QAChB,eAAe;QACf,sBAAsB;QACtB,SAAS;QACT,sBAAsB;QACtB,2BAA2B;QAC3B,qBAAqB;QACrB,uBAAuB;QACvB,SAAS;QACT,sBAAsB;QACtB,6CAA6C;QAC7C,8BAA8B;QAC9B,mDAAmD;QACnD,6DAA6D;QAC7D,SAAS;QACT,OAAO;QACP,EAAE;QACF,gBAAgB;QAChB,eAAe;QACf,0BAA0B;QAC1B,kDAAkD;QAClD,WAAW;QACX,2BAA2B;QAC3B,mDAAmD;QACnD,WAAW;QACX,SAAS;QACT,sBAAsB;QACtB,4CAA4C;QAC5C,4EAA4E;QAC5E,WAAW;QACX,SAAS;QACT,sBAAsB;QACtB,0CAA0C;QAC1C,mEAAmE;QACnE,WAAW;QACX,iDAAiD;QACjD,iFAAiF;QACjF,WAAW;QACX,uDAAuD;QACvD,4FAA4F;QAC5F,WAAW;QACX,SAAS;QACT,OAAO;QACP,MAAM;IACR,CAAC;IAED;;OAEG;IACK,0BAA0B;QAChC,mBAAmB;QACnB,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC/B,IAAI,EAAE,eAAe;YACrB,WAAW,EAAE,eAAe;YAC5B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,WAAW;YAClD,YAAY,EAAE,YAAY;YAC1B,YAAY,EAAE,iBAAiB;YAC/B,KAAK,EAAE,WAAW;YAElB,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,KAAK,EAAE,KAAK;iBACb;aACF;YAED,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,EAAE,EAAE,KAAK,IAAI,EAAE;wBACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;oBACrC,CAAC;oBACD,GAAG,EAAE,KAAK,IAAI,EAAE;wBACd,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;oBACtC,CAAC;iBACF;aACF;SACF,CAAC,CAAA;QAEF,mBAAmB;QACnB,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC/B,IAAI,EAAE,eAAe;YACrB,WAAW,EAAE,cAAc;YAC3B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,WAAW;YAClD,YAAY,EAAE,YAAY;YAC1B,YAAY,EAAE,iBAAiB;YAC/B,KAAK,EAAE,WAAW;YAElB,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,KAAK,EAAE,KAAK;iBACb;aACF;YAED,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,EAAE,EAAE,KAAK,IAAI,EAAE;wBACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;oBACrC,CAAC;oBACD,GAAG,EAAE,KAAK,IAAI,EAAE;wBACd,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;oBACtC,CAAC;iBACF;aACF;SACF,CAAC,CAAA;QAEF,qBAAqB;QACrB,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC/B,IAAI,EAAE,wBAAwB;YAC9B,WAAW,EAAE,iBAAiB;YAC9B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,cAAc;YACrD,YAAY,EAAE,YAAY;YAC1B,YAAY,EAAE,iBAAiB;YAC/B,KAAK,EAAE,mBAAmB;YAE1B,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;aACF;YAED,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,EAAE,EAAE,KAAK,IAAI,EAAE;wBACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;oBAC9C,CAAC;oBACD,GAAG,EAAE,KAAK,IAAI,EAAE;wBACd,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;oBAC/C,CAAC;iBACF;gBACD,YAAY,EAAE;oBACZ,WAAW,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;wBAC/B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,sCAAsC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAA;oBACnE,CAAC;iBACF;aACF;SACF,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACK,eAAe;QACrB,wBAAwB;QACxB,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC/B,IAAI,EAAE,oBAAoB;YAC1B,WAAW,EAAE,oBAAoB;YACjC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,iBAAiB;YACxD,YAAY,EAAE,UAAU;YACxB,YAAY,EAAE,iBAAiB;YAC/B,KAAK,EAAE,eAAe;YAEtB,QAAQ,EAAE;gBACR,sBAAsB,EAAE;oBACtB,aAAa,EAAE,IAAI,EAAE,4CAA4C;oBACjE,gBAAgB,EAAE,CAAC,IAAI,EAAE,QAAQ;oBACjC,gBAAgB,EAAE,KAAK,EAAE,QAAQ;iBAClC;aACF;SACF,CAAC,CAAA;QAEF,qBAAqB;QACrB,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC/B,IAAI,EAAE,wBAAwB;YAC9B,WAAW,EAAE,iBAAiB;YAC9B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,cAAc;YACrD,YAAY,EAAE,SAAS;YACvB,YAAY,EAAE,iBAAiB;YAC/B,KAAK,EAAE,mBAAmB;YAE1B,QAAQ,EAAE;gBACR,2BAA2B,EAAE;oBAC3B,aAAa,EAAE,IAAI,EAAE,iCAAiC;oBACtD,gBAAgB,EAAE,CAAC;oBACnB,gBAAgB,EAAE,KAAK,EAAE,OAAO;iBACjC;aACF;SACF,CAAC,CAAA;QAEF,mBAAmB;QACnB,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC/B,IAAI,EAAE,qBAAqB;YAC3B,WAAW,EAAE,cAAc;YAC3B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,WAAW;YAClD,YAAY,EAAE,kBAAkB;YAChC,YAAY,EAAE,iBAAiB;YAC/B,KAAK,EAAE,gBAAgB;YAEvB,QAAQ,EAAE;gBACR,sBAAsB,EAAE;oBACtB,aAAa,EAAE,IAAI,EAAE,YAAY;oBACjC,gBAAgB,EAAE,CAAC;oBACnB,gBAAgB,EAAE,KAAK;iBACxB;aACF;SACF,CAAC,CAAA;QAEF,oBAAoB;QACpB,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC/B,IAAI,EAAE,sBAAsB;YAC5B,WAAW,EAAE,eAAe;YAC5B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,YAAY;YACnD,YAAY,EAAE,YAAY;YAC1B,YAAY,EAAE,iBAAiB;YAC/B,KAAK,EAAE,iBAAiB;YAExB,QAAQ,EAAE;gBACR,gBAAgB,EAAE;oBAChB,SAAS,EAAE,CAAC,EAAE,iCAAiC;oBAC/C,mBAAmB,EAAE,CAAC,EAAE,aAAa;iBACtC;aACF;SACF,CAAC,CAAA;QAEF,qBAAqB;QACrB,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC/B,IAAI,EAAE,uBAAuB;YAC7B,WAAW,EAAE,gBAAgB;YAC7B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,aAAa;YACpD,YAAY,EAAE,aAAa;YAC3B,YAAY,EAAE,iBAAiB;YAC/B,KAAK,EAAE,kBAAkB;YAEzB,QAAQ,EAAE;gBACR,YAAY,EAAE;oBACZ,UAAU,EAAE,KAAK,EAAE,qCAAqC;iBACzD;aACF;SACF,CAAC,CAAA;QAEF,kBAAkB;QAClB,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC/B,IAAI,EAAE,oBAAoB;YAC1B,WAAW,EAAE,mBAAmB;YAChC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,UAAU;YACjD,YAAY,EAAE,UAAU;YACxB,YAAY,EAAE,iBAAiB;YAC/B,KAAK,EAAE,eAAe;YAEtB,QAAQ,EAAE;gBACR,YAAY,EAAE;oBACZ,UAAU,EAAE,KAAK,EAAE,wCAAwC;iBAC5D;aACF;SACF,CAAC,CAAA;QAEF,mBAAmB;QACnB,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC/B,IAAI,EAAE,qBAAqB;YAC3B,WAAW,EAAE,gBAAgB;YAC7B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,WAAW;YAClD,YAAY,EAAE,WAAW;YACzB,YAAY,EAAE,iBAAiB;YAC/B,KAAK,EAAE,iBAAiB;YAExB,QAAQ,EAAE;gBACR,YAAY,EAAE;oBACZ,UAAU,EAAE,CAAC,EAAE,wCAAwC;oBACvD,OAAO,EAAE,CAAC,EAAE,wCAAwC;oBACpD,YAAY,EAAE,CAAC,EAAE,wCAAwC;iBAC1D;aACF;SACF,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACK,YAAY;QAClB,iBAAiB;QACjB,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC/B,IAAI,EAAE,mBAAmB;YACzB,WAAW,EAAE,YAAY;YACzB,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,UAAU;YACjD,YAAY,EAAE,YAAY;YAC1B,YAAY,EAAE,iBAAiB;YAC/B,KAAK,EAAE,eAAe;YAEtB,QAAQ,EAAE;gBACR,UAAU,EAAE;oBACV,gBAAgB,EAAE,IAAI,EAAE,uBAAuB;oBAC/C,uBAAuB,EAAE,IAAI,EAAE,OAAO;oBACtC,uBAAuB,EAAE,IAAI,EAAE,OAAO;oBACtC,UAAU,EAAE,CAAC,EAAE,wCAAwC;oBACvD,0BAA0B,EAAE,CAAC,EAAE,sBAAsB;iBACtD;aACF;YAED,QAAQ,EAAE;gBACR,UAAU,EAAE;oBACV,kBAAkB,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;wBACtC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oCAAoC,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,CAAA;oBACzE,CAAC;iBACF;aACF;SACF,CAAC,CAAA;QAEF,UAAU;QACV,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC/B,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,KAAK;YAClB,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG;YAC1C,YAAY,EAAE,SAAS;YACvB,YAAY,EAAE,iBAAiB;YAC/B,KAAK,EAAE,QAAQ;YAEf,QAAQ,EAAE;gBACR,UAAU,EAAE;oBACV,OAAO,EAAE,CAAC,EAAE,sEAAsE;oBAClF,cAAc,EAAE,CAAC;oBACjB,cAAc,EAAE,CAAC;iBAClB;aACF;YAED,QAAQ,EAAE;gBACR,UAAU,EAAE;oBACV,IAAI,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;wBACxB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAA;oBAC/E,CAAC;iBACF;aACF;SACF,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,gBAAgB;QAChB,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC/B,IAAI,EAAE,kBAAkB;YACxB,WAAW,EAAE,iBAAiB;YAC9B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,QAAQ;YAC/C,YAAY,EAAE,UAAU;YACxB,YAAY,EAAE,iBAAiB;YAC/B,KAAK,EAAE,aAAa;YAEpB,QAAQ,EAAE;gBACR,QAAQ,EAAE;oBACR,SAAS,EAAE,CAAC,EAAE,iDAAiD;oBAC/D,QAAQ,EAAE,CAAC,EAAE,gBAAgB;oBAC7B,eAAe,EAAE,IAAI;iBACtB;aACF;YAED,QAAQ,EAAE;gBACR,QAAQ,EAAE;oBACR,QAAQ,EAAE,KAAK,IAAI,EAAE;wBACnB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;oBACrC,CAAC;oBACD,UAAU,EAAE,KAAK,IAAI,EAAE;wBACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;oBACvC,CAAC;iBACF;aACF;SACF,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC1B,sBAAsB;QACtB,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC/B,IAAI,EAAE,wBAAwB;YAC9B,WAAW,EAAE,eAAe;YAC5B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,cAAc;YACrD,YAAY,EAAE,WAAW;YACzB,YAAY,EAAE,iBAAiB;YAC/B,KAAK,EAAE,mBAAmB;YAE1B,QAAQ,EAAE;gBACR,cAAc,EAAE;oBACd,gCAAgC,EAAE,CAAC,EAAE,uCAAuC;oBAC5E,+BAA+B,EAAE,CAAC;oBAClC,IAAI,EAAE,CAAC,EAAE,kBAAkB;oBAC3B,YAAY,EAAE,IAAI,EAAE,yBAAyB;iBAC9C;aACF;YAED,QAAQ,EAAE;gBACR,cAAc,EAAE;oBACd,QAAQ,EAAE,KAAK,IAAI,EAAE;wBACnB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;oBAC5C,CAAC;oBACD,WAAW,EAAE,KAAK,IAAI,EAAE;wBACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;oBAC5C,CAAC;oBACD,UAAU,EAAE,KAAK,IAAI,EAAE;wBACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;oBAC5C,CAAC;oBACD,kBAAkB,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;wBACtC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,+BAA+B,IAAI,CAAC,sBAAsB,GAAG,GAAG,GAAG,CAAC,CAAA;oBACpF,CAAC;iBACF;aACF;SACF,CAAC,CAAA;QAEF,qBAAqB;QACrB,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC/B,IAAI,EAAE,uBAAuB;YAC7B,WAAW,EAAE,gBAAgB;YAC7B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,aAAa;YACpD,YAAY,EAAE,aAAa;YAC3B,YAAY,EAAE,iBAAiB;YAC/B,KAAK,EAAE,kBAAkB;YAEzB,QAAQ,EAAE;gBACR,MAAM,EAAE;oBACN,iBAAiB,EAAE,CAAC;oBACpB,eAAe,EAAE,CAAC;iBACnB;aACF;SACF,CAAC,CAAA;QAEF,WAAW;QACX,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC/B,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,YAAY;YACzB,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI;YAC3C,YAAY,EAAE,UAAU;YACxB,YAAY,EAAE,iBAAiB;YAC/B,KAAK,EAAE,SAAS;YAEhB,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,KAAK,EAAE,KAAK;iBACb;gBACD,2BAA2B,EAAE;oBAC3B,sBAAsB,EAAE,CAAC,EAAE,aAAa;oBACxC,oBAAoB,EAAE,CAAC,EAAE,qBAAqB;iBAC/C;aACF;YAED,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,EAAE,EAAE,KAAK,IAAI,EAAE;wBACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;oBACnC,CAAC;oBACD,GAAG,EAAE,KAAK,IAAI,EAAE;wBACd,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;oBACpC,CAAC;iBACF;aACF;SACF,CAAC,CAAA;QAEF,2BAA2B;QAC3B,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC;YAC/B,IAAI,EAAE,wBAAwB;YAC9B,WAAW,EAAE,iBAAiB;YAC9B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,kBAAkB;YACzD,YAAY,EAAE,QAAQ;YACtB,YAAY,EAAE,iBAAiB;YAC/B,KAAK,EAAE,WAAW;YAElB,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,KAAK,EAAE,KAAK;iBACb;gBACD,UAAU,EAAE;oBACV,gBAAgB,EAAE,IAAI,EAAE,OAAO;oBAC/B,uBAAuB,EAAE,IAAI,EAAE,OAAO;oBACtC,UAAU,EAAE,CAAC,EAAE,YAAY;oBAC3B,0BAA0B,EAAE,CAAC,EAAE,eAAe;iBAC/C;gBACD,UAAU,EAAE;oBACV,OAAO,EAAE,CAAC,EAAE,OAAO;oBACnB,cAAc,EAAE,EAAE;oBAClB,cAAc,EAAE,EAAE;iBACnB;aACF;YAED,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,EAAE,EAAE,KAAK,IAAI,EAAE;wBACb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;oBAC9C,CAAC;oBACD,GAAG,EAAE,KAAK,IAAI,EAAE;wBACd,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;oBAC/C,CAAC;iBACF;gBACD,UAAU,EAAE;oBACV,kBAAkB,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;wBACtC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,qDAAqD,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,CAAA;oBAC1F,CAAC;iBACF;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;wBACxB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,8BAA8B,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAA;oBAC/F,CAAC;iBACF;aACF;SACF,CAAC,CAAA;IACJ,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,17 +2,17 @@
|
|
|
2
2
|
"name": "@homebridge-plugins/homebridge-matter",
|
|
3
3
|
"displayName": "Homebridge Matter",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "0.0.
|
|
5
|
+
"version": "0.0.3",
|
|
6
6
|
"description": "A short description about what your plugin does.",
|
|
7
7
|
"author": "Your Name",
|
|
8
8
|
"license": "Apache-2.0",
|
|
9
|
-
"homepage": "https://github.com
|
|
9
|
+
"homepage": "https://github.com/homebridge-plugins/homebridge-matter#readme",
|
|
10
10
|
"repository": {
|
|
11
11
|
"type": "git",
|
|
12
|
-
"url": "git+https://github.com
|
|
12
|
+
"url": "git+https://github.com/homebridge-plugins/homebridge-matter.git"
|
|
13
13
|
},
|
|
14
14
|
"bugs": {
|
|
15
|
-
"url": "https://github.com
|
|
15
|
+
"url": "https://github.com/homebridge-plugins/homebridge-matter/issues"
|
|
16
16
|
},
|
|
17
17
|
"keywords": [
|
|
18
18
|
"homebridge-plugin"
|
|
@@ -32,9 +32,9 @@
|
|
|
32
32
|
"homebridge-lib": "^7.1.9"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@antfu/eslint-config": "^
|
|
36
|
-
"@types/node": "^24.
|
|
37
|
-
"homebridge": "2.0.0-alpha.
|
|
35
|
+
"@antfu/eslint-config": "^6.0.0",
|
|
36
|
+
"@types/node": "^24.8.1",
|
|
37
|
+
"homebridge": "2.0.0-alpha.47",
|
|
38
38
|
"nodemon": "^3.1.10",
|
|
39
39
|
"rimraf": "^6.0.1",
|
|
40
40
|
"ts-node": "^10.9.2",
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import type { API, Logging } from 'homebridge';
|
|
2
|
-
/**
|
|
3
|
-
* State Management Examples for Matter Accessories
|
|
4
|
-
*
|
|
5
|
-
* This demonstrates the two key patterns for managing accessory state:
|
|
6
|
-
*
|
|
7
|
-
* 1. HANDLERS (Matter → Device)
|
|
8
|
-
* - Called when user controls device via Home app
|
|
9
|
-
* - Plugin sends command to actual device (cloud API, local network, etc.)
|
|
10
|
-
* - Analogous to HAP's setCharacteristic handlers
|
|
11
|
-
*
|
|
12
|
-
* 2. STATE UPDATES (Device → Matter)
|
|
13
|
-
* - Called when device state changes externally (native app, physical button, polling, etc.)
|
|
14
|
-
* - Plugin updates Matter state to reflect actual device state
|
|
15
|
-
* - Analogous to HAP's updateCharacteristic
|
|
16
|
-
*/
|
|
17
|
-
export declare class StateManagementExample {
|
|
18
|
-
private readonly log;
|
|
19
|
-
private readonly api;
|
|
20
|
-
constructor(log: Logging, api: API);
|
|
21
|
-
/**
|
|
22
|
-
* Example 1: Smart Outlet with Two-Way Communication
|
|
23
|
-
*
|
|
24
|
-
* Demonstrates:
|
|
25
|
-
* - Handler: User turns on outlet via Home app → control actual device
|
|
26
|
-
* - State Update: Outlet turned on via native app → update Home app state
|
|
27
|
-
*/
|
|
28
|
-
registerSmartOutletExample(): void;
|
|
29
|
-
/**
|
|
30
|
-
* Example 2: Dimmable Light with Brightness
|
|
31
|
-
*
|
|
32
|
-
* Shows how to handle multiple cluster attributes
|
|
33
|
-
*/
|
|
34
|
-
registerDimmableLightExample(): void;
|
|
35
|
-
/**
|
|
36
|
-
* Example 3: Temperature Sensor (Read-Only)
|
|
37
|
-
*
|
|
38
|
-
* Sensors don't have handlers (no user commands)
|
|
39
|
-
* Only need state updates when sensor readings change
|
|
40
|
-
*/
|
|
41
|
-
registerTemperatureSensorExample(): void;
|
|
42
|
-
}
|
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* State Management Examples for Matter Accessories
|
|
3
|
-
*
|
|
4
|
-
* This demonstrates the two key patterns for managing accessory state:
|
|
5
|
-
*
|
|
6
|
-
* 1. HANDLERS (Matter → Device)
|
|
7
|
-
* - Called when user controls device via Home app
|
|
8
|
-
* - Plugin sends command to actual device (cloud API, local network, etc.)
|
|
9
|
-
* - Analogous to HAP's setCharacteristic handlers
|
|
10
|
-
*
|
|
11
|
-
* 2. STATE UPDATES (Device → Matter)
|
|
12
|
-
* - Called when device state changes externally (native app, physical button, polling, etc.)
|
|
13
|
-
* - Plugin updates Matter state to reflect actual device state
|
|
14
|
-
* - Analogous to HAP's updateCharacteristic
|
|
15
|
-
*/
|
|
16
|
-
export class StateManagementExample {
|
|
17
|
-
log;
|
|
18
|
-
api;
|
|
19
|
-
constructor(log, api) {
|
|
20
|
-
this.log = log;
|
|
21
|
-
this.api = api;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Example 1: Smart Outlet with Two-Way Communication
|
|
25
|
-
*
|
|
26
|
-
* Demonstrates:
|
|
27
|
-
* - Handler: User turns on outlet via Home app → control actual device
|
|
28
|
-
* - State Update: Outlet turned on via native app → update Home app state
|
|
29
|
-
*/
|
|
30
|
-
registerSmartOutletExample() {
|
|
31
|
-
// Simulated device state (in real plugin, this would be your device API/SDK)
|
|
32
|
-
let deviceIsOn = false;
|
|
33
|
-
// Function to control the actual device (cloud API, local network, etc.)
|
|
34
|
-
const controlDevice = async (turnOn) => {
|
|
35
|
-
this.log.info(`[Device Control] Sending command to turn outlet ${turnOn ? 'ON' : 'OFF'}`);
|
|
36
|
-
// Example: Call your device API
|
|
37
|
-
// await yourDeviceAPI.setOutletState(turnOn)
|
|
38
|
-
// Simulate device response
|
|
39
|
-
deviceIsOn = turnOn;
|
|
40
|
-
this.log.info(`[Device Control] ✓ Outlet is now ${turnOn ? 'ON' : 'OFF'}`);
|
|
41
|
-
};
|
|
42
|
-
// Register the Matter accessory
|
|
43
|
-
this.api.registerMatterAccessory({
|
|
44
|
-
uuid: 'example-outlet-state-management',
|
|
45
|
-
displayName: 'Example Smart Outlet',
|
|
46
|
-
deviceType: this.api.matterDeviceTypes.OnOffOutlet,
|
|
47
|
-
serialNumber: 'OUTLET-STATE-001',
|
|
48
|
-
manufacturer: 'State Management Examples',
|
|
49
|
-
model: 'SmartOutlet v1',
|
|
50
|
-
clusters: {
|
|
51
|
-
onOff: {
|
|
52
|
-
onOff: deviceIsOn, // Initial state
|
|
53
|
-
},
|
|
54
|
-
},
|
|
55
|
-
// ===== PATTERN 1: HANDLERS (Matter → Device) =====
|
|
56
|
-
// These are called when user controls device via Home app
|
|
57
|
-
// Similar to HAP's characteristic.on('set', handler)
|
|
58
|
-
handlers: {
|
|
59
|
-
onOff: {
|
|
60
|
-
on: async () => {
|
|
61
|
-
this.log.info('[HANDLER] User turned ON outlet via Home app');
|
|
62
|
-
// Control the actual device
|
|
63
|
-
await controlDevice(true);
|
|
64
|
-
// State is automatically updated in Matter after handler completes
|
|
65
|
-
// No need to call updateMatterAccessoryState here!
|
|
66
|
-
},
|
|
67
|
-
off: async () => {
|
|
68
|
-
this.log.info('[HANDLER] User turned OFF outlet via Home app');
|
|
69
|
-
// Control the actual device
|
|
70
|
-
await controlDevice(false);
|
|
71
|
-
// State is automatically updated in Matter after handler completes
|
|
72
|
-
},
|
|
73
|
-
},
|
|
74
|
-
},
|
|
75
|
-
});
|
|
76
|
-
// ===== PATTERN 2: STATE UPDATES (Device → Matter) =====
|
|
77
|
-
// Call this when device state changes externally
|
|
78
|
-
// Similar to HAP's characteristic.updateValue()
|
|
79
|
-
// Example: Device state changed via native mobile app
|
|
80
|
-
const handleNativeAppChange = (newState) => {
|
|
81
|
-
this.log.info(`[EXTERNAL] Outlet turned ${newState ? 'ON' : 'OFF'} via native app`);
|
|
82
|
-
// Update local state
|
|
83
|
-
deviceIsOn = newState;
|
|
84
|
-
// Update Matter state WITHOUT triggering handlers
|
|
85
|
-
// This is like HAP's updateCharacteristic - it just syncs the state
|
|
86
|
-
this.api.updateMatterAccessoryState('example-outlet-state-management', 'onOff', { onOff: newState });
|
|
87
|
-
this.log.info('[EXTERNAL] ✓ Home app state updated to match device');
|
|
88
|
-
};
|
|
89
|
-
// Example: Device state changed via physical button
|
|
90
|
-
const handlePhysicalButton = (newState) => {
|
|
91
|
-
this.log.info(`[EXTERNAL] Outlet turned ${newState ? 'ON' : 'OFF'} via physical button`);
|
|
92
|
-
deviceIsOn = newState;
|
|
93
|
-
// Update Matter state without triggering handlers
|
|
94
|
-
this.api.updateMatterAccessoryState('example-outlet-state-management', 'onOff', { onOff: newState });
|
|
95
|
-
};
|
|
96
|
-
// Example: Polling device state periodically
|
|
97
|
-
// eslint-disable-next-line unused-imports/no-unused-vars
|
|
98
|
-
const pollDeviceState = async () => {
|
|
99
|
-
// In real plugin, fetch state from device API
|
|
100
|
-
// const actualState = await yourDeviceAPI.getOutletState()
|
|
101
|
-
// For demo, simulate random state changes
|
|
102
|
-
const actualState = Math.random() > 0.5;
|
|
103
|
-
if (actualState !== deviceIsOn) {
|
|
104
|
-
this.log.info(`[POLLING] Detected state change: ${actualState ? 'ON' : 'OFF'}`);
|
|
105
|
-
deviceIsOn = actualState;
|
|
106
|
-
// Update Matter state without triggering handlers
|
|
107
|
-
this.api.updateMatterAccessoryState('example-outlet-state-management', 'onOff', { onOff: actualState });
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
// Simulate external state changes for demonstration
|
|
111
|
-
// In real plugin, these would be triggered by:
|
|
112
|
-
// - WebSocket/SSE from cloud API
|
|
113
|
-
// - Physical button press events
|
|
114
|
-
// - Polling interval
|
|
115
|
-
// - Push notifications
|
|
116
|
-
// Demo: Native app changes after 10 seconds
|
|
117
|
-
setTimeout(() => handleNativeAppChange(true), 10000);
|
|
118
|
-
// Demo: Physical button press after 20 seconds
|
|
119
|
-
setTimeout(() => handlePhysicalButton(false), 20000);
|
|
120
|
-
// Demo: Poll every 30 seconds (optional - use events/webhooks when possible)
|
|
121
|
-
// setInterval(pollDeviceState, 30000);
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Example 2: Dimmable Light with Brightness
|
|
125
|
-
*
|
|
126
|
-
* Shows how to handle multiple cluster attributes
|
|
127
|
-
*/
|
|
128
|
-
registerDimmableLightExample() {
|
|
129
|
-
let deviceIsOn = false;
|
|
130
|
-
let deviceBrightness = 127; // 0-254 scale
|
|
131
|
-
// Device control function
|
|
132
|
-
const controlDevice = async (on, brightness) => {
|
|
133
|
-
if (on !== undefined) {
|
|
134
|
-
deviceIsOn = on;
|
|
135
|
-
this.log.info(`[Device] Light turned ${on ? 'ON' : 'OFF'}`);
|
|
136
|
-
}
|
|
137
|
-
if (brightness !== undefined) {
|
|
138
|
-
deviceBrightness = brightness;
|
|
139
|
-
this.log.info(`[Device] Brightness set to ${Math.round(brightness / 254 * 100)}%`);
|
|
140
|
-
}
|
|
141
|
-
};
|
|
142
|
-
this.api.registerMatterAccessory({
|
|
143
|
-
uuid: 'example-dimmable-light-state',
|
|
144
|
-
displayName: 'Example Dimmable Light',
|
|
145
|
-
deviceType: this.api.matterDeviceTypes.DimmableLight,
|
|
146
|
-
serialNumber: 'LIGHT-STATE-001',
|
|
147
|
-
manufacturer: 'State Management Examples',
|
|
148
|
-
model: 'DimmableLight v1',
|
|
149
|
-
clusters: {
|
|
150
|
-
onOff: {
|
|
151
|
-
onOff: deviceIsOn,
|
|
152
|
-
},
|
|
153
|
-
levelControl: {
|
|
154
|
-
currentLevel: deviceBrightness,
|
|
155
|
-
minLevel: 1,
|
|
156
|
-
maxLevel: 254,
|
|
157
|
-
},
|
|
158
|
-
},
|
|
159
|
-
handlers: {
|
|
160
|
-
onOff: {
|
|
161
|
-
on: async () => {
|
|
162
|
-
await controlDevice(true);
|
|
163
|
-
},
|
|
164
|
-
off: async () => {
|
|
165
|
-
await controlDevice(false);
|
|
166
|
-
},
|
|
167
|
-
},
|
|
168
|
-
levelControl: {
|
|
169
|
-
moveToLevel: async (args) => {
|
|
170
|
-
this.log.info(`[HANDLER] User set brightness to ${args.level} via Home app`);
|
|
171
|
-
await controlDevice(undefined, args.level);
|
|
172
|
-
},
|
|
173
|
-
},
|
|
174
|
-
},
|
|
175
|
-
});
|
|
176
|
-
// Example: Device brightness changed via native app
|
|
177
|
-
const handleBrightnessChange = (newBrightness) => {
|
|
178
|
-
this.log.info(`[EXTERNAL] Brightness changed to ${Math.round(newBrightness / 254 * 100)}% via native app`);
|
|
179
|
-
deviceBrightness = newBrightness;
|
|
180
|
-
// Update only the brightness attribute
|
|
181
|
-
this.api.updateMatterAccessoryState('example-dimmable-light-state', 'levelControl', { currentLevel: newBrightness });
|
|
182
|
-
};
|
|
183
|
-
// Example: Both on/off and brightness changed together
|
|
184
|
-
const handleCompleteStateChange = (on, brightness) => {
|
|
185
|
-
this.log.info(`[EXTERNAL] Complete state change: ${on ? 'ON' : 'OFF'} at ${Math.round(brightness / 254 * 100)}%`);
|
|
186
|
-
deviceIsOn = on;
|
|
187
|
-
deviceBrightness = brightness;
|
|
188
|
-
// Update multiple clusters
|
|
189
|
-
this.api.updateMatterAccessoryState('example-dimmable-light-state', 'onOff', { onOff: on });
|
|
190
|
-
this.api.updateMatterAccessoryState('example-dimmable-light-state', 'levelControl', { currentLevel: brightness });
|
|
191
|
-
};
|
|
192
|
-
// Demo: Brightness change after 15 seconds
|
|
193
|
-
setTimeout(() => handleBrightnessChange(200), 15000);
|
|
194
|
-
// Demo: Complete state change after 25 seconds
|
|
195
|
-
setTimeout(() => handleCompleteStateChange(true, 100), 25000);
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* Example 3: Temperature Sensor (Read-Only)
|
|
199
|
-
*
|
|
200
|
-
* Sensors don't have handlers (no user commands)
|
|
201
|
-
* Only need state updates when sensor readings change
|
|
202
|
-
*/
|
|
203
|
-
registerTemperatureSensorExample() {
|
|
204
|
-
let currentTemp = 2100; // 21.00°C in hundredths
|
|
205
|
-
this.api.registerMatterAccessory({
|
|
206
|
-
uuid: 'example-temp-sensor-state',
|
|
207
|
-
displayName: 'Example Temperature Sensor',
|
|
208
|
-
deviceType: this.api.matterDeviceTypes.TemperatureSensor,
|
|
209
|
-
serialNumber: 'TEMP-STATE-001',
|
|
210
|
-
manufacturer: 'State Management Examples',
|
|
211
|
-
model: 'TempSensor v1',
|
|
212
|
-
clusters: {
|
|
213
|
-
temperatureMeasurement: {
|
|
214
|
-
measuredValue: currentTemp,
|
|
215
|
-
minMeasuredValue: -5000,
|
|
216
|
-
maxMeasuredValue: 10000,
|
|
217
|
-
},
|
|
218
|
-
},
|
|
219
|
-
// No handlers needed - sensors are read-only!
|
|
220
|
-
});
|
|
221
|
-
// Poll sensor reading every 60 seconds
|
|
222
|
-
const updateTemperature = () => {
|
|
223
|
-
// In real plugin: const temp = await yourSensorAPI.getTemperature()
|
|
224
|
-
// Simulate temperature change
|
|
225
|
-
currentTemp = 2100 + Math.floor(Math.random() * 500 - 250); // 21°C ± 2.5°C
|
|
226
|
-
this.log.info(`[SENSOR] Temperature updated: ${(currentTemp / 100).toFixed(2)}°C`);
|
|
227
|
-
// Update Matter state
|
|
228
|
-
this.api.updateMatterAccessoryState('example-temp-sensor-state', 'temperatureMeasurement', { measuredValue: currentTemp });
|
|
229
|
-
};
|
|
230
|
-
// Update temperature every minute
|
|
231
|
-
setInterval(updateTemperature, 60000);
|
|
232
|
-
// Initial update after 5 seconds
|
|
233
|
-
setTimeout(updateTemperature, 5000);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
//# sourceMappingURL=exampleStateManagement.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exampleStateManagement.js","sourceRoot":"","sources":["../src/exampleStateManagement.ts"],"names":[],"mappings":"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"}
|