@switchbot/homebridge-switchbot 5.1.0-beta.8 → 5.1.0

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.
Files changed (130) hide show
  1. package/.github/copilot-instructions.md +0 -63
  2. package/.github/scripts/normalize-changelog-header.cjs +1 -1
  3. package/.github/scripts/npm-version-script-esm-auto.js +1 -1
  4. package/.github/scripts/resolve-version-bump-esm.js +1 -1
  5. package/CHANGELOG.md +10 -9
  6. package/MIGRATION.md +0 -5
  7. package/README.md +0 -25
  8. package/config.schema.json +0 -11
  9. package/dist/{Platform.HAP.d.ts → SwitchBotHAPPlatform.d.ts} +16 -2
  10. package/dist/SwitchBotHAPPlatform.d.ts.map +1 -0
  11. package/dist/{Platform.HAP.js → SwitchBotHAPPlatform.js} +111 -40
  12. package/dist/SwitchBotHAPPlatform.js.map +1 -0
  13. package/dist/{Platform.Matter.d.ts → SwitchBotMatterPlatform.d.ts} +2 -4
  14. package/dist/SwitchBotMatterPlatform.d.ts.map +1 -0
  15. package/dist/{Platform.Matter.js → SwitchBotMatterPlatform.js} +6 -62
  16. package/dist/SwitchBotMatterPlatform.js.map +1 -0
  17. package/dist/deviceFactory.d.ts.map +1 -1
  18. package/dist/deviceFactory.js +5 -15
  19. package/dist/deviceFactory.js.map +1 -1
  20. package/dist/devices/genericDevice.d.ts +63 -5
  21. package/dist/devices/genericDevice.d.ts.map +1 -1
  22. package/dist/devices/genericDevice.js +251 -11
  23. package/dist/devices/genericDevice.js.map +1 -1
  24. package/dist/homebridge-ui/endpoints/config.d.ts.map +1 -1
  25. package/dist/homebridge-ui/endpoints/config.js +2 -9
  26. package/dist/homebridge-ui/endpoints/config.js.map +1 -1
  27. package/dist/homebridge-ui/homebridge-ui/endpoints/config.js +2 -9
  28. package/dist/homebridge-ui/homebridge-ui/endpoints/config.js.map +1 -1
  29. package/dist/homebridge-ui/homebridge-ui/utils/config-parser.js +0 -8
  30. package/dist/homebridge-ui/homebridge-ui/utils/config-parser.js.map +1 -1
  31. package/dist/homebridge-ui/public/css/styles.css +1 -61
  32. package/dist/homebridge-ui/public/index.html +2 -61
  33. package/dist/homebridge-ui/public/js/advanced-settings.d.ts.map +1 -1
  34. package/dist/homebridge-ui/public/js/advanced-settings.js +3 -4
  35. package/dist/homebridge-ui/public/js/advanced-settings.js.map +1 -1
  36. package/dist/homebridge-ui/public/js/advanced-settings.ts +3 -4
  37. package/dist/homebridge-ui/public/js/api.d.ts +0 -16
  38. package/dist/homebridge-ui/public/js/api.d.ts.map +1 -1
  39. package/dist/homebridge-ui/public/js/api.js +0 -48
  40. package/dist/homebridge-ui/public/js/api.js.map +1 -1
  41. package/dist/homebridge-ui/public/js/api.ts +1 -61
  42. package/dist/homebridge-ui/public/js/app.js +115 -267
  43. package/dist/homebridge-ui/public/js/app.js.map +4 -4
  44. package/dist/homebridge-ui/public/js/app.ts +4 -47
  45. package/dist/homebridge-ui/public/js/credentials.d.ts.map +1 -1
  46. package/dist/homebridge-ui/public/js/credentials.js +5 -11
  47. package/dist/homebridge-ui/public/js/credentials.js.map +1 -1
  48. package/dist/homebridge-ui/public/js/credentials.ts +5 -11
  49. package/dist/homebridge-ui/public/js/devices.d.ts.map +1 -1
  50. package/dist/homebridge-ui/public/js/devices.js +0 -6
  51. package/dist/homebridge-ui/public/js/devices.js.map +1 -1
  52. package/dist/homebridge-ui/public/js/devices.ts +0 -6
  53. package/dist/homebridge-ui/public/js/modals.d.ts +0 -1
  54. package/dist/homebridge-ui/public/js/modals.d.ts.map +1 -1
  55. package/dist/homebridge-ui/public/js/modals.js +0 -53
  56. package/dist/homebridge-ui/public/js/modals.js.map +1 -1
  57. package/dist/homebridge-ui/public/js/modals.ts +0 -58
  58. package/dist/homebridge-ui/public/js/render.d.ts.map +1 -1
  59. package/dist/homebridge-ui/public/js/render.js +1 -2
  60. package/dist/homebridge-ui/public/js/render.js.map +1 -1
  61. package/dist/homebridge-ui/public/js/render.ts +1 -2
  62. package/dist/homebridge-ui/settings.js.map +1 -1
  63. package/dist/homebridge-ui/utils/config-parser.d.ts +0 -8
  64. package/dist/homebridge-ui/utils/config-parser.d.ts.map +1 -1
  65. package/dist/homebridge-ui/utils/config-parser.js +0 -8
  66. package/dist/homebridge-ui/utils/config-parser.js.map +1 -1
  67. package/dist/index.js +2 -2
  68. package/dist/index.js.map +1 -1
  69. package/dist/settings.d.ts +0 -11
  70. package/dist/settings.d.ts.map +1 -1
  71. package/dist/settings.js.map +1 -1
  72. package/dist/utils.d.ts +0 -5
  73. package/dist/utils.d.ts.map +1 -1
  74. package/dist/utils.js +0 -27
  75. package/dist/utils.js.map +1 -1
  76. package/docs/assets/highlight.css +15 -15
  77. package/docs/index.html +5 -22
  78. package/docs/variables/default.html +1 -1
  79. package/package.json +15 -9
  80. package/scripts/build-ui.js +0 -30
  81. package/src/{Platform.HAP.ts → SwitchBotHAPPlatform.ts} +112 -39
  82. package/src/{Platform.Matter.ts → SwitchBotMatterPlatform.ts} +8 -63
  83. package/src/deviceFactory.ts +5 -14
  84. package/src/devices/genericDevice.ts +271 -12
  85. package/src/homebridge-ui/endpoints/config.ts +2 -10
  86. package/src/homebridge-ui/public/css/styles.css +1 -61
  87. package/src/homebridge-ui/public/index.html +0 -59
  88. package/src/homebridge-ui/public/js/advanced-settings.ts +3 -4
  89. package/src/homebridge-ui/public/js/api.ts +1 -61
  90. package/src/homebridge-ui/public/js/app.ts +4 -47
  91. package/src/homebridge-ui/public/js/credentials.ts +5 -11
  92. package/src/homebridge-ui/public/js/devices.ts +0 -6
  93. package/src/homebridge-ui/public/js/modals.ts +0 -58
  94. package/src/homebridge-ui/public/js/render.ts +1 -2
  95. package/src/homebridge-ui/utils/config-parser.ts +0 -9
  96. package/src/index.ts +2 -2
  97. package/src/settings.ts +0 -12
  98. package/src/utils.ts +0 -31
  99. package/test/device/deviceFactory.spec.ts +9 -0
  100. package/test/device/getstate-cache.spec.ts +62 -0
  101. package/test/device/getstate-returns-status.spec.ts +89 -0
  102. package/test/device/water-detector-battery.spec.ts +81 -0
  103. package/test/device/water-detector-leak.spec.ts +43 -0
  104. package/test/hap-push-updates.spec.ts +150 -0
  105. package/test/platform/accessory-restore.spec.ts +2 -2
  106. package/test/platform/matter-childbridge.spec.ts +1 -1
  107. package/test/platform/matter-integration.spec.ts +1 -51
  108. package/test/platform/platform-edge.spec.ts +2 -2
  109. package/test/platform/platform.integration.spec.ts +1 -1
  110. package/test/utils/utils.spec.ts +0 -15
  111. package/.github/npm-version-script-esm.js +0 -97
  112. package/dist/Platform.HAP.d.ts.map +0 -1
  113. package/dist/Platform.HAP.js.map +0 -1
  114. package/dist/Platform.Matter.d.ts.map +0 -1
  115. package/dist/Platform.Matter.js.map +0 -1
  116. package/dist/homebridge-ui/homebridge-ui/utils/v4-detection.js +0 -23
  117. package/dist/homebridge-ui/homebridge-ui/utils/v4-detection.js.map +0 -1
  118. package/dist/homebridge-ui/public/js/legacy-view.d.ts +0 -3
  119. package/dist/homebridge-ui/public/js/legacy-view.d.ts.map +0 -1
  120. package/dist/homebridge-ui/public/js/legacy-view.js +0 -43
  121. package/dist/homebridge-ui/public/js/legacy-view.js.map +0 -1
  122. package/dist/homebridge-ui/public/js/legacy-view.ts +0 -99
  123. package/dist/homebridge-ui/utils/v4-detection.d.ts +0 -12
  124. package/dist/homebridge-ui/utils/v4-detection.d.ts.map +0 -1
  125. package/dist/homebridge-ui/utils/v4-detection.js +0 -23
  126. package/dist/homebridge-ui/utils/v4-detection.js.map +0 -1
  127. package/src/homebridge-ui/public/js/legacy-view.js +0 -43
  128. package/src/homebridge-ui/public/js/legacy-view.ts +0 -99
  129. package/src/homebridge-ui/utils/v4-detection.ts +0 -23
  130. package/test/homebridge-ui/config-parser.spec.ts +0 -61
@@ -1,66 +1,3 @@
1
- # Matter and HomeKit Integration
2
-
3
- ## Matter Implementation
4
- This plugin supports dual-mode device registration:
5
- - **HAP mode** (HomeKit Accessory Protocol): Base implementation via `SwitchBotPlatform` class
6
- - **Matter mode**: Extended via `SwitchBotMatterPlatform` class that overrides device registration and processing
7
-
8
- When Homebridge's Matter API is available, `SwitchBotMatterPlatform` registers accessories with both HAP and Matter simultaneously. If the Matter API is not available, the plugin transparently falls back to HAP-only mode.
9
-
10
- ## Matter Device Type Mapping
11
- All Matter device types use `api.matter.deviceTypes.*` objects from the homebridge-matter API. Device mapping aligns with the authoritative [homebridge-matter wiki](https://github.com/homebridge-plugins/homebridge-matter/wiki/Introduction) and Section 7 Sensors for sensor mapping.
12
-
13
- | Device Type | HAP Service | Matter DeviceType | Matter Clusters |
14
- |---------------------|-----------------------------|-----------------------|-------------------------|
15
- | Bot | Switch | `OnOffSwitch` | onOff |
16
- | Curtain | WindowCovering | `WindowCovering` | windowCovering |
17
- | Contact Sensor | ContactSensor | `ContactSensor` | contactSensor |
18
- | Motion Sensor | MotionSensor | `OccupancySensor` | occupancySensing |
19
- | Meter/Hygrometer | HumiditySensor, TemperatureSensor | `TemperatureSensor`, `HumiditySensor` | temperatureMeasurement, relativeHumidityMeasurement |
20
- | Lock | LockMechanism | `DoorLock` | doorLock |
21
- | Light/Fan/Outlet | Lightbulb, Fan, Outlet | `DimmableLight`, `OnOffLight`, `Fan` | onOff, levelControl |
22
- | IR Devices | Various (see IR mapping) | (varies) | (varies) |
23
-
24
- ## Authoritative Matter References
25
-
26
- 1. https://matter-js.github.io/docs/index.html
27
- 2. https://github.com/homebridge-plugins/homebridge-matter: Official Homebridge Matter plugin repository with extensive documentation and examples
28
- - For all Matter cluster, attribute, and device type specifications, use the official homebridge-matter wiki:
29
- - [Introduction](https://github.com/homebridge-plugins/homebridge-matter/wiki/Introduction)
30
- - [Core Concepts](https://github.com/homebridge-plugins/homebridge-matter/wiki/Core-Concepts)
31
- - [Getting Started](https://github.com/homebridge-plugins/homebridge-matter/wiki/Getting-Started)
32
- - [State Management](https://github.com/homebridge-plugins/homebridge-matter/wiki/State-Management)
33
- - [Monitoring External Changes](https://github.com/homebridge-plugins/homebridge-matter/wiki/Monitoring-External-Changes)
34
- - [Best Practices](https://github.com/homebridge-plugins/homebridge-matter/wiki/Best-Practices)
35
- - [Advanced Patterns](https://github.com/homebridge-plugins/homebridge-matter/wiki/Advanced-Patterns)
36
- - [API Reference](https://github.com/homebridge-plugins/homebridge-matter/wiki/API-Reference)
37
- - [Matter Types](https://github.com/homebridge-plugins/homebridge-matter/wiki/Matter-Types)
38
- - [Value Conversions](https://github.com/homebridge-plugins/homebridge-matter/wiki/Value-Conversions)
39
- - **Device References:**
40
- - [Lighting Devices (§4)](https://github.com/homebridge-plugins/homebridge-matter/wiki/Section-4-Lighting) — DimmableLight, OnOffLight
41
- - [Switches (§6)](https://github.com/homebridge-plugins/homebridge-matter/wiki/Section-6-Switches) — OnOffSwitch
42
- - [Sensors (§7)](https://github.com/homebridge-plugins/homebridge-matter/wiki/Section-7-Sensors) — OccupancySensor, ContactSensor
43
- - [Closure Devices (§8)](https://github.com/homebridge-plugins/homebridge-matter/wiki/Section-8-Closure) — WindowCovering
44
-
45
- # Changelog Format Requirements
46
-
47
- When generating a changelog release entry, always use this exact structure:
48
-
49
- 1. Release header with compare URL using `compare/tag/vX.Y.Z`:
50
-
51
- ```md
52
- ## [X.Y.Z](https://github.com/OpenWonderLabs/homebridge-switchbot/compare/tag/vX.Y.Z) (YYYY-MM-DD)
53
- ```
54
-
55
- 2. Standard sections as needed (`### Bug Fixes`, `### Enhancements`, `### Documentation`, etc.).
56
-
57
- 3. End each release entry with a full changelog comparison URL to the previous version:
58
-
59
- ```md
60
- **Full Changelog**: https://github.com/OpenWonderLabs/homebridge-switchbot/compare/vX.Y.(Z-1)...vX.Y.Z
61
- ```
62
-
63
- Do not omit either URL line when creating a new release entry.
64
1
  # Homebridge SwitchBot Plugin Development Guide
65
2
 
66
3
  Always reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here.
@@ -83,4 +83,4 @@ exports.preCommit = (props) => {
83
83
  }
84
84
 
85
85
  fs.writeFileSync(changelogPath, content)
86
- }
86
+ }
@@ -198,4 +198,4 @@ if (packageJSON.version !== publishTag) {
198
198
  console.warn(`Version in package.json is already ${packageJSON.version}`)
199
199
  }
200
200
 
201
- console.log(publishTag)
201
+ console.log(publishTag)
@@ -115,4 +115,4 @@ async function main() {
115
115
  main().catch((error) => {
116
116
  console.error(error)
117
117
  process.exit(1)
118
- })
118
+ })
package/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ ## [5.0.4](https://github.com/OpenWonderLabs/homebridge-switchbot/compare/v5.0.3...v5.0.4) (2026-07-10)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * restore Battery service for water detector ([#1387](https://github.com/OpenWonderLabs/homebridge-switchbot/issues/1387)) ([1c5caaa](https://github.com/OpenWonderLabs/homebridge-switchbot/commit/1c5caaa3753532e0fbccc21f2480c7150fa622de)), closes [#1357](https://github.com/OpenWonderLabs/homebridge-switchbot/issues/1357)
7
+ * water detector device mapping, HAP cache deserialization crash, and slow leak reads ([#1386](https://github.com/OpenWonderLabs/homebridge-switchbot/issues/1386)) ([7550e9b](https://github.com/OpenWonderLabs/homebridge-switchbot/commit/7550e9b861b987336e08ae33772470dbd9b4e210))
8
+
9
+
10
+
1
11
  ## [5.0.2](https://github.com/OpenWonderLabs/homebridge-switchbot/compare/v4.3.14...v5.0.2) (2026-04-26)
2
12
 
3
13
 
@@ -20,15 +30,6 @@
20
30
 
21
31
  All notable changes to this project will be documented in this file. This project uses [Semantic Versioning](https://semver.org/)
22
32
 
23
- ## [5.1.0](https://github.com/OpenWonderLabs/homebridge-switchbot/compare/v5.0.0...v5.1.0) (2026-04-XX)
24
-
25
- ### What's Changed
26
- - Add per-device `externalPublishProtocol` option (`none`/`hap`/`matter`) to publish selected devices as external accessories for HAP or Matter.
27
- - Add Homebridge UI support to configure **Publish as External Device** when adding or editing devices.
28
- - Add migration/readme documentation for external publishing behavior and defaults.
29
-
30
- **Full Changelog**: https://github.com/OpenWonderLabs/homebridge-switchbot/compare/v5.0.0...v5.1.0
31
-
32
33
  ## [5.0.0](https://github.com/OpenWonderLabs/homebridge-switchbot/compare/v4.3.1...v5.0.0) (2026-04-10)
33
34
 
34
35
  ### ⚠️ Breaking Changes
package/MIGRATION.md CHANGED
@@ -9,16 +9,11 @@ This document highlights important changes and recommended actions before upgrad
9
9
  2. Configuration keys
10
10
  - `enableMatter` (boolean) — enable Matter child-bridge registration.
11
11
  - `preferMatter` (boolean) — prefer Matter for devices that support Matter descriptors; HAP fallback still available.
12
- - `externalPublishProtocol` (per-device string) — controls per-device external publishing mode. Valid values: `none` (default), `hap`, `matter`.
13
12
  - `openApiToken` + `openApiSecret` (string) — both are required for OpenAPI discovery/calls for cloud-reachable devices.
14
13
  - `perDeviceMaxRetries`, `requestTimeout`, `maxRetries` — network retry/timing options for OpenAPI fallback.
15
14
 
16
15
  - `writeDebounceMs` (number, milliseconds, default 100) — global write coalescing debounce window. Commands sent to the same device within this window are coalesced (last-write-wins) to reduce duplicate network/API commands. Set to `0` to disable coalescing if you require immediate, per-command delivery.
17
16
 
18
- Upgrade guidance:
19
- - Existing configs do not need changes; devices default to `externalPublishProtocol: "none"`.
20
- - Set `hap` or `matter` only for devices you explicitly want published as external accessories.
21
-
22
17
  3. Hybrid client
23
18
  - The plugin dynamically imports `node-switchbot` when available and uses OpenAPI fallback when both `openApiToken` and `openApiSecret` are configured.
24
19
  - If you rely on BLE-only operation, ensure devices and the host have BLE available.
package/README.md CHANGED
@@ -45,31 +45,6 @@ Click **Save Advanced Settings** to apply changes. These settings match the opti
45
45
 
46
46
  <!-- Optionally add a screenshot here -->
47
47
 
48
- ### Per-Device External Publishing (HAP or Matter)
49
-
50
- Each device now supports an `externalPublishProtocol` option to control whether it is published as an external accessory.
51
-
52
- - `none` (default): normal platform registration behavior.
53
- - `hap`: publish this device as a HAP external accessory.
54
- - `matter`: publish this device as a Matter external accessory.
55
-
56
- Behavior notes:
57
-
58
- - This is configured per device in the Homebridge UI under **Publish as External Device** when adding or editing a device.
59
- - If the selected external publish API is not available on your Homebridge runtime, the plugin falls back to normal platform registration for that device.
60
- - Use `hap` for HAP-focused setups and `matter` for Matter-focused setups; leave as `none` unless you specifically want external accessory publishing.
61
-
62
- Example device config excerpt:
63
-
64
- ```json
65
- {
66
- "deviceId": "E7F8A1B2C3D4",
67
- "configDeviceName": "Bedroom Bot",
68
- "configDeviceType": "Bot",
69
- "externalPublishProtocol": "hap"
70
- }
71
- ```
72
-
73
48
 
74
49
  - ### If using OpenAPI Connection
75
50
  1. Download SwitchBot App on App Store or Google Play Store
@@ -172,17 +172,6 @@
172
172
  ],
173
173
  "default": "auto"
174
174
  },
175
- "externalPublishProtocol": {
176
- "type": "string",
177
- "title": "Publish as External Device",
178
- "description": "Publish this device as an external accessory for a specific protocol. Select HAP or Matter to expose it externally, or None to keep normal platform publishing.",
179
- "enum": [
180
- "none",
181
- "hap",
182
- "matter"
183
- ],
184
- "default": "none"
185
- },
186
175
  "room": {
187
176
  "type": "string",
188
177
  "title": "Room",
@@ -1,5 +1,5 @@
1
- import type { API, Logger, PlatformConfig } from 'homebridge';
2
1
  import type { SwitchBotPluginConfig } from './settings.js';
2
+ import type { API, Logger, PlatformConfig } from 'homebridge';
3
3
  /**
4
4
  * Homebridge platform class for SwitchBot HAP (HomeKit Accessory Protocol) integration.
5
5
  * Handles device discovery, registration, polling, and accessory lifecycle for HAP-enabled SwitchBot devices.
@@ -35,6 +35,8 @@ export declare class SwitchBotHAPPlatform {
35
35
  private lastConfigHash;
36
36
  /** Interval for periodic config reload */
37
37
  private configReloadInterval;
38
+ /** Readable characteristics per device id, so a poll can push new values */
39
+ private hapPushTargets;
38
40
  /** Timers for per-device OpenAPI polling */
39
41
  private openApiPollTimers;
40
42
  /** Timer for batched OpenAPI polling */
@@ -115,6 +117,18 @@ export declare class SwitchBotHAPPlatform {
115
117
  *
116
118
  * @returns {void}
117
119
  */
120
+ /**
121
+ * Read every registered characteristic for a device and notify HomeKit.
122
+ *
123
+ * The device state is cached and de-duplicated, so one call costs a single
124
+ * API request however many characteristics the accessory has.
125
+ */
126
+ private _pushDeviceState;
127
+ /**
128
+ * Push once now, so the Home app shows a value without waiting for the first
129
+ * poll interval.
130
+ */
131
+ private primeHapValues;
118
132
  private _setupOpenApiPolling;
119
133
  /**
120
134
  * Called by Homebridge to restore cached HAP accessories on startup.
@@ -130,4 +144,4 @@ export declare class SwitchBotHAPPlatform {
130
144
  configureMatterAccessory?(accessory: any): void;
131
145
  }
132
146
  export default SwitchBotHAPPlatform;
133
- //# sourceMappingURL=Platform.HAP.d.ts.map
147
+ //# sourceMappingURL=SwitchBotHAPPlatform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwitchBotHAPPlatform.d.ts","sourceRoot":"","sources":["../src/SwitchBotHAPPlatform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAO7D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,oBAAoB;IAC/B,8BAA8B;IAC9B,GAAG,EAAE,GAAG,GAAG,SAAS,CAAA;IACpB,iCAAiC;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,2BAA2B;IAC3B,MAAM,EAAE,qBAAqB,CAAA;IAC7B,mCAAmC;IACnC,OAAO,EAAE,GAAG,EAAE,CAAK;IACnB,gDAAgD;IAChD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC7B,sDAAsD;IACtD,OAAO,CAAC,cAAc,CAAa;IACnC,0CAA0C;IAC1C,OAAO,CAAC,oBAAoB,CAA8B;IAC1D,4EAA4E;IAC5E,OAAO,CAAC,cAAc,CAA0H;IAEhJ,4CAA4C;IAC5C,OAAO,CAAC,iBAAiB,CAAyC;IAClE,wCAAwC;IACxC,OAAO,CAAC,iBAAiB,CAA8B;IACvD,2CAA2C;IAC3C,OAAO,CAAC,oBAAoB,CAAI;IAChC,yDAAyD;IACzD,OAAO,CAAC,gBAAgB,CAAI;IAE5B;;;;;OAKG;gBACS,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,GAAG;IA2C1D;;;;;;OAMG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IA8DlC;;;;;;;;;;;;;;;;;;;;OAoBG;YACW,sBAAsB;IAiKpC;;;OAGG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;;OAGG;IACH,mBAAmB,IAAI,IAAI;IAS3B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAUrB;;;;;;OAMG;YACW,qBAAqB;IAiCnC;;;;OAIG;IACH,QAAQ,IAAI,IAAI;IAQhB;;;;;OAKG;IACH;;;;;OAKG;YACW,gBAAgB;IA8B9B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,oBAAoB;IAoI5B;;;;OAIG;IACG,kBAAkB,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAUvD;;;;OAIG;IACH,wBAAwB,CAAC,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI;CAShD;AAED,eAAe,oBAAoB,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { createDevice } from './deviceFactory.js';
2
2
  import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
3
3
  import { SwitchBotClient } from './switchbotClient.js';
4
- import { normalizeTypeForMatter, resolveExternalPublishProtocol } from './utils.js';
4
+ import { normalizeTypeForMatter } from './utils.js';
5
5
  /**
6
6
  * Homebridge platform class for SwitchBot HAP (HomeKit Accessory Protocol) integration.
7
7
  * Handles device discovery, registration, polling, and accessory lifecycle for HAP-enabled SwitchBot devices.
@@ -37,6 +37,8 @@ export class SwitchBotHAPPlatform {
37
37
  lastConfigHash = '';
38
38
  /** Interval for periodic config reload */
39
39
  configReloadInterval = null;
40
+ /** Readable characteristics per device id, so a poll can push new values */
41
+ hapPushTargets = new Map();
40
42
  /** Timers for per-device OpenAPI polling */
41
43
  openApiPollTimers = new Map();
42
44
  /** Timer for batched OpenAPI polling */
@@ -145,13 +147,12 @@ export class SwitchBotHAPPlatform {
145
147
  _raw: raw,
146
148
  };
147
149
  const type = normalizeTypeForMatter(d.type);
148
- const externalPublishProtocol = resolveExternalPublishProtocol(raw);
149
150
  const deviceOpts = { id: d.id, type, name: d.name, encryptionKey: d.encryptionKey, keyId: d.keyId, log: this.log };
150
151
  this.log.debug(`[HAP/Debug] Device options for ${d.name ?? d.id}:`, JSON.stringify(deviceOpts, null, 2));
151
152
  try {
152
153
  const created = await createDevice(deviceOpts, this.config, false);
153
154
  this.devices.push(created);
154
- createdDevices.push({ created, d, type, externalPublishProtocol });
155
+ createdDevices.push({ created, d, type });
155
156
  }
156
157
  catch (e) {
157
158
  this.log.error(`Failed to create HAP device ${d.id}:`, e instanceof Error ? e.stack || e.message : e);
@@ -159,6 +160,7 @@ export class SwitchBotHAPPlatform {
159
160
  }
160
161
  // Register HAP accessories after all devices are created for symmetry with Matter platform
161
162
  await this.registerHAPAccessories(createdDevices);
163
+ this.primeHapValues();
162
164
  this.lastConfigHash = newHash;
163
165
  }
164
166
  /**
@@ -183,14 +185,13 @@ export class SwitchBotHAPPlatform {
183
185
  * If the Homebridge HAP API is not available, registration is skipped and a log message is emitted.
184
186
  */
185
187
  async registerHAPAccessories(createdDevices) {
186
- if (!this.api || !this.api.hap || typeof this.api.hap.registerPlatformAccessories !== 'function') {
188
+ if (!this.api || !this.api.hap || typeof this.api.registerPlatformAccessories !== 'function') {
187
189
  this.log.info('HAP API not available to register accessories');
188
190
  return;
189
191
  }
190
192
  const hap = this.api.hap;
191
193
  const accessoriesToRegister = [];
192
- const externalAccessoriesToPublish = [];
193
- for (const { created, d, type, externalPublishProtocol } of createdDevices) {
194
+ for (const { created, d, type } of createdDevices) {
194
195
  try {
195
196
  const uuid = hap.uuid.generate(`${d.id}`);
196
197
  let accessory = this.accessories.get(uuid);
@@ -208,9 +209,7 @@ export class SwitchBotHAPPlatform {
208
209
  }
209
210
  }
210
211
  if (!accessory) {
211
- // Use the PlatformAccessory constructor from the HAP API
212
- const PlatformAccessory = this.api.hap?.PlatformAccessory || this.api.platformAccessory;
213
- accessory = new PlatformAccessory(d.name || type, uuid);
212
+ accessory = new this.api.platformAccessory(d.name || type, uuid);
214
213
  try {
215
214
  accessory.context = accessory.context || {};
216
215
  accessory.context.deviceId = d.id;
@@ -219,12 +218,7 @@ export class SwitchBotHAPPlatform {
219
218
  catch (e) {
220
219
  // ignore context failures
221
220
  }
222
- if (externalPublishProtocol === 'hap') {
223
- externalAccessoriesToPublish.push(accessory);
224
- }
225
- else {
226
- accessoriesToRegister.push(accessory);
227
- }
221
+ accessoriesToRegister.push(accessory);
228
222
  this.accessories.set(uuid, accessory);
229
223
  }
230
224
  else {
@@ -246,12 +240,40 @@ export class SwitchBotHAPPlatform {
246
240
  // ignore
247
241
  }
248
242
  }
243
+ // Ensure AccessoryInformation service exists - required for cache deserialization.
244
+ // Without it, hap-nodejs _sideloadServices crashes on next start.
245
+ try {
246
+ const InfoService = hap.Service.AccessoryInformation;
247
+ if (InfoService) {
248
+ const info = accessory.getService(InfoService) || accessory.addService(InfoService);
249
+ const accDescForInfo = await created.createAccessory?.(this.api).catch?.(() => undefined);
250
+ const manufacturer = (accDescForInfo && accDescForInfo.manufacturer) || 'SwitchBot';
251
+ const model = (accDescForInfo && accDescForInfo.model) || type || 'SwitchBot Device';
252
+ const serial = (accDescForInfo && accDescForInfo.serialNumber) || d.id;
253
+ const firmware = (accDescForInfo && accDescForInfo.firmwareRevision) || '1.0.0';
254
+ try {
255
+ info.setCharacteristic(hap.Characteristic.Manufacturer, manufacturer);
256
+ info.setCharacteristic(hap.Characteristic.Model, model);
257
+ info.setCharacteristic(hap.Characteristic.SerialNumber, serial);
258
+ info.setCharacteristic(hap.Characteristic.FirmwareRevision, firmware);
259
+ }
260
+ catch (e) {
261
+ // ignore
262
+ }
263
+ }
264
+ }
265
+ catch (e) {
266
+ // ignore
267
+ }
249
268
  // Add basic service descriptor from device (symmetrical to Matter: remove stale services/chars)
250
269
  const accDesc = await created.createAccessory?.(this.api);
251
270
  if (accDesc && accDesc.services) {
252
271
  const serviceTypes = accDesc.services.map((s) => s.type);
253
272
  for (const existingService of accessory.services.slice()) {
254
- if (existingService.constructor && existingService.constructor.name && !serviceTypes.includes(existingService.constructor.name)) {
273
+ // Never remove AccessoryInformation - required for cache deserialization
274
+ if (existingService.constructor && existingService.constructor.name
275
+ && existingService.constructor.name !== 'AccessoryInformation'
276
+ && !serviceTypes.includes(existingService.constructor.name)) {
255
277
  accessory.removeService(existingService);
256
278
  }
257
279
  }
@@ -283,9 +305,32 @@ export class SwitchBotHAPPlatform {
283
305
  }
284
306
  if (getterSetter && typeof getterSetter.get === 'function') {
285
307
  service.getCharacteristic(Characteristic).onGet(getterSetter.get);
308
+ // Remember it so a poll can push the new value.
309
+ const target = this.hapPushTargets.get(d.id) ?? { device: created?.instance ?? created, entries: [] };
310
+ target.entries.push({ service, characteristic: Characteristic, get: getterSetter.get });
311
+ this.hapPushTargets.set(d.id, target);
286
312
  }
287
313
  if (getterSetter && typeof getterSetter.set === 'function') {
288
- service.getCharacteristic(Characteristic).onSet(getterSetter.set);
314
+ service.getCharacteristic(Characteristic).onSet(async (value) => {
315
+ await getterSetter.set(value);
316
+ const refreshAfterSet = Array.isArray(getterSetter.refreshAfterSet) ? getterSetter.refreshAfterSet : [];
317
+ for (const refreshCharName of refreshAfterSet) {
318
+ const refreshGetterSetter = (s.characteristics || {})[refreshCharName];
319
+ if (!refreshGetterSetter || typeof refreshGetterSetter.get !== 'function') {
320
+ continue;
321
+ }
322
+ const RefreshCharacteristic = hap.Characteristic[refreshCharName];
323
+ if (!RefreshCharacteristic) {
324
+ continue;
325
+ }
326
+ try {
327
+ service.getCharacteristic(RefreshCharacteristic).updateValue(await refreshGetterSetter.get());
328
+ }
329
+ catch (e) {
330
+ this.log.debug?.(`Failed to refresh ${refreshCharName} after setting ${charName}`, e);
331
+ }
332
+ }
333
+ });
289
334
  }
290
335
  }
291
336
  }
@@ -308,27 +353,6 @@ export class SwitchBotHAPPlatform {
308
353
  else {
309
354
  this.log.info('No HAP accessories to register');
310
355
  }
311
- if (externalAccessoriesToPublish.length > 0) {
312
- if (typeof this.api.publishExternalAccessories === 'function') {
313
- try {
314
- this.api.publishExternalAccessories(PLUGIN_NAME, externalAccessoriesToPublish);
315
- this.log.info(`Published ${externalAccessoriesToPublish.length} HAP external accessory(ies) with Homebridge`);
316
- }
317
- catch (e) {
318
- this.log.warn('Failed to publish HAP external accessories', e);
319
- }
320
- }
321
- else {
322
- this.log.warn('HAP external accessory publishing API not available; falling back to regular platform registration');
323
- try {
324
- this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, externalAccessoriesToPublish);
325
- this.log.info(`Registered ${externalAccessoriesToPublish.length} HAP accessory(ies) as fallback (external publishing unavailable)`);
326
- }
327
- catch (e) {
328
- this.log.warn('Failed to register fallback HAP accessories', e);
329
- }
330
- }
331
- }
332
356
  }
333
357
  /**
334
358
  * Returns the timestamp (ms) of the last OpenAPI daily counter reset.
@@ -361,7 +385,6 @@ export class SwitchBotHAPPlatform {
361
385
  id: d.deviceId ?? d.id,
362
386
  type: d.configDeviceType ?? d.type,
363
387
  name: d.configDeviceName ?? d.name,
364
- externalPublishProtocol: resolveExternalPublishProtocol(d),
365
388
  })));
366
389
  }
367
390
  /**
@@ -422,6 +445,52 @@ export class SwitchBotHAPPlatform {
422
445
  *
423
446
  * @returns {void}
424
447
  */
448
+ /**
449
+ * Read every registered characteristic for a device and notify HomeKit.
450
+ *
451
+ * The device state is cached and de-duplicated, so one call costs a single
452
+ * API request however many characteristics the accessory has.
453
+ */
454
+ async _pushDeviceState(id) {
455
+ const target = this.hapPushTargets.get(id);
456
+ if (!target?.entries.length) {
457
+ return;
458
+ }
459
+ // Read once first. A device that could not be read must push nothing: the
460
+ // getters report a fallback for a missing field, and pushing that would
461
+ // replace a good value in HomeKit with one that looks like a measurement.
462
+ try {
463
+ const state = await target.device?.getState?.();
464
+ if (state?.unreadable) {
465
+ this.log.debug?.(`Skipped pushing updates for ${id}: device not readable`);
466
+ return;
467
+ }
468
+ }
469
+ catch (e) {
470
+ this.log.debug?.(`Skipped pushing updates for ${id}:`, e?.message);
471
+ return;
472
+ }
473
+ for (const { service, characteristic, get } of target.entries) {
474
+ try {
475
+ const value = await get();
476
+ if (value !== undefined && value !== null) {
477
+ service.getCharacteristic(characteristic).updateValue(value);
478
+ }
479
+ }
480
+ catch (e) {
481
+ this.log.debug?.(`Failed to push an update for ${id}:`, e?.message);
482
+ }
483
+ }
484
+ }
485
+ /**
486
+ * Push once now, so the Home app shows a value without waiting for the first
487
+ * poll interval.
488
+ */
489
+ primeHapValues() {
490
+ for (const id of this.hapPushTargets.keys()) {
491
+ void this._pushDeviceState(id);
492
+ }
493
+ }
425
494
  _setupOpenApiPolling() {
426
495
  // Clear any existing timers
427
496
  for (const t of this.openApiPollTimers.values())
@@ -495,6 +564,7 @@ export class SwitchBotHAPPlatform {
495
564
  if (client && typeof client.getDevice === 'function') {
496
565
  await client.getDevice(id);
497
566
  this.openApiRequestsToday++;
567
+ await this._pushDeviceState(id);
498
568
  this.log.debug(`[OpenAPI] Polled device ${id} (per-device interval ${perDeviceRate}s) [${this.openApiRequestsToday}/${dailyLimit}]`);
499
569
  }
500
570
  }
@@ -534,6 +604,7 @@ export class SwitchBotHAPPlatform {
534
604
  try {
535
605
  await client.getDevice(dev.deviceId ?? dev.id);
536
606
  this.openApiRequestsToday++;
607
+ await this._pushDeviceState(dev.deviceId ?? dev.id);
537
608
  this.log.debug(`[OpenAPI] Batched poll device ${dev.deviceId ?? dev.id} [${this.openApiRequestsToday}/${dailyLimit}]`);
538
609
  }
539
610
  catch (e) {
@@ -583,4 +654,4 @@ export class SwitchBotHAPPlatform {
583
654
  }
584
655
  }
585
656
  export default SwitchBotHAPPlatform;
586
- //# sourceMappingURL=Platform.HAP.js.map
657
+ //# sourceMappingURL=SwitchBotHAPPlatform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwitchBotHAPPlatform.js","sourceRoot":"","sources":["../src/SwitchBotHAPPlatform.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import type { API, Logger, PlatformConfig } from 'homebridge';
2
1
  import type { SwitchBotPluginConfig } from './settings.js';
2
+ import type { API, Logger, PlatformConfig } from 'homebridge';
3
3
  /**
4
4
  * Homebridge platform class for SwitchBot Matter integration.
5
5
  * Handles device discovery, registration, polling, and accessory lifecycle for Matter-enabled SwitchBot devices.
@@ -87,9 +87,7 @@ export declare class SwitchBotMatterPlatform {
87
87
  type: string;
88
88
  useMatter: boolean;
89
89
  matterAvailable: boolean;
90
- externalPublishProtocol: 'none' | 'hap' | 'matter';
91
90
  }[]): Promise<void>;
92
- private publishMatterExternalAccessories;
93
91
  /**
94
92
  * Returns the timestamp (ms) of the last OpenAPI daily counter reset.
95
93
  * @returns {number} Timestamp in ms
@@ -140,4 +138,4 @@ export declare class SwitchBotMatterPlatform {
140
138
  configureMatterAccessory(accessory: any): void;
141
139
  }
142
140
  export default SwitchBotMatterPlatform;
143
- //# sourceMappingURL=Platform.Matter.d.ts.map
141
+ //# sourceMappingURL=SwitchBotMatterPlatform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SwitchBotMatterPlatform.d.ts","sourceRoot":"","sources":["../src/SwitchBotMatterPlatform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAO7D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,uBAAuB;IAClC,8BAA8B;IAC9B,GAAG,EAAE,GAAG,GAAG,SAAS,CAAA;IACpB,iCAAiC;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,2BAA2B;IAC3B,MAAM,EAAE,qBAAqB,CAAA;IAC7B,mCAAmC;IACnC,OAAO,EAAE,GAAG,EAAE,CAAK;IACnB,gDAAgD;IAChD,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC7B,sDAAsD;IACtD,OAAO,CAAC,cAAc,CAAa;IACnC,0CAA0C;IAC1C,OAAO,CAAC,oBAAoB,CAA8B;IAC1D,4CAA4C;IAC5C,OAAO,CAAC,iBAAiB,CAAyC;IAClE,wCAAwC;IACxC,OAAO,CAAC,iBAAiB,CAA8B;IACvD,2CAA2C;IAC3C,OAAO,CAAC,oBAAoB,CAAI;IAChC,yDAAyD;IACzD,OAAO,CAAC,gBAAgB,CAAI;IAE5B;;;;;OAKG;gBACS,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,GAAG;IA2C1D;;;;;OAKG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAkDlC;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,yBAAyB,CAAC,cAAc,EAAE;QAAE,OAAO,EAAE,GAAG,CAAC;QAAC,CAAC,EAAE,GAAG,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAC;QAAC,eAAe,EAAE,OAAO,CAAA;KAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqGtJ;;;OAGG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;;OAGG;IACH,mBAAmB,IAAI,IAAI;IAS3B;;;OAGG;IACH,OAAO,CAAC,aAAa;IAUrB;;;;;;OAMG;YACW,qBAAqB;IAiCnC;;;;OAIG;IACH,QAAQ,IAAI,IAAI;IAQhB;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;IAkI5B;;;;OAIG;IACG,kBAAkB,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAUvD;;;;OAIG;IACH,wBAAwB,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI;CAS/C;AAED,eAAe,uBAAuB,CAAA"}