@switchbot/homebridge-switchbot 5.0.0-beta.39 → 5.0.0-beta.40
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/config.schema.json +18 -0
- package/dist/homebridge-ui/server.js +10 -4
- package/dist/homebridge-ui/server.js.map +1 -1
- package/dist/platform-hap.d.ts.map +1 -1
- package/dist/platform-hap.js +28 -4
- package/dist/platform-hap.js.map +1 -1
- package/dist/platform-matter.d.ts.map +1 -1
- package/dist/platform-matter.js +22 -6
- package/dist/platform-matter.js.map +1 -1
- package/dist/settings.d.ts +18 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js.map +1 -1
- package/dist/utils.d.ts +18 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +89 -1
- package/dist/utils.js.map +1 -1
- package/docs/variables/default.html +1 -1
- package/package.json +2 -2
- package/src/homebridge-ui/server.ts +10 -4
- package/src/platform-hap.ts +28 -4
- package/src/platform-matter.ts +22 -6
- package/src/settings.ts +18 -0
- package/src/utils.ts +100 -1
package/config.schema.json
CHANGED
|
@@ -1575,6 +1575,24 @@
|
|
|
1575
1575
|
"type": "number",
|
|
1576
1576
|
"placeholder": 1
|
|
1577
1577
|
},
|
|
1578
|
+
"dailyApiLimit": {
|
|
1579
|
+
"title": "Daily OpenAPI Limit",
|
|
1580
|
+
"type": "number",
|
|
1581
|
+
"placeholder": 10000,
|
|
1582
|
+
"description": "Maximum OpenAPI requests per day. Default: 10000. When close to this limit, the plugin will pause background polling to avoid overage."
|
|
1583
|
+
},
|
|
1584
|
+
"dailyApiReserveForCommands": {
|
|
1585
|
+
"title": "Reserve For Commands (daily)",
|
|
1586
|
+
"type": "number",
|
|
1587
|
+
"placeholder": 1000,
|
|
1588
|
+
"description": "Requests reserved for user-initiated commands. When remaining budget is below this, background polling/discovery pauses until reset. Default: 1000."
|
|
1589
|
+
},
|
|
1590
|
+
"webhookOnlyOnReserve": {
|
|
1591
|
+
"title": "Webhook-only When Near Limit",
|
|
1592
|
+
"type": "boolean",
|
|
1593
|
+
"default": false,
|
|
1594
|
+
"description": "If true, completely stop background polling/discovery once the remaining budget hits the reserve. Webhooks and commands still work until the hard limit."
|
|
1595
|
+
},
|
|
1578
1596
|
"logging": {
|
|
1579
1597
|
"title": "Logging Setting",
|
|
1580
1598
|
"type": "string",
|
|
@@ -7,7 +7,7 @@ class PluginUiServer extends HomebridgePluginUiServer {
|
|
|
7
7
|
A native method getCachedAccessories() was introduced in config-ui-x v4.37.0
|
|
8
8
|
The following is for users who have a lower version of config-ui-x
|
|
9
9
|
*/
|
|
10
|
-
|
|
10
|
+
const getCachedAccessoriesHandler = () => {
|
|
11
11
|
try {
|
|
12
12
|
// Some Homebridge versions store cached accessories with the scoped
|
|
13
13
|
// plugin name ("@switchbot/homebridge-switchbot"); others may use
|
|
@@ -36,9 +36,12 @@ class PluginUiServer extends HomebridgePluginUiServer {
|
|
|
36
36
|
// Just return an empty accessory list in case of any errors
|
|
37
37
|
return [];
|
|
38
38
|
}
|
|
39
|
-
}
|
|
39
|
+
};
|
|
40
|
+
this.onRequest('getCachedAccessories', getCachedAccessoriesHandler);
|
|
41
|
+
// Also register with a leading slash for compatibility with some UIs
|
|
42
|
+
this.onRequest('/getCachedAccessories', getCachedAccessoriesHandler);
|
|
40
43
|
// Provide Matter cached accessories if Homebridge stores them separately.
|
|
41
|
-
|
|
44
|
+
const getCachedMatterAccessoriesHandler = () => {
|
|
42
45
|
try {
|
|
43
46
|
const pluginNames = ['@switchbot/homebridge-switchbot', 'homebridge-switchbot'];
|
|
44
47
|
const devicesToReturn = [];
|
|
@@ -71,7 +74,10 @@ class PluginUiServer extends HomebridgePluginUiServer {
|
|
|
71
74
|
catch {
|
|
72
75
|
return [];
|
|
73
76
|
}
|
|
74
|
-
}
|
|
77
|
+
};
|
|
78
|
+
this.onRequest('getCachedMatterAccessories', getCachedMatterAccessoriesHandler);
|
|
79
|
+
// Also register with a leading slash for compatibility with some UIs
|
|
80
|
+
this.onRequest('/getCachedMatterAccessories', getCachedMatterAccessoriesHandler);
|
|
75
81
|
this.ready();
|
|
76
82
|
}
|
|
77
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/homebridge-ui/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AAExB,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAA;AAEtE,MAAM,cAAe,SAAQ,wBAAwB;IACnD;QACE,KAAK,EAAE,CAAA;QACP;;;UAGE;QACF,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/homebridge-ui/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-hap.d.ts","sourceRoot":"","sources":["../src/platform-hap.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"platform-hap.d.ts","sourceRoot":"","sources":["../src/platform-hap.ts"],"names":[],"mappings":"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"}
|
package/dist/platform-hap.js
CHANGED
|
@@ -196,7 +196,14 @@ export class SwitchBotHAPPlatform {
|
|
|
196
196
|
this.debugLog('Executed didFinishLaunching callback');
|
|
197
197
|
// Initialize API request tracking
|
|
198
198
|
try {
|
|
199
|
-
|
|
199
|
+
const dailyApiLimit = this.config.options?.dailyApiLimit ?? 10000;
|
|
200
|
+
const dailyApiReserveForCommands = this.config.options?.dailyApiReserveForCommands ?? 1000;
|
|
201
|
+
const webhookOnlyOnReserve = this.config.options?.webhookOnlyOnReserve ?? false;
|
|
202
|
+
this.apiTracker = new ApiRequestTracker(this.api, this.log, 'SwitchBot HAP', {
|
|
203
|
+
dailyLimit: dailyApiLimit,
|
|
204
|
+
reserveForCommands: dailyApiReserveForCommands,
|
|
205
|
+
pausePollingAtReserve: webhookOnlyOnReserve,
|
|
206
|
+
});
|
|
200
207
|
this.apiTracker.startHourlyLogging();
|
|
201
208
|
}
|
|
202
209
|
catch (e) {
|
|
@@ -450,7 +457,11 @@ export class SwitchBotHAPPlatform {
|
|
|
450
457
|
this.debugWarnLog(`Delay Between Retries: ${this.platformDelayBetweenRetries}`);
|
|
451
458
|
while (retryCount < maxRetries) {
|
|
452
459
|
try {
|
|
453
|
-
this.apiTracker?.
|
|
460
|
+
if (!this.apiTracker?.trySpend('discovery')) {
|
|
461
|
+
rateLimitExceeded = true;
|
|
462
|
+
this.warnLog('OpenAPI daily budget reached (discovery blocked). Falling back to manual device configuration.');
|
|
463
|
+
break;
|
|
464
|
+
}
|
|
454
465
|
const { response, statusCode } = await this.switchBotAPI.getDevices();
|
|
455
466
|
this.debugLog(`response: ${JSON.stringify(response)}`);
|
|
456
467
|
if (this.isSuccessfulResponse(statusCode)) {
|
|
@@ -2771,7 +2782,18 @@ export class SwitchBotHAPPlatform {
|
|
|
2771
2782
|
const delayBetweenRetries = deviceDelayBetweenRetries;
|
|
2772
2783
|
while (retryCount < maxRetries) {
|
|
2773
2784
|
try {
|
|
2774
|
-
this.apiTracker?.
|
|
2785
|
+
if (!this.apiTracker?.trySpend('poll')) {
|
|
2786
|
+
return {
|
|
2787
|
+
response: {
|
|
2788
|
+
deviceId: '',
|
|
2789
|
+
deviceType: '',
|
|
2790
|
+
hubDeviceId: '',
|
|
2791
|
+
version: 0,
|
|
2792
|
+
deviceName: '',
|
|
2793
|
+
},
|
|
2794
|
+
statusCode: 429,
|
|
2795
|
+
};
|
|
2796
|
+
}
|
|
2775
2797
|
const { response, statusCode } = await this.switchBotAPI.getDeviceStatus(device.deviceId, this.config.credentials?.token, this.config.credentials?.secret);
|
|
2776
2798
|
this.debugLog(`response: ${JSON.stringify(response)}`);
|
|
2777
2799
|
return { response, statusCode };
|
|
@@ -2797,7 +2819,9 @@ export class SwitchBotHAPPlatform {
|
|
|
2797
2819
|
const delayBetweenRetries = deviceDelayBetweenRetries ?? 1000;
|
|
2798
2820
|
while (retryCount < maxRetries) {
|
|
2799
2821
|
try {
|
|
2800
|
-
this.apiTracker?.
|
|
2822
|
+
if (!this.apiTracker?.trySpend('command')) {
|
|
2823
|
+
return { response: {}, statusCode: 429 };
|
|
2824
|
+
}
|
|
2801
2825
|
const { response, statusCode } = await this.switchBotAPI.controlDevice(device.deviceId, bodyChange.command, bodyChange.parameter, bodyChange.commandType, this.config.credentials?.token, this.config.credentials?.secret);
|
|
2802
2826
|
this.debugLog(`response: ${JSON.stringify(response)}`);
|
|
2803
2827
|
return { response, statusCode };
|