@switchbot/homebridge-switchbot 4.3.2-beta.8 → 5.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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} +32 -31
- package/dist/{platform.js.map → platform-hap.js.map} +1 -1
- package/dist/platform-matter.d.ts +75 -0
- package/dist/platform-matter.d.ts.map +1 -0
- package/dist/platform-matter.js +362 -0
- package/dist/platform-matter.js.map +1 -0
- 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 +10 -10
- 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} +31 -30
- package/src/platform-matter.ts +450 -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/{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
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
|
|
6
6
|
import type { device, outdoorMeterServiceData, outdoorMeterStatus, outdoorMeterWebhookContext, SwitchBotBLE } from 'node-switchbot'
|
|
7
7
|
|
|
8
|
-
import type {
|
|
8
|
+
import type { SwitchBotHAPPlatform } from '../platform-hap.js'
|
|
9
9
|
import type { devicesConfig, indoorOutdoorSensorConfig } from '../settings.js'
|
|
10
10
|
|
|
11
11
|
import { Units } from 'homebridge'
|
|
@@ -59,7 +59,7 @@ export class IOSensor extends deviceBase {
|
|
|
59
59
|
doIOSensorUpdate: Subject<void>
|
|
60
60
|
|
|
61
61
|
constructor(
|
|
62
|
-
readonly platform:
|
|
62
|
+
readonly platform: SwitchBotHAPPlatform,
|
|
63
63
|
accessory: PlatformAccessory,
|
|
64
64
|
device: device & devicesConfig,
|
|
65
65
|
) {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import type { CharacteristicValue, Controller, ControllerConstructor, ControllerServiceMap, PlatformAccessory, Service } from 'homebridge'
|
|
6
6
|
import type { bodyChange, device, stripLightServiceData, stripLightStatus, stripLightWebhookContext, SwitchBotBLE, SwitchbotDevice, WoStrip } from 'node-switchbot'
|
|
7
7
|
|
|
8
|
-
import type {
|
|
8
|
+
import type { SwitchBotHAPPlatform } from '../platform-hap.js'
|
|
9
9
|
import type { devicesConfig, stripLightConfig } from '../settings.js'
|
|
10
10
|
|
|
11
11
|
/*
|
|
@@ -54,7 +54,7 @@ export class StripLight extends deviceBase {
|
|
|
54
54
|
doStripLightUpdate!: Subject<void>
|
|
55
55
|
|
|
56
56
|
constructor(
|
|
57
|
-
readonly platform:
|
|
57
|
+
readonly platform: SwitchBotHAPPlatform,
|
|
58
58
|
accessory: PlatformAccessory,
|
|
59
59
|
device: device & devicesConfig,
|
|
60
60
|
) {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
|
|
6
6
|
import type { bodyChange, device, lockProServiceData, lockProStatus, lockProWebhookContext, lockServiceData, lockStatus, lockWebhookContext, SwitchBotBLE, SwitchbotDevice, WoSmartLock } from 'node-switchbot'
|
|
7
7
|
|
|
8
|
-
import type {
|
|
8
|
+
import type { SwitchBotHAPPlatform } from '../platform-hap.js'
|
|
9
9
|
import type { devicesConfig, lockConfig } from '../settings.js'
|
|
10
10
|
|
|
11
11
|
/*
|
|
@@ -60,7 +60,7 @@ export class Lock extends deviceBase {
|
|
|
60
60
|
doLockUpdate!: Subject<void>
|
|
61
61
|
|
|
62
62
|
constructor(
|
|
63
|
-
readonly platform:
|
|
63
|
+
readonly platform: SwitchBotHAPPlatform,
|
|
64
64
|
accessory: PlatformAccessory,
|
|
65
65
|
device: device & devicesConfig,
|
|
66
66
|
) {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
|
|
6
6
|
import type { device, meterServiceData, meterStatus, meterWebhookContext, SwitchBotBLE } from 'node-switchbot'
|
|
7
7
|
|
|
8
|
-
import type {
|
|
8
|
+
import type { SwitchBotHAPPlatform } from '../platform-hap.js'
|
|
9
9
|
import type { devicesConfig, meterConfig } from '../settings.js'
|
|
10
10
|
|
|
11
11
|
import { Units } from 'homebridge'
|
|
@@ -54,7 +54,7 @@ export class Meter extends deviceBase {
|
|
|
54
54
|
doMeterUpdate: Subject<void>
|
|
55
55
|
|
|
56
56
|
constructor(
|
|
57
|
-
readonly platform:
|
|
57
|
+
readonly platform: SwitchBotHAPPlatform,
|
|
58
58
|
accessory: PlatformAccessory,
|
|
59
59
|
device: device & devicesConfig,
|
|
60
60
|
) {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
|
|
6
6
|
import type { device, meterPlusServiceData, meterPlusStatus, meterPlusWebhookContext, SwitchBotBLE } from 'node-switchbot'
|
|
7
7
|
|
|
8
|
-
import type {
|
|
8
|
+
import type { SwitchBotHAPPlatform } from '../platform-hap.js'
|
|
9
9
|
import type { devicesConfig, meterConfig } from '../settings.js'
|
|
10
10
|
|
|
11
11
|
import { Units } from 'homebridge'
|
|
@@ -59,7 +59,7 @@ export class MeterPlus extends deviceBase {
|
|
|
59
59
|
doMeterUpdate: Subject<void>
|
|
60
60
|
|
|
61
61
|
constructor(
|
|
62
|
-
readonly platform:
|
|
62
|
+
readonly platform: SwitchBotHAPPlatform,
|
|
63
63
|
accessory: PlatformAccessory,
|
|
64
64
|
device: device & devicesConfig,
|
|
65
65
|
) {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
|
|
6
6
|
import type { device, meterProCO2ServiceData, meterProCO2Status, meterProCO2WebhookContext, meterProServiceData, meterProStatus, meterProWebhookContext, SwitchBotBLE } from 'node-switchbot'
|
|
7
7
|
|
|
8
|
-
import type {
|
|
8
|
+
import type { SwitchBotHAPPlatform } from '../platform-hap.js'
|
|
9
9
|
import type { devicesConfig, meterProConfig } from '../settings.js'
|
|
10
10
|
|
|
11
11
|
import { Units } from 'homebridge'
|
|
@@ -66,7 +66,7 @@ export class MeterPro extends deviceBase {
|
|
|
66
66
|
doMeterUpdate: Subject<void>
|
|
67
67
|
|
|
68
68
|
constructor(
|
|
69
|
-
readonly platform:
|
|
69
|
+
readonly platform: SwitchBotHAPPlatform,
|
|
70
70
|
accessory: PlatformAccessory,
|
|
71
71
|
device: device & devicesConfig,
|
|
72
72
|
) {
|
|
@@ -237,7 +237,6 @@ export class MeterPro extends deviceBase {
|
|
|
237
237
|
? this.hap.Characteristic.CarbonDioxideDetected.CO2_LEVELS_ABNORMAL
|
|
238
238
|
: this.hap.Characteristic.CarbonDioxideDetected.CO2_LEVELS_NORMAL
|
|
239
239
|
this.debugLog(`CarbonDioxideDetected: ${this.CarbonDioxideSensor.CarbonDioxideDetected}`)
|
|
240
|
-
this.warnLog('Carbon Dioxide Sensor is not supported yet.')
|
|
241
240
|
}
|
|
242
241
|
// Battery Info
|
|
243
242
|
if ('battery' in this.serviceData) {
|
|
@@ -277,7 +276,6 @@ export class MeterPro extends deviceBase {
|
|
|
277
276
|
? this.hap.Characteristic.CarbonDioxideDetected.CO2_LEVELS_ABNORMAL
|
|
278
277
|
: this.hap.Characteristic.CarbonDioxideDetected.CO2_LEVELS_NORMAL
|
|
279
278
|
this.debugLog(`CarbonDioxideDetected: ${this.CarbonDioxideSensor.CarbonDioxideDetected}`)
|
|
280
|
-
this.warnLog('Carbon Dioxide Sensor is not supported yet.')
|
|
281
279
|
}
|
|
282
280
|
|
|
283
281
|
// Battery Info
|
|
@@ -338,7 +336,6 @@ export class MeterPro extends deviceBase {
|
|
|
338
336
|
? this.hap.Characteristic.CarbonDioxideDetected.CO2_LEVELS_ABNORMAL
|
|
339
337
|
: this.hap.Characteristic.CarbonDioxideDetected.CO2_LEVELS_NORMAL
|
|
340
338
|
this.debugLog(`CarbonDioxideDetected: ${this.CarbonDioxideSensor.CarbonDioxideDetected}`)
|
|
341
|
-
this.warnLog('Carbon Dioxide Sensor is not supported yet.')
|
|
342
339
|
}
|
|
343
340
|
}
|
|
344
341
|
|
|
@@ -469,6 +466,14 @@ export class MeterPro extends deviceBase {
|
|
|
469
466
|
if (!(this.device as meterProConfig).hide_temperature && this.TemperatureSensor?.Service) {
|
|
470
467
|
await this.updateCharacteristic(this.TemperatureSensor.Service, this.hap.Characteristic.CurrentTemperature, this.TemperatureSensor.CurrentTemperature, 'CurrentTemperature')
|
|
471
468
|
}
|
|
469
|
+
// CarbonDioxideDetected
|
|
470
|
+
if (!(this.device as meterProConfig).hide_co2 && this.CarbonDioxideSensor?.Service && this.device.deviceType === 'MeterPro(CO2)') {
|
|
471
|
+
await this.updateCharacteristic(this.CarbonDioxideSensor.Service, this.hap.Characteristic.CarbonDioxideDetected, this.CarbonDioxideSensor.CarbonDioxideDetected, 'CarbonDioxideDetected')
|
|
472
|
+
}
|
|
473
|
+
// CarbonDioxideLevel
|
|
474
|
+
if (!(this.device as meterProConfig).hide_co2 && this.CarbonDioxideSensor?.Service && this.device.deviceType === 'MeterPro(CO2)') {
|
|
475
|
+
await this.updateCharacteristic(this.CarbonDioxideSensor.Service, this.hap.Characteristic.CarbonDioxideLevel, this.CarbonDioxideSensor.CarbonDioxideLevel, 'CarbonDioxideLevel')
|
|
476
|
+
}
|
|
472
477
|
// BatteryLevel
|
|
473
478
|
await this.updateCharacteristic(this.Battery.Service, this.hap.Characteristic.BatteryLevel, this.Battery.BatteryLevel, 'BatteryLevel')
|
|
474
479
|
// StatusLowBattery
|
|
@@ -491,6 +496,10 @@ export class MeterPro extends deviceBase {
|
|
|
491
496
|
if (!(this.device as meterProConfig).hide_temperature && this.TemperatureSensor?.Service) {
|
|
492
497
|
this.TemperatureSensor.Service.updateCharacteristic(this.hap.Characteristic.CurrentTemperature, 30)
|
|
493
498
|
}
|
|
499
|
+
if (!(this.device as meterProConfig).hide_co2 && this.CarbonDioxideSensor?.Service && this.device.deviceType === 'MeterPro(CO2)') {
|
|
500
|
+
this.CarbonDioxideSensor.Service.updateCharacteristic(this.hap.Characteristic.CarbonDioxideDetected, this.hap.Characteristic.CarbonDioxideDetected.CO2_LEVELS_NORMAL)
|
|
501
|
+
this.CarbonDioxideSensor.Service.updateCharacteristic(this.hap.Characteristic.CarbonDioxideLevel, 0)
|
|
502
|
+
}
|
|
494
503
|
this.Battery.Service.updateCharacteristic(this.hap.Characteristic.BatteryLevel, 100)
|
|
495
504
|
this.Battery.Service.updateCharacteristic(this.hap.Characteristic.StatusLowBattery, this.hap.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL)
|
|
496
505
|
}
|
|
@@ -503,6 +512,10 @@ export class MeterPro extends deviceBase {
|
|
|
503
512
|
if (!(this.device as meterProConfig).hide_temperature && this.TemperatureSensor?.Service) {
|
|
504
513
|
this.TemperatureSensor.Service.updateCharacteristic(this.hap.Characteristic.CurrentTemperature, e)
|
|
505
514
|
}
|
|
515
|
+
if (!(this.device as meterProConfig).hide_co2 && this.CarbonDioxideSensor?.Service && this.device.deviceType === 'MeterPro(CO2)') {
|
|
516
|
+
this.CarbonDioxideSensor.Service.updateCharacteristic(this.hap.Characteristic.CarbonDioxideDetected, e)
|
|
517
|
+
this.CarbonDioxideSensor.Service.updateCharacteristic(this.hap.Characteristic.CarbonDioxideLevel, e)
|
|
518
|
+
}
|
|
506
519
|
this.Battery.Service.updateCharacteristic(this.hap.Characteristic.BatteryLevel, e)
|
|
507
520
|
this.Battery.Service.updateCharacteristic(this.hap.Characteristic.StatusLowBattery, e)
|
|
508
521
|
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
|
|
6
6
|
import type { device, motionSensorServiceData, motionSensorStatus, motionSensorWebhookContext, SwitchBotBLE } from 'node-switchbot'
|
|
7
7
|
|
|
8
|
-
import type {
|
|
8
|
+
import type { SwitchBotHAPPlatform } from '../platform-hap.js'
|
|
9
9
|
import type { devicesConfig, motionConfig } from '../settings.js'
|
|
10
10
|
|
|
11
11
|
/*
|
|
@@ -58,7 +58,7 @@ export class Motion extends deviceBase {
|
|
|
58
58
|
doMotionUpdate!: Subject<void>
|
|
59
59
|
|
|
60
60
|
constructor(
|
|
61
|
-
readonly platform:
|
|
61
|
+
readonly platform: SwitchBotHAPPlatform,
|
|
62
62
|
accessory: PlatformAccessory,
|
|
63
63
|
device: device & devicesConfig,
|
|
64
64
|
) {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
|
|
6
6
|
import type { bodyChange, device, plugMiniJPServiceData, plugMiniJPWebhookContext, plugMiniStatus, plugMiniUSServiceData, plugMiniUSWebhookContext, plugStatus, plugWebhookContext, SwitchBotBLE, SwitchbotDevice, WoPlugMiniUS } from 'node-switchbot'
|
|
7
7
|
|
|
8
|
-
import type {
|
|
8
|
+
import type { SwitchBotHAPPlatform } from '../platform-hap.js'
|
|
9
9
|
import type { devicesConfig } from '../settings.js'
|
|
10
10
|
|
|
11
11
|
/*
|
|
@@ -40,7 +40,7 @@ export class Plug extends deviceBase {
|
|
|
40
40
|
doPlugUpdate!: Subject<void>
|
|
41
41
|
|
|
42
42
|
constructor(
|
|
43
|
-
readonly platform:
|
|
43
|
+
readonly platform: SwitchBotHAPPlatform,
|
|
44
44
|
accessory: PlatformAccessory,
|
|
45
45
|
device: device & devicesConfig,
|
|
46
46
|
) {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
|
|
6
6
|
import type { bodyChange, device, relaySwitch1Context, relaySwitch1PMContext, relaySwitch1PMServiceData, relaySwitch1PMStatus, relaySwitch1ServiceData, relaySwitch1Status, SwitchBotBLE, SwitchbotDevice, WoRelaySwitch1, WoRelaySwitch1PM } from 'node-switchbot'
|
|
7
7
|
|
|
8
|
-
import type {
|
|
8
|
+
import type { SwitchBotHAPPlatform } from '../platform-hap.js'
|
|
9
9
|
import type { devicesConfig, relaySwitch1Config, relaySwitch1PMConfig } from '../settings.js'
|
|
10
10
|
|
|
11
11
|
/*
|
|
@@ -107,7 +107,7 @@ export class RelaySwitch extends deviceBase {
|
|
|
107
107
|
* @constructor
|
|
108
108
|
*/
|
|
109
109
|
constructor(
|
|
110
|
-
readonly platform:
|
|
110
|
+
readonly platform: SwitchBotHAPPlatform,
|
|
111
111
|
accessory: PlatformAccessory,
|
|
112
112
|
device: device & devicesConfig,
|
|
113
113
|
) {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
|
|
6
6
|
import type { bodyChange, device, floorCleaningRobotS10Status, floorCleaningRobotS10WebhookContext, robotVacuumCleanerS1PlusStatus, robotVacuumCleanerS1PlusWebhookContext, robotVacuumCleanerS1Status, robotVacuumCleanerS1WebhookContext, robotVacuumCleanerServiceData, SwitchBotBLE, SwitchbotDevice } from 'node-switchbot'
|
|
7
7
|
|
|
8
|
-
import type {
|
|
8
|
+
import type { SwitchBotHAPPlatform } from '../platform-hap.js'
|
|
9
9
|
import type { devicesConfig } from '../settings.js'
|
|
10
10
|
|
|
11
11
|
/*
|
|
@@ -49,7 +49,7 @@ export class RobotVacuumCleaner extends deviceBase {
|
|
|
49
49
|
doRobotVacuumCleanerUpdate!: Subject<void>
|
|
50
50
|
|
|
51
51
|
constructor(
|
|
52
|
-
readonly platform:
|
|
52
|
+
readonly platform: SwitchBotHAPPlatform,
|
|
53
53
|
accessory: PlatformAccessory,
|
|
54
54
|
device: device & devicesConfig,
|
|
55
55
|
) {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
|
|
6
6
|
import type { device, SwitchBotBLE, waterLeakDetectorServiceData, waterLeakDetectorStatus, waterLeakDetectorWebhookContext } from 'node-switchbot'
|
|
7
7
|
|
|
8
|
-
import type {
|
|
8
|
+
import type { SwitchBotHAPPlatform } from '../platform-hap.js'
|
|
9
9
|
import type { devicesConfig, waterDetectorConfig } from '../settings.js'
|
|
10
10
|
|
|
11
11
|
/*
|
|
@@ -54,7 +54,7 @@ export class WaterDetector extends deviceBase {
|
|
|
54
54
|
doWaterDetectorUpdate: Subject<void>
|
|
55
55
|
|
|
56
56
|
constructor(
|
|
57
|
-
readonly platform:
|
|
57
|
+
readonly platform: SwitchBotHAPPlatform,
|
|
58
58
|
accessory: PlatformAccessory,
|
|
59
59
|
device: device & devicesConfig,
|
|
60
60
|
) {
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Matter Accessory Class
|
|
3
|
+
*
|
|
4
|
+
* This base class implements the MatterAccessory interface and provides
|
|
5
|
+
* common functionality that all Matter devices can use.
|
|
6
|
+
*
|
|
7
|
+
* Individual device types should extend this class and call super() with
|
|
8
|
+
* the required configuration.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { API, EndpointType, Logger, MatterAccessory } from 'homebridge'
|
|
12
|
+
|
|
13
|
+
export interface BaseMatterAccessoryConfig {
|
|
14
|
+
uuid: string
|
|
15
|
+
displayName: string
|
|
16
|
+
deviceType: EndpointType
|
|
17
|
+
serialNumber: string
|
|
18
|
+
manufacturer: string
|
|
19
|
+
model: string
|
|
20
|
+
firmwareRevision: string
|
|
21
|
+
hardwareRevision: string
|
|
22
|
+
context?: Record<string, unknown>
|
|
23
|
+
clusters?: MatterAccessory['clusters']
|
|
24
|
+
handlers?: MatterAccessory['handlers']
|
|
25
|
+
parts?: MatterAccessory['parts']
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Base class for all Matter accessories
|
|
30
|
+
* Implements the MatterAccessory interface and provides common methods
|
|
31
|
+
*/
|
|
32
|
+
export abstract class BaseMatterAccessory implements MatterAccessory {
|
|
33
|
+
// Required MatterAccessory properties
|
|
34
|
+
public readonly uuid: string
|
|
35
|
+
public readonly displayName: string
|
|
36
|
+
public readonly deviceType: EndpointType
|
|
37
|
+
public readonly serialNumber: string
|
|
38
|
+
public readonly manufacturer: string
|
|
39
|
+
public readonly model: string
|
|
40
|
+
public readonly firmwareRevision: string
|
|
41
|
+
public readonly hardwareRevision: string
|
|
42
|
+
public readonly context: Record<string, unknown>
|
|
43
|
+
public readonly clusters?: MatterAccessory['clusters']
|
|
44
|
+
public readonly handlers?: MatterAccessory['handlers']
|
|
45
|
+
public readonly parts?: MatterAccessory['parts']
|
|
46
|
+
|
|
47
|
+
// Protected properties available to child classes
|
|
48
|
+
protected readonly api: API
|
|
49
|
+
protected readonly log: Logger
|
|
50
|
+
|
|
51
|
+
constructor(
|
|
52
|
+
api: API,
|
|
53
|
+
log: Logger,
|
|
54
|
+
config: BaseMatterAccessoryConfig,
|
|
55
|
+
) {
|
|
56
|
+
this.api = api
|
|
57
|
+
this.log = log
|
|
58
|
+
|
|
59
|
+
// Set all required properties
|
|
60
|
+
this.uuid = config.uuid
|
|
61
|
+
this.displayName = config.displayName
|
|
62
|
+
this.deviceType = config.deviceType
|
|
63
|
+
this.serialNumber = config.serialNumber
|
|
64
|
+
this.manufacturer = config.manufacturer
|
|
65
|
+
this.model = config.model
|
|
66
|
+
this.firmwareRevision = config.firmwareRevision
|
|
67
|
+
this.hardwareRevision = config.hardwareRevision
|
|
68
|
+
this.clusters = config.clusters
|
|
69
|
+
this.handlers = config.handlers
|
|
70
|
+
this.parts = config.parts
|
|
71
|
+
|
|
72
|
+
// Set context with all metadata
|
|
73
|
+
this.context = {
|
|
74
|
+
serialNumber: this.serialNumber,
|
|
75
|
+
manufacturer: this.manufacturer,
|
|
76
|
+
model: this.model,
|
|
77
|
+
firmwareRevision: this.firmwareRevision,
|
|
78
|
+
hardwareRevision: this.hardwareRevision,
|
|
79
|
+
...config.context,
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Update the accessory state
|
|
85
|
+
* Helper method to update cluster attributes
|
|
86
|
+
*/
|
|
87
|
+
protected async updateState(cluster: string, attributes: Record<string, unknown>): Promise<void> {
|
|
88
|
+
await this.api.matter.updateAccessoryState(this.uuid, cluster, attributes)
|
|
89
|
+
this.log.debug(`[${this.displayName}] Updated ${cluster} state:`, attributes)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Log helper methods
|
|
94
|
+
*/
|
|
95
|
+
protected logInfo(message: string, ...args: unknown[]): void {
|
|
96
|
+
this.log.info(`[${this.displayName}] ${message}`, ...args)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
protected logError(message: string, ...args: unknown[]): void {
|
|
100
|
+
this.log.error(`[${this.displayName}] ${message}`, ...args)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
protected logDebug(message: string, ...args: unknown[]): void {
|
|
104
|
+
this.log.debug(`[${this.displayName}] ${message}`, ...args)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
protected logWarn(message: string, ...args: unknown[]): void {
|
|
108
|
+
this.log.warn(`[${this.displayName}] ${message}`, ...args)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Convert this class instance to a plain MatterAccessory object
|
|
113
|
+
* This is what gets registered with Homebridge
|
|
114
|
+
*/
|
|
115
|
+
public toAccessory(): MatterAccessory {
|
|
116
|
+
return {
|
|
117
|
+
uuid: this.uuid,
|
|
118
|
+
displayName: this.displayName,
|
|
119
|
+
deviceType: this.deviceType,
|
|
120
|
+
serialNumber: this.serialNumber,
|
|
121
|
+
manufacturer: this.manufacturer,
|
|
122
|
+
model: this.model,
|
|
123
|
+
firmwareRevision: this.firmwareRevision,
|
|
124
|
+
hardwareRevision: this.hardwareRevision,
|
|
125
|
+
context: this.context,
|
|
126
|
+
clusters: this.clusters,
|
|
127
|
+
handlers: this.handlers,
|
|
128
|
+
parts: this.parts,
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Color Light Accessory Class (HS only)
|
|
3
|
+
* Hue and Saturation color control
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { API, Logger, MatterRequests } from 'homebridge'
|
|
7
|
+
|
|
8
|
+
import { BaseMatterAccessory } from './BaseMatterAccessory.js'
|
|
9
|
+
|
|
10
|
+
export class ColorLightAccessory extends BaseMatterAccessory {
|
|
11
|
+
constructor(api: API, log: Logger) {
|
|
12
|
+
const serialNumber = 'LIGHT-004'
|
|
13
|
+
super(api, log, {
|
|
14
|
+
uuid: api.matter.uuid.generate(serialNumber),
|
|
15
|
+
displayName: 'Colour Light (HS)',
|
|
16
|
+
deviceType: api.matter.deviceTypes.ExtendedColorLight,
|
|
17
|
+
serialNumber,
|
|
18
|
+
manufacturer: 'Homebridge Matter',
|
|
19
|
+
model: 'HB-MATTER-LIGHT-COLOUR-HS',
|
|
20
|
+
firmwareRevision: '2.0.0',
|
|
21
|
+
hardwareRevision: '1.0.0',
|
|
22
|
+
|
|
23
|
+
clusters: {
|
|
24
|
+
onOff: { onOff: false },
|
|
25
|
+
levelControl: {
|
|
26
|
+
currentLevel: 127,
|
|
27
|
+
minLevel: 1,
|
|
28
|
+
maxLevel: 254,
|
|
29
|
+
},
|
|
30
|
+
colorControl: {
|
|
31
|
+
colorMode: api.matter.types.ColorControl.ColorMode.CurrentHueAndCurrentSaturation,
|
|
32
|
+
currentHue: 0,
|
|
33
|
+
currentSaturation: 254,
|
|
34
|
+
currentX: 41942,
|
|
35
|
+
currentY: 21626,
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
handlers: {
|
|
40
|
+
onOff: {
|
|
41
|
+
on: async () => this.handleOn(),
|
|
42
|
+
off: async () => this.handleOff(),
|
|
43
|
+
},
|
|
44
|
+
levelControl: {
|
|
45
|
+
moveToLevelWithOnOff: async (request: MatterRequests.MoveToLevel) =>
|
|
46
|
+
this.handleSetLevel(request),
|
|
47
|
+
},
|
|
48
|
+
colorControl: {
|
|
49
|
+
moveToColorLogic: async (request: MatterRequests.MoveToColor) =>
|
|
50
|
+
this.handleSetColor(request),
|
|
51
|
+
moveToHueAndSaturationLogic: async (request: MatterRequests.MoveToHueAndSaturation) =>
|
|
52
|
+
this.handleSetHueSaturation(request),
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
this.logInfo('initialized.')
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
private async handleOn(): Promise<void> {
|
|
61
|
+
this.logInfo('turning on.')
|
|
62
|
+
// TODO: await myLightAPI.turnOn()
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
private async handleOff(): Promise<void> {
|
|
66
|
+
this.logInfo('turning off.')
|
|
67
|
+
// TODO: await myLightAPI.turnOff()
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
private async handleSetLevel(request: MatterRequests.MoveToLevel): Promise<void> {
|
|
71
|
+
this.logInfo(`MoveToLevel request: ${JSON.stringify(request)}`)
|
|
72
|
+
const { level } = request
|
|
73
|
+
const brightnessPercent = Math.round((level / 254) * 100)
|
|
74
|
+
this.logInfo(`setting brightness to ${brightnessPercent}%.`)
|
|
75
|
+
// TODO: await myLightAPI.setBrightness(brightnessPercent)
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
private async handleSetColor(request: MatterRequests.MoveToColor): Promise<void> {
|
|
79
|
+
this.logInfo(`MoveToColor request: ${JSON.stringify(request)}`)
|
|
80
|
+
const { colorX, colorY, transitionTime } = request
|
|
81
|
+
const xFloat = (colorX / 65535).toFixed(4)
|
|
82
|
+
const yFloat = (colorY / 65535).toFixed(4)
|
|
83
|
+
this.logInfo(`setting xy color to (${xFloat}, ${yFloat}) with transition ${transitionTime}.`)
|
|
84
|
+
// TODO: await myLightAPI.setXY(xFloat, yFloat, transitionTime)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
private async handleSetHueSaturation(request: MatterRequests.MoveToHueAndSaturation): Promise<void> {
|
|
88
|
+
this.logInfo(`MoveToHueAndSaturation request: ${JSON.stringify(request)}`)
|
|
89
|
+
const { hue, saturation, transitionTime } = request
|
|
90
|
+
const hueDegrees = Math.round((hue / 254) * 360)
|
|
91
|
+
const saturationPercent = Math.round((saturation / 254) * 100)
|
|
92
|
+
this.logInfo(`setting color to ${hueDegrees}°, ${saturationPercent}% with transition ${transitionTime}.`)
|
|
93
|
+
// TODO: await myLightAPI.setColor(hueDegrees, saturationPercent, transitionTime)
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
public updateOnOffState(isOn: boolean): void {
|
|
97
|
+
this.updateState(this.api.matter.clusterNames.OnOff, { onOff: isOn })
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
public updateBrightness(percent: number): void {
|
|
101
|
+
const matterLevel = Math.max(1, Math.round((percent / 100) * 254))
|
|
102
|
+
this.updateState(this.api.matter.clusterNames.LevelControl, { currentLevel: matterLevel })
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
public updateHueSaturation(hue: number, saturation: number): void {
|
|
106
|
+
const matterHue = Math.round((hue / 360) * 254)
|
|
107
|
+
const matterSat = Math.round((saturation / 100) * 254)
|
|
108
|
+
this.updateState(this.api.matter.clusterNames.ColorControl, {
|
|
109
|
+
currentHue: matterHue,
|
|
110
|
+
currentSaturation: matterSat,
|
|
111
|
+
})
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Color Temperature Light Accessory Class
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { API, Logger, MatterRequests } from 'homebridge'
|
|
6
|
+
|
|
7
|
+
import { BaseMatterAccessory } from './BaseMatterAccessory.js'
|
|
8
|
+
|
|
9
|
+
export class ColorTemperatureLightAccessory extends BaseMatterAccessory {
|
|
10
|
+
constructor(api: API, log: Logger) {
|
|
11
|
+
const serialNumber = 'LIGHT-003'
|
|
12
|
+
super(api, log, {
|
|
13
|
+
uuid: api.matter.uuid.generate(serialNumber),
|
|
14
|
+
displayName: 'Colour Temperature Light',
|
|
15
|
+
deviceType: api.matter.deviceTypes.ColorTemperatureLight,
|
|
16
|
+
serialNumber,
|
|
17
|
+
manufacturer: 'Homebridge Matter',
|
|
18
|
+
model: 'HB-MATTER-LIGHT-COLOUR-TEMP',
|
|
19
|
+
firmwareRevision: '2.0.0',
|
|
20
|
+
hardwareRevision: '1.0.0',
|
|
21
|
+
|
|
22
|
+
clusters: {
|
|
23
|
+
onOff: {
|
|
24
|
+
onOff: false,
|
|
25
|
+
},
|
|
26
|
+
levelControl: {
|
|
27
|
+
currentLevel: 127,
|
|
28
|
+
minLevel: 1,
|
|
29
|
+
maxLevel: 254,
|
|
30
|
+
},
|
|
31
|
+
colorControl: {
|
|
32
|
+
colorMode: api.matter.types.ColorControl.ColorMode.ColorTemperatureMireds,
|
|
33
|
+
colorTemperatureMireds: 250,
|
|
34
|
+
colorTempPhysicalMinMireds: 147,
|
|
35
|
+
colorTempPhysicalMaxMireds: 454,
|
|
36
|
+
coupleColorTempToLevelMinMireds: 147,
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
handlers: {
|
|
41
|
+
onOff: {
|
|
42
|
+
on: async () => this.handleOn(),
|
|
43
|
+
off: async () => this.handleOff(),
|
|
44
|
+
},
|
|
45
|
+
levelControl: {
|
|
46
|
+
moveToLevelWithOnOff: async (request: MatterRequests.MoveToLevel) =>
|
|
47
|
+
this.handleSetLevel(request),
|
|
48
|
+
},
|
|
49
|
+
colorControl: {
|
|
50
|
+
moveToColorTemperatureLogic: async (request: MatterRequests.MoveToColorTemperature) =>
|
|
51
|
+
this.handleSetColorTemperature(request),
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
this.logInfo('initialized.')
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
private async handleOn(): Promise<void> {
|
|
60
|
+
this.logInfo('turning on.')
|
|
61
|
+
// TODO: await myLightAPI.turnOn()
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
private async handleOff(): Promise<void> {
|
|
65
|
+
this.logInfo('turning off.')
|
|
66
|
+
// TODO: await myLightAPI.turnOff()
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
private async handleSetLevel(request: MatterRequests.MoveToLevel): Promise<void> {
|
|
70
|
+
this.logInfo(`MoveToLevel request: ${JSON.stringify(request)}`)
|
|
71
|
+
const { level } = request
|
|
72
|
+
const brightnessPercent = Math.round((level / 254) * 100)
|
|
73
|
+
this.logInfo(`setting brightness to ${brightnessPercent}% (level: ${level}).`)
|
|
74
|
+
// TODO: await myLightAPI.setBrightness(brightnessPercent)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
private async handleSetColorTemperature(request: MatterRequests.MoveToColorTemperature): Promise<void> {
|
|
78
|
+
this.logInfo(`MoveToColorTemperature request: ${JSON.stringify(request)}`)
|
|
79
|
+
const { colorTemperatureMireds, transitionTime } = request
|
|
80
|
+
const kelvin = Math.round(1000000 / colorTemperatureMireds)
|
|
81
|
+
this.logInfo(`setting color temp to ${kelvin}k (${colorTemperatureMireds} mireds) with transitionTime=${transitionTime}.`)
|
|
82
|
+
// TODO: await myLightAPI.setColorTemperature(kelvin, transitionTime)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
public updateOnOffState(isOn: boolean): void {
|
|
86
|
+
this.updateState(this.api.matter.clusterNames.OnOff, { onOff: isOn })
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
public updateBrightness(percent: number): void {
|
|
90
|
+
const matterLevel = Math.max(1, Math.round((percent / 100) * 254))
|
|
91
|
+
this.updateState(this.api.matter.clusterNames.LevelControl, { currentLevel: matterLevel })
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
public updateColorTemperature(kelvin: number): void {
|
|
95
|
+
const mireds = Math.round(1000000 / kelvin)
|
|
96
|
+
this.updateState(this.api.matter.clusterNames.ColorControl, { colorTemperatureMireds: mireds })
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contact Sensor Accessory Class
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { API, Logger } from 'homebridge'
|
|
6
|
+
|
|
7
|
+
import { BaseMatterAccessory } from './BaseMatterAccessory.js'
|
|
8
|
+
|
|
9
|
+
export class ContactSensorAccessory extends BaseMatterAccessory {
|
|
10
|
+
constructor(api: API, log: Logger) {
|
|
11
|
+
const serialNumber = 'SENSOR-001'
|
|
12
|
+
super(api, log, {
|
|
13
|
+
uuid: api.matter.uuid.generate(serialNumber),
|
|
14
|
+
displayName: 'Contact Sensor',
|
|
15
|
+
deviceType: api.matter.deviceTypes.ContactSensor,
|
|
16
|
+
serialNumber,
|
|
17
|
+
manufacturer: 'Homebridge Matter',
|
|
18
|
+
model: 'HB-MATTER-SENSOR-CONTACT',
|
|
19
|
+
firmwareRevision: '2.0.0',
|
|
20
|
+
hardwareRevision: '1.0.0',
|
|
21
|
+
|
|
22
|
+
clusters: {
|
|
23
|
+
booleanState: {
|
|
24
|
+
stateValue: true, // matter: true = closed/normal, false = open/triggered
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
this.logInfo('initialized.')
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
public updateContactState(isOpen: boolean): void {
|
|
33
|
+
// Matter BooleanState: false = open/triggered, true = closed/normal (inverted!)
|
|
34
|
+
this.updateState(this.api.matter.clusterNames.BooleanState, { stateValue: !isOpen })
|
|
35
|
+
this.logInfo(`contact state: ${isOpen ? 'OPEN' : 'CLOSED'}.`)
|
|
36
|
+
}
|
|
37
|
+
}
|