@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.
- package/.github/workflows/release.yml +63 -15
- package/.github/workflows/stale.yml +2 -4
- package/CHANGELOG.md +21 -29
- package/MIGRATION.md +6 -6
- package/README.md +5 -3
- package/dist/device-types.js +7 -7
- package/dist/device-types.js.map +1 -1
- package/dist/deviceFactory.d.ts +1 -1
- package/dist/deviceFactory.d.ts.map +1 -1
- package/dist/deviceFactory.js +20 -20
- package/dist/deviceFactory.js.map +1 -1
- package/dist/homebridge-ui/device-types.js +246 -0
- package/dist/homebridge-ui/device-types.js.map +1 -0
- package/dist/homebridge-ui/deviceCommandMapper.js +319 -0
- package/dist/homebridge-ui/deviceCommandMapper.js.map +1 -0
- package/dist/homebridge-ui/endpoints/discovery.d.ts.map +1 -1
- package/dist/homebridge-ui/endpoints/discovery.js +5 -1
- package/dist/homebridge-ui/endpoints/discovery.js.map +1 -1
- package/dist/homebridge-ui/errors.js +32 -0
- package/dist/homebridge-ui/errors.js.map +1 -0
- package/dist/homebridge-ui/homebridge-ui/endpoints/config.js +90 -0
- package/dist/homebridge-ui/homebridge-ui/endpoints/config.js.map +1 -0
- package/dist/homebridge-ui/homebridge-ui/endpoints/devices.js +144 -0
- package/dist/homebridge-ui/homebridge-ui/endpoints/devices.js.map +1 -0
- package/dist/homebridge-ui/homebridge-ui/endpoints/discovery.js +219 -0
- package/dist/homebridge-ui/homebridge-ui/endpoints/discovery.js.map +1 -0
- package/dist/homebridge-ui/homebridge-ui/server.js +11 -0
- package/dist/homebridge-ui/homebridge-ui/server.js.map +1 -0
- package/dist/homebridge-ui/homebridge-ui/utils/config-parser.js +108 -0
- package/dist/homebridge-ui/homebridge-ui/utils/config-parser.js.map +1 -0
- package/dist/homebridge-ui/homebridge-ui/utils/device-migration.js +111 -0
- package/dist/homebridge-ui/homebridge-ui/utils/device-migration.js.map +1 -0
- package/dist/homebridge-ui/homebridge-ui/utils/logger.js +17 -0
- package/dist/homebridge-ui/homebridge-ui/utils/logger.js.map +1 -0
- package/dist/homebridge-ui/public/js/app.js +5 -9
- package/dist/homebridge-ui/public/js/app.js.map +2 -2
- package/dist/homebridge-ui/settings.js +8 -0
- package/dist/homebridge-ui/settings.js.map +1 -0
- package/dist/homebridge-ui/switchbotClient.js +247 -0
- package/dist/homebridge-ui/switchbotClient.js.map +1 -0
- package/dist/switchbotClient.d.ts +7 -1
- package/dist/switchbotClient.d.ts.map +1 -1
- package/dist/switchbotClient.js +82 -10
- package/dist/switchbotClient.js.map +1 -1
- package/docs/assets/main.js +1 -1
- package/docs/index.html +10 -4
- package/docs/variables/default.html +1 -1
- package/eslint.config.js +9 -10
- package/package.json +25 -23
- package/src/device-types.js +246 -0
- package/src/device-types.js.map +1 -0
- package/src/device-types.ts +7 -7
- package/src/deviceCommandMapper.js +319 -0
- package/src/deviceCommandMapper.js.map +1 -0
- package/src/deviceFactory.ts +22 -21
- package/src/errors.js +32 -0
- package/src/errors.js.map +1 -0
- package/src/homebridge-ui/endpoints/discovery.ts +5 -1
- package/src/settings.js +8 -0
- package/src/settings.js.map +1 -0
- package/src/switchbotClient.js +247 -0
- package/src/switchbotClient.js.map +1 -0
- package/src/switchbotClient.ts +95 -10
- package/test/client/switchbotClient.spec.ts +42 -1
- package/test/e2e/run-e2e.spec.ts +1 -0
- package/tsconfig.ui.json +11 -0
- package/.github/workflows/beta-release.yml +0 -52
|
@@ -1,30 +1,77 @@
|
|
|
1
|
-
name:
|
|
1
|
+
name: Release
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
5
5
|
branches:
|
|
6
|
-
|
|
7
|
-
|
|
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
|
|
97
|
+
# 5️⃣ Notify if any stable-release job fails
|
|
51
98
|
workflow-failure:
|
|
52
|
-
if:
|
|
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
|
-
|
|
62
|
-
name:
|
|
63
|
-
|
|
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:
|
|
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
|
|
6
|
+
- cron: '45 7 * * *'
|
|
7
7
|
|
|
8
8
|
jobs:
|
|
9
9
|
stale:
|
|
10
|
-
uses:
|
|
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
|
-
## [
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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 →
|
|
1
|
+
# Migration notes — v4.3.x → v5.x
|
|
2
2
|
|
|
3
|
-
This document highlights important changes and recommended actions before upgrading to the
|
|
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) —
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
359
|
+
- Added Lock Ultra (Cloud + BLE) support with `node-switchbot` v4.
|
|
358
360
|
|
|
359
361
|
## Community
|
|
360
362
|
|
package/dist/device-types.js
CHANGED
|
@@ -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
|
|
97
|
+
// --- node-switchbot v4 normalization additions ---
|
|
98
98
|
'hub mini': 'Hub Mini',
|
|
99
99
|
'hub 3': 'Hub 3',
|
|
100
|
-
'keypad': 'Keypad',
|
|
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',
|
|
107
|
-
'circulator fan': 'Circulator Fan',
|
|
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
|
|
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',
|
|
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
|
|
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)',
|
package/dist/device-types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,
|
|
1
|
+
{"version":3,"file":"device-types.js","sourceRoot":"","sources":["../src/device-types.ts"],"names":[],"mappings":"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"}
|
package/dist/deviceFactory.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deviceFactory.d.ts","sourceRoot":"","sources":["../src/deviceFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
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"}
|
package/dist/deviceFactory.js
CHANGED
|
@@ -11,12 +11,12 @@ const DEVICE_CLASS_MAP = {
|
|
|
11
11
|
'lightstrip': LightStripDevice,
|
|
12
12
|
'motion': MotionSensorDevice,
|
|
13
13
|
'contact': ContactSensorDevice,
|
|
14
|
-
'vacuum': VacuumDevice,
|
|
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,
|
|
17
|
+
'smart radiator thermostat': GenericDevice,
|
|
18
18
|
'woiosensor': GenericDevice,
|
|
19
|
-
'garage door opener': GenericDevice,
|
|
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,
|
|
29
|
-
'plug mini (jp)': PlugMiniDevice,
|
|
30
|
-
'plug mini (us)': PlugMiniDevice,
|
|
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,
|
|
41
|
-
'hub mini': GenericDevice,
|
|
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, //
|
|
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, //
|
|
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":"
|
|
1
|
+
{"version":3,"file":"deviceFactory.js","sourceRoot":"","sources":["../src/deviceFactory.ts"],"names":[],"mappings":"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"}
|