@switchbot/homebridge-switchbot 5.0.0-beta.3 → 5.0.0-beta.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/config.schema.json +42 -4
- package/dist/devices-hap/device.d.ts +1 -0
- package/dist/devices-hap/device.d.ts.map +1 -1
- package/dist/devices-hap/device.js +70 -30
- package/dist/devices-hap/device.js.map +1 -1
- package/dist/devices-matter/BaseMatterAccessory.d.ts +23 -0
- package/dist/devices-matter/BaseMatterAccessory.d.ts.map +1 -1
- package/dist/devices-matter/BaseMatterAccessory.js +167 -5
- package/dist/devices-matter/BaseMatterAccessory.js.map +1 -1
- package/dist/devices-matter/ColorLightAccessory.d.ts.map +1 -1
- package/dist/devices-matter/ColorLightAccessory.js +12 -12
- package/dist/devices-matter/ColorLightAccessory.js.map +1 -1
- package/dist/devices-matter/ColorTemperatureLightAccessory.d.ts.map +1 -1
- package/dist/devices-matter/ColorTemperatureLightAccessory.js +5 -7
- package/dist/devices-matter/ColorTemperatureLightAccessory.js.map +1 -1
- package/dist/devices-matter/DimmableLightAccessory.js +9 -9
- package/dist/devices-matter/DimmableLightAccessory.js.map +1 -1
- package/dist/devices-matter/ExtendedColorLightAccessory.d.ts.map +1 -1
- package/dist/devices-matter/ExtendedColorLightAccessory.js +14 -15
- package/dist/devices-matter/ExtendedColorLightAccessory.js.map +1 -1
- package/dist/devices-matter/OnOffLightAccessory.d.ts.map +1 -1
- package/dist/devices-matter/OnOffLightAccessory.js +8 -16
- package/dist/devices-matter/OnOffLightAccessory.js.map +1 -1
- package/dist/devices-matter/OnOffOutletAccessory.d.ts +2 -0
- package/dist/devices-matter/OnOffOutletAccessory.d.ts.map +1 -1
- package/dist/devices-matter/OnOffOutletAccessory.js +10 -7
- package/dist/devices-matter/OnOffOutletAccessory.js.map +1 -1
- package/dist/devices-matter/OnOffSwitchAccessory.js +2 -2
- package/dist/devices-matter/OnOffSwitchAccessory.js.map +1 -1
- package/dist/homebridge-ui/public/index.html +48 -1
- package/dist/homebridge-ui/server.js +35 -0
- package/dist/homebridge-ui/server.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -5
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +7 -2
- package/dist/index.test.js.map +1 -1
- package/dist/irdevice/irdevice.d.ts +11 -10
- package/dist/irdevice/irdevice.d.ts.map +1 -1
- package/dist/irdevice/irdevice.js +76 -35
- package/dist/irdevice/irdevice.js.map +1 -1
- package/dist/platform-hap.d.ts +11 -14
- package/dist/platform-hap.d.ts.map +1 -1
- package/dist/platform-hap.js +64 -64
- package/dist/platform-hap.js.map +1 -1
- package/dist/platform-matter.d.ts +85 -6
- package/dist/platform-matter.d.ts.map +1 -1
- package/dist/platform-matter.js +1736 -84
- package/dist/platform-matter.js.map +1 -1
- package/dist/settings.d.ts +9 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js.map +1 -1
- package/dist/test/devices-matter/baseMatterAccessory.test.d.ts +2 -0
- package/dist/test/devices-matter/baseMatterAccessory.test.d.ts.map +1 -0
- package/dist/test/devices-matter/baseMatterAccessory.test.js +71 -0
- package/dist/test/devices-matter/baseMatterAccessory.test.js.map +1 -0
- package/dist/test/helpers/platform-fixtures.d.ts +9 -0
- package/dist/test/helpers/platform-fixtures.d.ts.map +1 -0
- package/dist/test/helpers/platform-fixtures.js +30 -0
- package/dist/test/helpers/platform-fixtures.js.map +1 -0
- package/dist/test/platform-matter.additional.test.d.ts +2 -0
- package/dist/test/platform-matter.additional.test.d.ts.map +1 -0
- package/dist/test/platform-matter.additional.test.js +35 -0
- package/dist/test/platform-matter.additional.test.js.map +1 -0
- package/dist/test/platform-matter.bleparse.test.d.ts +2 -0
- package/dist/test/platform-matter.bleparse.test.d.ts.map +1 -0
- package/dist/test/platform-matter.bleparse.test.js +43 -0
- package/dist/test/platform-matter.bleparse.test.js.map +1 -0
- package/dist/test/platform-matter.cleanup.test.d.ts +2 -0
- package/dist/test/platform-matter.cleanup.test.d.ts.map +1 -0
- package/dist/test/platform-matter.cleanup.test.js +70 -0
- package/dist/test/platform-matter.cleanup.test.js.map +1 -0
- package/dist/test/platform-matter.keepstale.test.d.ts +2 -0
- package/dist/test/platform-matter.keepstale.test.d.ts.map +1 -0
- package/dist/test/platform-matter.keepstale.test.js +27 -0
- package/dist/test/platform-matter.keepstale.test.js.map +1 -0
- package/dist/test/platform-matter.mapping.test.d.ts +2 -0
- package/dist/test/platform-matter.mapping.test.d.ts.map +1 -0
- package/dist/test/platform-matter.mapping.test.js +43 -0
- package/dist/test/platform-matter.mapping.test.js.map +1 -0
- package/dist/test/platform-matter.openapi-mapping.test.d.ts +2 -0
- package/dist/test/platform-matter.openapi-mapping.test.d.ts.map +1 -0
- package/dist/test/platform-matter.openapi-mapping.test.js +84 -0
- package/dist/test/platform-matter.openapi-mapping.test.js.map +1 -0
- package/dist/test/platform-matter.test.d.ts +2 -0
- package/dist/test/platform-matter.test.d.ts.map +1 -0
- package/dist/test/platform-matter.test.js +117 -0
- package/dist/test/platform-matter.test.js.map +1 -0
- package/dist/test/platform-matter.unregister.test.d.ts +2 -0
- package/dist/test/platform-matter.unregister.test.d.ts.map +1 -0
- package/dist/test/platform-matter.unregister.test.js +30 -0
- package/dist/test/platform-matter.unregister.test.js.map +1 -0
- package/dist/utils.d.ts +127 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +380 -0
- package/dist/utils.js.map +1 -1
- package/dist/utils.test.d.ts +2 -0
- package/dist/utils.test.d.ts.map +1 -0
- package/dist/utils.test.js +95 -0
- package/dist/utils.test.js.map +1 -0
- package/dist/verifyconfig.test.js +2 -2
- package/dist/verifyconfig.test.js.map +1 -1
- package/docs/assets/main.js +2 -2
- package/docs/index.html +2 -2
- package/docs/variables/default.html +1 -1
- package/package.json +14 -14
- package/src/devices-hap/device.ts +68 -30
- package/src/devices-matter/BaseMatterAccessory.ts +168 -5
- package/src/devices-matter/ColorLightAccessory.ts +12 -12
- package/src/devices-matter/ColorTemperatureLightAccessory.ts +5 -7
- package/src/devices-matter/DimmableLightAccessory.ts +9 -9
- package/src/devices-matter/ExtendedColorLightAccessory.ts +14 -15
- package/src/devices-matter/OnOffLightAccessory.ts +8 -16
- package/src/devices-matter/OnOffOutletAccessory.ts +12 -7
- package/src/devices-matter/OnOffSwitchAccessory.ts +2 -2
- package/src/homebridge-ui/public/index.html +48 -1
- package/src/homebridge-ui/server.ts +37 -0
- package/src/index.test.ts +7 -2
- package/src/index.ts +4 -5
- package/src/irdevice/irdevice.ts +74 -35
- package/src/platform-hap.ts +68 -73
- package/src/platform-matter.ts +1772 -87
- package/src/settings.ts +13 -0
- package/src/test/devices-matter/baseMatterAccessory.test.ts +88 -0
- package/src/test/helpers/platform-fixtures.ts +33 -0
- package/src/test/platform-matter.additional.test.ts +44 -0
- package/src/test/platform-matter.bleparse.test.ts +47 -0
- package/src/test/platform-matter.cleanup.test.ts +86 -0
- package/src/test/platform-matter.keepstale.test.ts +37 -0
- package/src/test/platform-matter.mapping.test.ts +57 -0
- package/src/test/platform-matter.openapi-mapping.test.ts +109 -0
- package/src/test/platform-matter.test.ts +144 -0
- package/src/test/platform-matter.unregister.test.ts +39 -0
- package/src/utils.test.ts +96 -0
- package/src/utils.ts +391 -3
- package/src/verifyconfig.test.ts +11 -10
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
import type { API, DynamicPlatformPlugin, Logging, SerializedMatterAccessory } from 'homebridge';
|
|
2
2
|
import type { bodyChange, device } from 'node-switchbot';
|
|
3
3
|
import type { SwitchBotPlatformConfig } from './settings.js';
|
|
4
|
-
/**
|
|
5
|
-
* MatterPlatform
|
|
6
|
-
* Demonstrates all available Matter device types in Homebridge
|
|
7
|
-
*
|
|
8
|
-
* Organized by official Matter Specification v1.4.1 categories
|
|
9
|
-
*/
|
|
10
4
|
export declare class SwitchBotMatterPlatform implements DynamicPlatformPlugin {
|
|
11
5
|
readonly log: Logging;
|
|
12
6
|
readonly config: SwitchBotPlatformConfig;
|
|
@@ -15,11 +9,72 @@ export declare class SwitchBotMatterPlatform implements DynamicPlatformPlugin {
|
|
|
15
9
|
private switchBotAPI?;
|
|
16
10
|
private switchBotBLE?;
|
|
17
11
|
private discoveredDevices;
|
|
12
|
+
private accessoryInstances;
|
|
13
|
+
private refreshTimers;
|
|
14
|
+
private platformRefreshTimer?;
|
|
15
|
+
private deviceStatusCache;
|
|
16
|
+
private perDeviceRefreshSet;
|
|
17
|
+
private bleEventHandler;
|
|
18
|
+
private mqttClient;
|
|
19
|
+
private webhookEventListener;
|
|
20
|
+
private webhookEventHandler;
|
|
21
|
+
private platformLogging?;
|
|
22
|
+
private apiTracker?;
|
|
23
|
+
infoLog: (...args: any[]) => void;
|
|
24
|
+
successLog: (...args: any[]) => void;
|
|
25
|
+
debugSuccessLog: (...args: any[]) => void;
|
|
26
|
+
warnLog: (...args: any[]) => void;
|
|
27
|
+
debugWarnLog: (...args: any[]) => void;
|
|
28
|
+
errorLog: (...args: any[]) => void;
|
|
29
|
+
debugErrorLog: (...args: any[]) => void;
|
|
30
|
+
debugLog: (...args: any[]) => void;
|
|
31
|
+
loggingIsDebug: () => Promise<boolean>;
|
|
32
|
+
enablingPlatformLogging: () => Promise<boolean>;
|
|
18
33
|
constructor(log: Logging, config: SwitchBotPlatformConfig, api: API);
|
|
34
|
+
/**
|
|
35
|
+
* Normalize a deviceId for matching (uppercase alphanumerics only)
|
|
36
|
+
*/
|
|
37
|
+
private normalizeDeviceId;
|
|
38
|
+
/** Determine the platform-level batch interval in seconds */
|
|
39
|
+
private getPlatformBatchInterval;
|
|
40
|
+
/**
|
|
41
|
+
* Clear per-device resources: refresh timers, accessory instance registry, BLE handlers
|
|
42
|
+
*/
|
|
43
|
+
private clearDeviceResources;
|
|
44
|
+
/**
|
|
45
|
+
* Merge two arrays by deviceId. For each item in a1 (user-provided devices list),
|
|
46
|
+
* find matching item in a2 (discovered devices) and merge them with user overrides last.
|
|
47
|
+
*/
|
|
48
|
+
private mergeByDeviceId;
|
|
49
|
+
/**
|
|
50
|
+
* Merge discovered devices with deviceConfig (per deviceType) and per-device overrides
|
|
51
|
+
* from `config.options.devices`, matching the behavior used in platform-hap.
|
|
52
|
+
*/
|
|
53
|
+
private mergeDiscoveredDevices;
|
|
54
|
+
/**
|
|
55
|
+
* Select effective connection type for a device: prefer explicit device.connectionType,
|
|
56
|
+
* otherwise prefer BLE when platform BLE is enabled and device provides a BLE model/id.
|
|
57
|
+
*/
|
|
58
|
+
private chooseConnectionType;
|
|
59
|
+
/**
|
|
60
|
+
* Map a SwitchBot device object to a MatterAccessory using the device-specific
|
|
61
|
+
* Matter accessory classes in `src/devices-matter`.
|
|
62
|
+
*/
|
|
63
|
+
private createAccessoryFromDevice;
|
|
19
64
|
/**
|
|
20
65
|
* Discover devices via SwitchBot OpenAPI and cache them for later use
|
|
21
66
|
*/
|
|
22
67
|
private discoverDevices;
|
|
68
|
+
/**
|
|
69
|
+
* Setup MQTT connection (if configured) and route incoming webhook messages
|
|
70
|
+
* to registered webhook handlers. Mirrors behaviour in platform-hap.
|
|
71
|
+
*/
|
|
72
|
+
setupMqtt(): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Setup OpenAPI webhook (if webhookURL configured) and forward incoming
|
|
75
|
+
* webhook events to MQTT (if configured) and local handlers.
|
|
76
|
+
*/
|
|
77
|
+
setupwebhook(): Promise<void>;
|
|
23
78
|
/**
|
|
24
79
|
* Retry wrapper for control commands using SwitchBot OpenAPI
|
|
25
80
|
*/
|
|
@@ -27,6 +82,17 @@ export declare class SwitchBotMatterPlatform implements DynamicPlatformPlugin {
|
|
|
27
82
|
response: any;
|
|
28
83
|
statusCode: number;
|
|
29
84
|
}>;
|
|
85
|
+
/**
|
|
86
|
+
* Parse BLE advertisement/serviceData into normalized fields for a given device.
|
|
87
|
+
* Returns null when serviceData is falsy or parsing fails.
|
|
88
|
+
*/
|
|
89
|
+
private parseAdvertisementForDevice;
|
|
90
|
+
/**
|
|
91
|
+
* Central helper to apply a SwitchBot status object to a Matter accessory.
|
|
92
|
+
* Tries to call accessory instance update helpers when available, otherwise
|
|
93
|
+
* falls back to calling api.matter.updateAccessoryState directly.
|
|
94
|
+
*/
|
|
95
|
+
private applyStatusToAccessory;
|
|
30
96
|
/**
|
|
31
97
|
* Required for DynamicPlatformPlugin
|
|
32
98
|
* Called when homebridge restores cached accessories from disk at startup
|
|
@@ -86,5 +152,18 @@ export declare class SwitchBotMatterPlatform implements DynamicPlatformPlugin {
|
|
|
86
152
|
* like managing multiple logical components within a single device.
|
|
87
153
|
*/
|
|
88
154
|
private registerCustomDevices;
|
|
155
|
+
/**
|
|
156
|
+
* Start platform-level refresh timer to batch all device status updates
|
|
157
|
+
*/
|
|
158
|
+
private startPlatformRefreshTimer;
|
|
159
|
+
/**
|
|
160
|
+
* Batch refresh all devices - still makes individual API calls but batches them together
|
|
161
|
+
* Note: SwitchBot API doesn't support true batch status calls, but we can parallelize them
|
|
162
|
+
*/
|
|
163
|
+
private batchRefreshAllDevices;
|
|
164
|
+
/** Refresh a single device with retry and backoff; returns status object if successful */
|
|
165
|
+
private refreshSingleDeviceWithRetry;
|
|
166
|
+
/** Simple concurrency limiter for an array of items */
|
|
167
|
+
private runWithConcurrency;
|
|
89
168
|
}
|
|
90
169
|
//# sourceMappingURL=platform-matter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-matter.d.ts","sourceRoot":"","sources":["../src/platform-matter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"platform-matter.d.ts","sourceRoot":"","sources":["../src/platform-matter.ts"],"names":[],"mappings":"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"}
|