@switchbot/homebridge-switchbot 5.0.0-beta.3 → 5.0.0-beta.4
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/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/platform-matter.d.ts +6 -0
- package/dist/platform-matter.d.ts.map +1 -1
- package/dist/platform-matter.js +368 -2
- package/dist/platform-matter.js.map +1 -1
- package/docs/variables/default.html +1 -1
- package/package.json +1 -1
- package/src/index.ts +2 -0
- package/src/platform-matter.ts +374 -2
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;yBAOrB,KAAK,GAAG,KAAG,IAAI;AAA/B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;yBAOrB,KAAK,GAAG,KAAG,IAAI;AAA/B,wBAQC"}
|
package/dist/index.js
CHANGED
|
@@ -6,6 +6,8 @@ export default (api) => {
|
|
|
6
6
|
// Call the instance method on the runtime `api` object (optional chaining in case
|
|
7
7
|
// older homebridge doesn't provide it). Treat undefined as false.
|
|
8
8
|
const isMatter = Boolean(api.isMatterEnabled?.());
|
|
9
|
+
const log = api.logger ?? console;
|
|
10
|
+
log.info?.(`Homebridge SwitchBot Plugin initializing in ${isMatter ? 'Matter' : 'HAP'} mode.`);
|
|
9
11
|
// If Matter is enabled register the Matter platform, otherwise use HAP platform.
|
|
10
12
|
api.registerPlatform(PLUGIN_NAME, PLATFORM_NAME, isMatter ? SwitchBotMatterPlatform : SwitchBotHAPPlatform);
|
|
11
13
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE1D,yCAAyC;AACzC,eAAe,CAAC,GAAQ,EAAQ,EAAE;IAChC,kFAAkF;IAClF,kEAAkE;IAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACjD,iFAAiF;IACjF,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAA;AAC7G,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE1D,yCAAyC;AACzC,eAAe,CAAC,GAAQ,EAAQ,EAAE;IAChC,kFAAkF;IAClF,kEAAkE;IAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACjD,MAAM,GAAG,GAAI,GAAW,CAAC,MAAM,IAAI,OAAO,CAAA;IAC1C,GAAG,CAAC,IAAI,EAAE,CAAC,+CAA+C,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAA;IAC9F,iFAAiF;IACjF,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAA;AAC7G,CAAC,CAAA"}
|
|
@@ -15,7 +15,13 @@ export declare class SwitchBotMatterPlatform implements DynamicPlatformPlugin {
|
|
|
15
15
|
private switchBotAPI?;
|
|
16
16
|
private switchBotBLE?;
|
|
17
17
|
private discoveredDevices;
|
|
18
|
+
private bleEventHandler;
|
|
18
19
|
constructor(log: Logging, config: SwitchBotPlatformConfig, api: API);
|
|
20
|
+
/**
|
|
21
|
+
* Map a SwitchBot device object to a MatterAccessory using the device-specific
|
|
22
|
+
* Matter accessory classes in `src/devices-matter`.
|
|
23
|
+
*/
|
|
24
|
+
private createAccessoryFromDevice;
|
|
19
25
|
/**
|
|
20
26
|
* Discover devices via SwitchBot OpenAPI and cache them for later use
|
|
21
27
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-matter.d.ts","sourceRoot":"","sources":["../src/platform-matter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,GAAG,EACH,qBAAqB,EACrB,OAAO,EAEP,yBAAyB,EAC1B,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAExD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AA8B5D;;;;;GAKG;AACH,qBAAa,uBAAwB,YAAW,qBAAqB;
|
|
1
|
+
{"version":3,"file":"platform-matter.d.ts","sourceRoot":"","sources":["../src/platform-matter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,GAAG,EACH,qBAAqB,EACrB,OAAO,EAEP,yBAAyB,EAC1B,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAExD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAA;AA8B5D;;;;;GAKG;AACH,qBAAa,uBAAwB,YAAW,qBAAqB;aAgBjD,GAAG,EAAE,OAAO;aACZ,MAAM,EAAE,uBAAuB;aAC/B,GAAG,EAAE,GAAG;IAZ1B,SAAgB,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAY;IAErF,OAAO,CAAC,YAAY,CAAC,CAAkB;IACvC,OAAO,CAAC,YAAY,CAAC,CAAc;IAEnC,OAAO,CAAC,iBAAiB,CAAe;IAExC,OAAO,CAAC,eAAe,CAA8C;gBAGnD,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,uBAAuB,EAC/B,GAAG,EAAE,GAAG;IA4F1B;;;OAGG;YACW,yBAAyB;IA4TvC;;OAEG;YACW,eAAe;IAwB7B;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,SAAI,EAAE,mBAAmB,SAAO,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,GAAG,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IA0BzJ;;;OAGG;IACH,kBAAkB;IAMlB;;;;;OAKG;IACH,wBAAwB,CAAC,SAAS,EAAE,yBAAyB;IAK7D;;OAEG;YACW,yBAAyB;IAgDvC;;OAEG;YACW,yBAAyB;IAqCvC;;OAEG;YACW,wBAAwB;IA8CtC;;OAEG;YACW,0BAA0B;IAsBxC;;OAEG;YACW,wBAAwB;IAsBtC;;OAEG;YACW,uBAAuB;IA0DrC;;OAEG;YACW,uBAAuB;IAkCrC;;OAEG;YACW,oBAAoB;IA4BlC;;;;;OAKG;YACW,wBAAwB;IAsBtC;;;;;;OAMG;YACW,qBAAqB;CAqBpC"}
|
package/dist/platform-matter.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SwitchBotBLE, SwitchBotOpenAPI } from 'node-switchbot';
|
|
2
2
|
import { ColorLightAccessory, ColorTemperatureLightAccessory, ContactSensorAccessory, DimmableLightAccessory, DoorLockAccessory, ExtendedColorLightAccessory, FanAccessory, HumiditySensorAccessory, LeakSensorAccessory, LightSensorAccessory, OccupancySensorAccessory, OnOffLightAccessory, OnOffOutletAccessory, OnOffSwitchAccessory, PowerStripAccessory, RoboticVacuumAccessory, SmokeCOAlarmAccessory, TemperatureSensorAccessory, ThermostatAccessory, VenetianBlindAccessory, WindowBlindAccessory, } from './devices-matter/index.js';
|
|
3
3
|
import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
|
|
4
|
-
import { cleanDeviceConfig, sleep } from './utils.js';
|
|
4
|
+
import { cleanDeviceConfig, formatDeviceIdAsMac, hs2rgb, rgb2hs, sleep } from './utils.js';
|
|
5
5
|
/**
|
|
6
6
|
* MatterPlatform
|
|
7
7
|
* Demonstrates all available Matter device types in Homebridge
|
|
@@ -22,6 +22,8 @@ export class SwitchBotMatterPlatform {
|
|
|
22
22
|
switchBotBLE;
|
|
23
23
|
// discovered devices cache
|
|
24
24
|
discoveredDevices = [];
|
|
25
|
+
// BLE event handlers keyed by device MAC (formatted)
|
|
26
|
+
bleEventHandler = {};
|
|
25
27
|
constructor(log, config, api) {
|
|
26
28
|
this.log = log;
|
|
27
29
|
this.config = config;
|
|
@@ -84,11 +86,350 @@ export class SwitchBotMatterPlatform {
|
|
|
84
86
|
catch (e) {
|
|
85
87
|
this.log.error('Failed to initialize SwitchBot BLE client:', e?.message ?? e);
|
|
86
88
|
}
|
|
89
|
+
// If BLE scanning is enabled, start scanning and route advertisements to registered handlers
|
|
90
|
+
if (this.config.options?.BLE && this.switchBotBLE) {
|
|
91
|
+
const ble = this.switchBotBLE;
|
|
92
|
+
(async () => {
|
|
93
|
+
try {
|
|
94
|
+
await ble.startScan();
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
this.log.error(`Failed to start BLE scanning: ${e?.message ?? e}`);
|
|
98
|
+
}
|
|
99
|
+
// route advertisements to our handlers
|
|
100
|
+
ble.onadvertisement = async (ad) => {
|
|
101
|
+
try {
|
|
102
|
+
const mac = (ad.address || '').toLowerCase();
|
|
103
|
+
const handler = this.bleEventHandler[mac];
|
|
104
|
+
if (handler) {
|
|
105
|
+
await handler(ad.serviceData);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch (e) {
|
|
109
|
+
this.log.error(`Failed to handle BLE advertisement: ${e?.message ?? e}`);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
})();
|
|
113
|
+
}
|
|
87
114
|
// perform device discovery from SwitchBot OpenAPI (if configured)
|
|
88
115
|
void this.discoverDevices();
|
|
89
116
|
this.registerMatterAccessories();
|
|
90
117
|
});
|
|
91
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Map a SwitchBot device object to a MatterAccessory using the device-specific
|
|
121
|
+
* Matter accessory classes in `src/devices-matter`.
|
|
122
|
+
*/
|
|
123
|
+
async createAccessoryFromDevice(dev) {
|
|
124
|
+
// Basic metadata
|
|
125
|
+
const displayName = dev.deviceName ?? dev.deviceId ?? 'SwitchBot Device';
|
|
126
|
+
const serial = dev.deviceId ?? 'unknown';
|
|
127
|
+
const manufacturer = 'SwitchBot';
|
|
128
|
+
const model = dev.deviceType ?? 'SwitchBot';
|
|
129
|
+
const firmware = dev.firmware ?? dev.version ?? '0.0.0';
|
|
130
|
+
// Helper to build a default opts object consumed by the matter device classes
|
|
131
|
+
const baseOpts = {
|
|
132
|
+
uuid: this.api.matter.uuid.generate(serial),
|
|
133
|
+
displayName,
|
|
134
|
+
serialNumber: serial,
|
|
135
|
+
manufacturer,
|
|
136
|
+
model,
|
|
137
|
+
firmwareRevision: String(firmware),
|
|
138
|
+
hardwareRevision: '1.0.0',
|
|
139
|
+
deviceId: dev.deviceId,
|
|
140
|
+
context: { deviceId: dev.deviceId },
|
|
141
|
+
};
|
|
142
|
+
// Small helper to wrap common OpenAPI on/off commands
|
|
143
|
+
// Helper to send an OpenAPI command
|
|
144
|
+
const sendOpenAPI = async (command, parameter = 'default') => {
|
|
145
|
+
const bodyChange = { command, parameter, commandType: 'command' };
|
|
146
|
+
return this.retryCommand(dev, bodyChange, this.config.options?.maxRetries ?? 1, this.config.options?.delayBetweenRetries ?? 1000);
|
|
147
|
+
};
|
|
148
|
+
// Helper to send a BLE action if Platform BLE is enabled and switchBotBLE exists
|
|
149
|
+
const sendBLE = async (methodName, ...args) => {
|
|
150
|
+
if (!this.switchBotBLE) {
|
|
151
|
+
throw new Error('Platform BLE not available');
|
|
152
|
+
}
|
|
153
|
+
const id = formatDeviceIdAsMac(dev.deviceId);
|
|
154
|
+
const list = await this.switchBotBLE.discover({ model: dev.bleModel, id });
|
|
155
|
+
if (!Array.isArray(list) || list.length === 0) {
|
|
156
|
+
throw new Error('BLE device not found');
|
|
157
|
+
}
|
|
158
|
+
const deviceInst = list[0];
|
|
159
|
+
if (typeof deviceInst[methodName] !== 'function') {
|
|
160
|
+
throw new TypeError(`BLE method ${methodName} not available on device`);
|
|
161
|
+
}
|
|
162
|
+
return await deviceInst[methodName](...args);
|
|
163
|
+
};
|
|
164
|
+
const makeOnOffHandlers = (uuid) => ({
|
|
165
|
+
onOff: {
|
|
166
|
+
on: async () => {
|
|
167
|
+
try {
|
|
168
|
+
if (this.config.options?.BLE && this.switchBotBLE) {
|
|
169
|
+
await sendBLE('turnOn');
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
await sendOpenAPI('turnOn');
|
|
173
|
+
}
|
|
174
|
+
await this.api.matter.updateAccessoryState(uuid, this.api.matter.clusterNames.OnOff, { onOff: true });
|
|
175
|
+
}
|
|
176
|
+
catch (e) {
|
|
177
|
+
this.log.error(`Failed to turn on device ${dev.deviceId}: ${e?.message ?? e}`);
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
off: async () => {
|
|
181
|
+
try {
|
|
182
|
+
if (this.config.options?.BLE && this.switchBotBLE) {
|
|
183
|
+
await sendBLE('turnOff');
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
await sendOpenAPI('turnOff');
|
|
187
|
+
}
|
|
188
|
+
await this.api.matter.updateAccessoryState(uuid, this.api.matter.clusterNames.OnOff, { onOff: false });
|
|
189
|
+
}
|
|
190
|
+
catch (e) {
|
|
191
|
+
this.log.error(`Failed to turn off device ${dev.deviceId}: ${e?.message ?? e}`);
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
});
|
|
196
|
+
// Mapping from SwitchBot deviceType -> constructor
|
|
197
|
+
const mapping = {
|
|
198
|
+
'Plug': OnOffOutletAccessory,
|
|
199
|
+
'Plug Mini (US)': OnOffOutletAccessory,
|
|
200
|
+
'Plug Mini (JP)': OnOffOutletAccessory,
|
|
201
|
+
'Color Bulb': ColorLightAccessory,
|
|
202
|
+
'Ceiling Light': ColorTemperatureLightAccessory,
|
|
203
|
+
'Ceiling Light Pro': ColorTemperatureLightAccessory,
|
|
204
|
+
'Strip Light': ExtendedColorLightAccessory,
|
|
205
|
+
'Dimmable Light': DimmableLightAccessory,
|
|
206
|
+
'K10+': RoboticVacuumAccessory,
|
|
207
|
+
'K10+ Pro': RoboticVacuumAccessory,
|
|
208
|
+
'WoSweeper': RoboticVacuumAccessory,
|
|
209
|
+
'WoSweeperMini': RoboticVacuumAccessory,
|
|
210
|
+
'Robot Vacuum Cleaner S1': RoboticVacuumAccessory,
|
|
211
|
+
'Robot Vacuum Cleaner S1 Plus': RoboticVacuumAccessory,
|
|
212
|
+
'Robot Vacuum Cleaner S10': RoboticVacuumAccessory,
|
|
213
|
+
'Smart Lock': DoorLockAccessory,
|
|
214
|
+
'Smart Lock Pro': DoorLockAccessory,
|
|
215
|
+
'Motion Sensor': OccupancySensorAccessory,
|
|
216
|
+
'Contact Sensor': ContactSensorAccessory,
|
|
217
|
+
'Water Detector': LeakSensorAccessory,
|
|
218
|
+
'Meter': TemperatureSensorAccessory,
|
|
219
|
+
'MeterPlus': TemperatureSensorAccessory,
|
|
220
|
+
'MeterPro': TemperatureSensorAccessory,
|
|
221
|
+
'WoIOSensor': TemperatureSensorAccessory,
|
|
222
|
+
'Air Purifier PM2.5': HumiditySensorAccessory,
|
|
223
|
+
'Battery Circulator Fan': FanAccessory,
|
|
224
|
+
'Blind Tilt': VenetianBlindAccessory,
|
|
225
|
+
'Curtain': WindowBlindAccessory,
|
|
226
|
+
'Curtain3': WindowBlindAccessory,
|
|
227
|
+
'WoRollerShade': WindowBlindAccessory,
|
|
228
|
+
'Roller Shade': WindowBlindAccessory,
|
|
229
|
+
'Relay Switch 1': OnOffSwitchAccessory,
|
|
230
|
+
'Relay Switch 1PM': OnOffSwitchAccessory,
|
|
231
|
+
};
|
|
232
|
+
const Ctor = mapping[dev.deviceType ?? ''];
|
|
233
|
+
if (!Ctor) {
|
|
234
|
+
this.log.debug(`No Matter mapping for deviceType='${dev.deviceType}', deviceId=${dev.deviceId}`);
|
|
235
|
+
return undefined;
|
|
236
|
+
}
|
|
237
|
+
// Build opts and handlers tailored for basic capabilities
|
|
238
|
+
const uuid = baseOpts.uuid;
|
|
239
|
+
const handlers = {};
|
|
240
|
+
// On/Off common
|
|
241
|
+
handlers.onOff = makeOnOffHandlers(uuid).onOff;
|
|
242
|
+
// If this is a light, add brightness and color handlers
|
|
243
|
+
if (['Color Bulb', 'Ceiling Light', 'Ceiling Light Pro', 'Strip Light', 'Dimmable Light'].includes(dev.deviceType ?? '')) {
|
|
244
|
+
// levelControl
|
|
245
|
+
handlers.levelControl = {
|
|
246
|
+
moveToLevelWithOnOff: async (request) => {
|
|
247
|
+
try {
|
|
248
|
+
const level = request.level;
|
|
249
|
+
const percent = Math.round((level / 254) * 100);
|
|
250
|
+
if (this.config.options?.BLE && this.switchBotBLE) {
|
|
251
|
+
await sendBLE('setBrightness', percent);
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
await sendOpenAPI('setBrightness', `${percent}`);
|
|
255
|
+
}
|
|
256
|
+
await this.api.matter.updateAccessoryState(uuid, this.api.matter.clusterNames.LevelControl, { currentLevel: level });
|
|
257
|
+
}
|
|
258
|
+
catch (e) {
|
|
259
|
+
this.log.error(`Failed to set brightness for ${dev.deviceId}: ${e?.message ?? e}`);
|
|
260
|
+
}
|
|
261
|
+
},
|
|
262
|
+
};
|
|
263
|
+
// colorControl
|
|
264
|
+
handlers.colorControl = {
|
|
265
|
+
moveToHueAndSaturationLogic: async (request) => {
|
|
266
|
+
try {
|
|
267
|
+
const hue = request.hue;
|
|
268
|
+
const saturation = request.saturation;
|
|
269
|
+
const [r, g, b] = hs2rgb(Math.round((hue / 254) * 360), Math.round((saturation / 254) * 100));
|
|
270
|
+
if (this.config.options?.BLE && this.switchBotBLE) {
|
|
271
|
+
await sendBLE('setRGB', Number(request.level ?? 100), r, g, b);
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
await sendOpenAPI('setColor', `${r}:${g}:${b}`);
|
|
275
|
+
}
|
|
276
|
+
await this.api.matter.updateAccessoryState(uuid, this.api.matter.clusterNames.ColorControl, { currentHue: hue, currentSaturation: saturation });
|
|
277
|
+
}
|
|
278
|
+
catch (e) {
|
|
279
|
+
this.log.error(`Failed to set hue/sat for ${dev.deviceId}: ${e?.message ?? e}`);
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
moveToColorLogic: async (request) => {
|
|
283
|
+
try {
|
|
284
|
+
// MoveToColor gives colorX/colorY values; convert to approximate RGB by mapping to 0-255 scale
|
|
285
|
+
const colorX = request.colorX;
|
|
286
|
+
const colorY = request.colorY;
|
|
287
|
+
// Naive conversion: map X/Y into RGB via hue approximation (not colorimetrically accurate)
|
|
288
|
+
const hueApprox = Math.round((colorX / 65535) * 360);
|
|
289
|
+
const satApprox = Math.round((colorY / 65535) * 100);
|
|
290
|
+
const [r, g, b] = hs2rgb(hueApprox, satApprox);
|
|
291
|
+
if (this.config.options?.BLE && this.switchBotBLE) {
|
|
292
|
+
await sendBLE('setRGB', Number(request.level ?? 100), r, g, b);
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
await sendOpenAPI('setColor', `${r}:${g}:${b}`);
|
|
296
|
+
}
|
|
297
|
+
await this.api.matter.updateAccessoryState(uuid, this.api.matter.clusterNames.ColorControl, { currentX: colorX, currentY: colorY });
|
|
298
|
+
}
|
|
299
|
+
catch (e) {
|
|
300
|
+
this.log.error(`Failed to set XY color for ${dev.deviceId}: ${e?.message ?? e}`);
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
};
|
|
304
|
+
// color temperature — map to kelvin and send setColorTemperature
|
|
305
|
+
handlers.colorTemperature = {
|
|
306
|
+
moveToColorTemperature: async (request) => {
|
|
307
|
+
try {
|
|
308
|
+
const kelvin = Math.round(1000000 / Number(request.colorTemperature));
|
|
309
|
+
if (this.config.options?.BLE && this.switchBotBLE) {
|
|
310
|
+
await sendBLE('setColorTemperature', kelvin);
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
await sendOpenAPI('setColorTemperature', `${kelvin}`);
|
|
314
|
+
}
|
|
315
|
+
await this.api.matter.updateAccessoryState(uuid, this.api.matter.clusterNames.ColorControl, { currentX: request.colorX ?? 0, currentY: request.colorY ?? 0 });
|
|
316
|
+
}
|
|
317
|
+
catch (e) {
|
|
318
|
+
this.log.error(`Failed to set color temperature for ${dev.deviceId}: ${e?.message ?? e}`);
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
const opts = Object.assign({}, baseOpts, { handlers });
|
|
324
|
+
// Instantiate the device class and return its serialized accessory
|
|
325
|
+
const instance = new Ctor(this.api, this.log, opts);
|
|
326
|
+
// Register BLE->Matter push handler for this device's MAC (if BLE scanning is active)
|
|
327
|
+
try {
|
|
328
|
+
const mac = formatDeviceIdAsMac(dev.deviceId).toLowerCase();
|
|
329
|
+
// Handler receives advertisement/serviceData when BLE scan events arrive
|
|
330
|
+
this.bleEventHandler[mac] = async (serviceData) => {
|
|
331
|
+
const uuidLocal = baseOpts.uuid;
|
|
332
|
+
// Try to parse BLE advertisement/serviceData first (works without cloud)
|
|
333
|
+
try {
|
|
334
|
+
if (serviceData) {
|
|
335
|
+
// Power
|
|
336
|
+
const power = serviceData.power ?? serviceData.on ?? serviceData.p;
|
|
337
|
+
if (power !== undefined) {
|
|
338
|
+
const on = (String(power).toLowerCase() === 'on' || Number(power) === 1);
|
|
339
|
+
await this.api.matter.updateAccessoryState(uuidLocal, this.api.matter.clusterNames.OnOff, { onOff: on });
|
|
340
|
+
}
|
|
341
|
+
// Brightness
|
|
342
|
+
const brightness = serviceData.brightness ?? serviceData.b;
|
|
343
|
+
if (brightness !== undefined) {
|
|
344
|
+
const level = Math.round((Number(brightness) / 100) * 254);
|
|
345
|
+
await this.api.matter.updateAccessoryState(uuidLocal, this.api.matter.clusterNames.LevelControl, { currentLevel: level });
|
|
346
|
+
}
|
|
347
|
+
// Color (r:g:b or hex or hex without #)
|
|
348
|
+
const color = serviceData.color ?? serviceData.rgb ?? serviceData.c;
|
|
349
|
+
if (color !== undefined) {
|
|
350
|
+
let r = 0;
|
|
351
|
+
let g = 0;
|
|
352
|
+
let b = 0;
|
|
353
|
+
const c = String(color);
|
|
354
|
+
if (c.includes(':')) {
|
|
355
|
+
const parts = c.split(':').map(Number);
|
|
356
|
+
[r, g, b] = parts;
|
|
357
|
+
}
|
|
358
|
+
else if (c.startsWith('#')) {
|
|
359
|
+
const hex = c.replace('#', '');
|
|
360
|
+
r = Number.parseInt(hex.substring(0, 2), 16);
|
|
361
|
+
g = Number.parseInt(hex.substring(2, 4), 16);
|
|
362
|
+
b = Number.parseInt(hex.substring(4, 6), 16);
|
|
363
|
+
}
|
|
364
|
+
else if (/^[0-9a-f]{6}$/i.test(c)) {
|
|
365
|
+
r = Number.parseInt(c.substring(0, 2), 16);
|
|
366
|
+
g = Number.parseInt(c.substring(2, 4), 16);
|
|
367
|
+
b = Number.parseInt(c.substring(4, 6), 16);
|
|
368
|
+
}
|
|
369
|
+
const [h, s] = rgb2hs(r, g, b);
|
|
370
|
+
await this.api.matter.updateAccessoryState(uuidLocal, this.api.matter.clusterNames.ColorControl, { currentHue: Math.round((h / 360) * 254), currentSaturation: Math.round((s / 100) * 254) });
|
|
371
|
+
}
|
|
372
|
+
// If serviceData was present, prefer it and return early
|
|
373
|
+
if (serviceData) {
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
catch (e) {
|
|
379
|
+
this.log.debug(`BLE advertisement parsing failed for ${dev.deviceId}: ${e?.message ?? e}`);
|
|
380
|
+
}
|
|
381
|
+
// Fallback to OpenAPI getDeviceStatus when serviceData is not present or parsing failed
|
|
382
|
+
if (!this.switchBotAPI) {
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
385
|
+
try {
|
|
386
|
+
const { response, statusCode } = await this.switchBotAPI.getDeviceStatus(dev.deviceId, this.config.credentials?.token, this.config.credentials?.secret);
|
|
387
|
+
if (!(statusCode === 100 || statusCode === 200)) {
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
const respAny = response;
|
|
391
|
+
const body = respAny?.body ?? respAny;
|
|
392
|
+
const status = body?.status ?? body;
|
|
393
|
+
// On/Off
|
|
394
|
+
if (status?.power !== undefined) {
|
|
395
|
+
const on = (String(status.power).toLowerCase() === 'on' || Number(status.power) === 1);
|
|
396
|
+
await this.api.matter.updateAccessoryState(uuidLocal, this.api.matter.clusterNames.OnOff, { onOff: on });
|
|
397
|
+
}
|
|
398
|
+
// Brightness
|
|
399
|
+
if (status?.brightness !== undefined) {
|
|
400
|
+
const level = Math.round((Number(status.brightness) / 100) * 254);
|
|
401
|
+
await this.api.matter.updateAccessoryState(uuidLocal, this.api.matter.clusterNames.LevelControl, { currentLevel: level });
|
|
402
|
+
}
|
|
403
|
+
// Color
|
|
404
|
+
if (status?.color !== undefined) {
|
|
405
|
+
const color = String(status.color);
|
|
406
|
+
let r = 0;
|
|
407
|
+
let g = 0;
|
|
408
|
+
let b = 0;
|
|
409
|
+
if (color.includes(':')) {
|
|
410
|
+
const parts = color.split(':').map(Number);
|
|
411
|
+
[r, g, b] = parts;
|
|
412
|
+
}
|
|
413
|
+
else if (color.startsWith('#')) {
|
|
414
|
+
const hex = color.replace('#', '');
|
|
415
|
+
r = Number.parseInt(hex.substring(0, 2), 16);
|
|
416
|
+
g = Number.parseInt(hex.substring(2, 4), 16);
|
|
417
|
+
b = Number.parseInt(hex.substring(4, 6), 16);
|
|
418
|
+
}
|
|
419
|
+
const [h, s] = rgb2hs(r, g, b);
|
|
420
|
+
await this.api.matter.updateAccessoryState(uuidLocal, this.api.matter.clusterNames.ColorControl, { currentHue: Math.round((h / 360) * 254), currentSaturation: Math.round((s / 100) * 254) });
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
catch (e) {
|
|
424
|
+
this.log.debug(`BLE push handler failed for ${dev.deviceId}: ${e?.message ?? e}`);
|
|
425
|
+
}
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
catch (e) {
|
|
429
|
+
this.log.debug(`Failed to register BLE handler for ${dev.deviceId}: ${e?.message ?? e}`);
|
|
430
|
+
}
|
|
431
|
+
return instance.toAccessory();
|
|
432
|
+
}
|
|
92
433
|
/**
|
|
93
434
|
* Discover devices via SwitchBot OpenAPI and cache them for later use
|
|
94
435
|
*/
|
|
@@ -165,7 +506,32 @@ export class SwitchBotMatterPlatform {
|
|
|
165
506
|
this.log.info('═'.repeat(80));
|
|
166
507
|
// Remove accessories that are disabled in config
|
|
167
508
|
await this.removeDisabledAccessories();
|
|
168
|
-
//
|
|
509
|
+
// If we discovered real SwitchBot devices via OpenAPI, map and register them
|
|
510
|
+
if (this.discoveredDevices && this.discoveredDevices.length > 0) {
|
|
511
|
+
this.log.info(`Registering ${this.discoveredDevices.length} discovered SwitchBot device(s) as Matter accessories`);
|
|
512
|
+
const accessories = [];
|
|
513
|
+
for (const dev of this.discoveredDevices) {
|
|
514
|
+
try {
|
|
515
|
+
const acc = await this.createAccessoryFromDevice(dev);
|
|
516
|
+
if (acc) {
|
|
517
|
+
accessories.push(acc);
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
catch (e) {
|
|
521
|
+
this.log.error(`Failed to create Matter accessory for ${dev.deviceId}: ${e?.message ?? e}`);
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
if (accessories.length > 0) {
|
|
525
|
+
this.log.info(`✓ Registered ${accessories.length} discovered device(s)`);
|
|
526
|
+
for (const acc of accessories) {
|
|
527
|
+
this.log.info(` - ${acc.displayName}`);
|
|
528
|
+
}
|
|
529
|
+
await this.api.matter.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, accessories);
|
|
530
|
+
return;
|
|
531
|
+
}
|
|
532
|
+
this.log.info('No discovered devices were mapped to Matter accessories; falling back to example sections');
|
|
533
|
+
}
|
|
534
|
+
// Register example/demo devices by Matter specification sections
|
|
169
535
|
await this.registerSection4Lighting();
|
|
170
536
|
await this.registerSection5SmartPlugs();
|
|
171
537
|
await this.registerSection6Switches();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-matter.js","sourceRoot":"","sources":["../src/platform-matter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"platform-matter.js","sourceRoot":"","sources":["../src/platform-matter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>default | @switchbot/homebridge-switchbot</title><meta name="description" content="Documentation for @switchbot/homebridge-switchbot"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">@switchbot/homebridge-switchbot</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">default</a></li></ul><h1>Variable default</h1></div><div class="tsd-signature"><span class="tsd-kind-variable">default</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">api</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">API</span><span class="tsd-signature-symbol">)</span> <span class="tsd-signature-symbol">=></span> <span class="tsd-signature-type">void</span></div><div class="tsd-type-declaration"><h4>Type Declaration</h4><ul class="tsd-parameters"><li class="tsd-parameter-signature"><ul class="tsd-signatures"><li class="tsd-signature" id="__type"><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">api</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">API</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">void</span></li><li class="tsd-description"><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">api</span>: <span class="tsd-signature-type">API</span></span></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4></li></ul></li></ul></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/OpenWonderLabs/homebridge-switchbot/blob/
|
|
1
|
+
<!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>default | @switchbot/homebridge-switchbot</title><meta name="description" content="Documentation for @switchbot/homebridge-switchbot"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">@switchbot/homebridge-switchbot</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">default</a></li></ul><h1>Variable default</h1></div><div class="tsd-signature"><span class="tsd-kind-variable">default</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">api</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">API</span><span class="tsd-signature-symbol">)</span> <span class="tsd-signature-symbol">=></span> <span class="tsd-signature-type">void</span></div><div class="tsd-type-declaration"><h4>Type Declaration</h4><ul class="tsd-parameters"><li class="tsd-parameter-signature"><ul class="tsd-signatures"><li class="tsd-signature" id="__type"><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">api</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">API</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">void</span></li><li class="tsd-description"><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">api</span>: <span class="tsd-signature-type">API</span></span></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4></li></ul></li></ul></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/OpenWonderLabs/homebridge-switchbot/blob/226670f563f5f2470de60fb76102084f11fdb5c8/src/index.ts#L12">index.ts:12</a></li></ul></aside></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">@switchbot/homebridge-switchbot</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@switchbot/homebridge-switchbot",
|
|
3
3
|
"displayName": "SwitchBot",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "5.0.0-beta.
|
|
5
|
+
"version": "5.0.0-beta.4",
|
|
6
6
|
"description": "The SwitchBot plugin allows you to access your SwitchBot device(s) from HomeKit.",
|
|
7
7
|
"author": "SwitchBot <support@wondertechlabs.com> (https://github.com/SwitchBot)",
|
|
8
8
|
"contributors": [
|
package/src/index.ts
CHANGED
|
@@ -13,6 +13,8 @@ export default (api: API): void => {
|
|
|
13
13
|
// Call the instance method on the runtime `api` object (optional chaining in case
|
|
14
14
|
// older homebridge doesn't provide it). Treat undefined as false.
|
|
15
15
|
const isMatter = Boolean(api.isMatterEnabled?.())
|
|
16
|
+
const log = (api as any).logger ?? console
|
|
17
|
+
log.info?.(`Homebridge SwitchBot Plugin initializing in ${isMatter ? 'Matter' : 'HAP'} mode.`)
|
|
16
18
|
// If Matter is enabled register the Matter platform, otherwise use HAP platform.
|
|
17
19
|
api.registerPlatform(PLUGIN_NAME, PLATFORM_NAME, isMatter ? SwitchBotMatterPlatform : SwitchBotHAPPlatform)
|
|
18
20
|
}
|
package/src/platform-matter.ts
CHANGED
|
@@ -35,7 +35,7 @@ import {
|
|
|
35
35
|
WindowBlindAccessory,
|
|
36
36
|
} from './devices-matter/index.js'
|
|
37
37
|
import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js'
|
|
38
|
-
import { cleanDeviceConfig, sleep } from './utils.js'
|
|
38
|
+
import { cleanDeviceConfig, formatDeviceIdAsMac, hs2rgb, rgb2hs, sleep } from './utils.js'
|
|
39
39
|
|
|
40
40
|
/**
|
|
41
41
|
* MatterPlatform
|
|
@@ -55,6 +55,8 @@ export class SwitchBotMatterPlatform implements DynamicPlatformPlugin {
|
|
|
55
55
|
private switchBotBLE?: SwitchBotBLE
|
|
56
56
|
// discovered devices cache
|
|
57
57
|
private discoveredDevices: device[] = []
|
|
58
|
+
// BLE event handlers keyed by device MAC (formatted)
|
|
59
|
+
private bleEventHandler: { [x: string]: (context: any) => void } = {}
|
|
58
60
|
|
|
59
61
|
constructor(
|
|
60
62
|
public readonly log: Logging,
|
|
@@ -119,6 +121,31 @@ export class SwitchBotMatterPlatform implements DynamicPlatformPlugin {
|
|
|
119
121
|
this.log.error('Failed to initialize SwitchBot BLE client:', e?.message ?? e)
|
|
120
122
|
}
|
|
121
123
|
|
|
124
|
+
// If BLE scanning is enabled, start scanning and route advertisements to registered handlers
|
|
125
|
+
if (this.config.options?.BLE && this.switchBotBLE) {
|
|
126
|
+
const ble = this.switchBotBLE
|
|
127
|
+
;(async () => {
|
|
128
|
+
try {
|
|
129
|
+
await ble.startScan()
|
|
130
|
+
} catch (e: any) {
|
|
131
|
+
this.log.error(`Failed to start BLE scanning: ${e?.message ?? e}`)
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// route advertisements to our handlers
|
|
135
|
+
ble.onadvertisement = async (ad: any) => {
|
|
136
|
+
try {
|
|
137
|
+
const mac = (ad.address || '').toLowerCase()
|
|
138
|
+
const handler = this.bleEventHandler[mac]
|
|
139
|
+
if (handler) {
|
|
140
|
+
await handler(ad.serviceData)
|
|
141
|
+
}
|
|
142
|
+
} catch (e: any) {
|
|
143
|
+
this.log.error(`Failed to handle BLE advertisement: ${e?.message ?? e}`)
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
})()
|
|
147
|
+
}
|
|
148
|
+
|
|
122
149
|
// perform device discovery from SwitchBot OpenAPI (if configured)
|
|
123
150
|
void this.discoverDevices()
|
|
124
151
|
|
|
@@ -126,6 +153,326 @@ export class SwitchBotMatterPlatform implements DynamicPlatformPlugin {
|
|
|
126
153
|
})
|
|
127
154
|
}
|
|
128
155
|
|
|
156
|
+
/**
|
|
157
|
+
* Map a SwitchBot device object to a MatterAccessory using the device-specific
|
|
158
|
+
* Matter accessory classes in `src/devices-matter`.
|
|
159
|
+
*/
|
|
160
|
+
private async createAccessoryFromDevice(dev: device): Promise<MatterAccessory<Record<string, unknown>> | undefined> {
|
|
161
|
+
// Basic metadata
|
|
162
|
+
const displayName = dev.deviceName ?? dev.deviceId ?? 'SwitchBot Device'
|
|
163
|
+
const serial = dev.deviceId ?? 'unknown'
|
|
164
|
+
const manufacturer = 'SwitchBot'
|
|
165
|
+
const model = dev.deviceType ?? 'SwitchBot'
|
|
166
|
+
const firmware = (dev as any).firmware ?? (dev as any).version ?? '0.0.0'
|
|
167
|
+
|
|
168
|
+
// Helper to build a default opts object consumed by the matter device classes
|
|
169
|
+
const baseOpts = {
|
|
170
|
+
uuid: this.api.matter.uuid.generate(serial),
|
|
171
|
+
displayName,
|
|
172
|
+
serialNumber: serial,
|
|
173
|
+
manufacturer,
|
|
174
|
+
model,
|
|
175
|
+
firmwareRevision: String(firmware),
|
|
176
|
+
hardwareRevision: '1.0.0',
|
|
177
|
+
deviceId: dev.deviceId,
|
|
178
|
+
context: { deviceId: dev.deviceId },
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Small helper to wrap common OpenAPI on/off commands
|
|
182
|
+
// Helper to send an OpenAPI command
|
|
183
|
+
const sendOpenAPI = async (command: string, parameter = 'default') => {
|
|
184
|
+
const bodyChange: bodyChange = { command, parameter, commandType: 'command' }
|
|
185
|
+
return this.retryCommand(dev, bodyChange, this.config.options?.maxRetries ?? 1, this.config.options?.delayBetweenRetries ?? 1000)
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Helper to send a BLE action if Platform BLE is enabled and switchBotBLE exists
|
|
189
|
+
const sendBLE = async (methodName: string, ...args: any[]) => {
|
|
190
|
+
if (!this.switchBotBLE) {
|
|
191
|
+
throw new Error('Platform BLE not available')
|
|
192
|
+
}
|
|
193
|
+
const id = formatDeviceIdAsMac(dev.deviceId)
|
|
194
|
+
const list = await this.switchBotBLE.discover({ model: (dev as any).bleModel, id })
|
|
195
|
+
if (!Array.isArray(list) || list.length === 0) {
|
|
196
|
+
throw new Error('BLE device not found')
|
|
197
|
+
}
|
|
198
|
+
const deviceInst: any = list[0]
|
|
199
|
+
if (typeof deviceInst[methodName] !== 'function') {
|
|
200
|
+
throw new TypeError(`BLE method ${methodName} not available on device`)
|
|
201
|
+
}
|
|
202
|
+
return await deviceInst[methodName](...args)
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
const makeOnOffHandlers = (uuid: string) => ({
|
|
206
|
+
onOff: {
|
|
207
|
+
on: async () => {
|
|
208
|
+
try {
|
|
209
|
+
if (this.config.options?.BLE && this.switchBotBLE) {
|
|
210
|
+
await sendBLE('turnOn')
|
|
211
|
+
} else {
|
|
212
|
+
await sendOpenAPI('turnOn')
|
|
213
|
+
}
|
|
214
|
+
await this.api.matter.updateAccessoryState(uuid, this.api.matter.clusterNames.OnOff, { onOff: true })
|
|
215
|
+
} catch (e: any) {
|
|
216
|
+
this.log.error(`Failed to turn on device ${dev.deviceId}: ${e?.message ?? e}`)
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
off: async () => {
|
|
220
|
+
try {
|
|
221
|
+
if (this.config.options?.BLE && this.switchBotBLE) {
|
|
222
|
+
await sendBLE('turnOff')
|
|
223
|
+
} else {
|
|
224
|
+
await sendOpenAPI('turnOff')
|
|
225
|
+
}
|
|
226
|
+
await this.api.matter.updateAccessoryState(uuid, this.api.matter.clusterNames.OnOff, { onOff: false })
|
|
227
|
+
} catch (e: any) {
|
|
228
|
+
this.log.error(`Failed to turn off device ${dev.deviceId}: ${e?.message ?? e}`)
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
})
|
|
233
|
+
|
|
234
|
+
// Mapping from SwitchBot deviceType -> constructor
|
|
235
|
+
const mapping: { [key: string]: any } = {
|
|
236
|
+
'Plug': OnOffOutletAccessory,
|
|
237
|
+
'Plug Mini (US)': OnOffOutletAccessory,
|
|
238
|
+
'Plug Mini (JP)': OnOffOutletAccessory,
|
|
239
|
+
'Color Bulb': ColorLightAccessory,
|
|
240
|
+
'Ceiling Light': ColorTemperatureLightAccessory,
|
|
241
|
+
'Ceiling Light Pro': ColorTemperatureLightAccessory,
|
|
242
|
+
'Strip Light': ExtendedColorLightAccessory,
|
|
243
|
+
'Dimmable Light': DimmableLightAccessory,
|
|
244
|
+
'K10+': RoboticVacuumAccessory,
|
|
245
|
+
'K10+ Pro': RoboticVacuumAccessory,
|
|
246
|
+
'WoSweeper': RoboticVacuumAccessory,
|
|
247
|
+
'WoSweeperMini': RoboticVacuumAccessory,
|
|
248
|
+
'Robot Vacuum Cleaner S1': RoboticVacuumAccessory,
|
|
249
|
+
'Robot Vacuum Cleaner S1 Plus': RoboticVacuumAccessory,
|
|
250
|
+
'Robot Vacuum Cleaner S10': RoboticVacuumAccessory,
|
|
251
|
+
'Smart Lock': DoorLockAccessory,
|
|
252
|
+
'Smart Lock Pro': DoorLockAccessory,
|
|
253
|
+
'Motion Sensor': OccupancySensorAccessory,
|
|
254
|
+
'Contact Sensor': ContactSensorAccessory,
|
|
255
|
+
'Water Detector': LeakSensorAccessory,
|
|
256
|
+
'Meter': TemperatureSensorAccessory,
|
|
257
|
+
'MeterPlus': TemperatureSensorAccessory,
|
|
258
|
+
'MeterPro': TemperatureSensorAccessory,
|
|
259
|
+
'WoIOSensor': TemperatureSensorAccessory,
|
|
260
|
+
'Air Purifier PM2.5': HumiditySensorAccessory,
|
|
261
|
+
'Battery Circulator Fan': FanAccessory,
|
|
262
|
+
'Blind Tilt': VenetianBlindAccessory,
|
|
263
|
+
'Curtain': WindowBlindAccessory,
|
|
264
|
+
'Curtain3': WindowBlindAccessory,
|
|
265
|
+
'WoRollerShade': WindowBlindAccessory,
|
|
266
|
+
'Roller Shade': WindowBlindAccessory,
|
|
267
|
+
'Relay Switch 1': OnOffSwitchAccessory,
|
|
268
|
+
'Relay Switch 1PM': OnOffSwitchAccessory,
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
const Ctor = mapping[dev.deviceType ?? '']
|
|
272
|
+
if (!Ctor) {
|
|
273
|
+
this.log.debug(`No Matter mapping for deviceType='${dev.deviceType}', deviceId=${dev.deviceId}`)
|
|
274
|
+
return undefined
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// Build opts and handlers tailored for basic capabilities
|
|
278
|
+
const uuid = baseOpts.uuid
|
|
279
|
+
const handlers: Record<string, any> = {}
|
|
280
|
+
|
|
281
|
+
// On/Off common
|
|
282
|
+
handlers.onOff = makeOnOffHandlers(uuid).onOff
|
|
283
|
+
|
|
284
|
+
// If this is a light, add brightness and color handlers
|
|
285
|
+
if (['Color Bulb', 'Ceiling Light', 'Ceiling Light Pro', 'Strip Light', 'Dimmable Light'].includes(dev.deviceType ?? '')) {
|
|
286
|
+
// levelControl
|
|
287
|
+
handlers.levelControl = {
|
|
288
|
+
moveToLevelWithOnOff: async (request: any) => {
|
|
289
|
+
try {
|
|
290
|
+
const level = request.level as number
|
|
291
|
+
const percent = Math.round((level / 254) * 100)
|
|
292
|
+
if (this.config.options?.BLE && this.switchBotBLE) {
|
|
293
|
+
await sendBLE('setBrightness', percent)
|
|
294
|
+
} else {
|
|
295
|
+
await sendOpenAPI('setBrightness', `${percent}`)
|
|
296
|
+
}
|
|
297
|
+
await this.api.matter.updateAccessoryState(uuid, this.api.matter.clusterNames.LevelControl, { currentLevel: level })
|
|
298
|
+
} catch (e: any) {
|
|
299
|
+
this.log.error(`Failed to set brightness for ${dev.deviceId}: ${e?.message ?? e}`)
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// colorControl
|
|
305
|
+
handlers.colorControl = {
|
|
306
|
+
moveToHueAndSaturationLogic: async (request: any) => {
|
|
307
|
+
try {
|
|
308
|
+
const hue = request.hue as number
|
|
309
|
+
const saturation = request.saturation as number
|
|
310
|
+
const [r, g, b] = hs2rgb(Math.round((hue / 254) * 360), Math.round((saturation / 254) * 100))
|
|
311
|
+
if (this.config.options?.BLE && this.switchBotBLE) {
|
|
312
|
+
await sendBLE('setRGB', Number(request.level ?? 100), r, g, b)
|
|
313
|
+
} else {
|
|
314
|
+
await sendOpenAPI('setColor', `${r}:${g}:${b}`)
|
|
315
|
+
}
|
|
316
|
+
await this.api.matter.updateAccessoryState(uuid, this.api.matter.clusterNames.ColorControl, { currentHue: hue, currentSaturation: saturation })
|
|
317
|
+
} catch (e: any) {
|
|
318
|
+
this.log.error(`Failed to set hue/sat for ${dev.deviceId}: ${e?.message ?? e}`)
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
moveToColorLogic: async (request: any) => {
|
|
322
|
+
try {
|
|
323
|
+
// MoveToColor gives colorX/colorY values; convert to approximate RGB by mapping to 0-255 scale
|
|
324
|
+
const colorX = request.colorX as number
|
|
325
|
+
const colorY = request.colorY as number
|
|
326
|
+
// Naive conversion: map X/Y into RGB via hue approximation (not colorimetrically accurate)
|
|
327
|
+
const hueApprox = Math.round((colorX / 65535) * 360)
|
|
328
|
+
const satApprox = Math.round((colorY / 65535) * 100)
|
|
329
|
+
const [r, g, b] = hs2rgb(hueApprox, satApprox)
|
|
330
|
+
if (this.config.options?.BLE && this.switchBotBLE) {
|
|
331
|
+
await sendBLE('setRGB', Number(request.level ?? 100), r, g, b)
|
|
332
|
+
} else {
|
|
333
|
+
await sendOpenAPI('setColor', `${r}:${g}:${b}`)
|
|
334
|
+
}
|
|
335
|
+
await this.api.matter.updateAccessoryState(uuid, this.api.matter.clusterNames.ColorControl, { currentX: colorX, currentY: colorY })
|
|
336
|
+
} catch (e: any) {
|
|
337
|
+
this.log.error(`Failed to set XY color for ${dev.deviceId}: ${e?.message ?? e}`)
|
|
338
|
+
}
|
|
339
|
+
},
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// color temperature — map to kelvin and send setColorTemperature
|
|
343
|
+
handlers.colorTemperature = {
|
|
344
|
+
moveToColorTemperature: async (request: any) => {
|
|
345
|
+
try {
|
|
346
|
+
const kelvin = Math.round(1000000 / Number(request.colorTemperature))
|
|
347
|
+
if (this.config.options?.BLE && this.switchBotBLE) {
|
|
348
|
+
await sendBLE('setColorTemperature', kelvin)
|
|
349
|
+
} else {
|
|
350
|
+
await sendOpenAPI('setColorTemperature', `${kelvin}`)
|
|
351
|
+
}
|
|
352
|
+
await this.api.matter.updateAccessoryState(uuid, this.api.matter.clusterNames.ColorControl, { currentX: request.colorX ?? 0, currentY: request.colorY ?? 0 })
|
|
353
|
+
} catch (e: any) {
|
|
354
|
+
this.log.error(`Failed to set color temperature for ${dev.deviceId}: ${e?.message ?? e}`)
|
|
355
|
+
}
|
|
356
|
+
},
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
const opts = Object.assign({}, baseOpts, { handlers })
|
|
361
|
+
|
|
362
|
+
// Instantiate the device class and return its serialized accessory
|
|
363
|
+
const instance = new Ctor(this.api, this.log, opts)
|
|
364
|
+
|
|
365
|
+
// Register BLE->Matter push handler for this device's MAC (if BLE scanning is active)
|
|
366
|
+
try {
|
|
367
|
+
const mac = formatDeviceIdAsMac(dev.deviceId).toLowerCase()
|
|
368
|
+
// Handler receives advertisement/serviceData when BLE scan events arrive
|
|
369
|
+
this.bleEventHandler[mac] = async (serviceData?: any) => {
|
|
370
|
+
const uuidLocal = baseOpts.uuid
|
|
371
|
+
|
|
372
|
+
// Try to parse BLE advertisement/serviceData first (works without cloud)
|
|
373
|
+
try {
|
|
374
|
+
if (serviceData) {
|
|
375
|
+
// Power
|
|
376
|
+
const power = serviceData.power ?? serviceData.on ?? serviceData.p
|
|
377
|
+
if (power !== undefined) {
|
|
378
|
+
const on = (String(power).toLowerCase() === 'on' || Number(power) === 1)
|
|
379
|
+
await this.api.matter.updateAccessoryState(uuidLocal, this.api.matter.clusterNames.OnOff, { onOff: on })
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// Brightness
|
|
383
|
+
const brightness = serviceData.brightness ?? serviceData.b
|
|
384
|
+
if (brightness !== undefined) {
|
|
385
|
+
const level = Math.round((Number(brightness) / 100) * 254)
|
|
386
|
+
await this.api.matter.updateAccessoryState(uuidLocal, this.api.matter.clusterNames.LevelControl, { currentLevel: level })
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
// Color (r:g:b or hex or hex without #)
|
|
390
|
+
const color = serviceData.color ?? serviceData.rgb ?? serviceData.c
|
|
391
|
+
if (color !== undefined) {
|
|
392
|
+
let r = 0
|
|
393
|
+
let g = 0
|
|
394
|
+
let b = 0
|
|
395
|
+
const c = String(color)
|
|
396
|
+
if (c.includes(':')) {
|
|
397
|
+
const parts = c.split(':').map(Number)
|
|
398
|
+
;[r, g, b] = parts
|
|
399
|
+
} else if (c.startsWith('#')) {
|
|
400
|
+
const hex = c.replace('#', '')
|
|
401
|
+
r = Number.parseInt(hex.substring(0, 2), 16)
|
|
402
|
+
g = Number.parseInt(hex.substring(2, 4), 16)
|
|
403
|
+
b = Number.parseInt(hex.substring(4, 6), 16)
|
|
404
|
+
} else if (/^[0-9a-f]{6}$/i.test(c)) {
|
|
405
|
+
r = Number.parseInt(c.substring(0, 2), 16)
|
|
406
|
+
g = Number.parseInt(c.substring(2, 4), 16)
|
|
407
|
+
b = Number.parseInt(c.substring(4, 6), 16)
|
|
408
|
+
}
|
|
409
|
+
const [h, s] = rgb2hs(r, g, b)
|
|
410
|
+
await this.api.matter.updateAccessoryState(uuidLocal, this.api.matter.clusterNames.ColorControl, { currentHue: Math.round((h / 360) * 254), currentSaturation: Math.round((s / 100) * 254) })
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
// If serviceData was present, prefer it and return early
|
|
414
|
+
if (serviceData) {
|
|
415
|
+
return
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
} catch (e: any) {
|
|
419
|
+
this.log.debug(`BLE advertisement parsing failed for ${dev.deviceId}: ${e?.message ?? e}`)
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
// Fallback to OpenAPI getDeviceStatus when serviceData is not present or parsing failed
|
|
423
|
+
if (!this.switchBotAPI) {
|
|
424
|
+
return
|
|
425
|
+
}
|
|
426
|
+
try {
|
|
427
|
+
const { response, statusCode } = await this.switchBotAPI.getDeviceStatus(dev.deviceId, this.config.credentials?.token, this.config.credentials?.secret)
|
|
428
|
+
if (!(statusCode === 100 || statusCode === 200)) {
|
|
429
|
+
return
|
|
430
|
+
}
|
|
431
|
+
const respAny: any = response
|
|
432
|
+
const body = respAny?.body ?? respAny
|
|
433
|
+
const status = body?.status ?? body
|
|
434
|
+
|
|
435
|
+
// On/Off
|
|
436
|
+
if (status?.power !== undefined) {
|
|
437
|
+
const on = (String(status.power).toLowerCase() === 'on' || Number(status.power) === 1)
|
|
438
|
+
await this.api.matter.updateAccessoryState(uuidLocal, this.api.matter.clusterNames.OnOff, { onOff: on })
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
// Brightness
|
|
442
|
+
if (status?.brightness !== undefined) {
|
|
443
|
+
const level = Math.round((Number(status.brightness) / 100) * 254)
|
|
444
|
+
await this.api.matter.updateAccessoryState(uuidLocal, this.api.matter.clusterNames.LevelControl, { currentLevel: level })
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
// Color
|
|
448
|
+
if (status?.color !== undefined) {
|
|
449
|
+
const color = String(status.color)
|
|
450
|
+
let r = 0
|
|
451
|
+
let g = 0
|
|
452
|
+
let b = 0
|
|
453
|
+
if (color.includes(':')) {
|
|
454
|
+
const parts = color.split(':').map(Number)
|
|
455
|
+
;[r, g, b] = parts
|
|
456
|
+
} else if (color.startsWith('#')) {
|
|
457
|
+
const hex = color.replace('#', '')
|
|
458
|
+
r = Number.parseInt(hex.substring(0, 2), 16)
|
|
459
|
+
g = Number.parseInt(hex.substring(2, 4), 16)
|
|
460
|
+
b = Number.parseInt(hex.substring(4, 6), 16)
|
|
461
|
+
}
|
|
462
|
+
const [h, s] = rgb2hs(r, g, b)
|
|
463
|
+
await this.api.matter.updateAccessoryState(uuidLocal, this.api.matter.clusterNames.ColorControl, { currentHue: Math.round((h / 360) * 254), currentSaturation: Math.round((s / 100) * 254) })
|
|
464
|
+
}
|
|
465
|
+
} catch (e: any) {
|
|
466
|
+
this.log.debug(`BLE push handler failed for ${dev.deviceId}: ${e?.message ?? e}`)
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
} catch (e: any) {
|
|
470
|
+
this.log.debug(`Failed to register BLE handler for ${dev.deviceId}: ${e?.message ?? e}`)
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
return instance.toAccessory()
|
|
474
|
+
}
|
|
475
|
+
|
|
129
476
|
/**
|
|
130
477
|
* Discover devices via SwitchBot OpenAPI and cache them for later use
|
|
131
478
|
*/
|
|
@@ -214,7 +561,32 @@ export class SwitchBotMatterPlatform implements DynamicPlatformPlugin {
|
|
|
214
561
|
// Remove accessories that are disabled in config
|
|
215
562
|
await this.removeDisabledAccessories()
|
|
216
563
|
|
|
217
|
-
//
|
|
564
|
+
// If we discovered real SwitchBot devices via OpenAPI, map and register them
|
|
565
|
+
if (this.discoveredDevices && this.discoveredDevices.length > 0) {
|
|
566
|
+
this.log.info(`Registering ${this.discoveredDevices.length} discovered SwitchBot device(s) as Matter accessories`)
|
|
567
|
+
const accessories: Array<MatterAccessory<Record<string, unknown>>> = []
|
|
568
|
+
for (const dev of this.discoveredDevices) {
|
|
569
|
+
try {
|
|
570
|
+
const acc = await this.createAccessoryFromDevice(dev)
|
|
571
|
+
if (acc) {
|
|
572
|
+
accessories.push(acc)
|
|
573
|
+
}
|
|
574
|
+
} catch (e: any) {
|
|
575
|
+
this.log.error(`Failed to create Matter accessory for ${dev.deviceId}: ${e?.message ?? e}`)
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
if (accessories.length > 0) {
|
|
579
|
+
this.log.info(`✓ Registered ${accessories.length} discovered device(s)`)
|
|
580
|
+
for (const acc of accessories) {
|
|
581
|
+
this.log.info(` - ${acc.displayName}`)
|
|
582
|
+
}
|
|
583
|
+
await this.api.matter.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, accessories)
|
|
584
|
+
return
|
|
585
|
+
}
|
|
586
|
+
this.log.info('No discovered devices were mapped to Matter accessories; falling back to example sections')
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
// Register example/demo devices by Matter specification sections
|
|
218
590
|
await this.registerSection4Lighting()
|
|
219
591
|
await this.registerSection5SmartPlugs()
|
|
220
592
|
await this.registerSection6Switches()
|