@switchbot/homebridge-switchbot 4.3.2-beta.9 → 5.0.0-beta.1
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/copilot-instructions.md +328 -0
- package/.github/workflows/beta-release.yml +8 -12
- package/.github/workflows/release.yml +57 -21
- package/README.md +13 -10
- package/config.schema.json +1 -12
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/clover.xml +15847 -0
- package/coverage/coverage-final.json +42 -0
- package/coverage/docs/assets/dmt/dmt-component-data.js.html +85 -0
- package/coverage/docs/assets/dmt/dmt-components.js.html +286 -0
- package/coverage/docs/assets/dmt/index.html +131 -0
- package/coverage/docs/assets/hierarchy.js.html +85 -0
- package/coverage/docs/assets/icons.js.html +136 -0
- package/coverage/docs/assets/index.html +146 -0
- package/coverage/docs/assets/main.js.html +265 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +191 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +196 -0
- package/coverage/src/device/blindtilt.ts.html +3238 -0
- package/coverage/src/device/bot.ts.html +2803 -0
- package/coverage/src/device/ceilinglight.ts.html +2338 -0
- package/coverage/src/device/colorbulb.ts.html +2824 -0
- package/coverage/src/device/contact.ts.html +1465 -0
- package/coverage/src/device/curtain.ts.html +2869 -0
- package/coverage/src/device/device.ts.html +2500 -0
- package/coverage/src/device/fan.ts.html +2242 -0
- package/coverage/src/device/hub.ts.html +1408 -0
- package/coverage/src/device/humidifier.ts.html +2116 -0
- package/coverage/src/device/index.html +416 -0
- package/coverage/src/device/iosensor.ts.html +1375 -0
- package/coverage/src/device/lightstrip.ts.html +2617 -0
- package/coverage/src/device/lock.ts.html +1963 -0
- package/coverage/src/device/meter.ts.html +1372 -0
- package/coverage/src/device/meterplus.ts.html +1384 -0
- package/coverage/src/device/meterpro.ts.html +1618 -0
- package/coverage/src/device/motion.ts.html +1264 -0
- package/coverage/src/device/plug.ts.html +1372 -0
- package/coverage/src/device/relayswitch.ts.html +2284 -0
- package/coverage/src/device/robotvacuumcleaner.ts.html +1810 -0
- package/coverage/src/device/waterdetector.ts.html +1294 -0
- package/coverage/src/homebridge-ui/index.html +116 -0
- package/coverage/src/homebridge-ui/server.ts.html +229 -0
- package/coverage/src/index.html +161 -0
- package/coverage/src/index.ts.html +124 -0
- package/coverage/src/irdevice/airconditioner.ts.html +1687 -0
- package/coverage/src/irdevice/airpurifier.ts.html +844 -0
- package/coverage/src/irdevice/camera.ts.html +475 -0
- package/coverage/src/irdevice/fan.ts.html +766 -0
- package/coverage/src/irdevice/index.html +251 -0
- package/coverage/src/irdevice/irdevice.ts.html +1117 -0
- package/coverage/src/irdevice/light.ts.html +826 -0
- package/coverage/src/irdevice/other.ts.html +2458 -0
- package/coverage/src/irdevice/tv.ts.html +1222 -0
- package/coverage/src/irdevice/vacuumcleaner.ts.html +466 -0
- package/coverage/src/irdevice/waterheater.ts.html +469 -0
- package/coverage/src/platform.ts.html +8776 -0
- package/coverage/src/settings.ts.html +934 -0
- package/coverage/src/utils.ts.html +2092 -0
- package/dist/{device → devices-hap}/airpurifier.d.ts +3 -3
- package/dist/devices-hap/airpurifier.d.ts.map +1 -0
- package/dist/devices-hap/airpurifier.js.map +1 -0
- package/dist/{device → devices-hap}/blindtilt.d.ts +3 -3
- package/dist/devices-hap/blindtilt.d.ts.map +1 -0
- package/dist/{device → devices-hap}/blindtilt.js +6 -1
- package/dist/devices-hap/blindtilt.js.map +1 -0
- package/dist/{device → devices-hap}/bot.d.ts +3 -3
- package/dist/devices-hap/bot.d.ts.map +1 -0
- package/dist/devices-hap/bot.js.map +1 -0
- package/dist/{device → devices-hap}/ceilinglight.d.ts +3 -3
- package/dist/devices-hap/ceilinglight.d.ts.map +1 -0
- package/dist/devices-hap/ceilinglight.js.map +1 -0
- package/dist/{device → devices-hap}/colorbulb.d.ts +3 -3
- package/dist/devices-hap/colorbulb.d.ts.map +1 -0
- package/dist/devices-hap/colorbulb.js.map +1 -0
- package/dist/{device → devices-hap}/contact.d.ts +3 -3
- package/dist/devices-hap/contact.d.ts.map +1 -0
- package/dist/devices-hap/contact.js.map +1 -0
- package/dist/{device → devices-hap}/curtain.d.ts +3 -3
- package/dist/devices-hap/curtain.d.ts.map +1 -0
- package/dist/{device → devices-hap}/curtain.js +32 -8
- package/dist/devices-hap/curtain.js.map +1 -0
- package/dist/{device → devices-hap}/device.d.ts +3 -3
- package/dist/devices-hap/device.d.ts.map +1 -0
- package/dist/{device → devices-hap}/device.js +10 -4
- package/dist/devices-hap/device.js.map +1 -0
- package/dist/{device → devices-hap}/fan.d.ts +3 -3
- package/dist/devices-hap/fan.d.ts.map +1 -0
- package/dist/devices-hap/fan.js.map +1 -0
- package/dist/{device → devices-hap}/hub.d.ts +5 -5
- package/dist/devices-hap/hub.d.ts.map +1 -0
- package/dist/{device → devices-hap}/hub.js +2 -1
- package/dist/devices-hap/hub.js.map +1 -0
- package/dist/{device → devices-hap}/humidifier.d.ts +3 -3
- package/dist/devices-hap/humidifier.d.ts.map +1 -0
- package/dist/devices-hap/humidifier.js.map +1 -0
- package/dist/{device → devices-hap}/iosensor.d.ts +3 -3
- package/dist/devices-hap/iosensor.d.ts.map +1 -0
- package/dist/devices-hap/iosensor.js.map +1 -0
- package/dist/{device → devices-hap}/lightstrip.d.ts +3 -3
- package/dist/devices-hap/lightstrip.d.ts.map +1 -0
- package/dist/devices-hap/lightstrip.js.map +1 -0
- package/dist/{device → devices-hap}/lock.d.ts +3 -3
- package/dist/devices-hap/lock.d.ts.map +1 -0
- package/dist/devices-hap/lock.js.map +1 -0
- package/dist/{device → devices-hap}/meter.d.ts +3 -3
- package/dist/devices-hap/meter.d.ts.map +1 -0
- package/dist/devices-hap/meter.js.map +1 -0
- package/dist/{device → devices-hap}/meterplus.d.ts +3 -3
- package/dist/devices-hap/meterplus.d.ts.map +1 -0
- package/dist/devices-hap/meterplus.js.map +1 -0
- package/dist/{device → devices-hap}/meterpro.d.ts +3 -3
- package/dist/devices-hap/meterpro.d.ts.map +1 -0
- package/dist/{device → devices-hap}/meterpro.js +16 -3
- package/dist/devices-hap/meterpro.js.map +1 -0
- package/dist/{device → devices-hap}/motion.d.ts +3 -3
- package/dist/devices-hap/motion.d.ts.map +1 -0
- package/dist/devices-hap/motion.js.map +1 -0
- package/dist/{device → devices-hap}/plug.d.ts +3 -3
- package/dist/devices-hap/plug.d.ts.map +1 -0
- package/dist/devices-hap/plug.js.map +1 -0
- package/dist/{device → devices-hap}/relayswitch.d.ts +3 -3
- package/dist/devices-hap/relayswitch.d.ts.map +1 -0
- package/dist/devices-hap/relayswitch.js.map +1 -0
- package/dist/{device → devices-hap}/robotvacuumcleaner.d.ts +3 -3
- package/dist/devices-hap/robotvacuumcleaner.d.ts.map +1 -0
- package/dist/devices-hap/robotvacuumcleaner.js.map +1 -0
- package/dist/{device → devices-hap}/waterdetector.d.ts +3 -3
- package/dist/devices-hap/waterdetector.d.ts.map +1 -0
- package/dist/devices-hap/waterdetector.js.map +1 -0
- package/dist/devices-matter/BaseMatterAccessory.d.ts +63 -0
- package/dist/devices-matter/BaseMatterAccessory.d.ts.map +1 -0
- package/dist/devices-matter/BaseMatterAccessory.js +100 -0
- package/dist/devices-matter/BaseMatterAccessory.js.map +1 -0
- package/dist/devices-matter/ColorLightAccessory.d.ts +18 -0
- package/dist/devices-matter/ColorLightAccessory.d.ts.map +1 -0
- package/dist/devices-matter/ColorLightAccessory.js +96 -0
- package/dist/devices-matter/ColorLightAccessory.js.map +1 -0
- package/dist/devices-matter/ColorTemperatureLightAccessory.d.ts +16 -0
- package/dist/devices-matter/ColorTemperatureLightAccessory.d.ts.map +1 -0
- package/dist/devices-matter/ColorTemperatureLightAccessory.js +83 -0
- package/dist/devices-matter/ColorTemperatureLightAccessory.js.map +1 -0
- package/dist/devices-matter/ContactSensorAccessory.d.ts +10 -0
- package/dist/devices-matter/ContactSensorAccessory.d.ts.map +1 -0
- package/dist/devices-matter/ContactSensorAccessory.js +31 -0
- package/dist/devices-matter/ContactSensorAccessory.js.map +1 -0
- package/dist/devices-matter/DimmableLightAccessory.d.ts +56 -0
- package/dist/devices-matter/DimmableLightAccessory.d.ts.map +1 -0
- package/dist/devices-matter/DimmableLightAccessory.js +170 -0
- package/dist/devices-matter/DimmableLightAccessory.js.map +1 -0
- package/dist/devices-matter/DoorLockAccessory.d.ts +12 -0
- package/dist/devices-matter/DoorLockAccessory.d.ts.map +1 -0
- package/dist/devices-matter/DoorLockAccessory.js +47 -0
- package/dist/devices-matter/DoorLockAccessory.js.map +1 -0
- package/dist/devices-matter/ExtendedColorLightAccessory.d.ts +19 -0
- package/dist/devices-matter/ExtendedColorLightAccessory.d.ts.map +1 -0
- package/dist/devices-matter/ExtendedColorLightAccessory.js +108 -0
- package/dist/devices-matter/ExtendedColorLightAccessory.js.map +1 -0
- package/dist/devices-matter/FanAccessory.d.ts +14 -0
- package/dist/devices-matter/FanAccessory.d.ts.map +1 -0
- package/dist/devices-matter/FanAccessory.js +73 -0
- package/dist/devices-matter/FanAccessory.js.map +1 -0
- package/dist/devices-matter/HumiditySensorAccessory.d.ts +10 -0
- package/dist/devices-matter/HumiditySensorAccessory.d.ts.map +1 -0
- package/dist/devices-matter/HumiditySensorAccessory.js +33 -0
- package/dist/devices-matter/HumiditySensorAccessory.js.map +1 -0
- package/dist/devices-matter/LeakSensorAccessory.d.ts +10 -0
- package/dist/devices-matter/LeakSensorAccessory.d.ts.map +1 -0
- package/dist/devices-matter/LeakSensorAccessory.js +30 -0
- package/dist/devices-matter/LeakSensorAccessory.js.map +1 -0
- package/dist/devices-matter/LightSensorAccessory.d.ts +10 -0
- package/dist/devices-matter/LightSensorAccessory.d.ts.map +1 -0
- package/dist/devices-matter/LightSensorAccessory.js +33 -0
- package/dist/devices-matter/LightSensorAccessory.js.map +1 -0
- package/dist/devices-matter/OccupancySensorAccessory.d.ts +10 -0
- package/dist/devices-matter/OccupancySensorAccessory.d.ts.map +1 -0
- package/dist/devices-matter/OccupancySensorAccessory.js +43 -0
- package/dist/devices-matter/OccupancySensorAccessory.js.map +1 -0
- package/dist/devices-matter/OnOffLightAccessory.d.ts +36 -0
- package/dist/devices-matter/OnOffLightAccessory.d.ts.map +1 -0
- package/dist/devices-matter/OnOffLightAccessory.js +117 -0
- package/dist/devices-matter/OnOffLightAccessory.js.map +1 -0
- package/dist/devices-matter/OnOffOutletAccessory.d.ts +12 -0
- package/dist/devices-matter/OnOffOutletAccessory.d.ts.map +1 -0
- package/dist/devices-matter/OnOffOutletAccessory.js +43 -0
- package/dist/devices-matter/OnOffOutletAccessory.js.map +1 -0
- package/dist/devices-matter/OnOffSwitchAccessory.d.ts +12 -0
- package/dist/devices-matter/OnOffSwitchAccessory.d.ts.map +1 -0
- package/dist/devices-matter/OnOffSwitchAccessory.js +43 -0
- package/dist/devices-matter/OnOffSwitchAccessory.js.map +1 -0
- package/dist/devices-matter/RoboticVacuumAccessory.d.ts +66 -0
- package/dist/devices-matter/RoboticVacuumAccessory.d.ts.map +1 -0
- package/dist/devices-matter/RoboticVacuumAccessory.js +402 -0
- package/dist/devices-matter/RoboticVacuumAccessory.js.map +1 -0
- package/dist/devices-matter/SmokeCOAlarmAccessory.d.ts +11 -0
- package/dist/devices-matter/SmokeCOAlarmAccessory.d.ts.map +1 -0
- package/dist/devices-matter/SmokeCOAlarmAccessory.js +49 -0
- package/dist/devices-matter/SmokeCOAlarmAccessory.js.map +1 -0
- package/dist/devices-matter/TemperatureSensorAccessory.d.ts +10 -0
- package/dist/devices-matter/TemperatureSensorAccessory.d.ts.map +1 -0
- package/dist/devices-matter/TemperatureSensorAccessory.js +33 -0
- package/dist/devices-matter/TemperatureSensorAccessory.js.map +1 -0
- package/dist/devices-matter/ThermostatAccessory.d.ts +17 -0
- package/dist/devices-matter/ThermostatAccessory.d.ts.map +1 -0
- package/dist/devices-matter/ThermostatAccessory.js +87 -0
- package/dist/devices-matter/ThermostatAccessory.js.map +1 -0
- package/dist/devices-matter/VenetianBlindAccessory.d.ts +17 -0
- package/dist/devices-matter/VenetianBlindAccessory.d.ts.map +1 -0
- package/dist/devices-matter/VenetianBlindAccessory.js +100 -0
- package/dist/devices-matter/VenetianBlindAccessory.js.map +1 -0
- package/dist/devices-matter/WindowBlindAccessory.d.ts +15 -0
- package/dist/devices-matter/WindowBlindAccessory.d.ts.map +1 -0
- package/dist/devices-matter/WindowBlindAccessory.js +81 -0
- package/dist/devices-matter/WindowBlindAccessory.js.map +1 -0
- package/dist/devices-matter/custom/PowerStripAccessory.d.ts +97 -0
- package/dist/devices-matter/custom/PowerStripAccessory.d.ts.map +1 -0
- package/dist/devices-matter/custom/PowerStripAccessory.js +265 -0
- package/dist/devices-matter/custom/PowerStripAccessory.js.map +1 -0
- package/dist/devices-matter/custom/index.d.ts +8 -0
- package/dist/devices-matter/custom/index.d.ts.map +1 -0
- package/dist/devices-matter/custom/index.js +8 -0
- package/dist/devices-matter/custom/index.js.map +1 -0
- package/dist/devices-matter/index.d.ts +29 -0
- package/dist/devices-matter/index.d.ts.map +1 -0
- package/dist/devices-matter/index.js +28 -0
- package/dist/devices-matter/index.js.map +1 -0
- package/dist/homebridge-ui/public/index.html +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +2 -2
- package/dist/index.test.js.map +1 -1
- package/dist/irdevice/airconditioner.d.ts +3 -3
- package/dist/irdevice/airconditioner.d.ts.map +1 -1
- package/dist/irdevice/airconditioner.js.map +1 -1
- package/dist/irdevice/airpurifier.d.ts +3 -3
- package/dist/irdevice/airpurifier.d.ts.map +1 -1
- package/dist/irdevice/airpurifier.js.map +1 -1
- package/dist/irdevice/camera.d.ts +3 -3
- package/dist/irdevice/camera.d.ts.map +1 -1
- package/dist/irdevice/camera.js.map +1 -1
- package/dist/irdevice/fan.d.ts +3 -3
- package/dist/irdevice/fan.d.ts.map +1 -1
- package/dist/irdevice/fan.js.map +1 -1
- package/dist/irdevice/irdevice.d.ts +3 -3
- package/dist/irdevice/irdevice.d.ts.map +1 -1
- package/dist/irdevice/irdevice.js.map +1 -1
- package/dist/irdevice/light.d.ts +3 -3
- package/dist/irdevice/light.d.ts.map +1 -1
- package/dist/irdevice/light.js.map +1 -1
- package/dist/irdevice/other.d.ts +3 -3
- package/dist/irdevice/other.d.ts.map +1 -1
- package/dist/irdevice/other.js.map +1 -1
- package/dist/irdevice/tv.d.ts +3 -3
- package/dist/irdevice/tv.d.ts.map +1 -1
- package/dist/irdevice/tv.js.map +1 -1
- package/dist/irdevice/vacuumcleaner.d.ts +3 -3
- package/dist/irdevice/vacuumcleaner.d.ts.map +1 -1
- package/dist/irdevice/vacuumcleaner.js.map +1 -1
- package/dist/irdevice/waterheater.d.ts +3 -3
- package/dist/irdevice/waterheater.d.ts.map +1 -1
- package/dist/irdevice/waterheater.js.map +1 -1
- package/dist/{platform.d.ts → platform-hap.d.ts} +2 -2
- package/dist/platform-hap.d.ts.map +1 -0
- package/dist/{platform.js → platform-hap.js} +50 -32
- package/dist/platform-hap.js.map +1 -0
- package/dist/platform-matter.d.ts +75 -0
- package/dist/platform-matter.d.ts.map +1 -0
- package/dist/platform-matter.js +379 -0
- package/dist/platform-matter.js.map +1 -0
- package/dist/utils.d.ts +5 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +43 -0
- package/dist/utils.js.map +1 -1
- package/dist/verifyconfig.test.d.ts +2 -0
- package/dist/verifyconfig.test.d.ts.map +1 -0
- package/dist/verifyconfig.test.js +167 -0
- package/dist/verifyconfig.test.js.map +1 -0
- package/docs/index.html +20 -11
- package/docs/variables/default.html +1 -1
- package/package.json +7 -7
- package/src/{device → devices-hap}/airpurifier.ts +2 -2
- package/src/{device → devices-hap}/blindtilt.ts +7 -3
- package/src/{device → devices-hap}/bot.ts +2 -2
- package/src/{device → devices-hap}/ceilinglight.ts +2 -2
- package/src/{device → devices-hap}/colorbulb.ts +2 -2
- package/src/{device → devices-hap}/contact.ts +2 -2
- package/src/{device → devices-hap}/curtain.ts +32 -10
- package/src/{device → devices-hap}/device.ts +12 -6
- package/src/{device → devices-hap}/fan.ts +2 -2
- package/src/{device → devices-hap}/hub.ts +7 -6
- package/src/{device → devices-hap}/humidifier.ts +2 -2
- package/src/{device → devices-hap}/iosensor.ts +2 -2
- package/src/{device → devices-hap}/lightstrip.ts +2 -2
- package/src/{device → devices-hap}/lock.ts +2 -2
- package/src/{device → devices-hap}/meter.ts +2 -2
- package/src/{device → devices-hap}/meterplus.ts +2 -2
- package/src/{device → devices-hap}/meterpro.ts +18 -5
- package/src/{device → devices-hap}/motion.ts +2 -2
- package/src/{device → devices-hap}/plug.ts +2 -2
- package/src/{device → devices-hap}/relayswitch.ts +2 -2
- package/src/{device → devices-hap}/robotvacuumcleaner.ts +2 -2
- package/src/{device → devices-hap}/waterdetector.ts +2 -2
- package/src/devices-matter/BaseMatterAccessory.ts +131 -0
- package/src/devices-matter/ColorLightAccessory.ts +113 -0
- package/src/devices-matter/ColorTemperatureLightAccessory.ts +98 -0
- package/src/devices-matter/ContactSensorAccessory.ts +37 -0
- package/src/devices-matter/DimmableLightAccessory.ts +196 -0
- package/src/devices-matter/DoorLockAccessory.ts +56 -0
- package/src/devices-matter/ExtendedColorLightAccessory.ts +127 -0
- package/src/devices-matter/FanAccessory.ts +87 -0
- package/src/devices-matter/HumiditySensorAccessory.ts +39 -0
- package/src/devices-matter/LeakSensorAccessory.ts +36 -0
- package/src/devices-matter/LightSensorAccessory.ts +39 -0
- package/src/devices-matter/OccupancySensorAccessory.ts +52 -0
- package/src/devices-matter/OnOffLightAccessory.ts +133 -0
- package/src/devices-matter/OnOffOutletAccessory.ts +52 -0
- package/src/devices-matter/OnOffSwitchAccessory.ts +52 -0
- package/src/devices-matter/RoboticVacuumAccessory.ts +484 -0
- package/src/devices-matter/SmokeCOAlarmAccessory.ts +59 -0
- package/src/devices-matter/TemperatureSensorAccessory.ts +39 -0
- package/src/devices-matter/ThermostatAccessory.ts +105 -0
- package/src/devices-matter/VenetianBlindAccessory.ts +118 -0
- package/src/devices-matter/WindowBlindAccessory.ts +94 -0
- package/src/devices-matter/custom/PowerStripAccessory.ts +309 -0
- package/src/devices-matter/custom/index.ts +8 -0
- package/src/devices-matter/index.ts +29 -0
- package/src/homebridge-ui/public/index.html +1 -1
- package/src/index.test.ts +2 -2
- package/src/index.ts +7 -2
- package/src/irdevice/airconditioner.ts +2 -2
- package/src/irdevice/airpurifier.ts +2 -2
- package/src/irdevice/camera.ts +2 -2
- package/src/irdevice/fan.ts +2 -2
- package/src/irdevice/irdevice.ts +2 -2
- package/src/irdevice/light.ts +2 -2
- package/src/irdevice/other.ts +2 -2
- package/src/irdevice/tv.ts +2 -2
- package/src/irdevice/vacuumcleaner.ts +2 -2
- package/src/irdevice/waterheater.ts +2 -2
- package/src/{platform.ts → platform-hap.ts} +47 -31
- package/src/platform-matter.ts +465 -0
- package/src/utils.ts +49 -0
- package/src/verifyconfig.test.ts +197 -0
- package/tsconfig.json +2 -1
- package/typedoc.json +1 -0
- package/.github/workflows/build.yml +0 -18
- package/.github/workflows/changerelease.yml +0 -11
- package/.github/workflows/labeler.yml +0 -16
- package/.github/workflows/release-drafter.yml +0 -14
- package/dist/device/airpurifier.d.ts.map +0 -1
- package/dist/device/airpurifier.js.map +0 -1
- package/dist/device/blindtilt.d.ts.map +0 -1
- package/dist/device/blindtilt.js.map +0 -1
- package/dist/device/bot.d.ts.map +0 -1
- package/dist/device/bot.js.map +0 -1
- package/dist/device/ceilinglight.d.ts.map +0 -1
- package/dist/device/ceilinglight.js.map +0 -1
- package/dist/device/colorbulb.d.ts.map +0 -1
- package/dist/device/colorbulb.js.map +0 -1
- package/dist/device/contact.d.ts.map +0 -1
- package/dist/device/contact.js.map +0 -1
- package/dist/device/curtain.d.ts.map +0 -1
- package/dist/device/curtain.js.map +0 -1
- package/dist/device/device.d.ts.map +0 -1
- package/dist/device/device.js.map +0 -1
- package/dist/device/fan.d.ts.map +0 -1
- package/dist/device/fan.js.map +0 -1
- package/dist/device/hub.d.ts.map +0 -1
- package/dist/device/hub.js.map +0 -1
- package/dist/device/humidifier.d.ts.map +0 -1
- package/dist/device/humidifier.js.map +0 -1
- package/dist/device/iosensor.d.ts.map +0 -1
- package/dist/device/iosensor.js.map +0 -1
- package/dist/device/lightstrip.d.ts.map +0 -1
- package/dist/device/lightstrip.js.map +0 -1
- package/dist/device/lock.d.ts.map +0 -1
- package/dist/device/lock.js.map +0 -1
- package/dist/device/meter.d.ts.map +0 -1
- package/dist/device/meter.js.map +0 -1
- package/dist/device/meterplus.d.ts.map +0 -1
- package/dist/device/meterplus.js.map +0 -1
- package/dist/device/meterpro.d.ts.map +0 -1
- package/dist/device/meterpro.js.map +0 -1
- package/dist/device/motion.d.ts.map +0 -1
- package/dist/device/motion.js.map +0 -1
- package/dist/device/plug.d.ts.map +0 -1
- package/dist/device/plug.js.map +0 -1
- package/dist/device/relayswitch.d.ts.map +0 -1
- package/dist/device/relayswitch.js.map +0 -1
- package/dist/device/robotvacuumcleaner.d.ts.map +0 -1
- package/dist/device/robotvacuumcleaner.js.map +0 -1
- package/dist/device/waterdetector.d.ts.map +0 -1
- package/dist/device/waterdetector.js.map +0 -1
- package/dist/platform.d.ts.map +0 -1
- package/dist/platform.js.map +0 -1
- /package/dist/{device → devices-hap}/airpurifier.js +0 -0
- /package/dist/{device → devices-hap}/bot.js +0 -0
- /package/dist/{device → devices-hap}/ceilinglight.js +0 -0
- /package/dist/{device → devices-hap}/colorbulb.js +0 -0
- /package/dist/{device → devices-hap}/contact.js +0 -0
- /package/dist/{device → devices-hap}/fan.js +0 -0
- /package/dist/{device → devices-hap}/humidifier.js +0 -0
- /package/dist/{device → devices-hap}/iosensor.js +0 -0
- /package/dist/{device → devices-hap}/lightstrip.js +0 -0
- /package/dist/{device → devices-hap}/lock.js +0 -0
- /package/dist/{device → devices-hap}/meter.js +0 -0
- /package/dist/{device → devices-hap}/meterplus.js +0 -0
- /package/dist/{device → devices-hap}/motion.js +0 -0
- /package/dist/{device → devices-hap}/plug.js +0 -0
- /package/dist/{device → devices-hap}/relayswitch.js +0 -0
- /package/dist/{device → devices-hap}/robotvacuumcleaner.js +0 -0
- /package/dist/{device → devices-hap}/waterdetector.js +0 -0
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
# Homebridge SwitchBot Plugin Development Guide
|
|
2
|
+
|
|
3
|
+
Always reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here.
|
|
4
|
+
|
|
5
|
+
## Branch Targeting Strategy
|
|
6
|
+
|
|
7
|
+
When creating pull requests, ALWAYS follow this branch targeting strategy:
|
|
8
|
+
|
|
9
|
+
1. **Primary Target:** Look for branches that start with "beta-" (e.g., `beta-4.3.2`, `beta-4.4.0`)
|
|
10
|
+
- If a beta branch exists, target the most recent beta branch for your PR
|
|
11
|
+
- Beta branches are used for testing and staging changes before they go to the main branch
|
|
12
|
+
|
|
13
|
+
2. **Beta Branch Creation:** If no beta branches exist, create one based on the next possible version
|
|
14
|
+
- Parse the current version from `package.json` (e.g., "4.3.1")
|
|
15
|
+
- Determine version increment type using issue/PR labels (patch/minor/major)
|
|
16
|
+
- Calculate the appropriate next version based on detected labels
|
|
17
|
+
- Create a new beta branch with the format `beta-X.Y.Z` (e.g., `beta-4.3.2`)
|
|
18
|
+
- Base the new beta branch on the `latest` branch
|
|
19
|
+
- Push the new beta branch to origin and target it for the PR
|
|
20
|
+
|
|
21
|
+
3. **Fallback Target:** Only if beta branch creation fails, target the `latest` branch
|
|
22
|
+
- The `latest` branch is the main development branch when no beta releases are in progress
|
|
23
|
+
|
|
24
|
+
4. **Branch Detection and Creation:** Use these methods to check and create branches:
|
|
25
|
+
- **Detection:** GitHub API: Use `github-mcp-server-list_branches` to get all branches and filter for "beta-" prefix
|
|
26
|
+
- **Detection:** Git command: `git ls-remote --heads origin | grep beta | sort -V | tail -1` to find the latest beta branch
|
|
27
|
+
- **Version parsing:** Extract version from package.json: `node -p "require('./package.json').version"`
|
|
28
|
+
- **Label Detection:** Check for version increment labels on the issue/PR:
|
|
29
|
+
- Use GitHub API to get issue/PR labels
|
|
30
|
+
- Look for labels: `patch`, `minor`, `major`
|
|
31
|
+
- These labels should be set before assigning the issue to Copilot
|
|
32
|
+
- **Version Increment Logic:** Choose increment type based on detected labels:
|
|
33
|
+
- **patch label found:** `node -p "const v=require('./package.json').version.split('.'); v[2]=parseInt(v[2])+1; v.join('.')"` (4.3.1 → 4.3.2)
|
|
34
|
+
- **minor label found:** `node -p "const v=require('./package.json').version.split('.'); v[1]=parseInt(v[1])+1; v[2]='0'; v.join('.')"` (4.3.1 → 4.4.0)
|
|
35
|
+
- **major label found:** `node -p "const v=require('./package.json').version.split('.'); v[0]=parseInt(v[0])+1; v[1]='0'; v[2]='0'; v.join('.')"` (4.3.1 → 5.0.0)
|
|
36
|
+
- **No relevant labels:** Default to patch increment as fallback
|
|
37
|
+
- **Multiple increment labels:** Use highest priority (major > minor > patch)
|
|
38
|
+
- **Label-Based Beta Branch Creation:**
|
|
39
|
+
```bash
|
|
40
|
+
# Detect version increment type from issue/PR labels
|
|
41
|
+
# Use GitHub API: github-mcp-server-get_issue or github-mcp-server-get_pull_request
|
|
42
|
+
# Check labels array for: patch, minor, major
|
|
43
|
+
|
|
44
|
+
# Calculate next version based on detected labels
|
|
45
|
+
if [[ labels contains "major" ]]; then
|
|
46
|
+
NEXT_VERSION=$(node -p "const v=require('./package.json').version.split('.'); v[0]=parseInt(v[0])+1; v[1]='0'; v[2]='0'; v.join('.')")
|
|
47
|
+
elif [[ labels contains "minor" ]]; then
|
|
48
|
+
NEXT_VERSION=$(node -p "const v=require('./package.json').version.split('.'); v[1]=parseInt(v[1])+1; v[2]='0'; v.join('.')")
|
|
49
|
+
else
|
|
50
|
+
# Default to patch increment (includes when "patch" label found or no labels)
|
|
51
|
+
NEXT_VERSION=$(node -p "const v=require('./package.json').version.split('.'); v[2]=parseInt(v[2])+1; v.join('.')")
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
BETA_BRANCH="beta-${NEXT_VERSION}"
|
|
55
|
+
|
|
56
|
+
# Create and push the beta branch from latest
|
|
57
|
+
git fetch origin
|
|
58
|
+
git checkout -b "${BETA_BRANCH}" origin/latest
|
|
59
|
+
git push origin "${BETA_BRANCH}"
|
|
60
|
+
```
|
|
61
|
+
- Always verify the target branch exists before creating the PR
|
|
62
|
+
|
|
63
|
+
**NEVER target other branches** unless specifically instructed, and avoid targeting:
|
|
64
|
+
- Individual feature branches (copilot/*, fix/*, etc.)
|
|
65
|
+
- Release branches that are not beta branches
|
|
66
|
+
- The main branch directly
|
|
67
|
+
|
|
68
|
+
This ensures proper workflow where changes are tested in beta branches before being merged to the main development line.
|
|
69
|
+
|
|
70
|
+
### Branch Targeting Validation and Troubleshooting
|
|
71
|
+
|
|
72
|
+
**Before Starting Work:**
|
|
73
|
+
1. **Verify Issue Labels:** Check that the assigned issue has appropriate version increment labels (`patch`, `minor`, or `major`)
|
|
74
|
+
2. **Check Existing Beta Branches:** Use GitHub API or Git commands to identify current beta branches
|
|
75
|
+
3. **Validate Target Branch:** Confirm the target beta branch exists or can be created successfully
|
|
76
|
+
|
|
77
|
+
**Validation Commands:**
|
|
78
|
+
```bash
|
|
79
|
+
# Check for existing beta branches
|
|
80
|
+
git ls-remote --heads origin | grep "beta-" | sort -V
|
|
81
|
+
|
|
82
|
+
# Get current version for reference
|
|
83
|
+
node -p "require('./package.json').version"
|
|
84
|
+
|
|
85
|
+
# Example: Calculate next patch version
|
|
86
|
+
node -p "const v=require('./package.json').version.split('.'); v[2]=parseInt(v[2])+1; v.join('.')"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**Troubleshooting Common Issues:**
|
|
90
|
+
- **No version labels on issue:** Proceed with patch increment but notify in PR description
|
|
91
|
+
- **Beta branch creation fails:** Fall back to targeting `latest` branch and document in PR
|
|
92
|
+
- **Multiple conflicting labels:** Use highest priority (major > minor > patch) and document decision
|
|
93
|
+
- **Network/API failures:** Use Git commands as fallback for branch detection
|
|
94
|
+
|
|
95
|
+
### Label Requirements for Version Management
|
|
96
|
+
|
|
97
|
+
**⚠️ CRITICAL REQUIREMENT:** Before assigning issues to Copilot, project maintainers **MUST** set appropriate version increment labels. This is required for proper branch targeting and version management.
|
|
98
|
+
|
|
99
|
+
**Required Labels:**
|
|
100
|
+
- **`patch`** - Bug fixes, documentation updates, minor improvements (4.3.1 → 4.3.2)
|
|
101
|
+
- **`minor`** - New features, device support additions, non-breaking enhancements (4.3.1 → 4.4.0)
|
|
102
|
+
- **`major`** - Breaking changes, API modifications, major architectural updates (4.3.1 → 5.0.0)
|
|
103
|
+
|
|
104
|
+
**Label Priority:** If multiple increment labels are present, the highest priority is used (major > minor > patch).
|
|
105
|
+
|
|
106
|
+
**Fallback Behavior:** If no version increment labels are found, the system defaults to patch increment to ensure conservative version management.
|
|
107
|
+
|
|
108
|
+
**Validation Process:** Copilot will:
|
|
109
|
+
1. Check for required labels on the assigned issue
|
|
110
|
+
2. Log a warning if no version increment labels are found
|
|
111
|
+
3. Proceed with patch increment as fallback
|
|
112
|
+
4. Create or target the appropriate beta branch based on version increment
|
|
113
|
+
|
|
114
|
+
## Working Effectively
|
|
115
|
+
|
|
116
|
+
### Bootstrap and Build Process
|
|
117
|
+
Run these commands in sequence to set up and build the project:
|
|
118
|
+
|
|
119
|
+
1. **Install dependencies:**
|
|
120
|
+
```bash
|
|
121
|
+
npm install --legacy-peer-deps
|
|
122
|
+
```
|
|
123
|
+
- CRITICAL: Must use `--legacy-peer-deps` flag due to TypeDoc dependency conflicts
|
|
124
|
+
- Takes approximately 30-45 seconds
|
|
125
|
+
- This is a known workaround documented in the codebase
|
|
126
|
+
|
|
127
|
+
2. **Build the project:**
|
|
128
|
+
```bash
|
|
129
|
+
npm run build
|
|
130
|
+
```
|
|
131
|
+
- Takes approximately 7-10 seconds
|
|
132
|
+
- Compiles TypeScript and copies UI files
|
|
133
|
+
- Output goes to `dist/` directory
|
|
134
|
+
|
|
135
|
+
3. **Run tests:**
|
|
136
|
+
```bash
|
|
137
|
+
npm run test
|
|
138
|
+
```
|
|
139
|
+
- Takes approximately 2-3 seconds
|
|
140
|
+
- Currently minimal test suite (1 test file)
|
|
141
|
+
- Use `npm run test:watch` for continuous testing during development
|
|
142
|
+
|
|
143
|
+
4. **Generate documentation:**
|
|
144
|
+
```bash
|
|
145
|
+
npm run docs
|
|
146
|
+
```
|
|
147
|
+
- Takes approximately 5-10 seconds
|
|
148
|
+
- Generates TypeDoc documentation in `docs/` directory
|
|
149
|
+
|
|
150
|
+
### Full Build and Validation Workflow
|
|
151
|
+
Complete validation workflow (approximately 30-45 seconds total):
|
|
152
|
+
```bash
|
|
153
|
+
npm install --legacy-peer-deps && npm run build && npm run test && npm run docs && npm run docs:lint && npm run docs:theme
|
|
154
|
+
```
|
|
155
|
+
- NEVER CANCEL: Set timeout to 90+ seconds for this complete workflow
|
|
156
|
+
- This validates TypeScript compilation, plugin loading, and documentation generation
|
|
157
|
+
|
|
158
|
+
### Development Commands
|
|
159
|
+
|
|
160
|
+
- **Watch mode for development:**
|
|
161
|
+
```bash
|
|
162
|
+
npm run watch
|
|
163
|
+
```
|
|
164
|
+
- Builds, links plugin locally, and starts nodemon for file watching
|
|
165
|
+
- Requires local Homebridge installation
|
|
166
|
+
|
|
167
|
+
- **Clean build artifacts:**
|
|
168
|
+
```bash
|
|
169
|
+
npm run clean
|
|
170
|
+
```
|
|
171
|
+
- Removes `dist/` directory
|
|
172
|
+
|
|
173
|
+
- **Check for outdated dependencies:**
|
|
174
|
+
```bash
|
|
175
|
+
npm run check
|
|
176
|
+
```
|
|
177
|
+
- WARNING: This will fail due to dependency conflicts - use with `--legacy-peer-deps`
|
|
178
|
+
|
|
179
|
+
### Known Issues and Workarounds
|
|
180
|
+
|
|
181
|
+
- **Linting fails:** `npm run lint` and `npm run lint:fix` currently fail due to ESLint configuration conflicts with import/extensions rule. Document any code style issues manually.
|
|
182
|
+
|
|
183
|
+
- **Dependency conflicts:** Always use `--legacy-peer-deps` flag for npm install due to TypeDoc theme dependency version mismatches.
|
|
184
|
+
|
|
185
|
+
- **Coverage and docs artifacts:** Add `coverage/` and `docs/` to `.gitignore` to prevent committing build artifacts.
|
|
186
|
+
|
|
187
|
+
## Validation Scenarios
|
|
188
|
+
|
|
189
|
+
### Manual Plugin Validation
|
|
190
|
+
After making changes, ALWAYS run these validation steps:
|
|
191
|
+
|
|
192
|
+
1. **Verify plugin builds and loads:**
|
|
193
|
+
```bash
|
|
194
|
+
npm run build && node -e "
|
|
195
|
+
try {
|
|
196
|
+
const plugin = require('./dist/index.js');
|
|
197
|
+
console.log('Plugin loads successfully');
|
|
198
|
+
console.log('Plugin type:', typeof plugin.default);
|
|
199
|
+
} catch (e) {
|
|
200
|
+
console.error('Plugin load failed:', e.message);
|
|
201
|
+
}"
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
2. **Test plugin registration:**
|
|
205
|
+
- Plugin exports a default function that registers with Homebridge
|
|
206
|
+
- Uses `PLUGIN_NAME = '@switchbot/homebridge-switchbot'` and `PLATFORM_NAME = 'SwitchBot'`
|
|
207
|
+
- Main platform class is `SwitchBotPlatform`
|
|
208
|
+
|
|
209
|
+
3. **Validate TypeScript compilation:**
|
|
210
|
+
- Must have no TypeScript errors
|
|
211
|
+
- Check `dist/` directory contains all expected `.js`, `.d.ts`, and `.map` files
|
|
212
|
+
|
|
213
|
+
4. **Test documentation generation:**
|
|
214
|
+
```bash
|
|
215
|
+
npm run docs:lint
|
|
216
|
+
```
|
|
217
|
+
- Must pass without warnings when using `--treatWarningsAsErrors`
|
|
218
|
+
|
|
219
|
+
### Code Coverage Validation
|
|
220
|
+
Run comprehensive test coverage analysis:
|
|
221
|
+
```bash
|
|
222
|
+
npm run test-coverage
|
|
223
|
+
```
|
|
224
|
+
- Current coverage is minimal (~1.36% overall)
|
|
225
|
+
- Coverage reports generated in `coverage/` directory
|
|
226
|
+
|
|
227
|
+
## Codebase Navigation
|
|
228
|
+
|
|
229
|
+
### Project Structure
|
|
230
|
+
```
|
|
231
|
+
├── src/ # Source TypeScript files
|
|
232
|
+
│ ├── device/ # Device implementations (21 files)
|
|
233
|
+
│ │ ├── device.ts # Base device class (deviceBase)
|
|
234
|
+
│ │ ├── bot.ts # SwitchBot Bot device
|
|
235
|
+
│ │ ├── curtain.ts # SwitchBot Curtain device
|
|
236
|
+
│ │ └── ... # Other device implementations
|
|
237
|
+
│ ├── irdevice/ # IR device implementations (10 files)
|
|
238
|
+
│ │ ├── irdevice.ts # Base IR device class
|
|
239
|
+
│ │ ├── tv.ts # TV IR control
|
|
240
|
+
│ │ └── ... # Other IR device implementations
|
|
241
|
+
│ ├── homebridge-ui/ # Plugin configuration UI
|
|
242
|
+
│ │ ├── server.ts # UI backend server
|
|
243
|
+
│ │ └── public/ # UI frontend files
|
|
244
|
+
│ ├── platform.ts # Main platform class (SwitchBotPlatform)
|
|
245
|
+
│ ├── settings.ts # Configuration interfaces and constants
|
|
246
|
+
│ ├── utils.ts # Utility functions
|
|
247
|
+
│ └── index.ts # Plugin entry point
|
|
248
|
+
├── config.schema.json # Homebridge configuration schema
|
|
249
|
+
├── dist/ # Compiled JavaScript output
|
|
250
|
+
├── docs/ # Generated TypeDoc documentation
|
|
251
|
+
└── coverage/ # Test coverage reports
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### Key Development Areas
|
|
255
|
+
|
|
256
|
+
- **Adding new devices:** Extend `src/device/device.ts` base class, implement in new file under `src/device/`
|
|
257
|
+
- **Adding IR devices:** Extend `src/irdevice/irdevice.ts` base class, implement in new file under `src/irdevice/`
|
|
258
|
+
- **Configuration changes:** Update `src/settings.ts` and `config.schema.json`
|
|
259
|
+
- **Platform modifications:** Edit `src/platform.ts` (main class with 2800+ lines)
|
|
260
|
+
- **Utility functions:** Modify `src/utils.ts` for shared functionality
|
|
261
|
+
|
|
262
|
+
### Device Connection Types
|
|
263
|
+
This plugin supports two connection methods to SwitchBot devices:
|
|
264
|
+
1. **OpenAPI Connection:** Requires SwitchBot Cloud API token/secret, works through SwitchBot Hub
|
|
265
|
+
2. **BLE (Bluetooth Low Energy):** Direct device connection, requires device MAC addresses
|
|
266
|
+
|
|
267
|
+
### Common Development Tasks
|
|
268
|
+
|
|
269
|
+
- **Testing device implementations:** Focus on `src/device/` and `src/irdevice/` directories
|
|
270
|
+
- **Configuration UI changes:** Modify `src/homebridge-ui/` files and rebuild with `npm run plugin-ui`
|
|
271
|
+
- **Platform logic changes:** Edit `src/platform.ts` - the main orchestration file
|
|
272
|
+
- **Adding device support:** Create new device class extending `deviceBase` or IR device class
|
|
273
|
+
|
|
274
|
+
### Important File Relationships
|
|
275
|
+
- Always update both device implementation AND platform.ts when adding new device types
|
|
276
|
+
- Configuration schema changes require updates to settings.ts interfaces
|
|
277
|
+
- Device MAC address validation is handled in utils.ts (`formatDeviceIdAsMac`)
|
|
278
|
+
- BLE connection handling is in the base device classes
|
|
279
|
+
|
|
280
|
+
## Build Time Expectations
|
|
281
|
+
|
|
282
|
+
- **npm install --legacy-peer-deps:** 30-45 seconds
|
|
283
|
+
- **npm run build:** 7-10 seconds
|
|
284
|
+
- **npm run test:** 2-3 seconds
|
|
285
|
+
- **npm run docs:** 5-10 seconds
|
|
286
|
+
- **Complete validation workflow:** 30-45 seconds total
|
|
287
|
+
- **NEVER CANCEL:** Always wait for builds to complete, set timeouts to 90+ seconds for safety
|
|
288
|
+
|
|
289
|
+
## CI/CD Integration
|
|
290
|
+
|
|
291
|
+
The project uses GitHub Actions for CI:
|
|
292
|
+
- **Build workflow:** `.github/workflows/build.yml` runs Node.js build and test, then ESLint
|
|
293
|
+
- **Required checks:** Build must pass, tests must pass
|
|
294
|
+
- **Known CI issue:** ESLint currently fails due to configuration conflicts
|
|
295
|
+
|
|
296
|
+
Always run the complete validation workflow locally before committing:
|
|
297
|
+
```bash
|
|
298
|
+
npm run build && npm run test && npm run docs:lint
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
## Complete Workflow Examples
|
|
302
|
+
|
|
303
|
+
### Example 1: Issue with Proper Labels
|
|
304
|
+
**Scenario:** Issue #1234 assigned to Copilot with `minor` label
|
|
305
|
+
|
|
306
|
+
**Workflow:**
|
|
307
|
+
1. **Label Detection:** Copilot detects `minor` label → target version 4.4.0
|
|
308
|
+
2. **Branch Check:** Look for existing beta branches: `git ls-remote --heads origin | grep beta-`
|
|
309
|
+
3. **Beta Branch Creation:** No beta-4.4.0 exists → create from latest branch
|
|
310
|
+
4. **PR Targeting:** Target the new beta-4.4.0 branch
|
|
311
|
+
5. **Development:** Make changes, test, commit to beta branch
|
|
312
|
+
|
|
313
|
+
### Example 2: Issue without Version Labels
|
|
314
|
+
**Scenario:** Issue #1276 assigned to Copilot with no version increment labels
|
|
315
|
+
|
|
316
|
+
**Workflow:**
|
|
317
|
+
1. **Label Detection:** No version labels found → default to patch increment
|
|
318
|
+
2. **Version Calculation:** Current 4.3.1 → next patch 4.3.2
|
|
319
|
+
3. **Branch Check:** beta-4.3.2 already exists → target existing branch
|
|
320
|
+
4. **Development:** Make changes, document label requirement in PR description
|
|
321
|
+
|
|
322
|
+
### Example 3: Multiple Version Labels
|
|
323
|
+
**Scenario:** Issue assigned with both `minor` and `patch` labels
|
|
324
|
+
|
|
325
|
+
**Workflow:**
|
|
326
|
+
1. **Label Priority:** minor (higher priority) overrides patch
|
|
327
|
+
2. **Version Target:** Calculate minor increment instead of patch
|
|
328
|
+
3. **Documentation:** Note in PR description why minor was chosen over patch
|
|
@@ -7,22 +7,20 @@ on:
|
|
|
7
7
|
|
|
8
8
|
jobs:
|
|
9
9
|
build_and_test:
|
|
10
|
-
uses:
|
|
10
|
+
uses: homebridge/.github/.github/workflows/nodejs-build-and-test.yml@latest
|
|
11
11
|
with:
|
|
12
|
-
enable_coverage:
|
|
12
|
+
enable_coverage: false
|
|
13
13
|
secrets:
|
|
14
14
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
15
|
-
|
|
16
15
|
lint:
|
|
17
16
|
needs: build_and_test
|
|
18
|
-
uses:
|
|
17
|
+
uses: homebridge/.github/.github/workflows/eslint.yml@latest
|
|
19
18
|
|
|
20
19
|
publish:
|
|
21
20
|
needs: lint
|
|
22
|
-
if: ${{ github.repository == 'OpenWonderLabs/homebridge-switchbot' }}
|
|
23
21
|
permissions:
|
|
24
22
|
id-token: write
|
|
25
|
-
uses:
|
|
23
|
+
uses: homebridge/.github/.github/workflows/npm-publish-esm.yml@latest
|
|
26
24
|
with:
|
|
27
25
|
tag: 'beta'
|
|
28
26
|
dynamically_adjust_version: true
|
|
@@ -33,8 +31,7 @@ jobs:
|
|
|
33
31
|
|
|
34
32
|
pre-release:
|
|
35
33
|
needs: publish
|
|
36
|
-
|
|
37
|
-
uses: OpenWonderLabs/.github/.github/workflows/pre-release.yml@latest
|
|
34
|
+
uses: homebridge/.github/.github/workflows/pre-release.yml@latest
|
|
38
35
|
with:
|
|
39
36
|
npm_version: ${{ needs.publish.outputs.NPM_VERSION }}
|
|
40
37
|
body: |
|
|
@@ -45,12 +42,11 @@ jobs:
|
|
|
45
42
|
github-releases-to-discord:
|
|
46
43
|
name: Discord Webhooks
|
|
47
44
|
needs: [build_and_test,publish]
|
|
48
|
-
|
|
49
|
-
uses: OpenWonderLabs/.github/.github/workflows/discord-webhooks.yml@latest
|
|
45
|
+
uses: homebridge/.github/.github/workflows/discord-webhooks.yml@latest
|
|
50
46
|
with:
|
|
51
47
|
title: "SwitchBot Beta Release"
|
|
52
48
|
description: |
|
|
53
49
|
Version `v${{ needs.publish.outputs.NPM_VERSION }}`
|
|
54
|
-
url: "https://github.com/homebridge
|
|
50
|
+
url: "https://github.com/OpenWonderLabs/homebridge-switchbot/releases/tag/v${{ needs.publish.outputs.NPM_VERSION }}"
|
|
55
51
|
secrets:
|
|
56
|
-
DISCORD_WEBHOOK: ${{ secrets.
|
|
52
|
+
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_URL_LATEST }}
|
|
@@ -1,39 +1,75 @@
|
|
|
1
|
-
name: Release
|
|
1
|
+
name: Unified Release
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
#- "alpha-*"
|
|
7
|
+
#- "beta-*"
|
|
8
|
+
- latest
|
|
9
|
+
workflow_dispatch:
|
|
6
10
|
|
|
7
11
|
jobs:
|
|
8
|
-
|
|
9
|
-
|
|
12
|
+
# 1️⃣ Determine release type, ESM status, and branch name
|
|
13
|
+
determine-release-type:
|
|
14
|
+
uses: homebridge/.github/.github/workflows/determine-release-type.yml@latest
|
|
10
15
|
with:
|
|
11
|
-
|
|
16
|
+
ref_name: ${{ github.ref_name }}
|
|
17
|
+
|
|
18
|
+
# 2️⃣ Update version and changelog using the scripts
|
|
19
|
+
update-version:
|
|
20
|
+
needs: determine-release-type
|
|
21
|
+
uses: homebridge/.github/.github/workflows/update-version.yml@latest
|
|
22
|
+
with:
|
|
23
|
+
release_type: ${{ needs.determine-release-type.outputs.release_type }}
|
|
24
|
+
is_esm: ${{ needs.determine-release-type.outputs.is_esm == 'true' }}
|
|
12
25
|
secrets:
|
|
13
|
-
|
|
26
|
+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
14
27
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
28
|
+
# 3️⃣ Publish to NPM and create GitHub release
|
|
29
|
+
publish-release:
|
|
30
|
+
needs: [determine-release-type, update-version]
|
|
18
31
|
permissions:
|
|
19
32
|
id-token: write
|
|
20
|
-
|
|
33
|
+
contents: write
|
|
34
|
+
uses: homebridge/.github/.github/workflows/publish-release.yml@latest
|
|
35
|
+
with:
|
|
36
|
+
release_type: ${{ needs.determine-release-type.outputs.release_type }}
|
|
37
|
+
version: ${{ needs.update-version.outputs.version }}
|
|
38
|
+
is_esm: ${{ needs.determine-release-type.outputs.is_esm == 'true' }}
|
|
39
|
+
secrets:
|
|
40
|
+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
41
|
+
|
|
42
|
+
# 4️⃣ Promote branch if this is a prerelease (alpha/beta)
|
|
43
|
+
promote-branch:
|
|
44
|
+
needs: [determine-release-type, publish-release]
|
|
45
|
+
if: ${{ needs.determine-release-type.outputs.release_type != 'latest' && needs.determine-release-type.outputs.release_type != 'skip' }}
|
|
46
|
+
uses: homebridge/.github/.github/workflows/promote-branch.yml@latest
|
|
47
|
+
with:
|
|
48
|
+
branch_name: ${{ needs.determine-release-type.outputs.branch_name }}
|
|
49
|
+
release_type: ${{ needs.determine-release-type.outputs.release_type }}
|
|
50
|
+
is_esm: ${{ needs.determine-release-type.outputs.is_esm == 'true' }}
|
|
21
51
|
secrets:
|
|
22
|
-
|
|
52
|
+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
23
53
|
|
|
54
|
+
# 5️⃣ Notify if any previous job fails
|
|
55
|
+
workflow-failure:
|
|
56
|
+
if: ${{ failure() }}
|
|
57
|
+
needs: [determine-release-type, update-version, publish-release, promote-branch]
|
|
58
|
+
uses: homebridge/.github/.github/workflows/report-failure.yml@latest
|
|
59
|
+
with:
|
|
60
|
+
workflow_name: ${{ github.workflow }}
|
|
61
|
+
job_name: ${{ github.job }}
|
|
62
|
+
run_url: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
|
63
|
+
|
|
64
|
+
# 6️⃣ Post to Discord
|
|
24
65
|
github-releases-to-discord:
|
|
25
66
|
name: Discord Webhooks
|
|
26
|
-
needs: [
|
|
27
|
-
|
|
28
|
-
uses: OpenWonderLabs/.github/.github/workflows/discord-webhooks.yml@latest
|
|
67
|
+
needs: [determine-release-type, update-version, publish-release]
|
|
68
|
+
uses: homebridge/.github/.github/workflows/discord-webhooks.yml@latest
|
|
29
69
|
with:
|
|
30
70
|
title: "SwitchBot Release"
|
|
31
71
|
description: |
|
|
32
|
-
Version `v${{ needs.
|
|
33
|
-
url: "https://github.com/homebridge
|
|
72
|
+
Version `v${{ needs.update-version.outputs.version }}`
|
|
73
|
+
url: "https://github.com/OpenWonderLabs/homebridge-switchbot/releases/tag/v${{ needs.update-version.outputs.version }}"
|
|
34
74
|
secrets:
|
|
35
75
|
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK_URL_LATEST }}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
package/README.md
CHANGED
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
- [SwitchBot Indoor/Outdoor Thermo-Hygrometer](https://www.switch-bot.com/products/switchbot-indoor-outdoor-thermo-hygrometer)
|
|
95
95
|
- Supports OpenAPI & Bluetooth Low Energy (BLE) Connections
|
|
96
96
|
- If using OpenAPI:
|
|
97
|
-
- [SwitchBot Hub Mini](https://www.switch-bot.com/products/switchbot-hub-mini)
|
|
97
|
+
- [SwitchBot Hub Mini](https://www.switch-bot.com/products/switchbot-hub-mini), [SwitchBot Hub 2](https://us.switch-bot.com/products/switchbot-hub-2), or [SwitchBot Hub 3](https://us.switch-bot.com/products/switchbot-hub-3) Required
|
|
98
98
|
- Enable Cloud Services for Device on SwitchBot App
|
|
99
99
|
- If using Bluetooth Low Energy (BLE) only:
|
|
100
100
|
- Must supply `deviceId` & `deviceName` to Device Config
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
- [SwitchBot Motion Sensor](https://www.switch-bot.com/products/motion-sensor)
|
|
103
103
|
- Supports OpenAPI & Bluetooth Low Energy (BLE) Connections
|
|
104
104
|
- If using OpenAPI:
|
|
105
|
-
- [SwitchBot Hub Mini](https://www.switch-bot.com/products/switchbot-hub-mini)
|
|
105
|
+
- [SwitchBot Hub Mini](https://www.switch-bot.com/products/switchbot-hub-mini), [SwitchBot Hub 2](https://us.switch-bot.com/products/switchbot-hub-2), or [SwitchBot Hub 3](https://us.switch-bot.com/products/switchbot-hub-3) Required
|
|
106
106
|
- Enable Cloud Services for Device on SwitchBot App
|
|
107
107
|
- If using Bluetooth Low Energy (BLE) only:
|
|
108
108
|
- Must supply `deviceId` & `deviceName` to Device Config
|
|
@@ -110,7 +110,7 @@
|
|
|
110
110
|
- [SwitchBot Contact Sensor](https://www.switch-bot.com/products/contact-sensor)
|
|
111
111
|
- Supports OpenAPI & Bluetooth Low Energy (BLE) Connections
|
|
112
112
|
- If using OpenAPI:
|
|
113
|
-
- [SwitchBot Hub Mini](https://www.switch-bot.com/products/switchbot-hub-mini)
|
|
113
|
+
- [SwitchBot Hub Mini](https://www.switch-bot.com/products/switchbot-hub-mini), [SwitchBot Hub 2](https://us.switch-bot.com/products/switchbot-hub-2), or [SwitchBot Hub 3](https://us.switch-bot.com/products/switchbot-hub-3) Required
|
|
114
114
|
- Enable Cloud Services for Device on SwitchBot App
|
|
115
115
|
- If using Bluetooth Low Energy (BLE) only:
|
|
116
116
|
- Must supply `deviceId` & `deviceName` to Device Config
|
|
@@ -119,7 +119,7 @@
|
|
|
119
119
|
- [SwitchBot Curtain 3](https://www.switch-bot.com/products/switchbot-curtain-3)
|
|
120
120
|
- Supports OpenAPI & Bluetooth Low Energy (BLE) Connections
|
|
121
121
|
- If using OpenAPI:
|
|
122
|
-
- [SwitchBot Hub Mini](https://www.switch-bot.com/products/switchbot-hub-mini)
|
|
122
|
+
- [SwitchBot Hub Mini](https://www.switch-bot.com/products/switchbot-hub-mini), [SwitchBot Hub 2](https://us.switch-bot.com/products/switchbot-hub-2), or [SwitchBot Hub 3](https://us.switch-bot.com/products/switchbot-hub-3) Required
|
|
123
123
|
- Enable Cloud Services for Device on SwitchBot App
|
|
124
124
|
- If using Bluetooth Low Energy (BLE) only:
|
|
125
125
|
- Must supply `deviceId` & `deviceName` to Device Config
|
|
@@ -127,7 +127,7 @@
|
|
|
127
127
|
- [SwitchBot Blind Tilt](https://us.switch-bot.com/products/switchbot-blind-tilt)
|
|
128
128
|
- Supports OpenAPI & partial Bluetooth Low Energy (BLE) Connections
|
|
129
129
|
- If using OpenAPI:
|
|
130
|
-
- [SwitchBot Hub Mini](https://www.switch-bot.com/products/switchbot-hub-mini)
|
|
130
|
+
- [SwitchBot Hub Mini](https://www.switch-bot.com/products/switchbot-hub-mini), [SwitchBot Hub 2](https://us.switch-bot.com/products/switchbot-hub-2), or [SwitchBot Hub 3](https://us.switch-bot.com/products/switchbot-hub-3) Required
|
|
131
131
|
- Enable Cloud Services for Device on SwitchBot App
|
|
132
132
|
- [SwitchBot Bulb](https://www.switch-bot.com/products/switchbot-color-bulb)
|
|
133
133
|
- [SwitchBot Ceiling Light](https://www.switchbot.jp/collections/all/products/switchbot-ceiling-light)
|
|
@@ -135,13 +135,13 @@
|
|
|
135
135
|
- [SwitchBot Light Strip](https://www.switch-bot.com/products/switchbot-light-strip)
|
|
136
136
|
- Supports OpenAPI & partial Bluetooth Low Energy (BLE) Connections
|
|
137
137
|
- If using OpenAPI:
|
|
138
|
-
- [SwitchBot Hub Mini](https://www.switch-bot.com/products/switchbot-hub-mini)
|
|
138
|
+
- [SwitchBot Hub Mini](https://www.switch-bot.com/products/switchbot-hub-mini), [SwitchBot Hub 2](https://us.switch-bot.com/products/switchbot-hub-2), or [SwitchBot Hub 3](https://us.switch-bot.com/products/switchbot-hub-3) Required
|
|
139
139
|
- Enable Cloud Services for Device on SwitchBot App
|
|
140
140
|
- [SwitchBot Lock](https://us.switch-bot.com/products/switchbot-lock)
|
|
141
141
|
- [SwitchBot Lock Pro](https://www.switchbot.jp/products/switchbot-lock-pro)
|
|
142
142
|
- Supports OpenAPI & Bluetooth Low Energy (BLE) Connections
|
|
143
143
|
- If using OpenAPI:
|
|
144
|
-
- [SwitchBot Hub Mini](https://www.switch-bot.com/products/switchbot-hub-mini)
|
|
144
|
+
- [SwitchBot Hub Mini](https://www.switch-bot.com/products/switchbot-hub-mini), [SwitchBot Hub 2](https://us.switch-bot.com/products/switchbot-hub-2), or [SwitchBot Hub 3](https://us.switch-bot.com/products/switchbot-hub-3) Required
|
|
145
145
|
- Enable Cloud Services for Device on SwitchBot App
|
|
146
146
|
- US: [SwitchBot Mini Robot Vacuum K10+](https://www.switch-bot.com/products/switchbot-mini-robot-vacuum-k10)
|
|
147
147
|
- US: [SwitchBot Floor Cleaning Robot S10](https://www.switch-bot.com/products/switchbot-floor-cleaning-robot-s10)
|
|
@@ -153,12 +153,12 @@
|
|
|
153
153
|
- [SwitchBot Plug Mini (JP)](https://www.switchbot.jp/products/switchbot-plug-mini)
|
|
154
154
|
- Supports OpenAPI & Bluetooth Low Energy (BLE) Connections
|
|
155
155
|
- If using OpenAPI:
|
|
156
|
-
- [SwitchBot Hub Mini](https://www.switch-bot.com/products/switchbot-hub-mini)
|
|
156
|
+
- [SwitchBot Hub Mini](https://www.switch-bot.com/products/switchbot-hub-mini), [SwitchBot Hub 2](https://us.switch-bot.com/products/switchbot-hub-2), or [SwitchBot Hub 3](https://us.switch-bot.com/products/switchbot-hub-3) Required
|
|
157
157
|
- Enable Cloud Services for Device on SwitchBot App
|
|
158
158
|
- [SwitchBot Bot](https://www.switch-bot.com/products/switchbot-bot)
|
|
159
159
|
- Supports OpenAPI & Bluetooth Low Energy (BLE) Connections
|
|
160
160
|
- If using OpenAPI:
|
|
161
|
-
- [SwitchBot Hub Mini](https://www.switch-bot.com/products/switchbot-hub-mini)
|
|
161
|
+
- [SwitchBot Hub Mini](https://www.switch-bot.com/products/switchbot-hub-mini), [SwitchBot Hub 2](https://us.switch-bot.com/products/switchbot-hub-2), or [SwitchBot Hub 3](https://us.switch-bot.com/products/switchbot-hub-3) Required
|
|
162
162
|
- Enable Cloud Services for Device on SwitchBot App
|
|
163
163
|
- You must set your Bot's Device ID for either Press Mode or Switch Mode in Plugin Config (SwitchBot Device Settings > Bot Settings)
|
|
164
164
|
- Press Mode - Turns on then instantly turn it off
|
|
@@ -171,6 +171,9 @@
|
|
|
171
171
|
- [SwitchBot Hub 2](https://us.switch-bot.com/products/switchbot-hub-2)
|
|
172
172
|
- Supports OpenAPI & Bluetooth Low Energy (BLE) Connections
|
|
173
173
|
- Enables Humidity, Temperature, and Light Sensor
|
|
174
|
+
- [SwitchBot Hub 3](https://us.switch-bot.com/products/switchbot-hub-3)
|
|
175
|
+
- Supports OpenAPI & Bluetooth Low Energy (BLE) Connections
|
|
176
|
+
- Enables Humidity, Temperature, and Light Sensor
|
|
174
177
|
- [SwitchBot Battery Circulator Fan](https://us.switch-bot.com/products/switchbot-battery-circulator-fan)
|
|
175
178
|
- Supports OpenAPI Connection Only
|
|
176
179
|
- [SwitchBot Water Leak Detector](https://us.switch-bot.com/products/switchbot-water-leak-detector)
|
|
@@ -178,7 +181,7 @@
|
|
|
178
181
|
|
|
179
182
|
## Supported IR Devices
|
|
180
183
|
|
|
181
|
-
### _(All IR Devices require [SwitchBot Hub 2](https://us.switch-bot.com/products/switchbot-hub-2) or [Hub Mini](https://www.switch-bot.com/products/switchbot-hub-mini))_
|
|
184
|
+
### _(All IR Devices require [SwitchBot Hub 2](https://us.switch-bot.com/products/switchbot-hub-2), [SwitchBot Hub 3](https://us.switch-bot.com/products/switchbot-hub-3), or [Hub Mini](https://www.switch-bot.com/products/switchbot-hub-mini))_
|
|
182
185
|
|
|
183
186
|
- TV
|
|
184
187
|
- Allows for On/Off and Volume Controls
|
package/config.schema.json
CHANGED
|
@@ -32,18 +32,8 @@
|
|
|
32
32
|
"x-schema-form": {
|
|
33
33
|
"type": "secret"
|
|
34
34
|
}
|
|
35
|
-
},
|
|
36
|
-
"notice": {
|
|
37
|
-
"title": "Notice",
|
|
38
|
-
"type": "string",
|
|
39
|
-
"default": "Keep your Token & Secret a secret!"
|
|
40
35
|
}
|
|
41
|
-
}
|
|
42
|
-
"required": [
|
|
43
|
-
"token",
|
|
44
|
-
"secret",
|
|
45
|
-
"notice"
|
|
46
|
-
]
|
|
36
|
+
}
|
|
47
37
|
},
|
|
48
38
|
"options": {
|
|
49
39
|
"type": "object",
|
|
@@ -13094,7 +13084,6 @@
|
|
|
13094
13084
|
}
|
|
13095
13085
|
},
|
|
13096
13086
|
"required": [
|
|
13097
|
-
"name",
|
|
13098
13087
|
"logging"
|
|
13099
13088
|
]
|
|
13100
13089
|
}
|