@switchbot/homebridge-switchbot 5.0.0-beta.154 → 5.0.0-beta.155

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 (67) hide show
  1. package/.github/workflows/release.yml +63 -15
  2. package/.github/workflows/stale.yml +2 -4
  3. package/CHANGELOG.md +21 -29
  4. package/MIGRATION.md +6 -6
  5. package/README.md +5 -3
  6. package/dist/device-types.js +7 -7
  7. package/dist/device-types.js.map +1 -1
  8. package/dist/deviceFactory.d.ts +1 -1
  9. package/dist/deviceFactory.d.ts.map +1 -1
  10. package/dist/deviceFactory.js +20 -20
  11. package/dist/deviceFactory.js.map +1 -1
  12. package/dist/homebridge-ui/device-types.js +246 -0
  13. package/dist/homebridge-ui/device-types.js.map +1 -0
  14. package/dist/homebridge-ui/deviceCommandMapper.js +319 -0
  15. package/dist/homebridge-ui/deviceCommandMapper.js.map +1 -0
  16. package/dist/homebridge-ui/endpoints/discovery.d.ts.map +1 -1
  17. package/dist/homebridge-ui/endpoints/discovery.js +5 -1
  18. package/dist/homebridge-ui/endpoints/discovery.js.map +1 -1
  19. package/dist/homebridge-ui/errors.js +32 -0
  20. package/dist/homebridge-ui/errors.js.map +1 -0
  21. package/dist/homebridge-ui/homebridge-ui/endpoints/config.js +90 -0
  22. package/dist/homebridge-ui/homebridge-ui/endpoints/config.js.map +1 -0
  23. package/dist/homebridge-ui/homebridge-ui/endpoints/devices.js +144 -0
  24. package/dist/homebridge-ui/homebridge-ui/endpoints/devices.js.map +1 -0
  25. package/dist/homebridge-ui/homebridge-ui/endpoints/discovery.js +219 -0
  26. package/dist/homebridge-ui/homebridge-ui/endpoints/discovery.js.map +1 -0
  27. package/dist/homebridge-ui/homebridge-ui/server.js +11 -0
  28. package/dist/homebridge-ui/homebridge-ui/server.js.map +1 -0
  29. package/dist/homebridge-ui/homebridge-ui/utils/config-parser.js +108 -0
  30. package/dist/homebridge-ui/homebridge-ui/utils/config-parser.js.map +1 -0
  31. package/dist/homebridge-ui/homebridge-ui/utils/device-migration.js +111 -0
  32. package/dist/homebridge-ui/homebridge-ui/utils/device-migration.js.map +1 -0
  33. package/dist/homebridge-ui/homebridge-ui/utils/logger.js +17 -0
  34. package/dist/homebridge-ui/homebridge-ui/utils/logger.js.map +1 -0
  35. package/dist/homebridge-ui/public/js/app.js +5 -9
  36. package/dist/homebridge-ui/public/js/app.js.map +2 -2
  37. package/dist/homebridge-ui/settings.js +8 -0
  38. package/dist/homebridge-ui/settings.js.map +1 -0
  39. package/dist/homebridge-ui/switchbotClient.js +247 -0
  40. package/dist/homebridge-ui/switchbotClient.js.map +1 -0
  41. package/dist/switchbotClient.d.ts +7 -1
  42. package/dist/switchbotClient.d.ts.map +1 -1
  43. package/dist/switchbotClient.js +82 -10
  44. package/dist/switchbotClient.js.map +1 -1
  45. package/docs/assets/main.js +1 -1
  46. package/docs/index.html +10 -4
  47. package/docs/variables/default.html +1 -1
  48. package/eslint.config.js +9 -10
  49. package/package.json +25 -23
  50. package/src/device-types.js +246 -0
  51. package/src/device-types.js.map +1 -0
  52. package/src/device-types.ts +7 -7
  53. package/src/deviceCommandMapper.js +319 -0
  54. package/src/deviceCommandMapper.js.map +1 -0
  55. package/src/deviceFactory.ts +22 -21
  56. package/src/errors.js +32 -0
  57. package/src/errors.js.map +1 -0
  58. package/src/homebridge-ui/endpoints/discovery.ts +5 -1
  59. package/src/settings.js +8 -0
  60. package/src/settings.js.map +1 -0
  61. package/src/switchbotClient.js +247 -0
  62. package/src/switchbotClient.js.map +1 -0
  63. package/src/switchbotClient.ts +95 -10
  64. package/test/client/switchbotClient.spec.ts +42 -1
  65. package/test/e2e/run-e2e.spec.ts +1 -0
  66. package/tsconfig.ui.json +11 -0
  67. package/.github/workflows/beta-release.yml +0 -52
@@ -1,30 +1,77 @@
1
- name: Unified Release
1
+ name: Release
2
2
 
3
3
  on:
4
4
  push:
5
5
  branches:
6
- #- "alpha-*"
7
- #- "beta-*"
8
- - latest
6
+ - 'beta-*'
7
+ - 'beta'
8
+ - 'latest'
9
9
  workflow_dispatch:
10
10
 
11
11
  jobs:
12
+ # ─── BETA RELEASE (branches starting with "beta") ────────────────────────────
13
+
14
+ # 1️⃣ Build and test
15
+ build_and_test:
16
+ if: startsWith(github.ref_name, 'beta')
17
+ uses: homebridge/.github/.github/workflows/nodejs-build-and-test.yml@latest
18
+ with:
19
+ enable_coverage: false
20
+ secrets:
21
+ token: ${{ secrets.GITHUB_TOKEN }}
22
+
23
+ # 2️⃣ Lint
24
+ lint:
25
+ if: startsWith(github.ref_name, 'beta')
26
+ needs: build_and_test
27
+ uses: homebridge/.github/.github/workflows/eslint.yml@latest
28
+
29
+ # 3️⃣ Publish beta to NPM (OIDC — id-token required here and in the reusable workflow)
30
+ beta-publish:
31
+ if: startsWith(github.ref_name, 'beta')
32
+ needs: lint
33
+ permissions:
34
+ id-token: write
35
+ uses: homebridge/.github/.github/workflows/npm-publish-esm-oidc.yml@latest
36
+ with:
37
+ tag: 'beta'
38
+ dynamically_adjust_version: true
39
+ npm_version_command: 'pre'
40
+ pre_id: 'beta'
41
+
42
+ # 4️⃣ Create GitHub pre-release
43
+ beta-pre-release:
44
+ if: startsWith(github.ref_name, 'beta')
45
+ needs: beta-publish
46
+ uses: homebridge/.github/.github/workflows/pre-release.yml@latest
47
+ with:
48
+ npm_version: ${{ needs.beta-publish.outputs.NPM_VERSION }}
49
+ body: |
50
+ **Beta Release**
51
+ **Version**: v${{ needs.beta-publish.outputs.NPM_VERSION }}
52
+ [How To Test Beta Releases](https://github.com/OpenWonderLabs/homebridge-switchbot/wiki/Beta-Version)
53
+
54
+ # ─── STABLE RELEASE (branch: "latest") ───────────────────────────────────────
55
+
12
56
  # 1️⃣ Determine release type, ESM status, and branch name
13
57
  determine-release-type:
58
+ if: github.ref_name == 'latest'
14
59
  uses: homebridge/.github/.github/workflows/determine-release-type.yml@latest
15
60
  with:
16
61
  ref_name: ${{ github.ref_name }}
17
62
 
18
63
  # 2️⃣ Update version and changelog using the scripts
19
64
  update-version:
65
+ if: github.ref_name == 'latest'
20
66
  needs: determine-release-type
21
67
  uses: homebridge/.github/.github/workflows/update-version.yml@latest
22
68
  with:
23
69
  release_type: ${{ needs.determine-release-type.outputs.release_type }}
24
70
  is_esm: ${{ needs.determine-release-type.outputs.is_esm == 'true' }}
25
71
 
26
- # 3️⃣ Publish to NPM and create GitHub release
72
+ # 3️⃣ Publish to NPM and create GitHub release (OIDC — id-token required here and in the reusable workflow)
27
73
  publish-release:
74
+ if: github.ref_name == 'latest'
28
75
  needs: [determine-release-type, update-version]
29
76
  permissions:
30
77
  id-token: write
@@ -39,17 +86,17 @@ jobs:
39
86
 
40
87
  # 4️⃣ Promote branch if this is a prerelease (alpha/beta)
41
88
  promote-branch:
89
+ if: ${{ github.ref_name == 'latest' && needs.determine-release-type.outputs.release_type != 'latest' && needs.determine-release-type.outputs.release_type != 'skip' }}
42
90
  needs: [determine-release-type, publish-release]
43
- if: ${{ needs.determine-release-type.outputs.release_type != 'latest' && needs.determine-release-type.outputs.release_type != 'skip' }}
44
91
  uses: homebridge/.github/.github/workflows/promote-branch.yml@latest
45
92
  with:
46
93
  branch_name: ${{ needs.determine-release-type.outputs.branch_name }}
47
94
  release_type: ${{ needs.determine-release-type.outputs.release_type }}
48
95
  is_esm: ${{ needs.determine-release-type.outputs.is_esm == 'true' }}
49
96
 
50
- # 5️⃣ Notify if any previous job fails
97
+ # 5️⃣ Notify if any stable-release job fails
51
98
  workflow-failure:
52
- if: ${{ failure() }}
99
+ if: failure()
53
100
  needs: [determine-release-type, update-version, publish-release, promote-branch]
54
101
  uses: homebridge/.github/.github/workflows/report-failure.yml@latest
55
102
  with:
@@ -57,15 +104,16 @@ jobs:
57
104
  job_name: ${{ github.job }}
58
105
  run_url: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
59
106
 
60
- # 6️⃣ Post to Discord
61
- github-releases-to-discord:
62
- name: Discord Webhooks
63
- needs: [determine-release-type, update-version, publish-release]
107
+ # 6️⃣ Post to Discord (Beta + Stable)
108
+ discord:
109
+ name: Release Notifications
110
+ if: ${{ always() && ((startsWith(github.ref_name, 'beta') && needs.beta-publish.result == 'success') || (github.ref_name == 'latest' && needs.publish-release.result == 'success')) }}
111
+ needs: [beta-publish, update-version, publish-release]
64
112
  uses: homebridge/.github/.github/workflows/discord-webhooks.yml@latest
65
113
  with:
66
- title: "SwitchBot Release"
114
+ title: ${{ startsWith(github.ref_name, 'beta') && 'Homebridge SwitchBot Beta Release' || 'Homebridge SwitchBot Release' }}
67
115
  description: |
68
- Version `v${{ needs.update-version.outputs.version }}`
69
- url: "https://github.com/OpenWonderLabs/homebridge-switchbot/releases/tag/v${{ needs.update-version.outputs.version }}"
116
+ Version `v${{ startsWith(github.ref_name, 'beta') && needs.beta-publish.outputs.NPM_VERSION || needs.update-version.outputs.version }}`
117
+ url: "https://github.com/OpenWonderLabs/homebridge-switchbot/releases/tag/v${{ startsWith(github.ref_name, 'beta') && needs.beta-publish.outputs.NPM_VERSION || needs.update-version.outputs.version }}"
70
118
  secrets:
71
119
  DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_URL_LATEST }}
@@ -3,12 +3,10 @@ name: Stale workflow
3
3
  on:
4
4
  workflow_dispatch:
5
5
  schedule:
6
- - cron: '45 11 * * *'
6
+ - cron: '45 7 * * *'
7
7
 
8
8
  jobs:
9
9
  stale:
10
- uses: OpenWonderLabs/.github/.github/workflows/stale.yml@latest
11
- with:
12
- days-before-issue-stale: 15
10
+ uses: homebridge/.github/.github/workflows/stale.yml@latest
13
11
  secrets:
14
12
  token: ${{ secrets.GITHUB_TOKEN }}
package/CHANGELOG.md CHANGED
@@ -1,41 +1,31 @@
1
1
  # Changelog
2
2
 
3
- ## Unreleased — beta-4.3.3
4
-
5
- ### Added
6
- - Matter support (child-bridge) with Matter-first registration and HAP fallback.
7
- - Hybrid `node-switchbot@4` client adapter (BLE + OpenAPI) with OpenAPI fallback.
8
- - Manual and automated E2E scripts for lights, fans, curtains, and locks (`scripts/e2e/*`).
9
- - Conditional Vitest E2E harness (`RUN_E2E=true`) and a manual GitHub Actions workflow to run E2E.
10
-
11
- ### Changed
12
- - Centralized Matter cluster/attribute numeric ID maps in `src/utils.ts`.
13
- - Device descriptors refactored to use canonical Matter IDs.
14
- - OpenAPI fallback hardened with timeouts, retries, backoff, and per-device retry limits.
15
-
16
- ### Tests
17
- - Added integration tests and a Matter test harness under `test/`.
18
-
19
- ### Notes
20
- - This is a beta release; follow migration notes in MIGRATION.md before upgrading.
21
- # Changelog
22
-
23
3
  All notable changes to this project will be documented in this file. This project uses [Semantic Versioning](https://semver.org/)
24
4
 
25
- ## [Unreleased]
5
+ ## [5.0.0](https://github.com/OpenWonderLabs/homebridge-switchbot/releases/tag/v5.0.0) (2026-04-10)
26
6
 
27
7
  ### What's Changed
8
+ - Upgrade `node-switchbot` dependency from v4 beta to stable `^4.0.0`.
9
+ - Align SwitchBot client init options with stable v4 (`scanTimeout` and `enableConnectionIntelligence`).
10
+ - Improve runtime use of node-switchbot v4 device manager by reusing managed devices and reducing redundant discovery calls.
11
+ - Harden client teardown by cancelling and rejecting pending debounced writes during shutdown.
12
+ - Refresh release docs from beta wording to stable v4 release wording.
13
+
28
14
  - Matter platform: register only devices discovered via the SwitchBot OpenAPI by default. Per-device config overrides (by deviceId) are correctly merged into discovered devices.
29
15
  - Add `options.allowConfigOnlyDevices` (boolean) to opt-in to registering devices that exist only in config (not discovered).
30
16
  - Add unit tests for per-device merging and config-only behavior.
31
- - Matter (Matter platform): default to discovery-first registration and automatically remove previously-registered "stale" accessories that are no longer discovered or configured.
32
- - Add `options.keepStaleAccessories` (Advanced Settings) opt-in to preserve previously-registered accessories when set to true. Default: false (stale accessories are removed automatically).
33
- - Implement per-device OpenAPI polling with tracked timers and proper lifecycle cleanup (timers and BLE handlers cleared on unregister/shutdown).
34
- - Centralize OpenAPI/BLE -> Matter mapping and expand BLE/OpenAPI parsing to include PM2.5/PM10/VOC/CO2, temperature/humidity, improved color parsing, and additional sensor/robot-vacuum fields.
35
- - Prefer accessory-specific update helpers where available; fall back to generic Matter updates otherwise.
36
- - Add unit tests covering BLE parsing, stale-accessory behavior, mapping helpers, and lifecycle cleanup.
37
- - Add `options.dailyApiResetLocalMidnight` (boolean) to control whether the daily API budget resets at local midnight (true) or UTC midnight (false, default).
38
- - Fix configuration schema placement for the "Reset Daily Counter at Local Midnight" option: remove erroneous insertion inside IR remote type list and expose it correctly under platform `options`.
17
+ - Matter (Matter platform): default to discovery-first registration and automatically remove previously-registered "stale" accessories that are no longer discovered or configured.
18
+ - Add `options.keepStaleAccessories` (Advanced Settings) to opt-in to preserving previously-registered accessories when set to true. Default: false (stale accessories are removed automatically).
19
+ - Implement per-device OpenAPI polling with tracked timers and proper lifecycle cleanup (timers and BLE handlers cleared on unregister/shutdown).
20
+ - Centralize OpenAPI/BLE -> Matter mapping and expand BLE/OpenAPI parsing to include PM2.5/PM10/VOC/CO2, temperature/humidity, improved color parsing, and additional sensor/robot-vacuum fields.
21
+ - Prefer accessory-specific update helpers where available; fall back to generic Matter updates otherwise.
22
+ - Add unit tests covering BLE parsing, stale-accessory behavior, mapping helpers, and lifecycle cleanup.
23
+ - Add `options.dailyApiResetLocalMidnight` (boolean) to control whether the daily API budget resets at local midnight (true) or UTC midnight (false, default).
24
+ - Fix configuration schema placement for the "Reset Daily Counter at Local Midnight" option: remove erroneous insertion inside IR remote type list and expose it correctly under platform `options`.
25
+ - Fix UI discovery OpenAPI credential gating to require both token and secret before cloud discovery calls.
26
+ - Enable node-switchbot v4 resilience options (`enableConnectionIntelligence` and `enableCircuitBreaker`) for UI discovery clients.
27
+
28
+ **Full Changelog**: https://github.com/OpenWonderLabs/homebridge-switchbot/compare/v4.3.1...v5.0.0
39
29
 
40
30
  ## [4.3.1](https://github.com/OpenWonderLabs/homebridge-switchbot/releases/tag/v4.3.1) (2025-03-04)
41
31
 
@@ -1121,3 +1111,5 @@ All notable changes to this project will be documented in this file. This projec
1121
1111
  - Initial release of homebridge-switchbot.
1122
1112
  - Adds Support for Motion & Contact Sensors
1123
1113
  - Adds Water Level to Humidifier
1114
+
1115
+ **Full Changelog**: https://github.com/OpenWonderLabs/homebridge-switchbot/releases/tag/v0.1.0
package/MIGRATION.md CHANGED
@@ -1,6 +1,6 @@
1
- # Migration notes — v4.3.x → beta
1
+ # Migration notes — v4.3.x → v5.x
2
2
 
3
- This document highlights important changes and recommended actions before upgrading to the beta containing Matter and `node-switchbot@4` support.
3
+ This document highlights important changes and recommended actions before upgrading to the release that includes Matter and stable `node-switchbot@4` support.
4
4
 
5
5
  1. Matter-first behavior
6
6
  - The plugin will prefer registering accessories with Homebridge's Matter child-bridge when `enableMatter: true` and the Homebridge Matter API is available.
@@ -9,13 +9,13 @@ 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
- - `openApiToken` (string) — when present the plugin may prefer OpenAPI calls for cloud-reachable devices.
12
+ - `openApiToken` + `openApiSecret` (string) — both are required for OpenAPI discovery/calls for cloud-reachable devices.
13
13
  - `perDeviceMaxRetries`, `requestTimeout`, `maxRetries` — network retry/timing options for OpenAPI fallback.
14
14
 
15
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.
16
16
 
17
17
  3. Hybrid client
18
- - The plugin dynamically imports `node-switchbot` when available and falls back to OpenAPI when an `openApiToken` is configured.
18
+ - The plugin dynamically imports `node-switchbot` when available and uses OpenAPI fallback when both `openApiToken` and `openApiSecret` are configured.
19
19
  - If you rely on BLE-only operation, ensure devices and the host have BLE available.
20
20
 
21
21
  4. UI changes
@@ -28,7 +28,7 @@ This document highlights important changes and recommended actions before upgrad
28
28
  - Run the local test suite before upgrading to confirm TypeScript and unit tests pass: `npm run build && npm run test`.
29
29
 
30
30
  6. Rollback plan
31
- - If the beta causes issues, revert to the previous stable plugin version by reinstalling the prior package or checking out the stable branch.
31
+ - If the upgrade causes issues, revert to the previous plugin version by reinstalling the prior package version.
32
32
 
33
33
 
34
34
  8. BLE encryption key and keyId fields
@@ -51,4 +51,4 @@ node scripts/generate-matter-maps.js ./zap-matter.json
51
51
 
52
52
  Place the official metadata JSON as `zap-matter.json` at the repo root (or pass a path) and commit the generated `src/matter-maps.generated.ts` to keep maps up to date.
53
53
 
54
- If you want, I can open a PR with these notes and the changelog stub targeting a beta branch I create next.
54
+ These notes should be kept in sync with README and CHANGELOG updates for each release.
package/README.md CHANGED
@@ -307,12 +307,14 @@ Reliability and rate-limiting:
307
307
 
308
308
  These controls keep API usage smooth and predictable while preserving per-device control when needed.
309
309
 
310
- ## What's new in the v4 beta (summary)
310
+ ## What's new with node-switchbot v4.0.0
311
311
 
312
312
  - Matter-first: when Homebridge Matter is available the plugin now prefers registering Matter accessories (with HAP fallback).
313
- - Hybrid client: the plugin dynamically imports `node-switchbot@4` if available and falls back to OpenAPI when `openApiToken` is configured.
313
+ - Hybrid client: the plugin uses `node-switchbot@^4.0.0` with BLE + OpenAPI discovery and OpenAPI fallback.
314
+ - OpenAPI credentials: cloud discovery and cloud fallback paths require both `openApiToken` and `openApiSecret`.
314
315
  - UI always served: the plugin UI is packaged into `dist/homebridge-ui` and is always served when Homebridge UI support is present; there is no platform-level opt-out.
315
316
  - OpenAPI hardening: OpenAPI calls have AbortController timeouts, jittered exponential backoff, per-device retry limits and cooldowns, and safe response parsing for resilient behavior.
317
+ - v4 resilience enabled in discovery: plugin discovery enables retry, circuit-breaker, and connection-intelligence flags from `node-switchbot` v4.
316
318
 
317
319
  - Write coalescing (debounce): command writes to the same device are coalesced by default to avoid command floods. Configure with `writeDebounceMs` (milliseconds, default 100). Set to `0` to disable coalescing.
318
320
 
@@ -354,7 +356,7 @@ Example (excerpt):
354
356
  ```
355
357
 
356
358
  - Notes:
357
- - Added Lock Ultra (Cloud + BLE) support (requires `node-switchbot` v3.6.3).
359
+ - Added Lock Ultra (Cloud + BLE) support with `node-switchbot` v4.
358
360
 
359
361
  ## Community
360
362
 
@@ -94,21 +94,21 @@ export const DEVICE_TYPES = {
94
94
  'Other Devices': ['AI Art Frame', 'Bot', 'Home Climate Panel', 'Remote', 'remote with screen'],
95
95
  };
96
96
  export const DEVICE_TYPE_NORMALIZATION_MAP = {
97
- // --- node-switchbot beta new types normalization additions ---
97
+ // --- node-switchbot v4 normalization additions ---
98
98
  'hub mini': 'Hub Mini',
99
99
  'hub 3': 'Hub 3',
100
- 'keypad': 'Keypad', // node-switchbot beta
100
+ 'keypad': 'Keypad',
101
101
  'plug mini': 'Plug Mini (US)', // fallback to US if region not specified
102
102
  'art frame': 'AI Art Frame',
103
103
  'rgbicww': 'RGBICWW Strip Light',
104
104
  'lock vision': 'Lock Vision Pro', // alias for new lock vision
105
105
  'lock pro': 'Smart Lock Pro',
106
- 'lock lite': 'Lock Lite', // node-switchbot beta
107
- 'circulator fan': 'Circulator Fan', // node-switchbot beta
106
+ 'lock lite': 'Lock Lite',
107
+ 'circulator fan': 'Circulator Fan',
108
108
  'smart thermostat radiator': 'Smart Radiator Thermostat',
109
109
  'climate panel': 'Home Climate Panel',
110
110
  'evaporative humidifier': 'Humidifier',
111
- // --- end node-switchbot beta additions ---
111
+ // --- end node-switchbot v4 additions ---
112
112
  // Only keep the last occurrence for each key, all values canonical
113
113
  'air purifier pm2.5': 'Air Purifier PM2.5',
114
114
  'pan/tilt cam plus 3k': 'Pan/Tilt Cam Plus 3K',
@@ -146,7 +146,7 @@ export const DEVICE_TYPE_NORMALIZATION_MAP = {
146
146
  'rgbicww floor lamp': 'RGBICWW Floor Lamp',
147
147
  'rgbicww strip light': 'RGBICWW Strip Light',
148
148
  'strip light': 'Strip Light',
149
- 'strip light 3': 'Strip Light 3', // node-switchbot beta
149
+ 'strip light 3': 'Strip Light 3',
150
150
  // Vacuum conversions
151
151
  'robot vacuum cleaner s1': 'Robot Vacuum Cleaner S1',
152
152
  'robot vacuum cleaner s1 plus': 'Robot Vacuum Cleaner S1 Plus',
@@ -178,7 +178,7 @@ export const DEVICE_TYPE_NORMALIZATION_MAP = {
178
178
  'plug mini us': 'Plug Mini (US)',
179
179
  // Migration mappings for invalid/legacy device types
180
180
  'lock vision pro': 'Lock Vision Pro', // Valid alias; map to canonical
181
- // 'lock vision': 'Keypad Vision', // Invalid type (removed, now node-switchbot beta alias above)
181
+ // 'lock vision': 'Keypad Vision', // Invalid type (removed, now alias above)
182
182
  'lock touch': 'Keypad Touch', // Invalid type
183
183
  // Additional normalization for new/unknown types from logs
184
184
  'woplugus': 'Plug Mini (US)',
@@ -1 +1 @@
1
- {"version":3,"file":"device-types.js","sourceRoot":"","sources":["../src/device-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"device-types.js","sourceRoot":"","sources":["../src/device-types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,kBAAkB,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,CAAC;IACzE,gBAAgB,EAAE;QAChB,QAAQ;QACR,cAAc;QACd,eAAe;QACf,mBAAmB;QACnB,iBAAiB;QACjB,WAAW;QACX,YAAY;QACZ,gBAAgB;QAChB,kBAAkB;QAClB,gBAAgB;KACjB;IACD,SAAS,EAAE,CAAC,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,CAAC;IACnF,UAAU,EAAE;QACV,oBAAoB;QACpB,eAAe;QACf,mBAAmB;QACnB,YAAY;QACZ,YAAY;QACZ,uBAAuB;QACvB,4BAA4B;QAC5B,oBAAoB;QACpB,qBAAqB;QACrB,aAAa;QACb,eAAe;KAChB;IACD,iBAAiB,EAAE;QACjB,oBAAoB;QACpB,0BAA0B;QAC1B,kBAAkB;QAClB,wBAAwB;QACxB,wBAAwB;QACxB,gBAAgB;QAChB,YAAY;QACZ,aAAa;QACb,OAAO;QACP,WAAW;QACX,YAAY;QACZ,UAAU;QACV,WAAW;QACX,eAAe;QACf,iBAAiB;QACjB,2BAA2B;QAC3B,yBAAyB;QACzB,YAAY;KACb;IACD,kBAAkB,EAAE;QAClB,oBAAoB;QACpB,MAAM;QACN,gBAAgB;QAChB,gBAAgB;QAChB,gBAAgB;QAChB,gBAAgB;QAChB,kBAAkB;QAClB,kBAAkB;KACnB;IACD,eAAe,EAAE;QACf,MAAM;QACN,UAAU;QACV,qCAAqC;QACrC,2BAA2B;QAC3B,mCAAmC;QACnC,yBAAyB;QACzB,8BAA8B;QAC9B,0BAA0B;QAC1B,0BAA0B;KAC3B;IACD,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC;IACnE,SAAS,EAAE;QACT,YAAY;QACZ,cAAc;QACd,iBAAiB;QACjB,sBAAsB;QACtB,sBAAsB;KACvB;IACD,YAAY,EAAE;QACZ,iBAAiB;QACjB,cAAc;QACd,QAAQ;QACR,KAAK;QACL,KAAK;QACL,OAAO;QACP,QAAQ;QACR,WAAW;QACX,aAAa;QACb,SAAS;QACT,UAAU;QACV,IAAI;QACJ,gBAAgB;QAChB,cAAc;KACf;IACD,eAAe,EAAE,CAAC,cAAc,EAAE,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,oBAAoB,CAAC;CACtF,CAAA;AAEV,MAAM,CAAC,MAAM,6BAA6B,GAA2B;IACnE,oDAAoD;IACpD,UAAU,EAAE,UAAU;IACtB,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EAAE,gBAAgB,EAAE,yCAAyC;IACxE,WAAW,EAAE,cAAc;IAC3B,SAAS,EAAE,qBAAqB;IAChC,aAAa,EAAE,iBAAiB,EAAE,4BAA4B;IAC9D,UAAU,EAAE,gBAAgB;IAC5B,WAAW,EAAE,WAAW;IACxB,gBAAgB,EAAE,gBAAgB;IAClC,2BAA2B,EAAE,2BAA2B;IACxD,eAAe,EAAE,oBAAoB;IACrC,wBAAwB,EAAE,YAAY;IACtC,0CAA0C;IAC1C,mEAAmE;IACnE,oBAAoB,EAAE,oBAAoB;IAC1C,sBAAsB,EAAE,sBAAsB;IAC9C,oBAAoB,EAAE,oBAAoB;IAC1C,QAAQ,EAAE,QAAQ;IAClB,gBAAgB,EAAE,gBAAgB;IAClC,gBAAgB,EAAE,gBAAgB;IAClC,2BAA2B,EAAE,2BAA2B;IACxD,YAAY,EAAE,YAAY;IAC1B,oBAAoB,EAAE,oBAAoB;IAC1C,0BAA0B,EAAE,0BAA0B;IACtD,kBAAkB,EAAE,kBAAkB;IACtC,wBAAwB,EAAE,wBAAwB;IAClD,gBAAgB,EAAE,gBAAgB;IAClC,4EAA4E;IAE5E,8BAA8B;IAC9B,aAAa,EAAE,aAAa;IAC5B,wBAAwB,EAAE,wBAAwB;IAClD,yBAAyB,EAAE,yBAAyB;IAEpD,0BAA0B;IAC1B,YAAY,EAAE,YAAY;IAC1B,gBAAgB,EAAE,gBAAgB;IAClC,kBAAkB,EAAE,kBAAkB;IACtC,cAAc,EAAE,cAAc;IAC9B,eAAe,EAAE,eAAe;IAChC,mBAAmB,EAAE,mBAAmB;IAExC,oBAAoB;IACpB,YAAY,EAAE,YAAY;IAC1B,eAAe,EAAE,eAAe;IAChC,mBAAmB,EAAE,mBAAmB;IACxC,oBAAoB,EAAE,oBAAoB;IAC1C,YAAY,EAAE,YAAY;IAC1B,uBAAuB,EAAE,uBAAuB;IAChD,4BAA4B,EAAE,4BAA4B;IAC1D,oBAAoB,EAAE,oBAAoB;IAC1C,qBAAqB,EAAE,qBAAqB;IAC5C,aAAa,EAAE,aAAa;IAC5B,eAAe,EAAE,eAAe;IAEhC,qBAAqB;IACrB,yBAAyB,EAAE,yBAAyB;IACpD,8BAA8B,EAAE,8BAA8B;IAC9D,0BAA0B,EAAE,0BAA0B;IACtD,0BAA0B,EAAE,0BAA0B;IACtD,qCAAqC,EAAE,qCAAqC;IAC5E,2BAA2B,EAAE,2BAA2B;IACxD,mCAAmC,EAAE,mCAAmC;IAExE,6DAA6D;IAC7D,gBAAgB,EAAE,gBAAgB;IAClC,YAAY,EAAE,YAAY;IAC1B,cAAc,EAAE,cAAc;IAC9B,UAAU,EAAE,UAAU;IACtB,OAAO,EAAE,OAAO;IAChB,WAAW,EAAE,WAAW;IACxB,UAAU,EAAE,UAAU;IACtB,eAAe,EAAE,eAAe;IAChC,cAAc,EAAE,cAAc;IAC9B,MAAM,EAAE,MAAM;IACd,6BAA6B,EAAE,6BAA6B;IAE5D,8EAA8E;IAC9E,WAAW,EAAE,WAAW;IACxB,iBAAiB,EAAE,iBAAiB;IACpC,YAAY,EAAE,YAAY;IAC1B,mBAAmB,EAAE,kBAAkB;IACvC,mBAAmB,EAAE,kBAAkB;IACvC,cAAc,EAAE,gBAAgB;IAChC,cAAc,EAAE,gBAAgB;IAChC,cAAc,EAAE,gBAAgB;IAEhC,qDAAqD;IACrD,iBAAiB,EAAE,iBAAiB,EAAE,gCAAgC;IACtE,6EAA6E;IAC7E,YAAY,EAAE,cAAc,EAAE,eAAe;IAE7C,2DAA2D;IAC3D,UAAU,EAAE,gBAAgB;IAC5B,0DAA0D;IAC1D,0DAA0D;IAC1D,qDAAqD;IACrD,wCAAwC;IACxC,oEAAoE;IACpE,oFAAoF;IACpF,oEAAoE;IACpE,wEAAwE;IACxE,oEAAoE;IACpE,4CAA4C;IAC5C,uEAAuE;IACvE,iDAAiD;CAClD,CAAA;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAA;IACpC,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QACnD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAqC;IACvE,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAA;IACjC,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IAEvC,yBAAyB;IACzB,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAA;IACxC,IAAI,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,0BAA0B;IAC1B,MAAM,UAAU,GAAG,6BAA6B,CAAC,SAAS,CAAC,CAAA;IAC3D,IAAI,UAAU,IAAI,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7C,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,yBAAyB;IACzB,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAqC;IACrE,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QAClD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAA;IACxC,OAAO,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAA;AAC1C,CAAC"}
@@ -1,5 +1,5 @@
1
- import type { DeviceType, SwitchBotPluginConfig } from './settings.js';
2
1
  import type { Logger } from 'homebridge';
2
+ import type { DeviceType, SwitchBotPluginConfig } from './settings.js';
3
3
  export interface DeviceOptions {
4
4
  id: string;
5
5
  type: DeviceType;
@@ -1 +1 @@
1
- {"version":3,"file":"deviceFactory.d.ts","sourceRoot":"","sources":["../src/deviceFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAmCxC,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAqGD,wBAAsB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,qBAAqB,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM;;2BAuDtG,GAAG;;GAGhB"}
1
+ {"version":3,"file":"deviceFactory.d.ts","sourceRoot":"","sources":["../src/deviceFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,OAAO,KAAK,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAmCtE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAqGD,wBAAsB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,qBAAqB,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM;;2BAuDtG,GAAG;;GAGhB"}
@@ -11,12 +11,12 @@ const DEVICE_CLASS_MAP = {
11
11
  'lightstrip': LightStripDevice,
12
12
  'motion': MotionSensorDevice,
13
13
  'contact': ContactSensorDevice,
14
- 'vacuum': VacuumDevice, // node-switchbot beta
14
+ 'vacuum': VacuumDevice,
15
15
  // Canonical, normalized device type keys (lowercase, mapped to device classes)
16
16
  'video doorbell': GenericDevice,
17
- 'smart radiator thermostat': GenericDevice, // node-switchbot beta
17
+ 'smart radiator thermostat': GenericDevice,
18
18
  'woiosensor': GenericDevice,
19
- 'garage door opener': GenericDevice, // node-switchbot beta
19
+ 'garage door opener': GenericDevice,
20
20
  'air purifier table pm2.5': GenericDevice,
21
21
  'air purifier voc': GenericDevice,
22
22
  'air purifier table voc': GenericDevice,
@@ -25,9 +25,9 @@ const DEVICE_CLASS_MAP = {
25
25
  'meterpro(co2)': MeterDevice,
26
26
  'walletfinder': WalletFinderDevice,
27
27
  'plug': PlugDevice,
28
- 'plug mini (eu)': PlugMiniDevice, // node-switchbot beta
29
- 'plug mini (jp)': PlugMiniDevice, // node-switchbot beta
30
- 'plug mini (us)': PlugMiniDevice, // node-switchbot beta
28
+ 'plug mini (eu)': PlugMiniDevice,
29
+ 'plug mini (jp)': PlugMiniDevice,
30
+ 'plug mini (us)': PlugMiniDevice,
31
31
  'relay switch 1pm': RelaySwitch1PMDevice,
32
32
  'relay switch 2pm': RelaySwitch1PMDevice,
33
33
  'k10+ pro': WoSweeperDevice,
@@ -37,26 +37,26 @@ const DEVICE_CLASS_MAP = {
37
37
  'ai hub': GenericDevice,
38
38
  'hub': GenericDevice,
39
39
  'hub 2': Hub2Device,
40
- 'hub 3': GenericDevice, // node-switchbot beta
41
- 'hub mini': GenericDevice, // node-switchbot beta
40
+ 'hub 3': GenericDevice,
41
+ 'hub mini': GenericDevice,
42
42
  'hub plus': GenericDevice,
43
43
  'indoor cam': GenericDevice,
44
44
  'pan/tilt cam': GenericDevice,
45
45
  'pan/tilt cam 2k': GenericDevice,
46
46
  'pan/tilt cam plus 2k': GenericDevice,
47
47
  'pan/tilt cam plus 3k': GenericDevice,
48
- 'humidifier': HumidifierDevice, // node-switchbot beta (Evaporative Humidifier)
49
- 'roller shade': RollerShadeDevice, // node-switchbot beta
50
- 'strip light 3': StripLightDevice, // node-switchbot beta
51
- 'circulator fan': FanDevice, // node-switchbot beta
52
- 'smart lock pro': LockDevice, // node-switchbot beta
53
- 'lock lite': LockDevice, // node-switchbot beta
54
- 'keypad': LockDevice, // node-switchbot beta
55
- 'lock vision pro': LockDevice, // node-switchbot beta
56
- 'floor lamp': LightDevice, // node-switchbot beta
57
- 'rgbicww floor lamp': LightStripDevice, // node-switchbot beta
58
- 'rgbicww strip light': LightStripDevice, // node-switchbot beta
59
- 'home climate panel': GenericDevice, // node-switchbot beta (Climate Panel)
48
+ 'humidifier': HumidifierDevice, // Includes evaporative humidifier mapping
49
+ 'roller shade': RollerShadeDevice,
50
+ 'strip light 3': StripLightDevice,
51
+ 'circulator fan': FanDevice,
52
+ 'smart lock pro': LockDevice,
53
+ 'lock lite': LockDevice,
54
+ 'keypad': LockDevice,
55
+ 'lock vision pro': LockDevice,
56
+ 'floor lamp': LightDevice,
57
+ 'rgbicww floor lamp': LightStripDevice,
58
+ 'rgbicww strip light': LightStripDevice,
59
+ 'home climate panel': GenericDevice, // Climate panel family
60
60
  'lock': LockDevice,
61
61
  'humidifier2': HumidifierDevice,
62
62
  'temperature': TemperatureSensorDevice,
@@ -1 +1 @@
1
- {"version":3,"file":"deviceFactory.js","sourceRoot":"","sources":["../src/deviceFactory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deviceFactory.js","sourceRoot":"","sources":["../src/deviceFactory.ts"],"names":[],"mappings":"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"}