@switchbot/homebridge-switchbot 4.3.6 → 4.3.8
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 +2628 -0
- package/config.schema.json +239 -12
- package/dist/device/hub.d.ts +19 -1
- package/dist/device/hub.d.ts.map +1 -1
- package/dist/device/hub.js +11 -5
- package/dist/device/hub.js.map +1 -1
- package/dist/settings.d.ts +1 -1
- package/dist/settings.d.ts.map +1 -1
- package/docs/variables/default.html +1 -1
- package/package.json +2 -1
- package/src/device/hub.ts +33 -6
- package/src/settings.ts +1 -1
|
@@ -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/232af6270bd80fe1ecc9bd4938166c380fb2c83e/src/index.ts#L11">index.ts:11</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": "4.3.
|
|
5
|
+
"version": "4.3.8",
|
|
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": [
|
|
@@ -89,6 +89,7 @@
|
|
|
89
89
|
"@antfu/eslint-config": "^7.2.0",
|
|
90
90
|
"@types/node": "^25.2.1",
|
|
91
91
|
"@vitest/coverage-v8": "^4.0.18",
|
|
92
|
+
"@vue/compiler-sfc": "^3.5.27",
|
|
92
93
|
"eslint": "^9.39.2",
|
|
93
94
|
"eslint-plugin-format": "^1.3.1",
|
|
94
95
|
"homebridge": "^1.11.1",
|
package/src/device/hub.ts
CHANGED
|
@@ -17,6 +17,25 @@ import type { devicesConfig, hubConfig } from '../settings.js'
|
|
|
17
17
|
import { convertUnits, formatDeviceIdAsMac, validHumidity } from '../utils.js'
|
|
18
18
|
import { deviceBase } from './device.js'
|
|
19
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Hub sensor data structure
|
|
22
|
+
* Represents the sensor readings that can be at root level (Hub 2) or nested (Hub 3)
|
|
23
|
+
*/
|
|
24
|
+
interface HubSensorData {
|
|
25
|
+
temperature: number
|
|
26
|
+
humidity: number
|
|
27
|
+
lightLevel: number
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Extended Hub status type that supports both Hub 2 and Hub 3 API response structures
|
|
32
|
+
* Hub 2 returns sensor data at root level
|
|
33
|
+
* Hub 3 returns sensor data in a nested sensorData object
|
|
34
|
+
*/
|
|
35
|
+
type HubStatus = hub2Status & {
|
|
36
|
+
sensorData?: HubSensorData
|
|
37
|
+
}
|
|
38
|
+
|
|
20
39
|
export class Hub extends deviceBase {
|
|
21
40
|
// Services
|
|
22
41
|
private LightSensor?: {
|
|
@@ -38,7 +57,7 @@ export class Hub extends deviceBase {
|
|
|
38
57
|
}
|
|
39
58
|
|
|
40
59
|
// OpenAPI
|
|
41
|
-
deviceStatus!:
|
|
60
|
+
deviceStatus!: HubStatus
|
|
42
61
|
|
|
43
62
|
// Webhook
|
|
44
63
|
webhookContext!: hub2WebhookContext
|
|
@@ -199,17 +218,26 @@ export class Hub extends deviceBase {
|
|
|
199
218
|
|
|
200
219
|
async openAPIparseStatus(): Promise<void> {
|
|
201
220
|
this.debugLog('openAPIparseStatus')
|
|
202
|
-
this.debugLog(`
|
|
221
|
+
this.debugLog(`Device Type: ${this.device.deviceType}, Raw deviceStatus: ${JSON.stringify(this.deviceStatus)}`)
|
|
222
|
+
|
|
223
|
+
// Hub 3 returns sensor data in a nested sensorData object, while Hub 2 returns it at the root level
|
|
224
|
+
const sensorData: HubSensorData = this.deviceStatus.sensorData ?? this.deviceStatus
|
|
225
|
+
this.debugLog(`Using sensorData from: ${this.deviceStatus.sensorData ? 'nested sensorData object (Hub 3)' : 'root level (Hub 2)'}`)
|
|
226
|
+
|
|
227
|
+
const temperature = sensorData.temperature
|
|
228
|
+
const humidity = sensorData.humidity
|
|
229
|
+
const lightLevel = sensorData.lightLevel
|
|
230
|
+
this.debugLog(`(temperature, humidity, lightLevel) = OpenAPI:(${temperature}, ${humidity}, ${lightLevel}), current:(${this.TemperatureSensor?.CurrentTemperature}, ${this.HumiditySensor?.CurrentRelativeHumidity}, ${this.LightSensor?.CurrentAmbientLightLevel})`)
|
|
203
231
|
|
|
204
232
|
// CurrentRelativeHumidity
|
|
205
233
|
if (!(this.device as hubConfig).hide_humidity && this.HumiditySensor?.Service) {
|
|
206
|
-
this.HumiditySensor.CurrentRelativeHumidity =
|
|
234
|
+
this.HumiditySensor.CurrentRelativeHumidity = humidity
|
|
207
235
|
this.debugLog(`CurrentRelativeHumidity: ${this.HumiditySensor.CurrentRelativeHumidity}%`)
|
|
208
236
|
}
|
|
209
237
|
|
|
210
238
|
// CurrentTemperature
|
|
211
239
|
if (!(this.device as hubConfig).hide_temperature && this.TemperatureSensor?.Service) {
|
|
212
|
-
this.TemperatureSensor.CurrentTemperature =
|
|
240
|
+
this.TemperatureSensor.CurrentTemperature = temperature
|
|
213
241
|
this.debugLog(`CurrentTemperature: ${this.TemperatureSensor.CurrentTemperature}°c`)
|
|
214
242
|
}
|
|
215
243
|
|
|
@@ -217,9 +245,8 @@ export class Hub extends deviceBase {
|
|
|
217
245
|
if (!(this.device as hubConfig).hide_lightsensor && this.LightSensor?.Service) {
|
|
218
246
|
const set_minLux = (this.device as hubConfig).set_minLux ?? 1
|
|
219
247
|
const set_maxLux = (this.device as hubConfig).set_maxLux ?? 6001
|
|
220
|
-
const lightLevel = this.deviceStatus.lightLevel
|
|
221
248
|
this.LightSensor.CurrentAmbientLightLevel = this.getLightLevel(lightLevel, set_minLux, set_maxLux, 19)
|
|
222
|
-
this.debugLog(`LightLevel: ${
|
|
249
|
+
this.debugLog(`LightLevel: ${lightLevel}, CurrentAmbientLightLevel: ${this.LightSensor!.CurrentAmbientLightLevel}`)
|
|
223
250
|
}
|
|
224
251
|
|
|
225
252
|
// Firmware Version
|
package/src/settings.ts
CHANGED
|
@@ -224,7 +224,7 @@ export interface lockConfig extends BaseDeviceConfig {
|
|
|
224
224
|
};
|
|
225
225
|
|
|
226
226
|
export interface hubConfig extends BaseDeviceConfig {
|
|
227
|
-
configDeviceType: 'Hub 2'
|
|
227
|
+
configDeviceType: 'Hub 2' | 'Hub 3'
|
|
228
228
|
hide_temperature?: boolean
|
|
229
229
|
convertUnitTo?: string
|
|
230
230
|
hide_humidity?: boolean
|