@switchbot/homebridge-switchbot 5.0.0-beta.11 → 5.0.0-beta.111
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/ISSUE_TEMPLATE/e2e-verification.md +36 -0
- package/.github/copilot-instructions.md +39 -0
- package/.github/workflows/ci.yml +32 -0
- package/.github/workflows/manual-e2e.yml +115 -0
- package/.github/workflows/release.yml +0 -4
- package/CHANGELOG.md +35 -0
- package/E2E-VERIFICATION.md +121 -0
- package/MIGRATION.md +44 -0
- package/README.md +56 -3
- package/config.schema.json +170 -14787
- package/dist/device-types.d.ts +31 -0
- package/dist/device-types.d.ts.map +1 -0
- package/dist/device-types.js +216 -0
- package/dist/device-types.js.map +1 -0
- package/dist/deviceFactory.d.ts +13 -0
- package/dist/deviceFactory.d.ts.map +1 -0
- package/dist/deviceFactory.js +120 -0
- package/dist/deviceFactory.js.map +1 -0
- package/dist/devices/deviceBase.d.ts +50 -0
- package/dist/devices/deviceBase.d.ts.map +1 -0
- package/dist/devices/deviceBase.js +119 -0
- package/dist/devices/deviceBase.js.map +1 -0
- package/dist/devices/genericDevice.d.ts +298 -0
- package/dist/devices/genericDevice.d.ts.map +1 -0
- package/dist/devices/genericDevice.js +1067 -0
- package/dist/devices/genericDevice.js.map +1 -0
- package/dist/homebridge-ui/endpoints/config.d.ts +3 -0
- package/dist/homebridge-ui/endpoints/config.d.ts.map +1 -0
- package/dist/homebridge-ui/endpoints/config.js +104 -0
- package/dist/homebridge-ui/endpoints/config.js.map +1 -0
- package/dist/homebridge-ui/endpoints/credentials.d.ts +6 -0
- package/dist/homebridge-ui/endpoints/credentials.d.ts.map +1 -0
- package/dist/homebridge-ui/endpoints/credentials.js +65 -0
- package/dist/homebridge-ui/endpoints/credentials.js.map +1 -0
- package/dist/homebridge-ui/endpoints/devices.d.ts +6 -0
- package/dist/homebridge-ui/endpoints/devices.d.ts.map +1 -0
- package/dist/homebridge-ui/endpoints/devices.js +351 -0
- package/dist/homebridge-ui/endpoints/devices.js.map +1 -0
- package/dist/homebridge-ui/endpoints/discovery.d.ts +7 -0
- package/dist/homebridge-ui/endpoints/discovery.d.ts.map +1 -0
- package/dist/homebridge-ui/endpoints/discovery.js +171 -0
- package/dist/homebridge-ui/endpoints/discovery.js.map +1 -0
- package/dist/homebridge-ui/public/css/styles.css +254 -0
- package/dist/homebridge-ui/public/index.html +112 -247
- package/dist/homebridge-ui/public/js/api.d.ts +23 -0
- package/dist/homebridge-ui/public/js/api.d.ts.map +1 -0
- package/dist/homebridge-ui/public/js/api.js +188 -0
- package/dist/homebridge-ui/public/js/api.js.map +1 -0
- package/dist/homebridge-ui/public/js/api.ts +215 -0
- package/dist/homebridge-ui/public/js/app.d.ts +2 -0
- package/dist/homebridge-ui/public/js/app.d.ts.map +1 -0
- package/dist/homebridge-ui/public/js/app.js +1815 -0
- package/dist/homebridge-ui/public/js/app.js.map +7 -0
- package/dist/homebridge-ui/public/js/app.ts +22 -0
- package/dist/homebridge-ui/public/js/constants.d.ts +2 -0
- package/dist/homebridge-ui/public/js/constants.d.ts.map +1 -0
- package/dist/homebridge-ui/public/js/constants.js +2 -0
- package/dist/homebridge-ui/public/js/constants.js.map +1 -0
- package/dist/homebridge-ui/public/js/constants.ts +1 -0
- package/dist/homebridge-ui/public/js/credentials.d.ts +3 -0
- package/dist/homebridge-ui/public/js/credentials.d.ts.map +1 -0
- package/dist/homebridge-ui/public/js/credentials.js +96 -0
- package/dist/homebridge-ui/public/js/credentials.js.map +1 -0
- package/dist/homebridge-ui/public/js/credentials.ts +100 -0
- package/dist/homebridge-ui/public/js/devices-delete.d.ts +3 -0
- package/dist/homebridge-ui/public/js/devices-delete.d.ts.map +1 -0
- package/dist/homebridge-ui/public/js/devices-delete.js +206 -0
- package/dist/homebridge-ui/public/js/devices-delete.js.map +1 -0
- package/dist/homebridge-ui/public/js/devices-delete.ts +236 -0
- package/dist/homebridge-ui/public/js/devices.d.ts +9 -0
- package/dist/homebridge-ui/public/js/devices.d.ts.map +1 -0
- package/dist/homebridge-ui/public/js/devices.js +90 -0
- package/dist/homebridge-ui/public/js/devices.js.map +1 -0
- package/dist/homebridge-ui/public/js/devices.ts +98 -0
- package/dist/homebridge-ui/public/js/discovery.d.ts +3 -0
- package/dist/homebridge-ui/public/js/discovery.d.ts.map +1 -0
- package/dist/homebridge-ui/public/js/discovery.js +244 -0
- package/dist/homebridge-ui/public/js/discovery.js.map +1 -0
- package/dist/homebridge-ui/public/js/discovery.ts +290 -0
- package/dist/homebridge-ui/public/js/logger.d.ts +6 -0
- package/dist/homebridge-ui/public/js/logger.d.ts.map +1 -0
- package/dist/homebridge-ui/public/js/logger.js +12 -0
- package/dist/homebridge-ui/public/js/logger.js.map +1 -0
- package/dist/homebridge-ui/public/js/logger.ts +11 -0
- package/dist/homebridge-ui/public/js/modal.d.ts +5 -0
- package/dist/homebridge-ui/public/js/modal.d.ts.map +1 -0
- package/dist/homebridge-ui/public/js/modal.js +26 -0
- package/dist/homebridge-ui/public/js/modal.js.map +1 -0
- package/dist/homebridge-ui/public/js/modal.ts +28 -0
- package/dist/homebridge-ui/public/js/modals.d.ts +7 -0
- package/dist/homebridge-ui/public/js/modals.d.ts.map +1 -0
- package/dist/homebridge-ui/public/js/modals.js +323 -0
- package/dist/homebridge-ui/public/js/modals.js.map +1 -0
- package/dist/homebridge-ui/public/js/modals.ts +367 -0
- package/dist/homebridge-ui/public/js/render.d.ts +65 -0
- package/dist/homebridge-ui/public/js/render.d.ts.map +1 -0
- package/dist/homebridge-ui/public/js/render.js +499 -0
- package/dist/homebridge-ui/public/js/render.js.map +1 -0
- package/dist/homebridge-ui/public/js/render.ts +579 -0
- package/dist/homebridge-ui/public/js/toast.d.ts +6 -0
- package/dist/homebridge-ui/public/js/toast.d.ts.map +1 -0
- package/dist/homebridge-ui/public/js/toast.js +29 -0
- package/dist/homebridge-ui/public/js/toast.js.map +1 -0
- package/dist/homebridge-ui/public/js/toast.ts +37 -0
- package/dist/homebridge-ui/public/js/types.d.ts +23 -0
- package/dist/homebridge-ui/public/js/types.d.ts.map +1 -0
- package/dist/homebridge-ui/public/js/types.js +2 -0
- package/dist/homebridge-ui/public/js/types.js.map +1 -0
- package/dist/homebridge-ui/public/js/types.ts +26 -0
- package/dist/homebridge-ui/server.js +11 -41
- package/dist/homebridge-ui/server.js.map +1 -1
- package/dist/homebridge-ui/utils/config-parser.d.ts +35 -0
- package/dist/homebridge-ui/utils/config-parser.d.ts.map +1 -0
- package/dist/homebridge-ui/utils/config-parser.js +87 -0
- package/dist/homebridge-ui/utils/config-parser.js.map +1 -0
- package/dist/homebridge-ui/utils/device-migration.d.ts +35 -0
- package/dist/homebridge-ui/utils/device-migration.d.ts.map +1 -0
- package/dist/homebridge-ui/utils/device-migration.js +111 -0
- package/dist/homebridge-ui/utils/device-migration.js.map +1 -0
- package/dist/homebridge-ui/utils/logger.d.ts +7 -0
- package/dist/homebridge-ui/utils/logger.d.ts.map +1 -0
- package/dist/homebridge-ui/utils/logger.js +17 -0
- package/dist/homebridge-ui/utils/logger.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -65
- package/dist/index.js.map +1 -1
- package/dist/platform.d.ts +35 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +1527 -0
- package/dist/platform.js.map +1 -0
- package/dist/settings.d.ts +10 -249
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +5 -30
- package/dist/settings.js.map +1 -1
- package/dist/switchbotClient.d.ts +32 -0
- package/dist/switchbotClient.d.ts.map +1 -0
- package/dist/switchbotClient.js +207 -0
- package/dist/switchbotClient.js.map +1 -0
- package/dist/utils.d.ts +39 -50
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +40 -688
- package/dist/utils.js.map +1 -1
- package/docs/assets/highlight.css +14 -0
- package/docs/assets/icons.js +1 -1
- package/docs/assets/icons.svg +1 -1
- package/docs/assets/main.js +2 -2
- package/docs/assets/style.css +3 -3
- package/docs/index.html +77 -13
- package/docs/variables/default.html +1 -1
- package/eslint.config.js +7 -8
- package/nodemon.json +2 -2
- package/package.json +35 -32
- package/scripts/build-ui.js +36 -0
- package/scripts/e2e/README.md +25 -0
- package/scripts/e2e/curtain-e2e.sh +70 -0
- package/scripts/e2e/fan-e2e.sh +75 -0
- package/scripts/e2e/light-advanced-e2e.sh +97 -0
- package/scripts/e2e/light-e2e.sh +75 -0
- package/scripts/e2e/list-accessories.sh +19 -0
- package/scripts/e2e/lock-e2e.sh +65 -0
- package/scripts/free-dev-ports.mjs +105 -0
- package/scripts/generate-matter-maps.js +60 -0
- package/scripts/run-e2e-local.sh +14 -0
- package/scripts/sync-device-types.mjs +28 -0
- package/src/device-types.ts +230 -0
- package/src/deviceFactory.ts +163 -0
- package/src/devices/deviceBase.ts +141 -0
- package/src/devices/genericDevice.ts +998 -0
- package/src/homebridge-ui/endpoints/config.ts +123 -0
- package/src/homebridge-ui/endpoints/credentials.ts +74 -0
- package/src/homebridge-ui/endpoints/devices.ts +383 -0
- package/src/homebridge-ui/endpoints/discovery.ts +191 -0
- package/src/homebridge-ui/public/css/styles.css +254 -0
- package/src/homebridge-ui/public/index.html +112 -247
- package/src/homebridge-ui/public/js/api.ts +215 -0
- package/src/homebridge-ui/public/js/app.ts +22 -0
- package/src/homebridge-ui/public/js/constants.ts +1 -0
- package/src/homebridge-ui/public/js/credentials.ts +100 -0
- package/src/homebridge-ui/public/js/devices-delete.ts +236 -0
- package/src/homebridge-ui/public/js/devices.ts +98 -0
- package/src/homebridge-ui/public/js/discovery.ts +290 -0
- package/src/homebridge-ui/public/js/logger.ts +11 -0
- package/src/homebridge-ui/public/js/modal.ts +28 -0
- package/src/homebridge-ui/public/js/modals.ts +367 -0
- package/src/homebridge-ui/public/js/render.ts +579 -0
- package/src/homebridge-ui/public/js/toast.ts +37 -0
- package/src/homebridge-ui/public/js/types.ts +26 -0
- package/src/homebridge-ui/server.ts +11 -43
- package/src/homebridge-ui/utils/config-parser.ts +108 -0
- package/src/homebridge-ui/utils/device-migration.ts +144 -0
- package/src/homebridge-ui/utils/logger.ts +17 -0
- package/src/index.ts +4 -66
- package/src/platform.ts +1539 -0
- package/src/settings.ts +12 -277
- package/src/switchbotClient.ts +216 -0
- package/src/utils.ts +46 -713
- package/switchbot-homebridge-switchbot-5.0.0.tgz +0 -0
- package/test/accessory-restore.spec.ts +73 -0
- package/test/device-mapping.spec.ts +37 -0
- package/test/deviceFactory.spec.ts +18 -0
- package/test/e2e/run-e2e.spec.ts +50 -0
- package/test/fan-swing.spec.ts +29 -0
- package/test/helpers/matter-harness.ts +53 -0
- package/test/lock-users.spec.ts +44 -0
- package/test/matter-childbridge.spec.ts +59 -0
- package/test/matter-descriptors.spec.ts +97 -0
- package/test/matter-device-state.spec.ts +101 -0
- package/test/matter-integration.spec.ts +111 -0
- package/test/platform.integration.spec.ts +55 -0
- package/test/switchbot-client-debounce.spec.ts +131 -0
- package/test/switchbot-client-openapi.spec.ts +56 -0
- package/test/switchbotClient.spec.ts +10 -0
- package/test/utils.spec.ts +36 -0
- package/todo/COMPLETED.md +229 -0
- package/todo/README.md +59 -0
- package/todo/TODO.md +176 -0
- package/todo/mockups/filtering-sorting.svg +112 -0
- package/todo/mockups/modal-switchbot-theme.svg +66 -0
- package/todo/mockups/signal-strength-visualization.svg +94 -0
- package/vitest.config.ts +7 -0
- package/coverage/base.css +0 -224
- package/coverage/block-navigation.js +0 -87
- package/coverage/clover.xml +0 -15847
- package/coverage/coverage-final.json +0 -42
- package/coverage/docs/assets/dmt/dmt-component-data.js.html +0 -85
- package/coverage/docs/assets/dmt/dmt-components.js.html +0 -286
- package/coverage/docs/assets/dmt/index.html +0 -131
- package/coverage/docs/assets/hierarchy.js.html +0 -85
- package/coverage/docs/assets/icons.js.html +0 -136
- package/coverage/docs/assets/index.html +0 -146
- package/coverage/docs/assets/main.js.html +0 -265
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +0 -191
- package/coverage/prettify.css +0 -1
- package/coverage/prettify.js +0 -2
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +0 -196
- package/coverage/src/device/blindtilt.ts.html +0 -3238
- package/coverage/src/device/bot.ts.html +0 -2803
- package/coverage/src/device/ceilinglight.ts.html +0 -2338
- package/coverage/src/device/colorbulb.ts.html +0 -2824
- package/coverage/src/device/contact.ts.html +0 -1465
- package/coverage/src/device/curtain.ts.html +0 -2869
- package/coverage/src/device/device.ts.html +0 -2500
- package/coverage/src/device/fan.ts.html +0 -2242
- package/coverage/src/device/hub.ts.html +0 -1408
- package/coverage/src/device/humidifier.ts.html +0 -2116
- package/coverage/src/device/index.html +0 -416
- package/coverage/src/device/iosensor.ts.html +0 -1375
- package/coverage/src/device/lightstrip.ts.html +0 -2617
- package/coverage/src/device/lock.ts.html +0 -1963
- package/coverage/src/device/meter.ts.html +0 -1372
- package/coverage/src/device/meterplus.ts.html +0 -1384
- package/coverage/src/device/meterpro.ts.html +0 -1618
- package/coverage/src/device/motion.ts.html +0 -1264
- package/coverage/src/device/plug.ts.html +0 -1372
- package/coverage/src/device/relayswitch.ts.html +0 -2284
- package/coverage/src/device/robotvacuumcleaner.ts.html +0 -1810
- package/coverage/src/device/waterdetector.ts.html +0 -1294
- package/coverage/src/homebridge-ui/index.html +0 -116
- package/coverage/src/homebridge-ui/server.ts.html +0 -229
- package/coverage/src/index.html +0 -161
- package/coverage/src/index.ts.html +0 -124
- package/coverage/src/irdevice/airconditioner.ts.html +0 -1687
- package/coverage/src/irdevice/airpurifier.ts.html +0 -844
- package/coverage/src/irdevice/camera.ts.html +0 -475
- package/coverage/src/irdevice/fan.ts.html +0 -766
- package/coverage/src/irdevice/index.html +0 -251
- package/coverage/src/irdevice/irdevice.ts.html +0 -1117
- package/coverage/src/irdevice/light.ts.html +0 -826
- package/coverage/src/irdevice/other.ts.html +0 -2458
- package/coverage/src/irdevice/tv.ts.html +0 -1222
- package/coverage/src/irdevice/vacuumcleaner.ts.html +0 -466
- package/coverage/src/irdevice/waterheater.ts.html +0 -469
- package/coverage/src/platform.ts.html +0 -8776
- package/coverage/src/settings.ts.html +0 -934
- package/coverage/src/utils.ts.html +0 -2092
- package/dist/devices-hap/airpurifier.d.ts +0 -54
- package/dist/devices-hap/airpurifier.d.ts.map +0 -1
- package/dist/devices-hap/airpurifier.js +0 -527
- package/dist/devices-hap/airpurifier.js.map +0 -1
- package/dist/devices-hap/blindtilt.d.ts +0 -90
- package/dist/devices-hap/blindtilt.d.ts.map +0 -1
- package/dist/devices-hap/blindtilt.js +0 -974
- package/dist/devices-hap/blindtilt.js.map +0 -1
- package/dist/devices-hap/bot.d.ts +0 -102
- package/dist/devices-hap/bot.d.ts.map +0 -1
- package/dist/devices-hap/bot.js +0 -811
- package/dist/devices-hap/bot.js.map +0 -1
- package/dist/devices-hap/ceilinglight.d.ts +0 -85
- package/dist/devices-hap/ceilinglight.d.ts.map +0 -1
- package/dist/devices-hap/ceilinglight.js +0 -701
- package/dist/devices-hap/ceilinglight.js.map +0 -1
- package/dist/devices-hap/colorbulb.d.ts +0 -88
- package/dist/devices-hap/colorbulb.d.ts.map +0 -1
- package/dist/devices-hap/colorbulb.js +0 -881
- package/dist/devices-hap/colorbulb.js.map +0 -1
- package/dist/devices-hap/contact.d.ts +0 -44
- package/dist/devices-hap/contact.d.ts.map +0 -1
- package/dist/devices-hap/contact.js +0 -409
- package/dist/devices-hap/contact.js.map +0 -1
- package/dist/devices-hap/curtain.d.ts +0 -73
- package/dist/devices-hap/curtain.d.ts.map +0 -1
- package/dist/devices-hap/curtain.js +0 -869
- package/dist/devices-hap/curtain.js.map +0 -1
- package/dist/devices-hap/device.d.ts +0 -98
- package/dist/devices-hap/device.d.ts.map +0 -1
- package/dist/devices-hap/device.js +0 -749
- package/dist/devices-hap/device.js.map +0 -1
- package/dist/devices-hap/fan.d.ts +0 -69
- package/dist/devices-hap/fan.d.ts.map +0 -1
- package/dist/devices-hap/fan.js +0 -649
- package/dist/devices-hap/fan.js.map +0 -1
- package/dist/devices-hap/hub.d.ts +0 -37
- package/dist/devices-hap/hub.d.ts.map +0 -1
- package/dist/devices-hap/hub.js +0 -392
- package/dist/devices-hap/hub.js.map +0 -1
- package/dist/devices-hap/humidifier.d.ts +0 -68
- package/dist/devices-hap/humidifier.d.ts.map +0 -1
- package/dist/devices-hap/humidifier.js +0 -628
- package/dist/devices-hap/humidifier.js.map +0 -1
- package/dist/devices-hap/iosensor.d.ts +0 -42
- package/dist/devices-hap/iosensor.d.ts.map +0 -1
- package/dist/devices-hap/iosensor.js +0 -382
- package/dist/devices-hap/iosensor.js.map +0 -1
- package/dist/devices-hap/lightstrip.d.ts +0 -79
- package/dist/devices-hap/lightstrip.d.ts.map +0 -1
- package/dist/devices-hap/lightstrip.js +0 -797
- package/dist/devices-hap/lightstrip.js.map +0 -1
- package/dist/devices-hap/lock.d.ts +0 -53
- package/dist/devices-hap/lock.d.ts.map +0 -1
- package/dist/devices-hap/lock.js +0 -561
- package/dist/devices-hap/lock.js.map +0 -1
- package/dist/devices-hap/meter.d.ts +0 -37
- package/dist/devices-hap/meter.d.ts.map +0 -1
- package/dist/devices-hap/meter.js +0 -379
- package/dist/devices-hap/meter.js.map +0 -1
- package/dist/devices-hap/meterplus.d.ts +0 -42
- package/dist/devices-hap/meterplus.d.ts.map +0 -1
- package/dist/devices-hap/meterplus.js +0 -384
- package/dist/devices-hap/meterplus.js.map +0 -1
- package/dist/devices-hap/meterpro.d.ts +0 -43
- package/dist/devices-hap/meterpro.d.ts.map +0 -1
- package/dist/devices-hap/meterpro.js +0 -468
- package/dist/devices-hap/meterpro.js.map +0 -1
- package/dist/devices-hap/motion.d.ts +0 -42
- package/dist/devices-hap/motion.d.ts.map +0 -1
- package/dist/devices-hap/motion.js +0 -345
- package/dist/devices-hap/motion.js.map +0 -1
- package/dist/devices-hap/plug.d.ts +0 -49
- package/dist/devices-hap/plug.d.ts.map +0 -1
- package/dist/devices-hap/plug.js +0 -395
- package/dist/devices-hap/plug.js.map +0 -1
- package/dist/devices-hap/relayswitch.d.ts +0 -96
- package/dist/devices-hap/relayswitch.d.ts.map +0 -1
- package/dist/devices-hap/relayswitch.js +0 -642
- package/dist/devices-hap/relayswitch.js.map +0 -1
- package/dist/devices-hap/robotvacuumcleaner.d.ts +0 -54
- package/dist/devices-hap/robotvacuumcleaner.d.ts.map +0 -1
- package/dist/devices-hap/robotvacuumcleaner.js +0 -523
- package/dist/devices-hap/robotvacuumcleaner.js.map +0 -1
- package/dist/devices-hap/waterdetector.d.ts +0 -41
- package/dist/devices-hap/waterdetector.d.ts.map +0 -1
- package/dist/devices-hap/waterdetector.js +0 -356
- package/dist/devices-hap/waterdetector.js.map +0 -1
- package/dist/devices-matter/BaseMatterAccessory.d.ts +0 -63
- package/dist/devices-matter/BaseMatterAccessory.d.ts.map +0 -1
- package/dist/devices-matter/BaseMatterAccessory.js +0 -100
- package/dist/devices-matter/BaseMatterAccessory.js.map +0 -1
- package/dist/devices-matter/ColorLightAccessory.d.ts +0 -20
- package/dist/devices-matter/ColorLightAccessory.d.ts.map +0 -1
- package/dist/devices-matter/ColorLightAccessory.js +0 -95
- package/dist/devices-matter/ColorLightAccessory.js.map +0 -1
- package/dist/devices-matter/ColorTemperatureLightAccessory.d.ts +0 -18
- package/dist/devices-matter/ColorTemperatureLightAccessory.d.ts.map +0 -1
- package/dist/devices-matter/ColorTemperatureLightAccessory.js +0 -78
- package/dist/devices-matter/ColorTemperatureLightAccessory.js.map +0 -1
- package/dist/devices-matter/ContactSensorAccessory.d.ts +0 -12
- package/dist/devices-matter/ContactSensorAccessory.d.ts.map +0 -1
- package/dist/devices-matter/ContactSensorAccessory.js +0 -34
- package/dist/devices-matter/ContactSensorAccessory.js.map +0 -1
- package/dist/devices-matter/DimmableLightAccessory.d.ts +0 -58
- package/dist/devices-matter/DimmableLightAccessory.d.ts.map +0 -1
- package/dist/devices-matter/DimmableLightAccessory.js +0 -167
- package/dist/devices-matter/DimmableLightAccessory.js.map +0 -1
- package/dist/devices-matter/DoorLockAccessory.d.ts +0 -14
- package/dist/devices-matter/DoorLockAccessory.d.ts.map +0 -1
- package/dist/devices-matter/DoorLockAccessory.js +0 -50
- package/dist/devices-matter/DoorLockAccessory.js.map +0 -1
- package/dist/devices-matter/ExtendedColorLightAccessory.d.ts +0 -21
- package/dist/devices-matter/ExtendedColorLightAccessory.d.ts.map +0 -1
- package/dist/devices-matter/ExtendedColorLightAccessory.js +0 -107
- package/dist/devices-matter/ExtendedColorLightAccessory.js.map +0 -1
- package/dist/devices-matter/FanAccessory.d.ts +0 -16
- package/dist/devices-matter/FanAccessory.d.ts.map +0 -1
- package/dist/devices-matter/FanAccessory.js +0 -81
- package/dist/devices-matter/FanAccessory.js.map +0 -1
- package/dist/devices-matter/HumiditySensorAccessory.d.ts +0 -12
- package/dist/devices-matter/HumiditySensorAccessory.d.ts.map +0 -1
- package/dist/devices-matter/HumiditySensorAccessory.js +0 -34
- package/dist/devices-matter/HumiditySensorAccessory.js.map +0 -1
- package/dist/devices-matter/LeakSensorAccessory.d.ts +0 -12
- package/dist/devices-matter/LeakSensorAccessory.d.ts.map +0 -1
- package/dist/devices-matter/LeakSensorAccessory.js +0 -33
- package/dist/devices-matter/LeakSensorAccessory.js.map +0 -1
- package/dist/devices-matter/LightSensorAccessory.d.ts +0 -12
- package/dist/devices-matter/LightSensorAccessory.d.ts.map +0 -1
- package/dist/devices-matter/LightSensorAccessory.js +0 -34
- package/dist/devices-matter/LightSensorAccessory.js.map +0 -1
- package/dist/devices-matter/OccupancySensorAccessory.d.ts +0 -12
- package/dist/devices-matter/OccupancySensorAccessory.d.ts.map +0 -1
- package/dist/devices-matter/OccupancySensorAccessory.js +0 -39
- package/dist/devices-matter/OccupancySensorAccessory.js.map +0 -1
- package/dist/devices-matter/OnOffLightAccessory.d.ts +0 -38
- package/dist/devices-matter/OnOffLightAccessory.d.ts.map +0 -1
- package/dist/devices-matter/OnOffLightAccessory.js +0 -118
- package/dist/devices-matter/OnOffLightAccessory.js.map +0 -1
- package/dist/devices-matter/OnOffOutletAccessory.d.ts +0 -12
- package/dist/devices-matter/OnOffOutletAccessory.d.ts.map +0 -1
- package/dist/devices-matter/OnOffOutletAccessory.js +0 -40
- package/dist/devices-matter/OnOffOutletAccessory.js.map +0 -1
- package/dist/devices-matter/OnOffSwitchAccessory.d.ts +0 -14
- package/dist/devices-matter/OnOffSwitchAccessory.d.ts.map +0 -1
- package/dist/devices-matter/OnOffSwitchAccessory.js +0 -42
- package/dist/devices-matter/OnOffSwitchAccessory.js.map +0 -1
- package/dist/devices-matter/RoboticVacuumAccessory.d.ts +0 -68
- package/dist/devices-matter/RoboticVacuumAccessory.d.ts.map +0 -1
- package/dist/devices-matter/RoboticVacuumAccessory.js +0 -334
- package/dist/devices-matter/RoboticVacuumAccessory.js.map +0 -1
- package/dist/devices-matter/SmokeCOAlarmAccessory.d.ts +0 -11
- package/dist/devices-matter/SmokeCOAlarmAccessory.d.ts.map +0 -1
- package/dist/devices-matter/SmokeCOAlarmAccessory.js +0 -49
- package/dist/devices-matter/SmokeCOAlarmAccessory.js.map +0 -1
- package/dist/devices-matter/TemperatureSensorAccessory.d.ts +0 -12
- package/dist/devices-matter/TemperatureSensorAccessory.d.ts.map +0 -1
- package/dist/devices-matter/TemperatureSensorAccessory.js +0 -36
- package/dist/devices-matter/TemperatureSensorAccessory.js.map +0 -1
- package/dist/devices-matter/ThermostatAccessory.d.ts +0 -19
- package/dist/devices-matter/ThermostatAccessory.d.ts.map +0 -1
- package/dist/devices-matter/ThermostatAccessory.js +0 -95
- package/dist/devices-matter/ThermostatAccessory.js.map +0 -1
- package/dist/devices-matter/VenetianBlindAccessory.d.ts +0 -19
- package/dist/devices-matter/VenetianBlindAccessory.d.ts.map +0 -1
- package/dist/devices-matter/VenetianBlindAccessory.js +0 -99
- package/dist/devices-matter/VenetianBlindAccessory.js.map +0 -1
- package/dist/devices-matter/WindowBlindAccessory.d.ts +0 -17
- package/dist/devices-matter/WindowBlindAccessory.d.ts.map +0 -1
- package/dist/devices-matter/WindowBlindAccessory.js +0 -80
- package/dist/devices-matter/WindowBlindAccessory.js.map +0 -1
- package/dist/devices-matter/custom/PowerStripAccessory.d.ts +0 -97
- package/dist/devices-matter/custom/PowerStripAccessory.d.ts.map +0 -1
- package/dist/devices-matter/custom/PowerStripAccessory.js +0 -265
- package/dist/devices-matter/custom/PowerStripAccessory.js.map +0 -1
- package/dist/devices-matter/custom/index.d.ts +0 -8
- package/dist/devices-matter/custom/index.d.ts.map +0 -1
- package/dist/devices-matter/custom/index.js +0 -8
- package/dist/devices-matter/custom/index.js.map +0 -1
- package/dist/devices-matter/index.d.ts +0 -29
- package/dist/devices-matter/index.d.ts.map +0 -1
- package/dist/devices-matter/index.js +0 -28
- package/dist/devices-matter/index.js.map +0 -1
- package/dist/index.test.d.ts +0 -2
- package/dist/index.test.d.ts.map +0 -1
- package/dist/index.test.js +0 -19
- package/dist/index.test.js.map +0 -1
- package/dist/irdevice/airconditioner.d.ts +0 -61
- package/dist/irdevice/airconditioner.d.ts.map +0 -1
- package/dist/irdevice/airconditioner.js +0 -472
- package/dist/irdevice/airconditioner.js.map +0 -1
- package/dist/irdevice/airpurifier.d.ts +0 -50
- package/dist/irdevice/airpurifier.d.ts.map +0 -1
- package/dist/irdevice/airpurifier.js +0 -213
- package/dist/irdevice/airpurifier.js.map +0 -1
- package/dist/irdevice/camera.d.ts +0 -32
- package/dist/irdevice/camera.d.ts.map +0 -1
- package/dist/irdevice/camera.js +0 -107
- package/dist/irdevice/camera.js.map +0 -1
- package/dist/irdevice/fan.d.ts +0 -36
- package/dist/irdevice/fan.d.ts.map +0 -1
- package/dist/irdevice/fan.js +0 -200
- package/dist/irdevice/fan.js.map +0 -1
- package/dist/irdevice/irdevice.d.ts +0 -68
- package/dist/irdevice/irdevice.d.ts.map +0 -1
- package/dist/irdevice/irdevice.js +0 -298
- package/dist/irdevice/irdevice.js.map +0 -1
- package/dist/irdevice/light.d.ts +0 -36
- package/dist/irdevice/light.d.ts.map +0 -1
- package/dist/irdevice/light.js +0 -206
- package/dist/irdevice/light.js.map +0 -1
- package/dist/irdevice/other.d.ts +0 -57
- package/dist/irdevice/other.d.ts.map +0 -1
- package/dist/irdevice/other.js +0 -778
- package/dist/irdevice/other.js.map +0 -1
- package/dist/irdevice/tv.d.ts +0 -45
- package/dist/irdevice/tv.d.ts.map +0 -1
- package/dist/irdevice/tv.js +0 -327
- package/dist/irdevice/tv.js.map +0 -1
- package/dist/irdevice/vacuumcleaner.d.ts +0 -28
- package/dist/irdevice/vacuumcleaner.d.ts.map +0 -1
- package/dist/irdevice/vacuumcleaner.js +0 -104
- package/dist/irdevice/vacuumcleaner.js.map +0 -1
- package/dist/irdevice/waterheater.d.ts +0 -30
- package/dist/irdevice/waterheater.d.ts.map +0 -1
- package/dist/irdevice/waterheater.js +0 -105
- package/dist/irdevice/waterheater.js.map +0 -1
- package/dist/platform-hap.d.ts +0 -149
- package/dist/platform-hap.d.ts.map +0 -1
- package/dist/platform-hap.js +0 -2861
- package/dist/platform-hap.js.map +0 -1
- package/dist/platform-matter.d.ts +0 -120
- package/dist/platform-matter.d.ts.map +0 -1
- package/dist/platform-matter.js +0 -984
- package/dist/platform-matter.js.map +0 -1
- package/dist/verifyconfig.test.d.ts +0 -2
- package/dist/verifyconfig.test.d.ts.map +0 -1
- package/dist/verifyconfig.test.js +0 -167
- package/dist/verifyconfig.test.js.map +0 -1
- package/src/custom.d.ts +0 -7
- package/src/devices-hap/airpurifier.ts +0 -563
- package/src/devices-hap/blindtilt.ts +0 -1049
- package/src/devices-hap/bot.ts +0 -900
- package/src/devices-hap/ceilinglight.ts +0 -742
- package/src/devices-hap/colorbulb.ts +0 -904
- package/src/devices-hap/contact.ts +0 -457
- package/src/devices-hap/curtain.ts +0 -944
- package/src/devices-hap/device.ts +0 -811
- package/src/devices-hap/fan.ts +0 -711
- package/src/devices-hap/hub.ts +0 -439
- package/src/devices-hap/humidifier.ts +0 -669
- package/src/devices-hap/iosensor.ts +0 -427
- package/src/devices-hap/lightstrip.ts +0 -836
- package/src/devices-hap/lock.ts +0 -620
- package/src/devices-hap/meter.ts +0 -426
- package/src/devices-hap/meterplus.ts +0 -430
- package/src/devices-hap/meterpro.ts +0 -522
- package/src/devices-hap/motion.ts +0 -390
- package/src/devices-hap/plug.ts +0 -423
- package/src/devices-hap/relayswitch.ts +0 -727
- package/src/devices-hap/robotvacuumcleaner.ts +0 -568
- package/src/devices-hap/waterdetector.ts +0 -400
- package/src/devices-matter/BaseMatterAccessory.ts +0 -131
- package/src/devices-matter/ColorLightAccessory.ts +0 -110
- package/src/devices-matter/ColorTemperatureLightAccessory.ts +0 -92
- package/src/devices-matter/ContactSensorAccessory.ts +0 -41
- package/src/devices-matter/DimmableLightAccessory.ts +0 -192
- package/src/devices-matter/DoorLockAccessory.ts +0 -60
- package/src/devices-matter/ExtendedColorLightAccessory.ts +0 -123
- package/src/devices-matter/FanAccessory.ts +0 -95
- package/src/devices-matter/HumiditySensorAccessory.ts +0 -41
- package/src/devices-matter/LeakSensorAccessory.ts +0 -40
- package/src/devices-matter/LightSensorAccessory.ts +0 -41
- package/src/devices-matter/OccupancySensorAccessory.ts +0 -48
- package/src/devices-matter/OnOffLightAccessory.ts +0 -133
- package/src/devices-matter/OnOffOutletAccessory.ts +0 -46
- package/src/devices-matter/OnOffSwitchAccessory.ts +0 -51
- package/src/devices-matter/RoboticVacuumAccessory.ts +0 -407
- package/src/devices-matter/SmokeCOAlarmAccessory.ts +0 -59
- package/src/devices-matter/TemperatureSensorAccessory.ts +0 -43
- package/src/devices-matter/ThermostatAccessory.ts +0 -110
- package/src/devices-matter/VenetianBlindAccessory.ts +0 -115
- package/src/devices-matter/WindowBlindAccessory.ts +0 -92
- package/src/devices-matter/custom/PowerStripAccessory.ts +0 -309
- package/src/devices-matter/custom/index.ts +0 -8
- package/src/devices-matter/index.ts +0 -29
- package/src/index.test.ts +0 -24
- package/src/irdevice/airconditioner.ts +0 -533
- package/src/irdevice/airpurifier.ts +0 -252
- package/src/irdevice/camera.ts +0 -129
- package/src/irdevice/fan.ts +0 -226
- package/src/irdevice/irdevice.ts +0 -344
- package/src/irdevice/light.ts +0 -246
- package/src/irdevice/other.ts +0 -790
- package/src/irdevice/tv.ts +0 -378
- package/src/irdevice/vacuumcleaner.ts +0 -126
- package/src/irdevice/waterheater.ts +0 -127
- package/src/platform-hap.ts +0 -2997
- package/src/platform-matter.ts +0 -1110
- package/src/verifyconfig.test.ts +0 -197
package/todo/README.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# TODO Documentation
|
|
2
|
+
|
|
3
|
+
This directory contains all task tracking and planning documentation for the SwitchBot Homebridge Plugin.
|
|
4
|
+
|
|
5
|
+
## Structure
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
todo/
|
|
9
|
+
├── README.md # This file
|
|
10
|
+
├── TODO.md # Active tasks and upcoming features
|
|
11
|
+
├── COMPLETED.md # Completed features and improvements
|
|
12
|
+
└── mockups/ # UI design mockups
|
|
13
|
+
├── signal-strength-visualization.svg
|
|
14
|
+
├── filtering-sorting.svg
|
|
15
|
+
└── modal-switchbot-theme.svg
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Files
|
|
19
|
+
|
|
20
|
+
### [TODO.md](TODO.md)
|
|
21
|
+
Active tasks and features planned for future releases. Organized by priority:
|
|
22
|
+
- **Must Do (Next Release)** - Critical features blocking next release
|
|
23
|
+
- **Should Do (Soon)** - Important features for near-term releases
|
|
24
|
+
- **Nice to Have (Future)** - Enhancement ideas for future consideration
|
|
25
|
+
|
|
26
|
+
### [COMPLETED.md](COMPLETED.md)
|
|
27
|
+
Archive of completed features and bug fixes. Each completed item includes:
|
|
28
|
+
- Implementation details
|
|
29
|
+
- Date completed
|
|
30
|
+
- Links to related code/files
|
|
31
|
+
- UI mockups (if applicable)
|
|
32
|
+
|
|
33
|
+
### [mockups/](mockups/)
|
|
34
|
+
SVG mockups showing UI designs for completed and planned features:
|
|
35
|
+
- **signal-strength-visualization.svg** - RSSI bars and quality badges for BLE devices
|
|
36
|
+
- **filtering-sorting.svg** - Discovery page filters, sort options, and search
|
|
37
|
+
- **modal-switchbot-theme.svg** - Edit device modal with SwitchBot red theme
|
|
38
|
+
|
|
39
|
+
## Workflow
|
|
40
|
+
|
|
41
|
+
1. **Planning** - New features start as unchecked items in TODO.md
|
|
42
|
+
2. **Development** - Mark items as in-progress while working
|
|
43
|
+
3. **Completion** - When complete, move entire section to COMPLETED.md with implementation details
|
|
44
|
+
4. **UI Features** - Create SVG mockup before or after implementation for documentation
|
|
45
|
+
|
|
46
|
+
## Priority Levels
|
|
47
|
+
|
|
48
|
+
- **Priority: Critical** - Bugs affecting functionality or compatibility
|
|
49
|
+
- **Priority: High** - Features needed for next release
|
|
50
|
+
- **Priority: Medium** - Quality of life improvements
|
|
51
|
+
- **Priority: Low** - Nice-to-have enhancements
|
|
52
|
+
|
|
53
|
+
## Notes
|
|
54
|
+
|
|
55
|
+
- Always update COMPLETED.md when marking features as done
|
|
56
|
+
- Include implementation details and learnings
|
|
57
|
+
- Create mockups for all UI features
|
|
58
|
+
- Keep TODO.md focused on active/upcoming work
|
|
59
|
+
- Archive helps track project progress over time
|
package/todo/TODO.md
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# SwitchBot Plugin TODO List
|
|
2
|
+
|
|
3
|
+
## Active Tasks
|
|
4
|
+
|
|
5
|
+
### Bug Fixes (Priority: Critical)
|
|
6
|
+
|
|
7
|
+
- No active critical bug fixes right now.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Discovery System Enhancements
|
|
12
|
+
|
|
13
|
+
### Quick Wins (Priority: High)
|
|
14
|
+
|
|
15
|
+
#### 1. Better Loading States
|
|
16
|
+
|
|
17
|
+
- [ ] Show progress indicator: "Scanning BLE... (5s)" → "Fetching OpenAPI..." → "Complete"
|
|
18
|
+
- [ ] Add progress bar or spinner for each discovery phase
|
|
19
|
+
- [ ] Display partial results as they arrive (streaming)
|
|
20
|
+
- [ ] Show elapsed time for each phase
|
|
21
|
+
- [ ] Add "Cancel" button to abort long scans
|
|
22
|
+
|
|
23
|
+
### Medium Effort (Priority: Medium)
|
|
24
|
+
|
|
25
|
+
#### 2. Device Grouping
|
|
26
|
+
|
|
27
|
+
- [ ] Implement grouping by Hub (show which devices are on which hub)
|
|
28
|
+
- [ ] Implement grouping by Connection Type
|
|
29
|
+
- [ ] Add expandable/collapsible group headers
|
|
30
|
+
- [ ] Show device count per group
|
|
31
|
+
- [ ] Remember expanded/collapsed state
|
|
32
|
+
|
|
33
|
+
#### 3. Connection Recommendations
|
|
34
|
+
|
|
35
|
+
- [ ] Add badge: "⚡ Recommended: BLE" for devices with strong signal (> -70 dBm)
|
|
36
|
+
- [ ] Add badge: "☁️ Recommended: API" for hub-dependent devices
|
|
37
|
+
- [ ] Show tooltip explaining why recommendation is made
|
|
38
|
+
- [ ] Consider device type (some work better with BLE vs API)
|
|
39
|
+
|
|
40
|
+
#### 4. Configurable BLE Scan
|
|
41
|
+
|
|
42
|
+
- [ ] Add settings panel with scan duration options (3s/5s/10s/15s)
|
|
43
|
+
- [ ] Add option to disable BLE scanning if no Bluetooth adapter
|
|
44
|
+
- [ ] Add option to adjust BLE timeout
|
|
45
|
+
- [ ] Remember user preferences in localStorage
|
|
46
|
+
- [ ] Show system Bluetooth availability status
|
|
47
|
+
|
|
48
|
+
#### 5. Discovery History/Cache
|
|
49
|
+
|
|
50
|
+
- [ ] Cache last discovery results for 5 minutes
|
|
51
|
+
- [ ] Show "Last scanned: X minutes ago" with timestamp
|
|
52
|
+
- [ ] Add "Refresh" button to re-scan
|
|
53
|
+
- [ ] Show cached results immediately on page load
|
|
54
|
+
- [ ] Auto-refresh option with configurable interval
|
|
55
|
+
|
|
56
|
+
#### 6. Detailed Device Info Panel
|
|
57
|
+
|
|
58
|
+
- [ ] Add click-to-expand device details panel
|
|
59
|
+
- [ ] Show extended information:
|
|
60
|
+
- [ ] Battery level (if available)
|
|
61
|
+
- [ ] Firmware version
|
|
62
|
+
- [ ] Cloud service enabled/disabled status
|
|
63
|
+
- [ ] Last seen timestamp
|
|
64
|
+
- [ ] Full MAC address
|
|
65
|
+
- [ ] Device capabilities/features
|
|
66
|
+
- [ ] Add "Copy ID" and "Copy MAC" buttons
|
|
67
|
+
|
|
68
|
+
### Advanced Features (Priority: Low)
|
|
69
|
+
|
|
70
|
+
#### 7. Real-Time BLE Scanning
|
|
71
|
+
|
|
72
|
+
- [ ] Show devices as they're discovered (streaming results)
|
|
73
|
+
- [ ] Add animated "pulsing" indicator for active BLE scan
|
|
74
|
+
- [ ] Update RSSI values in real-time during scan
|
|
75
|
+
- [ ] Show "X devices found..." counter during scan
|
|
76
|
+
|
|
77
|
+
#### 8. Connection Testing
|
|
78
|
+
|
|
79
|
+
- [ ] Add "Test Connection" button per device
|
|
80
|
+
- [ ] Attempt to connect and read basic device status
|
|
81
|
+
- [ ] Show success/failure indicator with details
|
|
82
|
+
- [ ] Display connection latency
|
|
83
|
+
- [ ] Show which connection method succeeded (BLE/API)
|
|
84
|
+
|
|
85
|
+
#### 9. Batch Import
|
|
86
|
+
|
|
87
|
+
- [ ] Add checkboxes to select multiple devices
|
|
88
|
+
- [ ] Add "Add Selected to Config" button
|
|
89
|
+
- [ ] Implement bulk configuration with smart defaults
|
|
90
|
+
- [ ] Show progress for batch operations
|
|
91
|
+
- [ ] Allow batch enable/disable of devices
|
|
92
|
+
|
|
93
|
+
#### 10. Device Health Dashboard
|
|
94
|
+
|
|
95
|
+
- [ ] Show battery warnings (< 20%) with yellow/red indicators
|
|
96
|
+
- [ ] Show firmware update available indicators
|
|
97
|
+
- [ ] Show offline/unreachable warnings
|
|
98
|
+
- [ ] Add "Needs Attention" section at top
|
|
99
|
+
- [ ] Implement battery level trending (if historical data available)
|
|
100
|
+
|
|
101
|
+
#### 11. Export/Import Discovery
|
|
102
|
+
|
|
103
|
+
- [ ] Add "Export Results" button (JSON format)
|
|
104
|
+
- [ ] Add "Import Results" for comparison or troubleshooting
|
|
105
|
+
- [ ] Share with support for debugging
|
|
106
|
+
- [ ] Compare current vs previous discovery (show differences)
|
|
107
|
+
- [ ] Generate discovery report (formatted summary)
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Bug Fixes & Technical Debt
|
|
112
|
+
|
|
113
|
+
### Testing & Quality Assurance
|
|
114
|
+
|
|
115
|
+
- [ ] **Test discovery with real hardware**
|
|
116
|
+
- [ ] Test BLE discovery with nearby devices
|
|
117
|
+
- [ ] Test OpenAPI discovery with cloud-registered devices
|
|
118
|
+
- [ ] Test with mixed BLE+API devices
|
|
119
|
+
- [ ] Test connection type badge display
|
|
120
|
+
- [ ] Verify deduplication works correctly
|
|
121
|
+
|
|
122
|
+
- [ ] **Add error handling improvements**
|
|
123
|
+
- [ ] Better error messages for users
|
|
124
|
+
- [ ] Retry logic with exponential backoff
|
|
125
|
+
- [ ] Graceful degradation when BLE unavailable
|
|
126
|
+
- [ ] Network timeout handling
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Documentation
|
|
131
|
+
|
|
132
|
+
- [ ] **Update README with discovery features**
|
|
133
|
+
- [ ] Document BLE vs OpenAPI discovery
|
|
134
|
+
- [ ] Add screenshots of new UI features
|
|
135
|
+
- [ ] Explain connection type badges
|
|
136
|
+
- [ ] Add troubleshooting guide for discovery issues
|
|
137
|
+
|
|
138
|
+
- [ ] **Create developer documentation**
|
|
139
|
+
- [ ] Document new modular structure
|
|
140
|
+
- [ ] API documentation for endpoints
|
|
141
|
+
- [ ] Contributing guidelines for UI changes
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Priority Summary
|
|
146
|
+
|
|
147
|
+
### Must Do (Next Release)
|
|
148
|
+
|
|
149
|
+
1. Better Loading States
|
|
150
|
+
|
|
151
|
+
### Should Do (Soon)
|
|
152
|
+
|
|
153
|
+
1. Connection Recommendations
|
|
154
|
+
2. Device Grouping
|
|
155
|
+
3. Test discovery with real hardware
|
|
156
|
+
4. Update README with new features
|
|
157
|
+
|
|
158
|
+
### Nice to Have (Future)
|
|
159
|
+
|
|
160
|
+
1. Configurable BLE Scan
|
|
161
|
+
2. Discovery History/Cache
|
|
162
|
+
3. Connection Testing
|
|
163
|
+
4. Batch Import
|
|
164
|
+
5. Device Health Dashboard
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Notes
|
|
169
|
+
|
|
170
|
+
- See [COMPLETED.md](COMPLETED.md) for all completed features
|
|
171
|
+
- UI mockups available in [mockups/](mockups/) directory
|
|
172
|
+
- Consider user feedback on most-wanted features
|
|
173
|
+
- Test all changes with real SwitchBot devices
|
|
174
|
+
- Maintain backwards compatibility with existing configs
|
|
175
|
+
- Keep UI responsive and fast (< 500ms interactions)
|
|
176
|
+
- Follow Homebridge UI/UX conventions
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
<svg width="700" height="500" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<!-- Background -->
|
|
3
|
+
<rect width="700" height="500" fill="#f5f5f5"/>
|
|
4
|
+
|
|
5
|
+
<!-- Title -->
|
|
6
|
+
<text x="20" y="30" font-family="system-ui, -apple-system, Arial" font-size="18" font-weight="600" fill="#1a1a1a">
|
|
7
|
+
Discovery Results - Filtering & Sorting
|
|
8
|
+
</text>
|
|
9
|
+
|
|
10
|
+
<!-- Main Container -->
|
|
11
|
+
<rect x="20" y="50" width="660" height="430" rx="8" fill="#fff" stroke="#ddd" stroke-width="1"/>
|
|
12
|
+
|
|
13
|
+
<!-- Filter Buttons -->
|
|
14
|
+
<g transform="translate(40, 75)">
|
|
15
|
+
<text x="0" y="0" font-family="system-ui" font-size="12" font-weight="600" fill="#666">Filter by Connection:</text>
|
|
16
|
+
|
|
17
|
+
<!-- All Button (Active) -->
|
|
18
|
+
<rect x="0" y="10" width="60" height="32" rx="6" fill="#ef4444"/>
|
|
19
|
+
<text x="30" y="31" font-family="system-ui" font-size="13" font-weight="500" fill="#fff" text-anchor="middle">All</text>
|
|
20
|
+
|
|
21
|
+
<!-- BLE Button -->
|
|
22
|
+
<rect x="70" y="10" width="80" height="32" rx="6" fill="#e5e7eb" stroke="#ddd" stroke-width="1"/>
|
|
23
|
+
<text x="110" y="31" font-family="system-ui" font-size="13" font-weight="500" fill="#4b5563" text-anchor="middle">BLE Only</text>
|
|
24
|
+
|
|
25
|
+
<!-- API Button -->
|
|
26
|
+
<rect x="160" y="10" width="80" height="32" rx="6" fill="#e5e7eb" stroke="#ddd" stroke-width="1"/>
|
|
27
|
+
<text x="200" y="31" font-family="system-ui" font-size="13" font-weight="500" fill="#4b5563" text-anchor="middle">API Only</text>
|
|
28
|
+
|
|
29
|
+
<!-- Both Button -->
|
|
30
|
+
<rect x="250" y="10" width="60" height="32" rx="6" fill="#e5e7eb" stroke="#ddd" stroke-width="1"/>
|
|
31
|
+
<text x="280" y="31" font-family="system-ui" font-size="13" font-weight="500" fill="#4b5563" text-anchor="middle">Both</text>
|
|
32
|
+
|
|
33
|
+
<!-- IR Button -->
|
|
34
|
+
<rect x="320" y="10" width="100" height="32" rx="6" fill="#e5e7eb" stroke="#ddd" stroke-width="1"/>
|
|
35
|
+
<text x="370" y="31" font-family="system-ui" font-size="13" font-weight="500" fill="#4b5563" text-anchor="middle">IR Devices</text>
|
|
36
|
+
</g>
|
|
37
|
+
|
|
38
|
+
<!-- Sort Dropdown and Search -->
|
|
39
|
+
<g transform="translate(40, 145)">
|
|
40
|
+
<text x="0" y="0" font-family="system-ui" font-size="12" font-weight="600" fill="#666">Sort by:</text>
|
|
41
|
+
|
|
42
|
+
<!-- Sort Dropdown -->
|
|
43
|
+
<rect x="0" y="10" width="180" height="32" rx="6" fill="#fff" stroke="#d1d5db" stroke-width="1"/>
|
|
44
|
+
<text x="10" y="31" font-family="system-ui" font-size="13" fill="#1a1a1a">Signal Strength ▼</text>
|
|
45
|
+
|
|
46
|
+
<!-- Search Box -->
|
|
47
|
+
<text x="210" y="0" font-family="system-ui" font-size="12" font-weight="600" fill="#666">Search:</text>
|
|
48
|
+
<rect x="210" y="10" width="410" height="32" rx="6" fill="#fff" stroke="#d1d5db" stroke-width="1"/>
|
|
49
|
+
<text x="220" y="31" font-family="system-ui" font-size="13" fill="#9ca3af">🔍 Search by name, ID, or type...</text>
|
|
50
|
+
</g>
|
|
51
|
+
|
|
52
|
+
<!-- Status Line -->
|
|
53
|
+
<text x="40" y="210" font-family="system-ui" font-size="12" fill="#666">
|
|
54
|
+
Showing 12 of 12 device(s)
|
|
55
|
+
</text>
|
|
56
|
+
|
|
57
|
+
<!-- Device List -->
|
|
58
|
+
<g transform="translate(40, 230)">
|
|
59
|
+
<!-- Device 1 -->
|
|
60
|
+
<rect x="0" y="0" width="620" height="50" rx="4" fill="#f9f9f9" stroke="#e0e0e0" stroke-width="1"/>
|
|
61
|
+
<text x="15" y="22" font-family="system-ui" font-size="14" font-weight="500" fill="#1a1a1a">Kitchen Hub</text>
|
|
62
|
+
<text x="15" y="38" font-family="monospace" font-size="11" fill="#666">B0E9FEC3F112 | Hub 2</text>
|
|
63
|
+
|
|
64
|
+
<!-- Signal bars - 4 bars -->
|
|
65
|
+
<g transform="translate(500, 12)">
|
|
66
|
+
<rect x="0" y="12" width="6" height="3" rx="1" fill="#10b981"/>
|
|
67
|
+
<rect x="9" y="8" width="6" height="7" rx="1" fill="#10b981"/>
|
|
68
|
+
<rect x="18" y="4" width="6" height="11" rx="1" fill="#10b981"/>
|
|
69
|
+
<rect x="27" y="0" width="6" height="15" rx="1" fill="#10b981"/>
|
|
70
|
+
</g>
|
|
71
|
+
|
|
72
|
+
<!-- Connection badge -->
|
|
73
|
+
<rect x="550" y="13" width="50" height="18" rx="4" fill="#fef3c7"/>
|
|
74
|
+
<text x="575" y="26" font-family="system-ui" font-size="10" font-weight="500" fill="#d97706" text-anchor="middle">Both</text>
|
|
75
|
+
|
|
76
|
+
<!-- Device 2 -->
|
|
77
|
+
<rect x="0" y="60" width="620" height="50" rx="4" fill="#f9f9f9" stroke="#e0e0e0" stroke-width="1"/>
|
|
78
|
+
<text x="15" y="82" font-family="system-ui" font-size="14" font-weight="500" fill="#1a1a1a">Front Door Bot</text>
|
|
79
|
+
<text x="15" y="98" font-family="monospace" font-size="11" fill="#666">84F703B32E12 | Bot</text>
|
|
80
|
+
|
|
81
|
+
<!-- Signal bars - 3 bars -->
|
|
82
|
+
<g transform="translate(500, 72)">
|
|
83
|
+
<rect x="0" y="12" width="6" height="3" rx="1" fill="#eab308"/>
|
|
84
|
+
<rect x="9" y="8" width="6" height="7" rx="1" fill="#eab308"/>
|
|
85
|
+
<rect x="18" y="4" width="6" height="11" rx="1" fill="#eab308"/>
|
|
86
|
+
<rect x="27" y="0" width="6" height="15" rx="1" fill="#e5e7eb"/>
|
|
87
|
+
</g>
|
|
88
|
+
|
|
89
|
+
<!-- Connection badge -->
|
|
90
|
+
<rect x="550" y="73" width="50" height="18" rx="4" fill="#dbeafe"/>
|
|
91
|
+
<text x="575" y="86" font-family="system-ui" font-size="10" font-weight="500" fill="#3b82f6" text-anchor="middle">BLE</text>
|
|
92
|
+
|
|
93
|
+
<!-- Device 3 -->
|
|
94
|
+
<rect x="0" y="120" width="620" height="50" rx="4" fill="#f9f9f9" stroke="#e0e0e0" stroke-width="1"/>
|
|
95
|
+
<text x="15" y="142" font-family="system-ui" font-size="14" font-weight="500" fill="#1a1a1a">Living Room TV</text>
|
|
96
|
+
<text x="15" y="158" font-family="monospace" font-size="11" fill="#666">IR-A1B2C3D4 | TV (IR)</text>
|
|
97
|
+
|
|
98
|
+
<!-- No signal bars for IR -->
|
|
99
|
+
|
|
100
|
+
<!-- Connection badge -->
|
|
101
|
+
<rect x="550" y="133" width="50" height="18" rx="4" fill="#fce7f3"/>
|
|
102
|
+
<text x="575" y="146" font-family="system-ui" font-size="10" font-weight="500" fill="#ec4899" text-anchor="middle">IR</text>
|
|
103
|
+
</g>
|
|
104
|
+
|
|
105
|
+
<!-- Feature Labels -->
|
|
106
|
+
<g transform="translate(40, 450)">
|
|
107
|
+
<text x="0" y="0" font-family="system-ui" font-size="10" font-weight="600" fill="#9ca3af">Features:</text>
|
|
108
|
+
<text x="0" y="15" font-family="system-ui" font-size="9" fill="#9ca3af">✓ Real-time search with 300ms debounce</text>
|
|
109
|
+
<text x="200" y="15" font-family="system-ui" font-size="9" fill="#9ca3af">✓ Client-side filtering (instant)</text>
|
|
110
|
+
<text x="400" y="15" font-family="system-ui" font-size="9" fill="#9ca3af">✓ localStorage persistence</text>
|
|
111
|
+
</g>
|
|
112
|
+
</svg>
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
<svg width="600" height="500" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<!-- Backdrop Overlay -->
|
|
3
|
+
<rect width="600" height="500" fill="rgba(0,0,0,0.7)"/>
|
|
4
|
+
|
|
5
|
+
<!-- Modal Container -->
|
|
6
|
+
<g transform="translate(60, 80)">
|
|
7
|
+
<!-- Modal Background with Red Top Border -->
|
|
8
|
+
<rect x="0" y="4" width="480" height="370" rx="12" fill="#fff"/>
|
|
9
|
+
<rect x="0" y="0" width="480" height="4" rx="2" fill="#ef4444"/>
|
|
10
|
+
|
|
11
|
+
<!-- Box Shadow Effect -->
|
|
12
|
+
<rect x="2" y="6" width="476" height="368" rx="12" fill="none" stroke="rgba(0,0,0,0.1)" stroke-width="2"/>
|
|
13
|
+
|
|
14
|
+
<!-- Modal Header -->
|
|
15
|
+
<text x="24" y="50" font-family="system-ui, -apple-system, Arial" font-size="20" font-weight="600" fill="#ef4444">
|
|
16
|
+
Edit Device
|
|
17
|
+
</text>
|
|
18
|
+
|
|
19
|
+
<!-- Content Area -->
|
|
20
|
+
<g transform="translate(24, 80)">
|
|
21
|
+
<!-- Device Name Field -->
|
|
22
|
+
<text x="0" y="0" font-family="system-ui" font-size="13" font-weight="500" fill="#374151">Device Name</text>
|
|
23
|
+
<rect x="0" y="8" width="432" height="40" rx="6" fill="#fff" stroke="#d1d5db" stroke-width="1"/>
|
|
24
|
+
<text x="10" y="33" font-family="system-ui" font-size="14" fill="#1a1a1a">Girl's Bedroom Hub</text>
|
|
25
|
+
|
|
26
|
+
<!-- API Device Type Field (Read-only) -->
|
|
27
|
+
<text x="0" y="70" font-family="system-ui" font-size="13" font-weight="500" fill="#374151">Device Type (API - Read Only)</text>
|
|
28
|
+
<rect x="0" y="78" width="432" height="40" rx="6" fill="#f9fafb" stroke="#d1d5db" stroke-width="1"/>
|
|
29
|
+
<text x="10" y="103" font-family="system-ui" font-size="14" fill="#6b7280">Hub 2</text>
|
|
30
|
+
|
|
31
|
+
<!-- Config Device Type Dropdown -->
|
|
32
|
+
<text x="0" y="140" font-family="system-ui" font-size="13" font-weight="500" fill="#374151">Config Device Type (Override)</text>
|
|
33
|
+
<rect x="0" y="148" width="432" height="40" rx="6" fill="#fff" stroke="#d1d5db" stroke-width="1"/>
|
|
34
|
+
<text x="10" y="173" font-family="system-ui" font-size="14" fill="#1a1a1a">Hub 2 ▼</text>
|
|
35
|
+
|
|
36
|
+
<!-- Divider Line -->
|
|
37
|
+
<line x1="0" y1="220" x2="432" y2="220" stroke="rgba(0,0,0,0.1)" stroke-width="1"/>
|
|
38
|
+
|
|
39
|
+
<!-- Button Group -->
|
|
40
|
+
<g transform="translate(0, 240)">
|
|
41
|
+
<!-- Cancel Button -->
|
|
42
|
+
<rect x="0" y="0" width="100" height="40" rx="6" fill="#6b7280"/>
|
|
43
|
+
<text x="50" y="25" font-family="system-ui" font-size="14" font-weight="500" fill="#fff" text-anchor="middle">Cancel</text>
|
|
44
|
+
|
|
45
|
+
<!-- Save Button with Hover Effect -->
|
|
46
|
+
<g transform="translate(332, 0)">
|
|
47
|
+
<!-- Button Shadow -->
|
|
48
|
+
<rect x="0" y="2" width="100" height="40" rx="6" fill="rgba(239,68,68,0.2)"/>
|
|
49
|
+
<!-- Button -->
|
|
50
|
+
<rect x="0" y="0" width="100" height="40" rx="6" fill="#ef4444"/>
|
|
51
|
+
<text x="50" y="25" font-family="system-ui" font-size="14" font-weight="500" fill="#fff" text-anchor="middle">Save</text>
|
|
52
|
+
</g>
|
|
53
|
+
</g>
|
|
54
|
+
</g>
|
|
55
|
+
</g>
|
|
56
|
+
|
|
57
|
+
<!-- Design Notes -->
|
|
58
|
+
<g transform="translate(20, 470)">
|
|
59
|
+
<text x="0" y="0" font-family="system-ui" font-size="10" font-weight="600" fill="#9ca3af">Design Elements:</text>
|
|
60
|
+
<text x="100" y="0" font-family="system-ui" font-size="9" fill="#9ca3af">● 4px SwitchBot Red top accent</text>
|
|
61
|
+
<text x="270" y="0" font-family="system-ui" font-size="9" fill="#9ca3af">● 12px border-radius</text>
|
|
62
|
+
<text x="380" y="0" font-family="system-ui" font-size="9" fill="#9ca3af">● Smooth shadows</text>
|
|
63
|
+
<text x="100" y="15" font-family="system-ui" font-size="9" fill="#9ca3af">● Red title and primary button</text>
|
|
64
|
+
<text x="270" y="15" font-family="system-ui" font-size="9" fill="#9ca3af">● Gray secondary button</text>
|
|
65
|
+
</g>
|
|
66
|
+
</svg>
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
<svg width="600" height="400" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<!-- Background -->
|
|
3
|
+
<rect width="600" height="400" fill="#f5f5f5"/>
|
|
4
|
+
|
|
5
|
+
<!-- Title -->
|
|
6
|
+
<text x="20" y="30" font-family="system-ui, -apple-system, Arial" font-size="18" font-weight="600" fill="#1a1a1a">
|
|
7
|
+
Discovery Results - Signal Strength Visualization
|
|
8
|
+
</text>
|
|
9
|
+
|
|
10
|
+
<!-- Device List Container -->
|
|
11
|
+
<rect x="20" y="50" width="560" height="330" rx="8" fill="#fff" stroke="#ddd" stroke-width="1"/>
|
|
12
|
+
|
|
13
|
+
<!-- Device 1: Excellent Signal -->
|
|
14
|
+
<g transform="translate(40, 80)">
|
|
15
|
+
<text font-family="system-ui" font-size="14" font-weight="500" fill="#1a1a1a">Living Room Bot</text>
|
|
16
|
+
<text y="20" font-family="monospace" font-size="12" fill="#666">C1A2B3C4D5E6</text>
|
|
17
|
+
|
|
18
|
+
<!-- RSSI Bars - 4 bars filled (Excellent) -->
|
|
19
|
+
<g transform="translate(0, 35)">
|
|
20
|
+
<rect x="0" y="12" width="8" height="4" rx="1" fill="#10b981"/>
|
|
21
|
+
<rect x="12" y="8" width="8" height="8" rx="1" fill="#10b981"/>
|
|
22
|
+
<rect x="24" y="4" width="8" height="12" rx="1" fill="#10b981"/>
|
|
23
|
+
<rect x="36" y="0" width="8" height="16" rx="1" fill="#10b981"/>
|
|
24
|
+
</g>
|
|
25
|
+
|
|
26
|
+
<!-- Quality Badge -->
|
|
27
|
+
<rect x="60" y="35" width="80" height="20" rx="4" fill="#d1fae5"/>
|
|
28
|
+
<text x="100" y="49" font-family="system-ui" font-size="11" font-weight="500" fill="#10b981" text-anchor="middle">Excellent</text>
|
|
29
|
+
|
|
30
|
+
<!-- RSSI Value -->
|
|
31
|
+
<text x="150" y="49" font-family="monospace" font-size="11" fill="#666">-55 dBm</text>
|
|
32
|
+
|
|
33
|
+
<!-- Connection Badge -->
|
|
34
|
+
<rect x="220" y="35" width="45" height="20" rx="4" fill="#dbeafe"/>
|
|
35
|
+
<text x="242.5" y="49" font-family="system-ui" font-size="11" font-weight="500" fill="#3b82f6" text-anchor="middle">BLE</text>
|
|
36
|
+
</g>
|
|
37
|
+
|
|
38
|
+
<!-- Device 2: Good Signal -->
|
|
39
|
+
<g transform="translate(40, 180)">
|
|
40
|
+
<text font-family="system-ui" font-size="14" font-weight="500" fill="#1a1a1a">Bedroom Curtain</text>
|
|
41
|
+
<text y="20" font-family="monospace" font-size="12" fill="#666">F7E8D9C0B1A2</text>
|
|
42
|
+
|
|
43
|
+
<!-- RSSI Bars - 3 bars filled (Good) -->
|
|
44
|
+
<g transform="translate(0, 35)">
|
|
45
|
+
<rect x="0" y="12" width="8" height="4" rx="1" fill="#eab308"/>
|
|
46
|
+
<rect x="12" y="8" width="8" height="8" rx="1" fill="#eab308"/>
|
|
47
|
+
<rect x="24" y="4" width="8" height="12" rx="1" fill="#eab308"/>
|
|
48
|
+
<rect x="36" y="0" width="8" height="16" rx="1" fill="#e5e7eb"/>
|
|
49
|
+
</g>
|
|
50
|
+
|
|
51
|
+
<!-- Quality Badge -->
|
|
52
|
+
<rect x="60" y="35" width="80" height="20" rx="4" fill="#fef9c3"/>
|
|
53
|
+
<text x="100" y="49" font-family="system-ui" font-size="11" font-weight="500" fill="#eab308" text-anchor="middle">Good</text>
|
|
54
|
+
|
|
55
|
+
<!-- RSSI Value -->
|
|
56
|
+
<text x="150" y="49" font-family="monospace" font-size="11" fill="#666">-68 dBm</text>
|
|
57
|
+
|
|
58
|
+
<!-- Connection Badge -->
|
|
59
|
+
<rect x="220" y="35" width="45" height="20" rx="4" fill="#dbeafe"/>
|
|
60
|
+
<text x="242.5" y="49" font-family="system-ui" font-size="11" font-weight="500" fill="#3b82f6" text-anchor="middle">BLE</text>
|
|
61
|
+
</g>
|
|
62
|
+
|
|
63
|
+
<!-- Device 3: Fair Signal -->
|
|
64
|
+
<g transform="translate(40, 280)">
|
|
65
|
+
<text font-family="system-ui" font-size="14" font-weight="500" fill="#1a1a1a">Garage Lock</text>
|
|
66
|
+
<text y="20" font-family="monospace" font-size="12" fill="#666">A1B2C3D4E5F6</text>
|
|
67
|
+
|
|
68
|
+
<!-- RSSI Bars - 2 bars filled (Fair) -->
|
|
69
|
+
<g transform="translate(0, 35)">
|
|
70
|
+
<rect x="0" y="12" width="8" height="4" rx="1" fill="#f97316"/>
|
|
71
|
+
<rect x="12" y="8" width="8" height="8" rx="1" fill="#f97316"/>
|
|
72
|
+
<rect x="24" y="4" width="8" height="12" rx="1" fill="#e5e7eb"/>
|
|
73
|
+
<rect x="36" y="0" width="8" height="16" rx="1" fill="#e5e7eb"/>
|
|
74
|
+
</g>
|
|
75
|
+
|
|
76
|
+
<!-- Quality Badge -->
|
|
77
|
+
<rect x="60" y="35" width="80" height="20" rx="4" fill="#ffedd5"/>
|
|
78
|
+
<text x="100" y="49" font-family="system-ui" font-size="11" font-weight="500" fill="#f97316" text-anchor="middle">Fair</text>
|
|
79
|
+
|
|
80
|
+
<!-- RSSI Value -->
|
|
81
|
+
<text x="150" y="49" font-family="monospace" font-size="11" fill="#666">-78 dBm</text>
|
|
82
|
+
|
|
83
|
+
<!-- Connection Badge -->
|
|
84
|
+
<rect x="220" y="35" width="45" height="20" rx="4" fill="#dbeafe"/>
|
|
85
|
+
<text x="242.5" y="49" font-family="system-ui" font-size="11" font-weight="500" fill="#3b82f6" text-anchor="middle">BLE</text>
|
|
86
|
+
</g>
|
|
87
|
+
|
|
88
|
+
<!-- Legend -->
|
|
89
|
+
<text x="400" y="100" font-family="system-ui" font-size="12" font-weight="600" fill="#666">Signal Quality:</text>
|
|
90
|
+
<text x="400" y="120" font-family="system-ui" font-size="11" fill="#10b981">● Excellent: > -60 dBm</text>
|
|
91
|
+
<text x="400" y="140" font-family="system-ui" font-size="11" fill="#eab308">● Good: -60 to -75 dBm</text>
|
|
92
|
+
<text x="400" y="160" font-family="system-ui" font-size="11" fill="#f97316">● Fair: -75 to -85 dBm</text>
|
|
93
|
+
<text x="400" y="180" font-family="system-ui" font-size="11" fill="#ef4444">● Poor: < -85 dBm</text>
|
|
94
|
+
</svg>
|