@switchbot/homebridge-switchbot 5.0.0-beta.7 → 5.0.0-beta.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/ISSUE_TEMPLATE/e2e-verification.md +36 -0
- package/.github/workflows/ci.yml +61 -0
- package/.github/workflows/manual-e2e.yml +103 -0
- package/CHANGELOG.md +35 -0
- package/E2E-VERIFICATION.md +121 -0
- package/MIGRATION.md +44 -0
- package/README.md +56 -3
- package/config.schema.json +99 -14823
- package/dist/deviceFactory.d.ts +13 -0
- package/dist/deviceFactory.d.ts.map +1 -0
- package/dist/deviceFactory.js +81 -0
- package/dist/deviceFactory.js.map +1 -0
- package/dist/devices/deviceBase.d.ts +50 -0
- package/dist/devices/deviceBase.d.ts.map +1 -0
- package/dist/devices/deviceBase.js +119 -0
- package/dist/devices/deviceBase.js.map +1 -0
- package/dist/devices/genericDevice.d.ts +283 -0
- package/dist/devices/genericDevice.d.ts.map +1 -0
- package/dist/devices/genericDevice.js +1035 -0
- package/dist/devices/genericDevice.js.map +1 -0
- package/dist/homebridge-ui/public/index.html +77 -245
- package/dist/homebridge-ui/server.d.ts +3 -1
- package/dist/homebridge-ui/server.d.ts.map +1 -1
- package/dist/homebridge-ui/server.js +42 -36
- package/dist/homebridge-ui/server.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -12
- package/dist/index.js.map +1 -1
- package/dist/platform.d.ts +27 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +404 -0
- package/dist/platform.js.map +1 -0
- package/dist/settings.d.ts +10 -249
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +5 -30
- package/dist/settings.js.map +1 -1
- package/dist/switchbotClient.d.ts +32 -0
- package/dist/switchbotClient.d.ts.map +1 -0
- package/dist/switchbotClient.js +259 -0
- package/dist/switchbotClient.js.map +1 -0
- package/dist/utils.d.ts +39 -50
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +39 -688
- package/dist/utils.js.map +1 -1
- package/docs/assets/highlight.css +14 -0
- package/docs/assets/icons.js +1 -1
- package/docs/assets/icons.svg +1 -1
- package/docs/assets/main.js +2 -2
- package/docs/assets/style.css +3 -3
- package/docs/index.html +77 -13
- package/docs/variables/default.html +1 -1
- package/package.json +22 -21
- package/scripts/e2e/README.md +25 -0
- package/scripts/e2e/curtain-e2e.sh +70 -0
- package/scripts/e2e/fan-e2e.sh +75 -0
- package/scripts/e2e/light-advanced-e2e.sh +97 -0
- package/scripts/e2e/light-e2e.sh +75 -0
- package/scripts/e2e/list-accessories.sh +19 -0
- package/scripts/e2e/lock-e2e.sh +65 -0
- package/scripts/generate-matter-maps.js +60 -0
- package/scripts/run-e2e-local.sh +14 -0
- package/src/deviceFactory.ts +122 -0
- package/src/devices/deviceBase.ts +141 -0
- package/src/devices/genericDevice.ts +965 -0
- package/src/homebridge-ui/public/index.html +77 -245
- package/src/homebridge-ui/server.ts +49 -41
- package/src/index.ts +5 -13
- package/src/platform.ts +395 -0
- package/src/settings.ts +12 -277
- package/src/switchbotClient.ts +266 -0
- package/src/utils.ts +45 -713
- package/test/accessory-restore.spec.ts +73 -0
- package/test/device-mapping.spec.ts +37 -0
- package/test/deviceFactory.spec.ts +18 -0
- package/test/e2e/run-e2e.spec.ts +50 -0
- package/test/fan-swing.spec.ts +29 -0
- package/test/helpers/matter-harness.ts +53 -0
- package/test/lock-users.spec.ts +44 -0
- package/test/matter-childbridge.spec.ts +55 -0
- package/test/matter-descriptors.spec.ts +97 -0
- package/test/matter-device-state.spec.ts +101 -0
- package/test/matter-integration.spec.ts +70 -0
- package/test/platform.integration.spec.ts +55 -0
- package/test/switchbot-client-debounce.spec.ts +131 -0
- package/test/switchbot-client-openapi.spec.ts +56 -0
- package/test/switchbotClient.spec.ts +10 -0
- package/test/utils.spec.ts +20 -0
- package/vitest.config.ts +7 -0
- package/coverage/base.css +0 -224
- package/coverage/block-navigation.js +0 -87
- package/coverage/clover.xml +0 -15847
- package/coverage/coverage-final.json +0 -42
- package/coverage/docs/assets/dmt/dmt-component-data.js.html +0 -85
- package/coverage/docs/assets/dmt/dmt-components.js.html +0 -286
- package/coverage/docs/assets/dmt/index.html +0 -131
- package/coverage/docs/assets/hierarchy.js.html +0 -85
- package/coverage/docs/assets/icons.js.html +0 -136
- package/coverage/docs/assets/index.html +0 -146
- package/coverage/docs/assets/main.js.html +0 -265
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +0 -191
- package/coverage/prettify.css +0 -1
- package/coverage/prettify.js +0 -2
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +0 -196
- package/coverage/src/device/blindtilt.ts.html +0 -3238
- package/coverage/src/device/bot.ts.html +0 -2803
- package/coverage/src/device/ceilinglight.ts.html +0 -2338
- package/coverage/src/device/colorbulb.ts.html +0 -2824
- package/coverage/src/device/contact.ts.html +0 -1465
- package/coverage/src/device/curtain.ts.html +0 -2869
- package/coverage/src/device/device.ts.html +0 -2500
- package/coverage/src/device/fan.ts.html +0 -2242
- package/coverage/src/device/hub.ts.html +0 -1408
- package/coverage/src/device/humidifier.ts.html +0 -2116
- package/coverage/src/device/index.html +0 -416
- package/coverage/src/device/iosensor.ts.html +0 -1375
- package/coverage/src/device/lightstrip.ts.html +0 -2617
- package/coverage/src/device/lock.ts.html +0 -1963
- package/coverage/src/device/meter.ts.html +0 -1372
- package/coverage/src/device/meterplus.ts.html +0 -1384
- package/coverage/src/device/meterpro.ts.html +0 -1618
- package/coverage/src/device/motion.ts.html +0 -1264
- package/coverage/src/device/plug.ts.html +0 -1372
- package/coverage/src/device/relayswitch.ts.html +0 -2284
- package/coverage/src/device/robotvacuumcleaner.ts.html +0 -1810
- package/coverage/src/device/waterdetector.ts.html +0 -1294
- package/coverage/src/homebridge-ui/index.html +0 -116
- package/coverage/src/homebridge-ui/server.ts.html +0 -229
- package/coverage/src/index.html +0 -161
- package/coverage/src/index.ts.html +0 -124
- package/coverage/src/irdevice/airconditioner.ts.html +0 -1687
- package/coverage/src/irdevice/airpurifier.ts.html +0 -844
- package/coverage/src/irdevice/camera.ts.html +0 -475
- package/coverage/src/irdevice/fan.ts.html +0 -766
- package/coverage/src/irdevice/index.html +0 -251
- package/coverage/src/irdevice/irdevice.ts.html +0 -1117
- package/coverage/src/irdevice/light.ts.html +0 -826
- package/coverage/src/irdevice/other.ts.html +0 -2458
- package/coverage/src/irdevice/tv.ts.html +0 -1222
- package/coverage/src/irdevice/vacuumcleaner.ts.html +0 -466
- package/coverage/src/irdevice/waterheater.ts.html +0 -469
- package/coverage/src/platform.ts.html +0 -8776
- package/coverage/src/settings.ts.html +0 -934
- package/coverage/src/utils.ts.html +0 -2092
- package/dist/devices-hap/airpurifier.d.ts +0 -54
- package/dist/devices-hap/airpurifier.d.ts.map +0 -1
- package/dist/devices-hap/airpurifier.js +0 -527
- package/dist/devices-hap/airpurifier.js.map +0 -1
- package/dist/devices-hap/blindtilt.d.ts +0 -90
- package/dist/devices-hap/blindtilt.d.ts.map +0 -1
- package/dist/devices-hap/blindtilt.js +0 -974
- package/dist/devices-hap/blindtilt.js.map +0 -1
- package/dist/devices-hap/bot.d.ts +0 -102
- package/dist/devices-hap/bot.d.ts.map +0 -1
- package/dist/devices-hap/bot.js +0 -811
- package/dist/devices-hap/bot.js.map +0 -1
- package/dist/devices-hap/ceilinglight.d.ts +0 -85
- package/dist/devices-hap/ceilinglight.d.ts.map +0 -1
- package/dist/devices-hap/ceilinglight.js +0 -701
- package/dist/devices-hap/ceilinglight.js.map +0 -1
- package/dist/devices-hap/colorbulb.d.ts +0 -88
- package/dist/devices-hap/colorbulb.d.ts.map +0 -1
- package/dist/devices-hap/colorbulb.js +0 -881
- package/dist/devices-hap/colorbulb.js.map +0 -1
- package/dist/devices-hap/contact.d.ts +0 -44
- package/dist/devices-hap/contact.d.ts.map +0 -1
- package/dist/devices-hap/contact.js +0 -409
- package/dist/devices-hap/contact.js.map +0 -1
- package/dist/devices-hap/curtain.d.ts +0 -73
- package/dist/devices-hap/curtain.d.ts.map +0 -1
- package/dist/devices-hap/curtain.js +0 -869
- package/dist/devices-hap/curtain.js.map +0 -1
- package/dist/devices-hap/device.d.ts +0 -98
- package/dist/devices-hap/device.d.ts.map +0 -1
- package/dist/devices-hap/device.js +0 -749
- package/dist/devices-hap/device.js.map +0 -1
- package/dist/devices-hap/fan.d.ts +0 -69
- package/dist/devices-hap/fan.d.ts.map +0 -1
- package/dist/devices-hap/fan.js +0 -649
- package/dist/devices-hap/fan.js.map +0 -1
- package/dist/devices-hap/hub.d.ts +0 -37
- package/dist/devices-hap/hub.d.ts.map +0 -1
- package/dist/devices-hap/hub.js +0 -392
- package/dist/devices-hap/hub.js.map +0 -1
- package/dist/devices-hap/humidifier.d.ts +0 -68
- package/dist/devices-hap/humidifier.d.ts.map +0 -1
- package/dist/devices-hap/humidifier.js +0 -628
- package/dist/devices-hap/humidifier.js.map +0 -1
- package/dist/devices-hap/iosensor.d.ts +0 -42
- package/dist/devices-hap/iosensor.d.ts.map +0 -1
- package/dist/devices-hap/iosensor.js +0 -382
- package/dist/devices-hap/iosensor.js.map +0 -1
- package/dist/devices-hap/lightstrip.d.ts +0 -79
- package/dist/devices-hap/lightstrip.d.ts.map +0 -1
- package/dist/devices-hap/lightstrip.js +0 -797
- package/dist/devices-hap/lightstrip.js.map +0 -1
- package/dist/devices-hap/lock.d.ts +0 -53
- package/dist/devices-hap/lock.d.ts.map +0 -1
- package/dist/devices-hap/lock.js +0 -561
- package/dist/devices-hap/lock.js.map +0 -1
- package/dist/devices-hap/meter.d.ts +0 -37
- package/dist/devices-hap/meter.d.ts.map +0 -1
- package/dist/devices-hap/meter.js +0 -379
- package/dist/devices-hap/meter.js.map +0 -1
- package/dist/devices-hap/meterplus.d.ts +0 -42
- package/dist/devices-hap/meterplus.d.ts.map +0 -1
- package/dist/devices-hap/meterplus.js +0 -384
- package/dist/devices-hap/meterplus.js.map +0 -1
- package/dist/devices-hap/meterpro.d.ts +0 -43
- package/dist/devices-hap/meterpro.d.ts.map +0 -1
- package/dist/devices-hap/meterpro.js +0 -468
- package/dist/devices-hap/meterpro.js.map +0 -1
- package/dist/devices-hap/motion.d.ts +0 -42
- package/dist/devices-hap/motion.d.ts.map +0 -1
- package/dist/devices-hap/motion.js +0 -345
- package/dist/devices-hap/motion.js.map +0 -1
- package/dist/devices-hap/plug.d.ts +0 -49
- package/dist/devices-hap/plug.d.ts.map +0 -1
- package/dist/devices-hap/plug.js +0 -395
- package/dist/devices-hap/plug.js.map +0 -1
- package/dist/devices-hap/relayswitch.d.ts +0 -96
- package/dist/devices-hap/relayswitch.d.ts.map +0 -1
- package/dist/devices-hap/relayswitch.js +0 -642
- package/dist/devices-hap/relayswitch.js.map +0 -1
- package/dist/devices-hap/robotvacuumcleaner.d.ts +0 -54
- package/dist/devices-hap/robotvacuumcleaner.d.ts.map +0 -1
- package/dist/devices-hap/robotvacuumcleaner.js +0 -523
- package/dist/devices-hap/robotvacuumcleaner.js.map +0 -1
- package/dist/devices-hap/waterdetector.d.ts +0 -41
- package/dist/devices-hap/waterdetector.d.ts.map +0 -1
- package/dist/devices-hap/waterdetector.js +0 -356
- package/dist/devices-hap/waterdetector.js.map +0 -1
- package/dist/devices-matter/BaseMatterAccessory.d.ts +0 -63
- package/dist/devices-matter/BaseMatterAccessory.d.ts.map +0 -1
- package/dist/devices-matter/BaseMatterAccessory.js +0 -100
- package/dist/devices-matter/BaseMatterAccessory.js.map +0 -1
- package/dist/devices-matter/ColorLightAccessory.d.ts +0 -20
- package/dist/devices-matter/ColorLightAccessory.d.ts.map +0 -1
- package/dist/devices-matter/ColorLightAccessory.js +0 -95
- package/dist/devices-matter/ColorLightAccessory.js.map +0 -1
- package/dist/devices-matter/ColorTemperatureLightAccessory.d.ts +0 -18
- package/dist/devices-matter/ColorTemperatureLightAccessory.d.ts.map +0 -1
- package/dist/devices-matter/ColorTemperatureLightAccessory.js +0 -78
- package/dist/devices-matter/ColorTemperatureLightAccessory.js.map +0 -1
- package/dist/devices-matter/ContactSensorAccessory.d.ts +0 -12
- package/dist/devices-matter/ContactSensorAccessory.d.ts.map +0 -1
- package/dist/devices-matter/ContactSensorAccessory.js +0 -34
- package/dist/devices-matter/ContactSensorAccessory.js.map +0 -1
- package/dist/devices-matter/DimmableLightAccessory.d.ts +0 -58
- package/dist/devices-matter/DimmableLightAccessory.d.ts.map +0 -1
- package/dist/devices-matter/DimmableLightAccessory.js +0 -167
- package/dist/devices-matter/DimmableLightAccessory.js.map +0 -1
- package/dist/devices-matter/DoorLockAccessory.d.ts +0 -14
- package/dist/devices-matter/DoorLockAccessory.d.ts.map +0 -1
- package/dist/devices-matter/DoorLockAccessory.js +0 -50
- package/dist/devices-matter/DoorLockAccessory.js.map +0 -1
- package/dist/devices-matter/ExtendedColorLightAccessory.d.ts +0 -21
- package/dist/devices-matter/ExtendedColorLightAccessory.d.ts.map +0 -1
- package/dist/devices-matter/ExtendedColorLightAccessory.js +0 -107
- package/dist/devices-matter/ExtendedColorLightAccessory.js.map +0 -1
- package/dist/devices-matter/FanAccessory.d.ts +0 -16
- package/dist/devices-matter/FanAccessory.d.ts.map +0 -1
- package/dist/devices-matter/FanAccessory.js +0 -81
- package/dist/devices-matter/FanAccessory.js.map +0 -1
- package/dist/devices-matter/HumiditySensorAccessory.d.ts +0 -12
- package/dist/devices-matter/HumiditySensorAccessory.d.ts.map +0 -1
- package/dist/devices-matter/HumiditySensorAccessory.js +0 -34
- package/dist/devices-matter/HumiditySensorAccessory.js.map +0 -1
- package/dist/devices-matter/LeakSensorAccessory.d.ts +0 -12
- package/dist/devices-matter/LeakSensorAccessory.d.ts.map +0 -1
- package/dist/devices-matter/LeakSensorAccessory.js +0 -33
- package/dist/devices-matter/LeakSensorAccessory.js.map +0 -1
- package/dist/devices-matter/LightSensorAccessory.d.ts +0 -12
- package/dist/devices-matter/LightSensorAccessory.d.ts.map +0 -1
- package/dist/devices-matter/LightSensorAccessory.js +0 -34
- package/dist/devices-matter/LightSensorAccessory.js.map +0 -1
- package/dist/devices-matter/OccupancySensorAccessory.d.ts +0 -12
- package/dist/devices-matter/OccupancySensorAccessory.d.ts.map +0 -1
- package/dist/devices-matter/OccupancySensorAccessory.js +0 -39
- package/dist/devices-matter/OccupancySensorAccessory.js.map +0 -1
- package/dist/devices-matter/OnOffLightAccessory.d.ts +0 -38
- package/dist/devices-matter/OnOffLightAccessory.d.ts.map +0 -1
- package/dist/devices-matter/OnOffLightAccessory.js +0 -118
- package/dist/devices-matter/OnOffLightAccessory.js.map +0 -1
- package/dist/devices-matter/OnOffOutletAccessory.d.ts +0 -12
- package/dist/devices-matter/OnOffOutletAccessory.d.ts.map +0 -1
- package/dist/devices-matter/OnOffOutletAccessory.js +0 -40
- package/dist/devices-matter/OnOffOutletAccessory.js.map +0 -1
- package/dist/devices-matter/OnOffSwitchAccessory.d.ts +0 -14
- package/dist/devices-matter/OnOffSwitchAccessory.d.ts.map +0 -1
- package/dist/devices-matter/OnOffSwitchAccessory.js +0 -42
- package/dist/devices-matter/OnOffSwitchAccessory.js.map +0 -1
- package/dist/devices-matter/RoboticVacuumAccessory.d.ts +0 -68
- package/dist/devices-matter/RoboticVacuumAccessory.d.ts.map +0 -1
- package/dist/devices-matter/RoboticVacuumAccessory.js +0 -334
- package/dist/devices-matter/RoboticVacuumAccessory.js.map +0 -1
- package/dist/devices-matter/SmokeCOAlarmAccessory.d.ts +0 -11
- package/dist/devices-matter/SmokeCOAlarmAccessory.d.ts.map +0 -1
- package/dist/devices-matter/SmokeCOAlarmAccessory.js +0 -49
- package/dist/devices-matter/SmokeCOAlarmAccessory.js.map +0 -1
- package/dist/devices-matter/TemperatureSensorAccessory.d.ts +0 -12
- package/dist/devices-matter/TemperatureSensorAccessory.d.ts.map +0 -1
- package/dist/devices-matter/TemperatureSensorAccessory.js +0 -36
- package/dist/devices-matter/TemperatureSensorAccessory.js.map +0 -1
- package/dist/devices-matter/ThermostatAccessory.d.ts +0 -19
- package/dist/devices-matter/ThermostatAccessory.d.ts.map +0 -1
- package/dist/devices-matter/ThermostatAccessory.js +0 -95
- package/dist/devices-matter/ThermostatAccessory.js.map +0 -1
- package/dist/devices-matter/VenetianBlindAccessory.d.ts +0 -19
- package/dist/devices-matter/VenetianBlindAccessory.d.ts.map +0 -1
- package/dist/devices-matter/VenetianBlindAccessory.js +0 -99
- package/dist/devices-matter/VenetianBlindAccessory.js.map +0 -1
- package/dist/devices-matter/WindowBlindAccessory.d.ts +0 -17
- package/dist/devices-matter/WindowBlindAccessory.d.ts.map +0 -1
- package/dist/devices-matter/WindowBlindAccessory.js +0 -80
- package/dist/devices-matter/WindowBlindAccessory.js.map +0 -1
- package/dist/devices-matter/custom/PowerStripAccessory.d.ts +0 -97
- package/dist/devices-matter/custom/PowerStripAccessory.d.ts.map +0 -1
- package/dist/devices-matter/custom/PowerStripAccessory.js +0 -265
- package/dist/devices-matter/custom/PowerStripAccessory.js.map +0 -1
- package/dist/devices-matter/custom/index.d.ts +0 -8
- package/dist/devices-matter/custom/index.d.ts.map +0 -1
- package/dist/devices-matter/custom/index.js +0 -8
- package/dist/devices-matter/custom/index.js.map +0 -1
- package/dist/devices-matter/index.d.ts +0 -29
- package/dist/devices-matter/index.d.ts.map +0 -1
- package/dist/devices-matter/index.js +0 -28
- package/dist/devices-matter/index.js.map +0 -1
- package/dist/index.test.d.ts +0 -2
- package/dist/index.test.d.ts.map +0 -1
- package/dist/index.test.js +0 -14
- package/dist/index.test.js.map +0 -1
- package/dist/irdevice/airconditioner.d.ts +0 -61
- package/dist/irdevice/airconditioner.d.ts.map +0 -1
- package/dist/irdevice/airconditioner.js +0 -472
- package/dist/irdevice/airconditioner.js.map +0 -1
- package/dist/irdevice/airpurifier.d.ts +0 -50
- package/dist/irdevice/airpurifier.d.ts.map +0 -1
- package/dist/irdevice/airpurifier.js +0 -213
- package/dist/irdevice/airpurifier.js.map +0 -1
- package/dist/irdevice/camera.d.ts +0 -32
- package/dist/irdevice/camera.d.ts.map +0 -1
- package/dist/irdevice/camera.js +0 -107
- package/dist/irdevice/camera.js.map +0 -1
- package/dist/irdevice/fan.d.ts +0 -36
- package/dist/irdevice/fan.d.ts.map +0 -1
- package/dist/irdevice/fan.js +0 -200
- package/dist/irdevice/fan.js.map +0 -1
- package/dist/irdevice/irdevice.d.ts +0 -68
- package/dist/irdevice/irdevice.d.ts.map +0 -1
- package/dist/irdevice/irdevice.js +0 -298
- package/dist/irdevice/irdevice.js.map +0 -1
- package/dist/irdevice/light.d.ts +0 -36
- package/dist/irdevice/light.d.ts.map +0 -1
- package/dist/irdevice/light.js +0 -206
- package/dist/irdevice/light.js.map +0 -1
- package/dist/irdevice/other.d.ts +0 -57
- package/dist/irdevice/other.d.ts.map +0 -1
- package/dist/irdevice/other.js +0 -778
- package/dist/irdevice/other.js.map +0 -1
- package/dist/irdevice/tv.d.ts +0 -45
- package/dist/irdevice/tv.d.ts.map +0 -1
- package/dist/irdevice/tv.js +0 -327
- package/dist/irdevice/tv.js.map +0 -1
- package/dist/irdevice/vacuumcleaner.d.ts +0 -28
- package/dist/irdevice/vacuumcleaner.d.ts.map +0 -1
- package/dist/irdevice/vacuumcleaner.js +0 -104
- package/dist/irdevice/vacuumcleaner.js.map +0 -1
- package/dist/irdevice/waterheater.d.ts +0 -30
- package/dist/irdevice/waterheater.d.ts.map +0 -1
- package/dist/irdevice/waterheater.js +0 -105
- package/dist/irdevice/waterheater.js.map +0 -1
- package/dist/platform-hap.d.ts +0 -149
- package/dist/platform-hap.d.ts.map +0 -1
- package/dist/platform-hap.js +0 -2861
- package/dist/platform-hap.js.map +0 -1
- package/dist/platform-matter.d.ts +0 -101
- package/dist/platform-matter.d.ts.map +0 -1
- package/dist/platform-matter.js +0 -896
- package/dist/platform-matter.js.map +0 -1
- package/dist/verifyconfig.test.d.ts +0 -2
- package/dist/verifyconfig.test.d.ts.map +0 -1
- package/dist/verifyconfig.test.js +0 -167
- package/dist/verifyconfig.test.js.map +0 -1
- package/src/custom.d.ts +0 -7
- package/src/devices-hap/airpurifier.ts +0 -563
- package/src/devices-hap/blindtilt.ts +0 -1049
- package/src/devices-hap/bot.ts +0 -900
- package/src/devices-hap/ceilinglight.ts +0 -742
- package/src/devices-hap/colorbulb.ts +0 -904
- package/src/devices-hap/contact.ts +0 -457
- package/src/devices-hap/curtain.ts +0 -944
- package/src/devices-hap/device.ts +0 -811
- package/src/devices-hap/fan.ts +0 -711
- package/src/devices-hap/hub.ts +0 -439
- package/src/devices-hap/humidifier.ts +0 -669
- package/src/devices-hap/iosensor.ts +0 -427
- package/src/devices-hap/lightstrip.ts +0 -836
- package/src/devices-hap/lock.ts +0 -620
- package/src/devices-hap/meter.ts +0 -426
- package/src/devices-hap/meterplus.ts +0 -430
- package/src/devices-hap/meterpro.ts +0 -522
- package/src/devices-hap/motion.ts +0 -390
- package/src/devices-hap/plug.ts +0 -423
- package/src/devices-hap/relayswitch.ts +0 -727
- package/src/devices-hap/robotvacuumcleaner.ts +0 -568
- package/src/devices-hap/waterdetector.ts +0 -400
- package/src/devices-matter/BaseMatterAccessory.ts +0 -131
- package/src/devices-matter/ColorLightAccessory.ts +0 -110
- package/src/devices-matter/ColorTemperatureLightAccessory.ts +0 -92
- package/src/devices-matter/ContactSensorAccessory.ts +0 -41
- package/src/devices-matter/DimmableLightAccessory.ts +0 -192
- package/src/devices-matter/DoorLockAccessory.ts +0 -60
- package/src/devices-matter/ExtendedColorLightAccessory.ts +0 -123
- package/src/devices-matter/FanAccessory.ts +0 -95
- package/src/devices-matter/HumiditySensorAccessory.ts +0 -41
- package/src/devices-matter/LeakSensorAccessory.ts +0 -40
- package/src/devices-matter/LightSensorAccessory.ts +0 -41
- package/src/devices-matter/OccupancySensorAccessory.ts +0 -48
- package/src/devices-matter/OnOffLightAccessory.ts +0 -133
- package/src/devices-matter/OnOffOutletAccessory.ts +0 -46
- package/src/devices-matter/OnOffSwitchAccessory.ts +0 -51
- package/src/devices-matter/RoboticVacuumAccessory.ts +0 -407
- package/src/devices-matter/SmokeCOAlarmAccessory.ts +0 -59
- package/src/devices-matter/TemperatureSensorAccessory.ts +0 -43
- package/src/devices-matter/ThermostatAccessory.ts +0 -110
- package/src/devices-matter/VenetianBlindAccessory.ts +0 -115
- package/src/devices-matter/WindowBlindAccessory.ts +0 -92
- package/src/devices-matter/custom/PowerStripAccessory.ts +0 -309
- package/src/devices-matter/custom/index.ts +0 -8
- package/src/devices-matter/index.ts +0 -29
- package/src/index.test.ts +0 -19
- package/src/irdevice/airconditioner.ts +0 -533
- package/src/irdevice/airpurifier.ts +0 -252
- package/src/irdevice/camera.ts +0 -129
- package/src/irdevice/fan.ts +0 -226
- package/src/irdevice/irdevice.ts +0 -344
- package/src/irdevice/light.ts +0 -246
- package/src/irdevice/other.ts +0 -790
- package/src/irdevice/tv.ts +0 -378
- package/src/irdevice/vacuumcleaner.ts +0 -126
- package/src/irdevice/waterheater.ts +0 -127
- package/src/platform-hap.ts +0 -2997
- package/src/platform-matter.ts +0 -1010
- package/src/verifyconfig.test.ts +0 -197
package/src/irdevice/tv.ts
DELETED
|
@@ -1,378 +0,0 @@
|
|
|
1
|
-
/* Copyright(C) 2021-2024, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
|
-
*
|
|
3
|
-
* tv.ts: @switchbot/homebridge-switchbot.
|
|
4
|
-
*/
|
|
5
|
-
import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
|
|
6
|
-
import type { bodyChange, irdevice } from 'node-switchbot'
|
|
7
|
-
|
|
8
|
-
import type { SwitchBotHAPPlatform } from '../platform-hap.js'
|
|
9
|
-
import type { irDevicesConfig } from '../settings.js'
|
|
10
|
-
|
|
11
|
-
import { irdeviceBase } from './irdevice.js'
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Platform Accessory
|
|
15
|
-
* An instance of this class is created for each accessory your platform registers
|
|
16
|
-
* Each accessory may expose multiple services of different service types.
|
|
17
|
-
*/
|
|
18
|
-
export class TV extends irdeviceBase {
|
|
19
|
-
// Services
|
|
20
|
-
private Television: {
|
|
21
|
-
Name: CharacteristicValue
|
|
22
|
-
ConfiguredName: CharacteristicValue
|
|
23
|
-
Service: Service
|
|
24
|
-
Active: CharacteristicValue
|
|
25
|
-
ActiveIdentifier: CharacteristicValue
|
|
26
|
-
SleepDiscoveryMode: CharacteristicValue
|
|
27
|
-
RemoteKey: CharacteristicValue
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
private TelevisionSpeaker: {
|
|
31
|
-
Name: CharacteristicValue
|
|
32
|
-
Service: Service
|
|
33
|
-
Active: CharacteristicValue
|
|
34
|
-
VolumeControlType: CharacteristicValue
|
|
35
|
-
VolumeSelector: CharacteristicValue
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// Characteristic Values
|
|
39
|
-
|
|
40
|
-
constructor(
|
|
41
|
-
readonly platform: SwitchBotHAPPlatform,
|
|
42
|
-
accessory: PlatformAccessory,
|
|
43
|
-
device: irdevice & irDevicesConfig,
|
|
44
|
-
) {
|
|
45
|
-
super(platform, accessory, device)
|
|
46
|
-
|
|
47
|
-
// Initialize Television Service
|
|
48
|
-
accessory.context.Television = accessory.context.Television ?? {}
|
|
49
|
-
this.Television = {
|
|
50
|
-
Name: accessory.displayName,
|
|
51
|
-
ConfiguredName: accessory.displayName,
|
|
52
|
-
Service: accessory.getService(this.hap.Service.Television) ?? accessory.addService(this.hap.Service.Television) as Service,
|
|
53
|
-
Active: accessory.context.Active ?? this.hap.Characteristic.Active.INACTIVE,
|
|
54
|
-
ActiveIdentifier: accessory.context.ActiveIdentifier ?? 1,
|
|
55
|
-
SleepDiscoveryMode: accessory.context.SleepDiscoveryMode ?? this.hap.Characteristic.SleepDiscoveryMode.ALWAYS_DISCOVERABLE,
|
|
56
|
-
RemoteKey: accessory.context.RemoteKey ?? this.hap.Characteristic.RemoteKey.EXIT,
|
|
57
|
-
}
|
|
58
|
-
accessory.context.Television = this.Television as object
|
|
59
|
-
|
|
60
|
-
switch (device.remoteType) {
|
|
61
|
-
case 'Speaker':
|
|
62
|
-
case 'DIY Speaker':
|
|
63
|
-
accessory.category = this.hap.Categories.SPEAKER
|
|
64
|
-
break
|
|
65
|
-
case 'IPTV':
|
|
66
|
-
case 'DIY IPTV':
|
|
67
|
-
accessory.category = this.hap.Categories.TV_STREAMING_STICK
|
|
68
|
-
break
|
|
69
|
-
case 'DVD':
|
|
70
|
-
case 'DIY DVD':
|
|
71
|
-
case 'Set Top Box':
|
|
72
|
-
case 'DIY Set Top Box':
|
|
73
|
-
accessory.category = this.hap.Categories.TV_SET_TOP_BOX
|
|
74
|
-
break
|
|
75
|
-
default:
|
|
76
|
-
accessory.category = this.hap.Categories.TELEVISION
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
this.Television.Service.setCharacteristic(this.hap.Characteristic.SleepDiscoveryMode, this.hap.Characteristic.SleepDiscoveryMode.ALWAYS_DISCOVERABLE).setCharacteristic(this.hap.Characteristic.ConfiguredName, this.Television.ConfiguredName).getCharacteristic(this.hap.Characteristic.ConfiguredName)
|
|
80
|
-
|
|
81
|
-
this.Television.Service.setCharacteristic(this.hap.Characteristic.ActiveIdentifier, 1).getCharacteristic(this.hap.Characteristic.Active).onGet(() => {
|
|
82
|
-
return this.Television.Active
|
|
83
|
-
}).onSet(this.ActiveSet.bind(this))
|
|
84
|
-
|
|
85
|
-
this.Television.Service.getCharacteristic(this.hap.Characteristic.ActiveIdentifier).onGet(() => {
|
|
86
|
-
return this.Television.ActiveIdentifier
|
|
87
|
-
}).onSet(this.ActiveIdentifierSet.bind(this))
|
|
88
|
-
|
|
89
|
-
this.Television.Service.getCharacteristic(this.hap.Characteristic.RemoteKey).onGet(() => {
|
|
90
|
-
return this.Television.RemoteKey
|
|
91
|
-
}).onSet(this.RemoteKeySet.bind(this))
|
|
92
|
-
|
|
93
|
-
// Initialize TelevisionSpeaker Service
|
|
94
|
-
accessory.context.TelevisionSpeaker = accessory.context.TelevisionSpeaker ?? {}
|
|
95
|
-
this.TelevisionSpeaker = {
|
|
96
|
-
Name: `${accessory.displayName} Speaker`,
|
|
97
|
-
Service: accessory.getService(this.hap.Service.TelevisionSpeaker) ?? accessory.addService(this.hap.Service.TelevisionSpeaker) as Service,
|
|
98
|
-
Active: accessory.context.Active ?? false,
|
|
99
|
-
VolumeControlType: accessory.context.VolumeControlType ?? this.hap.Characteristic.VolumeControlType.ABSOLUTE,
|
|
100
|
-
VolumeSelector: accessory.context.VolumeSelector ?? this.hap.Characteristic.VolumeSelector.INCREMENT,
|
|
101
|
-
}
|
|
102
|
-
accessory.context.TelevisionSpeaker = this.TelevisionSpeaker as object
|
|
103
|
-
|
|
104
|
-
this.TelevisionSpeaker.Service.setCharacteristic(this.hap.Characteristic.Name, this.TelevisionSpeaker.Name).setCharacteristic(this.hap.Characteristic.Active, this.hap.Characteristic.Active.ACTIVE).setCharacteristic(this.hap.Characteristic.VolumeControlType, this.hap.Characteristic.VolumeControlType.ABSOLUTE).getCharacteristic(this.hap.Characteristic.VolumeSelector).onGet(() => {
|
|
105
|
-
return this.TelevisionSpeaker.VolumeSelector
|
|
106
|
-
}).onSet(this.VolumeSelectorSet.bind(this))
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
async VolumeSelectorSet(value: CharacteristicValue): Promise<void> {
|
|
110
|
-
this.debugLog(`VolumeSelector: ${value}`)
|
|
111
|
-
if (value === this.hap.Characteristic.VolumeSelector.INCREMENT) {
|
|
112
|
-
this.pushVolumeUpChanges()
|
|
113
|
-
} else {
|
|
114
|
-
this.pushVolumeDownChanges()
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
async RemoteKeySet(value: CharacteristicValue): Promise<void> {
|
|
119
|
-
switch (value) {
|
|
120
|
-
case this.hap.Characteristic.RemoteKey.REWIND: {
|
|
121
|
-
this.debugLog('Set Remote Key Pressed: REWIND')
|
|
122
|
-
break
|
|
123
|
-
}
|
|
124
|
-
case this.hap.Characteristic.RemoteKey.FAST_FORWARD: {
|
|
125
|
-
this.debugLog('Set Remote Key Pressed: FAST_FORWARD')
|
|
126
|
-
break
|
|
127
|
-
}
|
|
128
|
-
case this.hap.Characteristic.RemoteKey.NEXT_TRACK: {
|
|
129
|
-
this.debugLog('Set Remote Key Pressed: NEXT_TRACK')
|
|
130
|
-
break
|
|
131
|
-
}
|
|
132
|
-
case this.hap.Characteristic.RemoteKey.PREVIOUS_TRACK: {
|
|
133
|
-
this.debugLog('Set Remote Key Pressed: PREVIOUS_TRACK')
|
|
134
|
-
break
|
|
135
|
-
}
|
|
136
|
-
case this.hap.Characteristic.RemoteKey.ARROW_UP: {
|
|
137
|
-
this.debugLog('Set Remote Key Pressed: ARROW_UP')
|
|
138
|
-
// this.pushUpChanges();
|
|
139
|
-
break
|
|
140
|
-
}
|
|
141
|
-
case this.hap.Characteristic.RemoteKey.ARROW_DOWN: {
|
|
142
|
-
this.debugLog('Set Remote Key Pressed: ARROW_DOWN')
|
|
143
|
-
// this.pushDownChanges();
|
|
144
|
-
break
|
|
145
|
-
}
|
|
146
|
-
case this.hap.Characteristic.RemoteKey.ARROW_LEFT: {
|
|
147
|
-
this.debugLog('Set Remote Key Pressed: ARROW_LEFT')
|
|
148
|
-
// this.pushLeftChanges();
|
|
149
|
-
break
|
|
150
|
-
}
|
|
151
|
-
case this.hap.Characteristic.RemoteKey.ARROW_RIGHT: {
|
|
152
|
-
this.debugLog('Set Remote Key Pressed: ARROW_RIGHT')
|
|
153
|
-
// this.pushRightChanges();
|
|
154
|
-
break
|
|
155
|
-
}
|
|
156
|
-
case this.hap.Characteristic.RemoteKey.SELECT: {
|
|
157
|
-
this.debugLog('Set Remote Key Pressed: SELECT')
|
|
158
|
-
// this.pushOkChanges();
|
|
159
|
-
break
|
|
160
|
-
}
|
|
161
|
-
case this.hap.Characteristic.RemoteKey.BACK: {
|
|
162
|
-
this.debugLog('Set Remote Key Pressed: BACK')
|
|
163
|
-
// this.pushBackChanges();
|
|
164
|
-
break
|
|
165
|
-
}
|
|
166
|
-
case this.hap.Characteristic.RemoteKey.EXIT: {
|
|
167
|
-
this.debugLog('Set Remote Key Pressed: EXIT')
|
|
168
|
-
break
|
|
169
|
-
}
|
|
170
|
-
case this.hap.Characteristic.RemoteKey.PLAY_PAUSE: {
|
|
171
|
-
this.debugLog('Set Remote Key Pressed: PLAY_PAUSE')
|
|
172
|
-
break
|
|
173
|
-
}
|
|
174
|
-
case this.hap.Characteristic.RemoteKey.INFORMATION: {
|
|
175
|
-
this.debugLog('Set Remote Key Pressed: INFORMATION')
|
|
176
|
-
// this.pushMenuChanges();
|
|
177
|
-
break
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
async ActiveIdentifierSet(value: CharacteristicValue): Promise<void> {
|
|
183
|
-
this.debugLog(`ActiveIdentifier: ${value}`)
|
|
184
|
-
this.Television.ActiveIdentifier = value
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
async ActiveSet(value: CharacteristicValue): Promise<void> {
|
|
188
|
-
this.debugLog(`Active (value): ${value}`)
|
|
189
|
-
|
|
190
|
-
this.Television.Active = value
|
|
191
|
-
if (this.Television.Active === this.hap.Characteristic.Active.ACTIVE) {
|
|
192
|
-
await this.pushTvOnChanges()
|
|
193
|
-
} else {
|
|
194
|
-
await this.pushTvOffChanges()
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
/**
|
|
199
|
-
* Pushes the requested changes to the SwitchBot API
|
|
200
|
-
* deviceType commandType Command Parameter Description
|
|
201
|
-
* TV "command" "turnOff" "default" set to OFF state
|
|
202
|
-
* TV "command" "turnOn" "default" set to ON state
|
|
203
|
-
* TV "command" "volumeAdd" "default" volume up
|
|
204
|
-
* TV "command" "volumeSub" "default" volume down
|
|
205
|
-
* TV "command" "channelAdd" "default" next channel
|
|
206
|
-
* TV "command" "channelSub" "default" previous channel
|
|
207
|
-
*/
|
|
208
|
-
async pushTvOnChanges(): Promise<void> {
|
|
209
|
-
this.debugLog(`pushTvOnChanges Active: ${this.Television.Active}, disablePushOn: ${this.deviceDisablePushOn}`)
|
|
210
|
-
if (this.Television.Active === this.hap.Characteristic.Active.ACTIVE && !this.deviceDisablePushOn) {
|
|
211
|
-
const commandType: string = await this.commandType()
|
|
212
|
-
const command: string = await this.commandOn()
|
|
213
|
-
const bodyChange: bodyChange = {
|
|
214
|
-
command,
|
|
215
|
-
parameter: 'default',
|
|
216
|
-
commandType,
|
|
217
|
-
}
|
|
218
|
-
await this.pushTVChanges(bodyChange)
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
async pushTvOffChanges(): Promise<void> {
|
|
223
|
-
this.debugLog(`pushTvOffChanges Active: ${this.Television.Active}, disablePushOff: ${this.deviceDisablePushOff}`)
|
|
224
|
-
if (this.Television.Active === this.hap.Characteristic.Active.INACTIVE && !this.deviceDisablePushOff) {
|
|
225
|
-
const commandType: string = await this.commandType()
|
|
226
|
-
const command: string = await this.commandOff()
|
|
227
|
-
const bodyChange: bodyChange = {
|
|
228
|
-
command,
|
|
229
|
-
parameter: 'default',
|
|
230
|
-
commandType,
|
|
231
|
-
}
|
|
232
|
-
await this.pushTVChanges(bodyChange)
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
async pushOkChanges(): Promise<void> {
|
|
237
|
-
this.debugLog(`pushOkChanges disablePushDetail: ${this.deviceDisablePushDetail}`)
|
|
238
|
-
if (!this.deviceDisablePushDetail) {
|
|
239
|
-
const bodyChange: bodyChange = {
|
|
240
|
-
command: 'Ok',
|
|
241
|
-
parameter: 'default',
|
|
242
|
-
commandType: 'command',
|
|
243
|
-
}
|
|
244
|
-
await this.pushTVChanges(bodyChange)
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
async pushBackChanges(): Promise<void> {
|
|
249
|
-
this.debugLog(`pushBackChanges disablePushDetail: ${this.deviceDisablePushDetail}`)
|
|
250
|
-
if (!this.deviceDisablePushDetail) {
|
|
251
|
-
const bodyChange: bodyChange = {
|
|
252
|
-
command: 'Back',
|
|
253
|
-
parameter: 'default',
|
|
254
|
-
commandType: 'command',
|
|
255
|
-
}
|
|
256
|
-
await this.pushTVChanges(bodyChange)
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
async pushMenuChanges(): Promise<void> {
|
|
261
|
-
this.debugLog(`pushMenuChanges disablePushDetail: ${this.deviceDisablePushDetail}`)
|
|
262
|
-
if (!this.deviceDisablePushDetail) {
|
|
263
|
-
const bodyChange: bodyChange = {
|
|
264
|
-
command: 'Menu',
|
|
265
|
-
parameter: 'default',
|
|
266
|
-
commandType: 'command',
|
|
267
|
-
}
|
|
268
|
-
await this.pushTVChanges(bodyChange)
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
async pushUpChanges(): Promise<void> {
|
|
273
|
-
this.debugLog(`pushUpChanges disablePushDetail: ${this.deviceDisablePushDetail}`)
|
|
274
|
-
if (!this.deviceDisablePushDetail) {
|
|
275
|
-
const bodyChange: bodyChange = {
|
|
276
|
-
command: 'Up',
|
|
277
|
-
parameter: 'default',
|
|
278
|
-
commandType: 'command',
|
|
279
|
-
}
|
|
280
|
-
await this.pushTVChanges(bodyChange)
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
async pushDownChanges(): Promise<void> {
|
|
285
|
-
this.debugLog(`pushDownChanges disablePushDetail: ${this.deviceDisablePushDetail}`)
|
|
286
|
-
if (!this.deviceDisablePushDetail) {
|
|
287
|
-
const bodyChange: bodyChange = {
|
|
288
|
-
command: 'Down',
|
|
289
|
-
parameter: 'default',
|
|
290
|
-
commandType: 'command',
|
|
291
|
-
}
|
|
292
|
-
await this.pushTVChanges(bodyChange)
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
async pushRightChanges(): Promise<void> {
|
|
297
|
-
this.debugLog(`pushRightChanges disablePushDetail: ${this.deviceDisablePushDetail}`)
|
|
298
|
-
if (!this.deviceDisablePushDetail) {
|
|
299
|
-
const bodyChange: bodyChange = {
|
|
300
|
-
command: 'Right',
|
|
301
|
-
parameter: 'default',
|
|
302
|
-
commandType: 'command',
|
|
303
|
-
}
|
|
304
|
-
await this.pushTVChanges(bodyChange)
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
async pushLeftChanges(): Promise<void> {
|
|
309
|
-
this.debugLog(`pushLeftChanges disablePushDetail: ${this.deviceDisablePushDetail}`)
|
|
310
|
-
if (!this.deviceDisablePushDetail) {
|
|
311
|
-
const bodyChange: bodyChange = {
|
|
312
|
-
command: 'Left',
|
|
313
|
-
parameter: 'default',
|
|
314
|
-
commandType: 'command',
|
|
315
|
-
}
|
|
316
|
-
await this.pushTVChanges(bodyChange)
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
async pushVolumeUpChanges(): Promise<void> {
|
|
321
|
-
this.debugLog(`pushVolumeUpChanges disablePushDetail: ${this.deviceDisablePushDetail}`)
|
|
322
|
-
if (!this.deviceDisablePushDetail) {
|
|
323
|
-
const bodyChange: bodyChange = {
|
|
324
|
-
command: 'volumeAdd',
|
|
325
|
-
parameter: 'default',
|
|
326
|
-
commandType: 'command',
|
|
327
|
-
}
|
|
328
|
-
await this.pushTVChanges(bodyChange)
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
async pushVolumeDownChanges(): Promise<void> {
|
|
333
|
-
this.debugLog(`pushVolumeDownChanges disablePushDetail: ${this.deviceDisablePushDetail}`)
|
|
334
|
-
if (!this.deviceDisablePushDetail) {
|
|
335
|
-
const bodyChange: bodyChange = {
|
|
336
|
-
command: 'volumeSub',
|
|
337
|
-
parameter: 'default',
|
|
338
|
-
commandType: 'command',
|
|
339
|
-
}
|
|
340
|
-
await this.pushTVChanges(bodyChange)
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
async pushTVChanges(bodyChange: any): Promise<void> {
|
|
345
|
-
this.debugLog('pushTVChanges')
|
|
346
|
-
if (this.device.connectionType === 'OpenAPI') {
|
|
347
|
-
this.infoLog(`Sending request to SwitchBot API, body: ${JSON.stringify(bodyChange)}`)
|
|
348
|
-
try {
|
|
349
|
-
const deviceStatus = await this.pushChangeRequest(bodyChange)
|
|
350
|
-
await this.pushStatusCodes(deviceStatus)
|
|
351
|
-
if (await this.successfulStatusCodes(deviceStatus)) {
|
|
352
|
-
await this.successfulPushChange(deviceStatus, bodyChange)
|
|
353
|
-
await this.updateHomeKitCharacteristics()
|
|
354
|
-
} else {
|
|
355
|
-
await this.statusCode(deviceStatus.statusCode)
|
|
356
|
-
}
|
|
357
|
-
} catch (e: any) {
|
|
358
|
-
await this.apiError(e)
|
|
359
|
-
await this.pushChangeError(e)
|
|
360
|
-
}
|
|
361
|
-
} else {
|
|
362
|
-
this.warnLog(`Connection Type: ${this.device.connectionType}, commands will not be sent to OpenAPI`)
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
async updateHomeKitCharacteristics(): Promise<void> {
|
|
367
|
-
this.debugLog('updateHomeKitCharacteristics')
|
|
368
|
-
// Active
|
|
369
|
-
await this.updateCharacteristic(this.Television.Service, this.hap.Characteristic.Active, this.Television.Active, 'Active')
|
|
370
|
-
// ActiveIdentifier
|
|
371
|
-
await this.updateCharacteristic(this.Television.Service, this.hap.Characteristic.ActiveIdentifier, this.Television.ActiveIdentifier, 'ActiveIdentifier')
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
async apiError(e: any): Promise<void> {
|
|
375
|
-
this.Television.Service.updateCharacteristic(this.hap.Characteristic.Active, e)
|
|
376
|
-
this.Television.Service.updateCharacteristic(this.hap.Characteristic.ActiveIdentifier, e)
|
|
377
|
-
}
|
|
378
|
-
}
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
/* Copyright(C) 2021-2024, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
|
-
*
|
|
3
|
-
* vacuumcleaner.ts: @switchbot/homebridge-switchbot.
|
|
4
|
-
*/
|
|
5
|
-
import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
|
|
6
|
-
import type { bodyChange, irdevice } from 'node-switchbot'
|
|
7
|
-
|
|
8
|
-
import type { SwitchBotHAPPlatform } from '../platform-hap.js'
|
|
9
|
-
import type { irDevicesConfig } from '../settings.js'
|
|
10
|
-
|
|
11
|
-
import { irdeviceBase } from './irdevice.js'
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Platform Accessory
|
|
15
|
-
* An instance of this class is created for each accessory your platform registers
|
|
16
|
-
* Each accessory may expose multiple services of different service types.
|
|
17
|
-
*/
|
|
18
|
-
export class VacuumCleaner extends irdeviceBase {
|
|
19
|
-
// Services
|
|
20
|
-
private Switch: {
|
|
21
|
-
Name: CharacteristicValue
|
|
22
|
-
Service: Service
|
|
23
|
-
On: CharacteristicValue
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
constructor(
|
|
27
|
-
readonly platform: SwitchBotHAPPlatform,
|
|
28
|
-
accessory: PlatformAccessory,
|
|
29
|
-
device: irdevice & irDevicesConfig,
|
|
30
|
-
) {
|
|
31
|
-
super(platform, accessory, device)
|
|
32
|
-
// Set category
|
|
33
|
-
accessory.category = this.hap.Categories.OTHER
|
|
34
|
-
|
|
35
|
-
// Initialize Switch Service
|
|
36
|
-
accessory.context.Switch = accessory.context.Switch ?? {}
|
|
37
|
-
this.Switch = {
|
|
38
|
-
Name: accessory.displayName,
|
|
39
|
-
Service: accessory.getService(this.hap.Service.Switch) ?? accessory.addService(this.hap.Service.Switch) as Service,
|
|
40
|
-
On: accessory.context.On ?? false,
|
|
41
|
-
}
|
|
42
|
-
accessory.context.Switch = this.Switch as object
|
|
43
|
-
|
|
44
|
-
this.Switch.Service.setCharacteristic(this.hap.Characteristic.Name, this.Switch.Name).getCharacteristic(this.hap.Characteristic.On).onGet(() => {
|
|
45
|
-
return this.Switch.On
|
|
46
|
-
}).onSet(this.OnSet.bind(this))
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
async OnSet(value: CharacteristicValue): Promise<void> {
|
|
50
|
-
this.debugLog(`On: ${value}`)
|
|
51
|
-
|
|
52
|
-
// Set the requested state
|
|
53
|
-
this.Switch.On = value
|
|
54
|
-
if (this.Switch.On) {
|
|
55
|
-
await this.pushOnChanges()
|
|
56
|
-
} else {
|
|
57
|
-
await this.pushOffChanges()
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Pushes the requested changes to the SwitchBot API
|
|
63
|
-
* deviceType CommandType Command Parameter Description
|
|
64
|
-
* Vacuum Cleaner "command" "turnOff" "default" set to OFF state
|
|
65
|
-
* Vacuum Cleaner "command" "turnOn" "default" set to ON state
|
|
66
|
-
*/
|
|
67
|
-
async pushOnChanges(): Promise<void> {
|
|
68
|
-
this.debugLog(`pushOnChanges On: ${this.Switch.On}, disablePushOn: ${this.deviceDisablePushOn}`)
|
|
69
|
-
if (this.Switch.On && !this.deviceDisablePushOn) {
|
|
70
|
-
const commandType: string = await this.commandType()
|
|
71
|
-
const command: string = await this.commandOn()
|
|
72
|
-
const bodyChange: bodyChange = {
|
|
73
|
-
command,
|
|
74
|
-
parameter: 'default',
|
|
75
|
-
commandType,
|
|
76
|
-
}
|
|
77
|
-
await this.pushChanges(bodyChange)
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
async pushOffChanges(): Promise<void> {
|
|
82
|
-
this.debugLog(`pushOffChanges On: ${this.Switch.On}, disablePushOff: ${this.deviceDisablePushOff}`)
|
|
83
|
-
if (!this.Switch.On && !this.deviceDisablePushOff) {
|
|
84
|
-
const commandType: string = await this.commandType()
|
|
85
|
-
const command: string = await this.commandOff()
|
|
86
|
-
const bodyChange: bodyChange = {
|
|
87
|
-
command,
|
|
88
|
-
parameter: 'default',
|
|
89
|
-
commandType,
|
|
90
|
-
}
|
|
91
|
-
await this.pushChanges(bodyChange)
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
async pushChanges(bodyChange: any): Promise<void> {
|
|
96
|
-
this.debugLog('pushChanges')
|
|
97
|
-
if (this.device.connectionType === 'OpenAPI') {
|
|
98
|
-
this.infoLog(`Sending request to SwitchBot API, body: ${JSON.stringify(bodyChange)}`)
|
|
99
|
-
try {
|
|
100
|
-
const deviceStatus = await this.pushChangeRequest(bodyChange)
|
|
101
|
-
await this.pushStatusCodes(deviceStatus)
|
|
102
|
-
if (await this.successfulStatusCodes(deviceStatus)) {
|
|
103
|
-
await this.successfulPushChange(deviceStatus, bodyChange)
|
|
104
|
-
await this.updateHomeKitCharacteristics()
|
|
105
|
-
} else {
|
|
106
|
-
await this.statusCode(deviceStatus.statusCode)
|
|
107
|
-
}
|
|
108
|
-
} catch (e: any) {
|
|
109
|
-
await this.apiError(e)
|
|
110
|
-
await this.pushChangeError(e)
|
|
111
|
-
}
|
|
112
|
-
} else {
|
|
113
|
-
this.warnLog(`Connection Type: ${this.device.connectionType}, commands will not be sent to OpenAPI`)
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
async updateHomeKitCharacteristics(): Promise<void> {
|
|
118
|
-
this.debugLog('updateHomeKitCharacteristics')
|
|
119
|
-
// On
|
|
120
|
-
await this.updateCharacteristic(this.Switch.Service, this.hap.Characteristic.On, this.Switch.On, 'On')
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
async apiError(e: any): Promise<void> {
|
|
124
|
-
this.Switch.Service.updateCharacteristic(this.hap.Characteristic.On, e)
|
|
125
|
-
}
|
|
126
|
-
}
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
/* Copyright(C) 2021-2024, donavanbecker (https://github.com/donavanbecker). All rights reserved.
|
|
2
|
-
*
|
|
3
|
-
* waterheater.ts: @switchbot/homebridge-switchbot.
|
|
4
|
-
*/
|
|
5
|
-
import type { CharacteristicValue, PlatformAccessory, Service } from 'homebridge'
|
|
6
|
-
import type { bodyChange, irdevice } from 'node-switchbot'
|
|
7
|
-
|
|
8
|
-
import type { SwitchBotHAPPlatform } from '../platform-hap.js'
|
|
9
|
-
import type { irDevicesConfig } from '../settings.js'
|
|
10
|
-
|
|
11
|
-
import { irdeviceBase } from './irdevice.js'
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Platform Accessory
|
|
15
|
-
* An instance of this class is created for each accessory your platform registers
|
|
16
|
-
* Each accessory may expose multiple services of different service types.
|
|
17
|
-
*/
|
|
18
|
-
export class WaterHeater extends irdeviceBase {
|
|
19
|
-
// Services
|
|
20
|
-
private Valve: {
|
|
21
|
-
Name: CharacteristicValue
|
|
22
|
-
Service: Service
|
|
23
|
-
Active: CharacteristicValue
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
constructor(
|
|
27
|
-
readonly platform: SwitchBotHAPPlatform,
|
|
28
|
-
accessory: PlatformAccessory,
|
|
29
|
-
device: irdevice & irDevicesConfig,
|
|
30
|
-
) {
|
|
31
|
-
super(platform, accessory, device)
|
|
32
|
-
// Set category
|
|
33
|
-
accessory.category = this.hap.Categories.FAUCET
|
|
34
|
-
|
|
35
|
-
// Initialize Switch Service
|
|
36
|
-
accessory.context.Valve = accessory.context.Valve ?? {}
|
|
37
|
-
this.Valve = {
|
|
38
|
-
Name: accessory.displayName,
|
|
39
|
-
Service: accessory.getService(this.hap.Service.Valve) ?? accessory.addService(this.hap.Service.Valve) as Service,
|
|
40
|
-
Active: accessory.context.Active ?? this.hap.Characteristic.Active.INACTIVE,
|
|
41
|
-
}
|
|
42
|
-
accessory.context.Valve = this.Valve as object
|
|
43
|
-
|
|
44
|
-
this.Valve.Service.setCharacteristic(this.hap.Characteristic.Name, this.Valve.Name).setCharacteristic(this.hap.Characteristic.ValveType, this.hap.Characteristic.ValveType.GENERIC_VALVE).getCharacteristic(this.hap.Characteristic.Active).onGet(() => {
|
|
45
|
-
return this.Valve.Active
|
|
46
|
-
}).onSet(this.ActiveSet.bind(this))
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
async ActiveSet(value: CharacteristicValue): Promise<void> {
|
|
50
|
-
this.debugLog(`Active: ${value}`)
|
|
51
|
-
|
|
52
|
-
this.Valve.Active = value
|
|
53
|
-
if (this.Valve.Active === this.hap.Characteristic.Active.ACTIVE) {
|
|
54
|
-
await this.pushWaterHeaterOnChanges()
|
|
55
|
-
this.Valve.Service.setCharacteristic(this.hap.Characteristic.InUse, this.hap.Characteristic.InUse.IN_USE)
|
|
56
|
-
} else {
|
|
57
|
-
await this.pushWaterHeaterOffChanges()
|
|
58
|
-
this.Valve.Service.setCharacteristic(this.hap.Characteristic.InUse, this.hap.Characteristic.InUse.NOT_IN_USE)
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Pushes the requested changes to the SwitchBot API
|
|
64
|
-
* deviceType Command Type Command Parameter Description
|
|
65
|
-
* WaterHeater "command" "turnOff" "default" set to OFF state
|
|
66
|
-
* WaterHeater "command" "turnOn" "default" set to ON state
|
|
67
|
-
*/
|
|
68
|
-
async pushWaterHeaterOnChanges(): Promise<void> {
|
|
69
|
-
this.debugLog(`pushWaterHeaterOnChanges Active: ${this.Valve.Active}, disablePushOn: ${this.deviceDisablePushOn}`)
|
|
70
|
-
if (this.Valve.Active === this.hap.Characteristic.Active.ACTIVE && !this.deviceDisablePushOn) {
|
|
71
|
-
const commandType: string = await this.commandType()
|
|
72
|
-
const command: string = await this.commandOn()
|
|
73
|
-
const bodyChange: bodyChange = {
|
|
74
|
-
command,
|
|
75
|
-
parameter: 'default',
|
|
76
|
-
commandType,
|
|
77
|
-
}
|
|
78
|
-
await this.pushChanges(bodyChange)
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
async pushWaterHeaterOffChanges(): Promise<void> {
|
|
83
|
-
this.debugLog(`pushWaterHeaterOffChanges Active: ${this.Valve.Active}, disablePushOff: ${this.deviceDisablePushOff}`)
|
|
84
|
-
if (this.Valve.Active === this.hap.Characteristic.Active.INACTIVE && !this.deviceDisablePushOff) {
|
|
85
|
-
const commandType: string = await this.commandType()
|
|
86
|
-
const command: string = await this.commandOff()
|
|
87
|
-
const bodyChange: bodyChange = {
|
|
88
|
-
command,
|
|
89
|
-
parameter: 'default',
|
|
90
|
-
commandType,
|
|
91
|
-
}
|
|
92
|
-
await this.pushChanges(bodyChange)
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
async pushChanges(bodyChange: any): Promise<void> {
|
|
97
|
-
this.debugLog('pushChanges')
|
|
98
|
-
if (this.device.connectionType === 'OpenAPI') {
|
|
99
|
-
this.infoLog(`Sending request to SwitchBot API, body: ${JSON.stringify(bodyChange)}`)
|
|
100
|
-
try {
|
|
101
|
-
const deviceStatus = await this.pushChangeRequest(bodyChange)
|
|
102
|
-
await this.pushStatusCodes(deviceStatus)
|
|
103
|
-
if (await this.successfulStatusCodes(deviceStatus)) {
|
|
104
|
-
await this.successfulPushChange(deviceStatus, bodyChange)
|
|
105
|
-
await this.updateHomeKitCharacteristics()
|
|
106
|
-
} else {
|
|
107
|
-
await this.statusCode(deviceStatus.statusCode)
|
|
108
|
-
}
|
|
109
|
-
} catch (e: any) {
|
|
110
|
-
await this.apiError(e)
|
|
111
|
-
await this.pushChangeError(e)
|
|
112
|
-
}
|
|
113
|
-
} else {
|
|
114
|
-
this.warnLog(`Connection Type: ${this.device.connectionType}, commands will not be sent to OpenAPI`)
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
async updateHomeKitCharacteristics(): Promise<void> {
|
|
119
|
-
this.debugLog('updateHomeKitCharacteristics')
|
|
120
|
-
// Active
|
|
121
|
-
await this.updateCharacteristic(this.Valve.Service, this.hap.Characteristic.Active, this.Valve.Active, 'Active')
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
async apiError({ e }: { e: any }): Promise<void> {
|
|
125
|
-
this.Valve.Service.updateCharacteristic(this.hap.Characteristic.Active, e)
|
|
126
|
-
}
|
|
127
|
-
}
|