From 3f2000f09ca5a5c9056378be54f0f6ba504dab58 Mon Sep 17 00:00:00 2001 From: Donavan Becker Date: Fri, 11 Oct 2024 23:19:29 -0500 Subject: [PATCH] v4.0.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## [4.0.0](https://github.com/OpenWonderLabs/homebridge-switchbot/releases/tag/v4.0.0) (2024-10-11) ### What's Changed #### ⚠️ Breaking Changes - Added `deviceType` based config - This allows you to set a setting that will be used across the same deviceType - `deviceType` based config settings can be over written by individual device settings set by the deviceId - Added `remoteType` based config - This allows you to set a setting that will be used across the same IR remoteType - `remoteType` based config settings can be over written by individual device settings set by the deviceId - All device specific configs have been moved to the same level on the config to elimate the use of multiple of the same config and to better support the new `deviceType` based config. - ** ⚠️ If you have config set for any of the following SwitchBot device Types: `Curtain`, `Blind Tilt`, `Color Bulb`, `Strip Light`, `Hub`, `Meter`, `Meter Plus`, `Humidifier`, `Contact Sensor`, `Motion Sensor`, `Water Detector`, `Ceiling Light`, or `Lock`; you will need to re-setup your config for that deviceId** - ** ⚠️ If you have config set for any of the following IR remote Types: `Fan`, `DIY Fan`, `Light`, `DIY Light`, `Air Conditioner`, `DIY Air Conditioner`, or `Others`; you will need to re-setup your config for that deviceId** - OpenAPI is now support by Version [3.0.0](https://github.com/OpenWonderLabs/node-switchbot/releases/latest) of [`node-switchbot`](https://github.com/OpenWonderLabs/node-switchbot), so made changes to refect that. #### Other Changes - Add `K10+ Pro` deviceType Support - Housekeeping and updated dependencies. **Full Changelog**: https://github.com/OpenWonderLabs/homebridge-switchbot/compare/v3.8.3...v4.0.0 --- CHANGELOG.md | 15 +- config.schema.json | 1170 +++++++++++++++++++++++++----------------- package-lock.json | 166 +++--- package.json | 6 +- src/device/device.ts | 33 +- src/platform.ts | 1 + src/settings.ts | 14 +- 7 files changed, 843 insertions(+), 562 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc40e4d0..d86f8990 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,16 +2,23 @@ All notable changes to this project will be documented in this file. This project uses [Semantic Versioning](https://semver.org/) -## [4.0.0](https://github.com/OpenWonderLabs/homebridge-switchbot/releases/tag/v4.0.0) (2024-10-XX) +## [4.0.0](https://github.com/OpenWonderLabs/homebridge-switchbot/releases/tag/v4.0.0) (2024-10-11) ### What's Changed #### ⚠️ Breaking Changes -- OpenAPI is now support by Version [3.0.0](https://github.com/OpenWonderLabs/node-switchbot/releases/latest) of [`node-switchbot`](https://github.com/OpenWonderLabs/node-switchbot), so made changes to refect that. -- Moved all device specific configs to all the same levels to elimate the use of multiple of the same config. +- Added `deviceType` based config + - This allows you to set a setting that will be used across the same deviceType + - `deviceType` based config settings can be over written by individual device settings set by the deviceId +- Added `remoteType` based config + - This allows you to set a setting that will be used across the same IR remoteType + - `remoteType` based config settings can be over written by individual device settings set by the deviceId +- All device specific configs have been moved to the same level on the config to elimate the use of multiple of the same config and to better support the new `deviceType` based config. - ** ⚠️ If you have config set for any of the following SwitchBot device Types: `Curtain`, `Blind Tilt`, `Color Bulb`, `Strip Light`, `Hub`, `Meter`, `Meter Plus`, `Humidifier`, `Contact Sensor`, `Motion Sensor`, `Water Detector`, `Ceiling Light`, or `Lock`; you will need to re-setup your config for that deviceId** - - ** ⚠️ If you have config set for any of the following IR device Types: `Fan`, `DIY Fan`, `Light`, `DIY Light`, `Air Conditioner`, `DIY Air Conditioner`, or `Others`; you will need to re-setup your config for that deviceId** + - ** ⚠️ If you have config set for any of the following IR remote Types: `Fan`, `DIY Fan`, `Light`, `DIY Light`, `Air Conditioner`, `DIY Air Conditioner`, or `Others`; you will need to re-setup your config for that deviceId** +- OpenAPI is now support by Version [3.0.0](https://github.com/OpenWonderLabs/node-switchbot/releases/latest) of [`node-switchbot`](https://github.com/OpenWonderLabs/node-switchbot), so made changes to refect that. #### Other Changes +- Add `K10+ Pro` deviceType Support - Housekeeping and updated dependencies. **Full Changelog**: https://github.com/OpenWonderLabs/homebridge-switchbot/compare/v3.8.3...v4.0.0 diff --git a/config.schema.json b/config.schema.json index c8e3b430..5d783864 100644 --- a/config.schema.json +++ b/config.schema.json @@ -52,15 +52,23 @@ "title": "Devices", "type": "object", "properties": { + "configDeviceName": { + "title": "Device Name", + "type": "string", + "placeholder": "SwitchBot", + "condition": { + "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId);" + } + }, "deviceId": { "title": "Device ID", "type": "string", "placeholder": "81F3UT59513F" }, - "configDeviceName": { - "title": "Device Name", - "type": "string", - "placeholder": "SwitchBot", + "hide_device": { + "title": "Hide Device", + "type": "boolean", + "description": "If true, device will be removed or hidden from HomeKit.", "condition": { "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId);" } @@ -68,6 +76,9 @@ "configDeviceType": { "title": "Device Type", "type": "string", + "condition": { + "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device);" + }, "oneOf": [ { "title": "Blind Tilt", @@ -171,6 +182,18 @@ "MeterPlus" ] }, + { + "title": "K10+", + "enum": [ + "K10+" + ] + }, + { + "title": "K10+ Pro", + "enum": [ + "K10+ Pro" + ] + }, { "title": "Mini Robot Vacuum K10+", "enum": [ @@ -213,10 +236,16 @@ "Robot Vacuum Cleaner S1 Plus" ] }, + { + "title": "Robot Vacuum Cleaner S10", + "enum": [ + "Robot Vacuum Cleaner S10" + ] + }, { "title": "Roller Shade", "enum": [ - "Roller Shade" + "WoRollerShade" ] }, { @@ -243,121 +272,63 @@ "Strip Light" ] } - ], - "condition": { - "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device);" - } - }, - "customBLEaddress": { - "title": "Custom BLE Address", - "type": "string", - "placeholder": "81F3UT59513F", - "condition": { - "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].connectionType === 'BLE' || model.options.devices[arrayIndices].connectionType === 'BLE/OpenAPI'));" - } - }, - "hide_temperature": { - "title": "Hide Temperature Sensor", - "type": "boolean", - "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Hub 2' || model.options.devices[arrayIndices].configDeviceType === 'Humidifier' || model.options.devices[arrayIndices].configDeviceType === 'WoIOSensor' || model.options.devices[arrayIndices].configDeviceType === 'Meter' || model.options.devices[arrayIndices].configDeviceType === 'MeterPlus' || model.options.devices[arrayIndices].configDeviceType === 'Meter Plus (JP)') && model.options.devices[arrayIndices].deviceId);" - } + ] }, - "convertUnitTo": { - "title": "Convert Temperature Unit To", + "connectionType": { + "title": "Connection Type", "type": "string", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Hub 2' || model.options.devices[arrayIndices].configDeviceType === 'WoIOSensor' || model.options.devices[arrayIndices].configDeviceType === 'Meter' || model.options.devices[arrayIndices].configDeviceType === 'MeterPlus' || model.options.devices[arrayIndices].configDeviceType === 'Meter Plus (JP)') && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_temperature);" + "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device);" }, "oneOf": [ { - "title": "Celsius", + "title": "BLE", "enum": [ - "CELSIUS" + "BLE" ] }, { - "title": "Fahrenheit", + "title": "BLE/OpenAPI", "enum": [ - "FAHRENHEIT" + "BLE/OpenAPI" + ] + }, + { + "title": "Disable", + "enum": [ + "Disabled" + ] + }, + { + "title": "OpenAPI", + "enum": [ + "OpenAPI" ] } ] }, - "hide_humidity": { - "title": "Hide Humidity Sensor", - "type": "boolean", - "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Hub 2' || model.options.devices[arrayIndices].configDeviceType === 'WoIOSensor' || model.options.devices[arrayIndices].configDeviceType === 'Meter' || model.options.devices[arrayIndices].configDeviceType === 'MeterPlus' || model.options.devices[arrayIndices].configDeviceType === 'Meter Plus (JP)') && model.options.devices[arrayIndices].deviceId);" - } - }, - "hide_lightsensor": { - "title": "Hide Light Sensor", - "type": "boolean", + "scanDuration": { + "title": "Scan Duration (Default is 1 Second) for BLE", + "type": "number", + "placeholder": 1, "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Hub 2' || model.options.devices[arrayIndices].configDeviceType === 'Contact Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Motion Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' || model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId);" + "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].connectionType === 'BLE' || model.options.devices[arrayIndices].connectionType === 'BLE/OpenAPI'));" } }, - "mode": { - "title": "Bot Mode", + "customBLEaddress": { + "title": "Custom BLE Address", "type": "string", - "required": true, - "default": "", - "oneOf": [ - { - "title": "Default", - "enum": [""] - }, - { - "title": "Multi-Press", - "enum": ["multipress"] - }, - { - "title": "Press", - "enum": ["press"] - }, - { - "title": "Switch", - "enum": ["switch"] - } - ], + "placeholder": "81F3UT59513F", "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Bot' && model.options.devices[arrayIndices].deviceId);" + "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].connectionType === 'BLE' || model.options.devices[arrayIndices].connectionType === 'BLE/OpenAPI'));" } }, - "mapping": { - "title": "Mapping Mode", - "type": "string", - "required": true, - "default": "", - "oneOf": [ - { - "title": "Default", - "enum": [""] - }, - { - "title": "Down and Up", - "enum": ["down_and_up"] - }, - { - "title": "Only Down", - "enum": ["only_down"] - }, - { - "title": "Only Up", - "enum": ["only_up"] - }, - { - "title": "Up and Down", - "enum": ["up_and_down"] - }, - { - "title": "Use Tilt for Direction", - "enum": ["use_tilt_for_direction"] - } - ], + "webhook": { + "title": "Enable Webhook", + "type": "boolean", "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' && model.options.devices[arrayIndices].deviceId);" + "functionBody": "return (model.options && model.options.devices && model.options.webhookURL && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].connectionType === 'OpenAPI' || model.options.devices[arrayIndices].connectionType === 'BLE/OpenAPI'));" } }, "type": { @@ -365,6 +336,10 @@ "type": "string", "required": true, "default": "", + "placeholder": "outlet", + "condition": { + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Bot' && model.options.devices[arrayIndices].deviceId);" + }, "oneOf": [ { "title": "Default", @@ -432,18 +407,76 @@ "windowcovering" ] } + ] + }, + "mode": { + "title": "Bot Mode", + "type": "string", + "required": true, + "default": "", + "oneOf": [ + { + "title": "Default", + "enum": [""] + }, + { + "title": "Multi-Press", + "enum": ["multipress"] + }, + { + "title": "Press", + "enum": ["press"] + }, + { + "title": "Switch", + "enum": ["switch"] + } ], - "placeholder": "outlet", "condition": { "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Bot' && model.options.devices[arrayIndices].deviceId);" } }, + "mapping": { + "title": "Mapping Mode", + "type": "string", + "required": true, + "default": "", + "oneOf": [ + { + "title": "Default", + "enum": [""] + }, + { + "title": "Down and Up", + "enum": ["down_and_up"] + }, + { + "title": "Only Down", + "enum": ["only_down"] + }, + { + "title": "Only Up", + "enum": ["only_up"] + }, + { + "title": "Up and Down", + "enum": ["up_and_down"] + }, + { + "title": "Use Tilt for Direction", + "enum": ["use_tilt_for_direction"] + } + ], + "condition": { + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' && model.options.devices[arrayIndices].deviceId);" + } + }, "allowPush": { "title": "Allow Changes to Be Pushed", "description": "If set to true, this will allow commands to be sent even if device state is already in state that is being pushed.", "type": "boolean", "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Bot' && model.options.devices[arrayIndices].deviceId && model.options.devices[arrayIndices].bot && model.options.devices[arrayIndices].mode);" + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceId);" } }, "doublePress": { @@ -451,7 +484,7 @@ "type": "number", "placeholder": "2", "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Bot' && model.options.devices[arrayIndices].deviceId && model.options.devices[arrayIndices].bot && model.options.devices[arrayIndices].mode);" + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Bot' && model.options.devices[arrayIndices].deviceId && model.options.devices[arrayIndices].mode);" } }, "pushRatePress": { @@ -460,7 +493,63 @@ "placeholder": "15", "description": "Indicates the number of seconds between pushes for double presses to SwitchBot API", "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Bot' && model.options.devices[arrayIndices].deviceId && model.options.devices[arrayIndices].bot && model.options.devices[arrayIndices].mode && model.options.devices[arrayIndices].doublePress > 1);" + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Bot' && model.options.devices[arrayIndices].deviceId && model.options.devices[arrayIndices].mode && model.options.devices[arrayIndices].doublePress > 1);" + } + }, + "hide_temperature": { + "title": "Hide Temperature Sensor", + "type": "boolean", + "condition": { + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Hub 2' || model.options.devices[arrayIndices].configDeviceType === 'Humidifier' || model.options.devices[arrayIndices].configDeviceType === 'WoIOSensor' || model.options.devices[arrayIndices].configDeviceType === 'Meter' || model.options.devices[arrayIndices].configDeviceType === 'MeterPlus' || model.options.devices[arrayIndices].configDeviceType === 'Meter Plus (JP)') && model.options.devices[arrayIndices].deviceId);" + } + }, + "convertUnitTo": { + "title": "Convert Temperature Unit To", + "type": "string", + "condition": { + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Hub 2' || model.options.devices[arrayIndices].configDeviceType === 'Humidifier' || model.options.devices[arrayIndices].configDeviceType === 'WoIOSensor' || model.options.devices[arrayIndices].configDeviceType === 'Meter' || model.options.devices[arrayIndices].configDeviceType === 'MeterPlus' || model.options.devices[arrayIndices].configDeviceType === 'Meter Plus (JP)') && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_temperature);" + }, + "oneOf": [ + { + "title": "Celsius", + "enum": [ + "CELSIUS" + ] + }, + { + "title": "Fahrenheit", + "enum": [ + "FAHRENHEIT" + ] + } + ] + }, + "hide_humidity": { + "title": "Hide Humidity Sensor", + "type": "boolean", + "condition": { + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Hub 2' || model.options.devices[arrayIndices].configDeviceType === 'WoIOSensor' || model.options.devices[arrayIndices].configDeviceType === 'Meter' || model.options.devices[arrayIndices].configDeviceType === 'MeterPlus' || model.options.devices[arrayIndices].configDeviceType === 'Meter Plus (JP)') && model.options.devices[arrayIndices].deviceId);" + } + }, + "hide_lightsensor": { + "title": "Hide Light Sensor", + "type": "boolean", + "condition": { + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Hub 2' || model.options.devices[arrayIndices].configDeviceType === 'Contact Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Motion Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' || model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'WoRollerShade' || model.options.devices[arrayIndices].configDeviceType === 'Roller Shade') && model.options.devices[arrayIndices].deviceId);" + } + }, + "hide_motionsensor": { + "title": "Hide Contact Sensor's Motion Sensor", + "type": "boolean", + "condition": { + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Contact Sensor' && model.options.devices[arrayIndices].deviceId);" + } + }, + "hide_contactsensor": { + "title": "Hide Lock's Contact Sensor", + "type": "boolean", + "condition": { + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Smart Lock' || model.options.devices[arrayIndices].configDeviceType === 'Smart Lock Pro') && model.options.devices[arrayIndices].deviceId);" } }, "hide_leak": { @@ -470,6 +559,36 @@ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Water Detector' && model.options.devices[arrayIndices].deviceId);" } }, + "disable_group": { + "title": "Disable Grouping", + "type": "boolean", + "condition": { + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' || model.options.devices[arrayIndices].configDeviceType === 'WoRollerShade' || model.options.devices[arrayIndices].configDeviceType === 'Roller Shade') && model.options.devices[arrayIndices].deviceId);" + } + }, + "disableCaching": { + "title": "Disable Caching", + "type": "boolean", + "condition": { + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceId);" + } + }, + "adaptiveLightingShift": { + "title": "Adaptive Lighting Shift", + "type": "number", + "placeholder": "-1", + "description": "The mired for each Adaptive Lighting update will be increased by this value, making the light appear warmer. Set to -1 to remove Adaptive Lighting feature. Must be -1 or more.", + "condition": { + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Color Bulb' || model.options.devices[arrayIndices].configDeviceType === 'Strip Light' || model.options.devices[arrayIndices].configDeviceType === 'Ceiling Light' || model.options.devices[arrayIndices].configDeviceType === 'Ceiling Light Pro') && model.options.devices[arrayIndices].deviceId);" + } + }, + "activate_latchbutton": { + "title": "Activate Latch Button", + "type": "boolean", + "condition": { + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Smart Lock' || model.options.devices[arrayIndices].configDeviceType === 'Smart Lock Pro') && model.options.devices[arrayIndices].deviceId);" + } + }, "dry": { "title": "Water Detector's Dry Alert", "type": "boolean", @@ -484,7 +603,7 @@ "placeholder": "1", "description": "Sets the minimum steps device will take. So if set to 20, it would allow you to set the curtain state to 0, 20, 40, 60, 80, and 100", "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Strip Light' || model.options.devices[arrayIndices].configDeviceType === 'Color Bulb' || model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' || model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'Humidifier') && model.options.devices[arrayIndices].deviceId);" + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Strip Light' || model.options.devices[arrayIndices].configDeviceType === 'Color Bulb' || model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' || model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'WoRollerShade' || model.options.devices[arrayIndices].configDeviceType === 'Roller Shade' || model.options.devices[arrayIndices].configDeviceType === 'Humidifier') && model.options.devices[arrayIndices].deviceId);" } }, "set_min": { @@ -493,7 +612,7 @@ "placeholder": "0", "description": "Sets the minimum percentage before needed to set to Open", "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' || model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId);" + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' || model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'WoRollerShade' || model.options.devices[arrayIndices].configDeviceType === 'Roller Shade' || model.options.devices[arrayIndices].configDeviceType === 'Hub 2' || model.options.devices[arrayIndices].configDeviceType === 'Motion Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Contact Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Humidifier' || model.options.devices[arrayIndices].configDeviceType === 'Strip Light' || model.options.devices[arrayIndices].configDeviceType === 'Ceiling Light' || model.options.devices[arrayIndices].configDeviceType === 'Ceiling Light Pro') && model.options.devices[arrayIndices].deviceId);" } }, "set_max": { @@ -502,19 +621,31 @@ "placeholder": "100", "description": "Sets the maximum percentage before needing to set to Closed", "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' || model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId);" + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' || model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'WoRollerShade' || model.options.devices[arrayIndices].configDeviceType === 'Roller Shade' || model.options.devices[arrayIndices].configDeviceType === 'Hub 2' || model.options.devices[arrayIndices].configDeviceType === 'Motion Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Contact Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Humidifier' || model.options.devices[arrayIndices].configDeviceType === 'Strip Light' || model.options.devices[arrayIndices].configDeviceType === 'Ceiling Light' || model.options.devices[arrayIndices].configDeviceType === 'Ceiling Light Pro') && model.options.devices[arrayIndices].deviceId);" } }, - "disable_group": { - "title": "Disable Grouping", - "type": "boolean", + "set_minlux": { + "title": "Set Min Lux", + "type": "number", + "placeholder": "1", + "condition": { + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Hub 2' || model.options.devices[arrayIndices].configDeviceType === 'Contact Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Motion Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' || model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'WoRollerShade' || model.options.devices[arrayIndices].configDeviceType === 'Roller Shade') && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_lightsensor);" + } + }, + "set_maxlux": { + "title": "Set Max Lux", + "type": "number", + "placeholder": "6001", "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt') && model.options.devices[arrayIndices].deviceId);" + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Hub 2' || model.options.devices[arrayIndices].configDeviceType === 'Contact Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Motion Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' || model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'WoRollerShade' || model.options.devices[arrayIndices].configDeviceType === 'Roller Shade') && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_lightsensor);" } }, "setOpenMode": { "title": "Opening Mode", "type": "string", + "condition": { + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' || model.options.devices[arrayIndices].configDeviceType === 'WoRollerShade' || model.options.devices[arrayIndices].configDeviceType === 'Roller Shade') && model.options.devices[arrayIndices].deviceId);" + }, "oneOf": [ { "enum": [ @@ -528,14 +659,14 @@ ], "title": "Silent Mode" } - ], - "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt') && model.options.devices[arrayIndices].deviceId);" - } + ] }, "setCloseMode": { "title": "Closing Mode", "type": "string", + "condition": { + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' || model.options.devices[arrayIndices].configDeviceType === 'WoRollerShade' || model.options.devices[arrayIndices].configDeviceType === 'Roller Shade') && model.options.devices[arrayIndices].deviceId);" + }, "oneOf": [ { "enum": [ @@ -549,62 +680,37 @@ ], "title": "Silent Mode" } - ], - "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt') && model.options.devices[arrayIndices].deviceId);" - } + ] }, "silentModeSwitch": { "title": "Enable Silent Mode Switches", "type": "boolean", "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' || model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId);" + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' || model.options.devices[arrayIndices].configDeviceType === 'WoRollerShade' || model.options.devices[arrayIndices].configDeviceType === 'Roller Shade') && model.options.devices[arrayIndices].deviceId);" } }, - "set_minlux": { - "title": "Set Min Lux", + "maxRetry": { + "title": "Max Retries for BLE", "type": "number", - "placeholder": "1", + "placeholder": "5", "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Motion Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Contact Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_lightsensor);" + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceId && (model.options.devices[arrayIndices].connectionType === 'BLE' || model.options.devices[arrayIndices].connectionType === 'BLE/OpenAPI'));" } }, - "set_maxlux": { - "title": "Set Max Lux", + "maxRetries": { + "title": "Device Max Retries for OpenAPI", "type": "number", - "placeholder": "6001", - "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Motion Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Contact Sensor' || model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3') && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_lightsensor);" - } - }, - "hide_motionsensor": { - "title": "Hide Contact Sensor's Motion Sensor", - "type": "boolean", + "placeholder": 5, "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType === 'Contact Sensor' && model.options.devices[arrayIndices].deviceId);" + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceId && (model.options.devices[arrayIndices].connectionType === 'OpenAPI' || model.options.devices[arrayIndices].connectionType === 'BLE/OpenAPI'));" } }, - "adaptiveLightingShift": { - "title": "Adaptive Lighting Shift", + "delayBetweenRetries": { + "title": "Device Delay Between Retries for OpenAPI (In Seconds)", "type": "number", - "placeholder": "-1", - "description": "The mired for each Adaptive Lighting update will be increased by this value, making the light appear warmer. Set to -1 to remove Adaptive Lighting feature. Must be -1 or more.", - "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Color Bulb' || model.options.devices[arrayIndices].configDeviceType === 'Strip Light') && model.options.devices[arrayIndices].deviceId);" - } - }, - "hide_contactsensor": { - "title": "Hide Lock's Contact Sensor", - "type": "boolean", - "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Smart Lock' || model.options.devices[arrayIndices].configDeviceType === 'Smart Lock Pro') && model.options.devices[arrayIndices].deviceId);" - } - }, - "activate_latchbutton": { - "title": "Activate Latch Button", - "type": "boolean", + "placeholder": 3, "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Smart Lock' || model.options.devices[arrayIndices].configDeviceType === 'Smart Lock Pro') && model.options.devices[arrayIndices].deviceId);" + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceId && (model.options.devices[arrayIndices].connectionType === 'OpenAPI' || model.options.devices[arrayIndices].connectionType === 'BLE/OpenAPI'));" } }, "mqttURL": { @@ -629,47 +735,20 @@ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceId && model.options.devices[arrayIndices].mqttURL && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Water Detector' || model.options.devices[arrayIndices].configDeviceType === 'WoIOSensor' || model.options.devices[arrayIndices].configDeviceType === 'Hub 2' || model.options.devices[arrayIndices].configDeviceType === 'Meter' || model.options.devices[arrayIndices].configDeviceType === 'MeterPlus' || model.options.devices[arrayIndices].configDeviceType === 'Meter Plus (JP)'));" } }, - "hide_device": { - "title": "Hide Device", + "history": { + "title": "EVE History", "type": "boolean", - "description": "If true, device will be removed or hidden from HomeKit.", "condition": { - "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId);" + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceId && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Water Detector' || model.options.devices[arrayIndices].configDeviceType === 'WoIOSensor' || model.options.devices[arrayIndices].configDeviceType === 'Hub 2' || model.options.devices[arrayIndices].configDeviceType === 'Meter' || model.options.devices[arrayIndices].configDeviceType === 'MeterPlus' || model.options.devices[arrayIndices].configDeviceType === 'Meter Plus (JP)'));" } }, - "external": { - "title": "External Accessory", + "offline": { + "title": "Offline as Off", "type": "boolean", "condition": { "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType);" } }, - "refreshRate": { - "title": "Device Refresh Rate", - "type": "number", - "placeholder": 360, - "condition": { - "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType);" - } - }, - "updateRate": { - "title": "Update Rate", - "type": "number", - "minimum": 1, - "placeholder": 5, - "description": "Indicates the number of seconds before refreshing status while updating progress.", - "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt') && model.options.devices[arrayIndices].deviceId);" - } - }, - "pushRate": { - "title": "Device Push Rate", - "type": "number", - "placeholder": 360, - "condition": { - "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType);" - } - }, "firmware": { "title": "Firmware Override", "type": "string", @@ -678,11 +757,21 @@ "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceId && model.options.devices[arrayIndices].configDeviceType);" } }, + "external": { + "title": "External Accessory", + "type": "boolean", + "condition": { + "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType);" + } + }, "logging": { "title": "Device Logging Override Setting", "type": "string", "required": true, "default": "", + "condition": { + "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType);" + }, "oneOf": [ { "title": "Debug Logging", @@ -705,106 +794,35 @@ { "title": "Standard Logging", "enum": [ - "standard" - ] - } - ], - "condition": { - "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType);" - } - }, - "connectionType": { - "title": "Connection Type", - "type": "string", - "oneOf": [ - { - "title": "BLE", - "enum": [ - "BLE" - ] - }, - { - "title": "BLE/OpenAPI", - "enum": [ - "BLE/OpenAPI" - ] - }, - { - "title": "Disable", - "enum": [ - "Disabled" - ] - }, - { - "title": "OpenAPI", - "enum": [ - "OpenAPI" + "standard" ] } - ], - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", - "condition": { - "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device);" - } + ] }, - "scanDuration": { - "title": "Scan Duration (Default is 1 Second) for BLE", + "refreshRate": { + "title": "Device Refresh Rate", "type": "number", - "placeholder": 1, - "condition": { - "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].connectionType === 'BLE' || model.options.devices[arrayIndices].connectionType === 'BLE/OpenAPI'));" - } - }, - "offline": { - "title": "Offline as Off", - "type": "boolean", + "placeholder": 360, "condition": { "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType);" } }, - "maxRetry": { - "title": "Max Retries for BLE", - "type": "number", - "placeholder": "5", - "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceId && (model.options.devices[arrayIndices].connectionType === 'BLE' || model.options.devices[arrayIndices].connectionType === 'BLE/OpenAPI') && (model.options.devices[arrayIndices].configDeviceType === 'Bot' || model.options.devices[arrayIndices].configDeviceType === 'Robot Vacuum Cleaner S1' || model.options.devices[arrayIndices].configDeviceType === 'Robot Vacuum Cleaner S1 Plus' || model.options.devices[arrayIndices].configDeviceType === 'Strip Light' || model.options.devices[arrayIndices].configDeviceType === 'Plug' || model.options.devices[arrayIndices].configDeviceType === 'Plug Mini (JP)' || model.options.devices[arrayIndices].configDeviceType === 'Plug Mini (US)' || model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'Color Bulb' || model.options.devices[arrayIndices].configDeviceType === 'Ceiling Light' || model.options.devices[arrayIndices].configDeviceType === 'Ceiling Light Pro' || model.options.devices[arrayIndices].configDeviceType === 'Motion Sensor'));" - } - }, - "maxRetries": { - "title": "Device Max Retries for OpenAPI", + "updateRate": { + "title": "Update Rate", "type": "number", + "minimum": 1, "placeholder": 5, + "description": "Indicates the number of seconds before refreshing status while updating progress.", "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceId && (model.options.devices[arrayIndices].connectionType === 'OpenAPI' || model.options.devices[arrayIndices].connectionType === 'BLE/OpenAPI'));" + "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3' || model.options.devices[arrayIndices].configDeviceType === 'Blind Tilt' || model.options.devices[arrayIndices].configDeviceType === 'WoRollerShade' || model.options.devices[arrayIndices].configDeviceType === 'Roller Shade') && model.options.devices[arrayIndices].deviceId);" } }, - "delayBetweenRetries": { - "title": "Device Delay Between Retries for OpenAPI (In Seconds)", + "pushRate": { + "title": "Device Push Rate", "type": "number", - "placeholder": 3, - "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceId && (model.options.devices[arrayIndices].connectionType === 'OpenAPI' || model.options.devices[arrayIndices].connectionType === 'BLE/OpenAPI'));" - } - }, - "disableCaching": { - "title": "Disable Caching", - "type": "boolean", - "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceId && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Curtain3'));" - } - }, - "history": { - "title": "EVE History", - "type": "boolean", - "condition": { - "functionBody": "return (model.options && model.options.devices && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].deviceId && (model.options.devices[arrayIndices].configDeviceType === 'Curtain' || model.options.devices[arrayIndices].configDeviceType === 'Water Detector' || model.options.devices[arrayIndices].configDeviceType === 'WoIOSensor' || model.options.devices[arrayIndices].configDeviceType === 'Hub 2' || model.options.devices[arrayIndices].configDeviceType === 'Meter' || model.options.devices[arrayIndices].configDeviceType === 'MeterPlus' || model.options.devices[arrayIndices].configDeviceType === 'Meter Plus (JP)'));" - } - }, - "webhook": { - "title": "Enable Webhook", - "type": "boolean", + "placeholder": 360, "condition": { - "functionBody": "return (model.options && model.options.devices && model.options.webhookURL && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device && (model.options.devices[arrayIndices].connectionType === 'OpenAPI' || model.options.devices[arrayIndices].connectionType === 'BLE/OpenAPI'));" + "functionBody": "return (model.options && model.options.devices && model.options.devices[arrayIndices].deviceId && !model.options.devices[arrayIndices].hide_device && model.options.devices[arrayIndices].configDeviceType);" } } }, @@ -869,7 +887,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Humidifier'] && !model.options.deviceConfig['Humidifier'].hide_device);" }, @@ -1084,7 +1102,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Hub 2'] && !model.options.deviceConfig['Hub 2'].hide_device);" }, @@ -1394,7 +1412,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Bot'] && !model.options.deviceConfig['Bot'].hide_device);" }, @@ -1609,7 +1627,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Meter'] && !model.options.deviceConfig['Meter'].hide_device);" }, @@ -1824,7 +1842,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['MeterPlus'] && !model.options.deviceConfig['MeterPlus'].hide_device);" }, @@ -2039,7 +2057,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Meter Plus (JP)'] && !model.options.deviceConfig['Meter Plus (JP)'].hide_device);" }, @@ -2254,7 +2272,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['WoIOSensor'] && !model.options.deviceConfig['WoIOSensor'].hide_device);" }, @@ -2449,7 +2467,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Water Detector'] && !model.options.deviceConfig['Water Detector'].hide_device);" }, @@ -2652,7 +2670,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Water Detector'] && !model.options.deviceConfig['Water Detector'].hide_device);" }, @@ -2862,7 +2880,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Contact Sensor'] && !model.options.deviceConfig['Contact Sensor'].hide_device);" }, @@ -3148,7 +3166,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Curtain'] && !model.options.deviceConfig['Curtain'].hide_device);" }, @@ -3434,7 +3452,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Curtain3'] && !model.options.deviceConfig['Curtain3'].hide_device);" }, @@ -3720,7 +3738,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['WoRollerShade'] && !model.options.deviceConfig['WoRollerShade'].hide_device);" }, @@ -4006,7 +4024,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Roller Shade'] && !model.options.deviceConfig['Roller Shade'].hide_device);" }, @@ -4327,7 +4345,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Blind Tilt'] && !model.options.deviceConfig['Blind Tilt'].hide_device);" }, @@ -4504,19 +4522,10 @@ "type": "boolean", "description": "If true, device will be removed or hidden from HomeKit." }, - "set_minStep": { - "title": "Set Minimum Step", - "type": "number", - "placeholder": "1", - "description": "Sets the minimum steps device will take. So if set to 20, it would allow you to set the curtain state to 0, 20, 40, 60, 80, and 100", - "condition": { - "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['Plug'].hide_device);" - } - }, "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Plug'] && !model.options.deviceConfig['Plug'].hide_device);" }, @@ -4693,19 +4702,10 @@ "type": "boolean", "description": "If true, device will be removed or hidden from HomeKit." }, - "set_minStep": { - "title": "Set Minimum Step", - "type": "number", - "placeholder": "1", - "description": "Sets the minimum steps device will take. So if set to 20, it would allow you to set the curtain state to 0, 20, 40, 60, 80, and 100", - "condition": { - "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['Plug Mini (US)'].hide_device);" - } - }, "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Plug Mini (US)'] && !model.options.deviceConfig['Plug Mini (US)'].hide_device);" }, @@ -4882,19 +4882,10 @@ "type": "boolean", "description": "If true, device will be removed or hidden from HomeKit." }, - "set_minStep": { - "title": "Set Minimum Step", - "type": "number", - "placeholder": "1", - "description": "Sets the minimum steps device will take. So if set to 20, it would allow you to set the curtain state to 0, 20, 40, 60, 80, and 100", - "condition": { - "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['Plug Mini (JP)'].hide_device);" - } - }, "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Plug Mini (JP)'] && !model.options.deviceConfig['Plug Mini (JP)'].hide_device);" }, @@ -5088,7 +5079,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Smart Lock'] && !model.options.deviceConfig['Smart Lock'].hide_device);" }, @@ -5282,7 +5273,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Smart Lock Pro'] && !model.options.deviceConfig['Smart Lock Pro'].hide_device);" }, @@ -5480,7 +5471,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Color Bulb'] && !model.options.deviceConfig['Color Bulb'].hide_device);" }, @@ -5660,7 +5651,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['K10+'] && !model.options.deviceConfig['K10+'].hide_device);" }, @@ -5755,7 +5746,187 @@ "title": "EVE History", "type": "boolean", "condition": { - "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['K10+'].hide_device);" + "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['K10+'].hide_device);" + } + }, + "firmware": { + "title": "Firmware Override", + "type": "string", + "placeholder": "1.2.8", + "condition": { + "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['K10+'].hide_device);" + } + }, + "logging": { + "title": "Logging by Device Type", + "type": "string", + "required": true, + "default": "", + "condition": { + "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['K10+'].hide_device);" + }, + "oneOf": [ + { + "title": "Debug Logging", + "enum": [ + "debug" + ] + }, + { + "title": "Default Logging", + "enum": [ + "" + ] + }, + { + "title": "No Logging", + "enum": [ + "none" + ] + }, + { + "title": "Standard Logging", + "enum": [ + "standard" + ] + } + ] + }, + "refreshRate": { + "title": "Device Refresh Rate", + "type": "number", + "placeholder": 360, + "condition": { + "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['K10+'].hide_device);" + } + }, + "updateRate": { + "title": "Update Rate", + "type": "number", + "minimum": 1, + "placeholder": 5, + "description": "Indicates the number of seconds before refreshing status while updating progress.", + "condition": { + "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['K10+'].hide_device);" + } + }, + "pushRate": { + "title": "Device Push Rate", + "type": "number", + "placeholder": 360, + "condition": { + "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['K10+'].hide_device);" + } + } + } + }, + "K10+ Pro": { + "type": "object", + "properties": { + "hide_device": { + "title": "Hide All K10+ Pros", + "type": "boolean", + "description": "If true, device will be removed or hidden from HomeKit." + }, + "connectionType": { + "title": "Connection Type", + "type": "string", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", + "condition": { + "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['K10+ Pro'] && !model.options.deviceConfig['K10+ Pro'].hide_device);" + }, + "oneOf": [ + { + "title": "BLE", + "enum": [ + "BLE" + ] + }, + { + "title": "BLE/OpenAPI", + "enum": [ + "BLE/OpenAPI" + ] + }, + { + "title": "Disable", + "enum": [ + "Disabled" + ] + }, + { + "title": "OpenAPI", + "enum": [ + "OpenAPI" + ] + } + ] + }, + "scanDuration": { + "title": "Scan Duration (Default is 1 Second) for BLE", + "type": "number", + "placeholder": 1, + "condition": { + "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['K10+ Pro'] && !model.options.deviceConfig['K10+ Pro'].hide_device && (model.options.deviceConfig['K10+ Pro'].connectionType === 'BLE' || model.options.deviceConfig['K10+ Pro'].connectionType === 'BLE/OpenAPI'));" + } + }, + "webhook": { + "title": "Enable Webhook for all K10+ Pros", + "type": "boolean", + "condition": { + "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['K10+ Pro'] && !model.options.deviceConfig['K10+ Pro'].hide_device && (model.options.deviceConfig['K10+ Pro'].connectionType === 'OpenAPI' || model.options.deviceConfig['K10+ Pro'].connectionType === 'BLE/OpenAPI'));" + } + }, + "external": { + "title": "External Accessory", + "type": "boolean", + "condition": { + "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['K10+ Pro'] && !model.options.deviceConfig['K10+ Pro'].hide_device);" + } + }, + "maxRetry": { + "title": "Max Retries for BLE", + "type": "number", + "placeholder": "5", + "condition": { + "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['K10+ Pro'] && !model.options.deviceConfig['K10+ Pro'].hide_device && (model.options.deviceConfig['K10+ Pro'].connectionType === 'BLE' || model.options.deviceConfig['K10+ Pro'].connectionType === 'BLE/OpenAPI'));" + } + }, + "maxRetries": { + "title": "Device Max Retries for OpenAPI", + "type": "number", + "placeholder": 5, + "condition": { + "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['K10+ Pro'] && !model.options.deviceConfig['K10+ Pro'].hide_device && (model.options.deviceConfig['K10+ Pro'].connectionType === 'OpenAPI' || model.options.deviceConfig['K10+ Pro'].connectionType === 'BLE/OpenAPI'));" + } + }, + "delayBetweenRetries": { + "title": "Device Delay Between Retries for OpenAPI (In Seconds)", + "type": "number", + "placeholder": 3, + "condition": { + "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['K10+ Pro'] && !model.options.deviceConfig['K10+ Pro'].hide_device && (model.options.deviceConfig['K10+ Pro'].connectionType === 'OpenAPI' || model.options.deviceConfig['K10+ Pro'].connectionType === 'BLE/OpenAPI'));" + } + }, + "disableCaching": { + "title": "Disable Caching", + "type": "boolean", + "condition": { + "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['K10+ Pro'] && !model.options.deviceConfig['K10+ Pro'].hide_device);" + } + }, + "offline": { + "title": "Offline as Off", + "type": "boolean", + "condition": { + "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['K10+ Pro'].hide_device);" + } + }, + "history": { + "title": "EVE History", + "type": "boolean", + "condition": { + "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['K10+ Pro'].hide_device);" } }, "firmware": { @@ -5763,7 +5934,7 @@ "type": "string", "placeholder": "1.2.8", "condition": { - "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['K10+'].hide_device);" + "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['K10+ Pro'].hide_device);" } }, "logging": { @@ -5772,7 +5943,7 @@ "required": true, "default": "", "condition": { - "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['K10+'].hide_device);" + "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['K10+ Pro'].hide_device);" }, "oneOf": [ { @@ -5806,7 +5977,7 @@ "type": "number", "placeholder": 360, "condition": { - "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['K10+'].hide_device);" + "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['K10+ Pro'].hide_device);" } }, "updateRate": { @@ -5816,7 +5987,7 @@ "placeholder": 5, "description": "Indicates the number of seconds before refreshing status while updating progress.", "condition": { - "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['K10+'].hide_device);" + "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['K10+ Pro'].hide_device);" } }, "pushRate": { @@ -5824,7 +5995,7 @@ "type": "number", "placeholder": 360, "condition": { - "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['K10+'].hide_device);" + "functionBody": "return (model.options && model.options.deviceConfig && !model.options.deviceConfig['K10+ Pro'].hide_device);" } } } @@ -5840,7 +6011,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['WoSweeper'] && !model.options.deviceConfig['WoSweeper'].hide_device);" }, @@ -6020,7 +6191,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['WoSweeperMini'] && !model.options.deviceConfig['WoSweeperMini'].hide_device);" }, @@ -6200,7 +6371,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Robot Vacuum Cleaner S1'] && !model.options.deviceConfig['Robot Vacuum Cleaner S1'].hide_device);" }, @@ -6380,7 +6551,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Robot Vacuum Cleaner S1 Plus'] && !model.options.deviceConfig['Robot Vacuum Cleaner S1 Plus'].hide_device);" }, @@ -6560,7 +6731,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Robot Vacuum Cleaner S10'] && !model.options.deviceConfig['Robot Vacuum Cleaner S10'].hide_device);" }, @@ -6758,7 +6929,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Ceiling Light'] && !model.options.deviceConfig['Ceiling Light'].hide_device);" }, @@ -6956,7 +7127,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Ceiling Light Pro'] && !model.options.deviceConfig['Ceiling Light Pro'].hide_device);" }, @@ -7154,7 +7325,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Strip Light'] && !model.options.deviceConfig['Strip Light'].hide_device);" }, @@ -7343,7 +7514,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.deviceConfig && model.options.deviceConfig['Battery Circulator Fan'] && !model.options.deviceConfig['Battery Circulator Fan'].hide_device);" }, @@ -7520,11 +7691,6 @@ "title": "IR Devices", "type": "object", "properties": { - "deviceId": { - "title": "Device ID", - "type": "string", - "placeholder": "81F3UT59513F" - }, "configDeviceName": { "title": "Device Name", "type": "string", @@ -7533,6 +7699,11 @@ "functionBody": "return (model.options && model.options.irdevices && model.options.irdevices[arrayIndices].deviceId);" } }, + "deviceId": { + "title": "Device ID", + "type": "string", + "placeholder": "81F3UT59513F" + }, "hide_device": { "title": "Hide Device", "type": "boolean", @@ -7735,6 +7906,77 @@ "functionBody": "return (model.options && model.options.irdevices && model.options.irdevices[arrayIndices].deviceId && !model.options.irdevices[arrayIndices].hide_device && model.options.irdevices[arrayIndices].configRemoteType);" } }, + "type": { + "title": "What Type of Device do you want to display in the Home App?", + "type": "string", + "required": true, + "default": "", + "oneOf": [ + { + "title": "Door", + "enum": [ + "door" + ] + }, + { + "title": "Fan", + "enum": [ + "fan" + ] + }, + { + "title": "Faucet", + "enum": [ + "faucet" + ] + }, + { + "title": "Garage Door", + "enum": [ + "garagedoor" + ] + }, + { + "title": "Lock", + "enum": [ + "lock" + ] + }, + { + "title": "Outlet", + "enum": [ + "outlet" + ] + }, + { + "title": "Stateful Programmable Switch (Only Works in 3rd Party Home Apps)", + "enum": [ + "stateful" + ] + }, + { + "title": "Switch", + "enum": [ + "switch" + ] + }, + { + "title": "Window", + "enum": [ + "window" + ] + }, + { + "title": "Window Covering", + "enum": [ + "windowcovering" + ] + } + ], + "condition": { + "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && model.options.irdevices[arrayIndices].configRemoteType === 'Others' && model.options.irdevices[arrayIndices].deviceId);" + } + }, "customize": { "title": "Custom IR Commands", "type": "boolean", @@ -7886,15 +8128,15 @@ "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Air Conditioner' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Air Conditioner') && model.options.irdevices[arrayIndices].deviceId && model.options.irdevices[arrayIndices].irair?.meterType);" } }, - "swing_mode": { - "title": "Enable Swing Mode", + "rotation_speed": { + "title": "Enable Rotation Speed", "type": "boolean", "condition": { "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Fan' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Fan') && model.options.irdevices[arrayIndices].deviceId);" } }, - "rotation_speed": { - "title": "Enable Rotation Speed", + "swing_mode": { + "title": "Enable Swing Mode", "type": "boolean", "condition": { "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Fan' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Fan') && model.options.irdevices[arrayIndices].deviceId);" @@ -7931,88 +8173,38 @@ "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && (model.options.irdevices[arrayIndices].configRemoteType === 'Light' || model.options.irdevices[arrayIndices].configRemoteType === 'DIY Light') && model.options.irdevices[arrayIndices].deviceId);" } }, - "type": { - "title": "What Type of Device do you want to display in the Home App?", - "type": "string", - "required": true, - "default": "", - "oneOf": [ - { - "title": "Door", - "enum": [ - "door" - ] - }, - { - "title": "Fan", - "enum": [ - "fan" - ] - }, - { - "title": "Faucet", - "enum": [ - "faucet" - ] - }, - { - "title": "Garage Door", - "enum": [ - "garagedoor" - ] - }, - { - "title": "Lock", - "enum": [ - "lock" - ] - }, - { - "title": "Outlet", - "enum": [ - "outlet" - ] - }, - { - "title": "Stateful Programmable Switch (Only Works in 3rd Party Home Apps)", - "enum": [ - "stateful" - ] - }, - { - "title": "Switch", - "enum": [ - "switch" - ] - }, - { - "title": "Window", - "enum": [ - "window" - ] - }, - { - "title": "Window Covering", - "enum": [ - "windowcovering" - ] - } - ], + "external": { + "title": "External Accessory", + "type": "boolean", "condition": { - "functionBody": "return (model.options && model.options.irdevices && !model.options.irdevices[arrayIndices].hide_device && model.options.irdevices[arrayIndices].configRemoteType === 'Others' && model.options.irdevices[arrayIndices].deviceId);" + "functionBody": "return (model.options && model.options.irdevices && model.options.irdevices[arrayIndices].deviceId && !model.options.irdevices[arrayIndices].hide_device && model.options.irdevices[arrayIndices].configRemoteType);" } }, - "firmware": { - "title": "Firmware Override", - "type": "string", - "placeholder": "1.2.8", + "disableCaching": { + "title": "Disable Caching", + "type": "boolean", "condition": { - "functionBody": "return (model.options && model.options.irdevices && model.options.irdevices[arrayIndices].deviceId && !model.options.irdevices[arrayIndices].hide_device && model.options.irdevices[arrayIndices].configRemoteType);" + "functionBody": "return (model.options && model.options.irdevices && model.options.irdevices[arrayIndices].deviceId && !model.options.irdevices[arrayIndices].hide_device);" } }, - "external": { - "title": "External Accessory", + "offline": { + "title": "Offline as Off", + "type": "boolean", + "condition": { + "functionBody": "return (model.options && model.options.irdevices && model.options.irdevices[arrayIndices].deviceId && !model.options.irdevices[arrayIndices].hide_device);" + } + }, + "history": { + "title": "EVE History", "type": "boolean", + "condition": { + "functionBody": "return (model.options && model.options.irdevices && model.options.irdevices[arrayIndices].deviceId && !model.options.irdevices[arrayIndices].hide_device);" + } + }, + "firmware": { + "title": "Firmware Override", + "type": "string", + "placeholder": "1.2.8", "condition": { "functionBody": "return (model.options && model.options.irdevices && model.options.irdevices[arrayIndices].deviceId && !model.options.irdevices[arrayIndices].hide_device && model.options.irdevices[arrayIndices].configRemoteType);" } @@ -8051,6 +8243,32 @@ "condition": { "functionBody": "return (model.options && model.options.irdevices && model.options.irdevices[arrayIndices].deviceId && !model.options.irdevices[arrayIndices].hide_device && model.options.irdevices[arrayIndices].configRemoteType);" } + }, + "refreshRate": { + "title": "Device Refresh Rate", + "type": "number", + "placeholder": 360, + "condition": { + "functionBody": "return (model.options && model.options.irdevices && model.options.irdevices[arrayIndices].deviceId && !model.options.irdevices[arrayIndices].hide_device);" + } + }, + "updateRate": { + "title": "Update Rate", + "type": "number", + "minimum": 1, + "placeholder": 5, + "description": "Indicates the number of seconds before refreshing status while updating progress.", + "condition": { + "functionBody": "return (model.options && model.options.irdevices && model.options.irdevices[arrayIndices].deviceId && !model.options.irdevices[arrayIndices].hide_device);" + } + }, + "pushRate": { + "title": "Device Push Rate", + "type": "number", + "placeholder": 360, + "condition": { + "functionBody": "return (model.options && model.options.irdevices && model.options.irdevices[arrayIndices].deviceId && !model.options.irdevices[arrayIndices].hide_device);" + } } }, "required": [ @@ -8076,7 +8294,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['TV'] && !model.options.irdeviceConfig['TV'].hide_device);" }, @@ -8205,7 +8423,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['DIY TV'] && !model.options.irdeviceConfig['DIY TV'].hide_device);" }, @@ -8334,7 +8552,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['Projector'] && !model.options.irdeviceConfig['Projector'].hide_device);" }, @@ -8463,7 +8681,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['DIY Projector'] && !model.options.irdeviceConfig['DIY Projector'].hide_device);" }, @@ -8592,7 +8810,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['Set Top Box'] && !model.options.irdeviceConfig['Set Top Box'].hide_device);" }, @@ -8721,7 +8939,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['DIY Set Top Box'] && !model.options.irdeviceConfig['DIY Set Top Box'].hide_device);" }, @@ -8850,7 +9068,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['IPTV'] && !model.options.irdeviceConfig['IPTV'].hide_device);" }, @@ -8979,7 +9197,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['DIY IPTV'] && !model.options.irdeviceConfig['DIY IPTV'].hide_device);" }, @@ -9108,7 +9326,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['DVD'] && !model.options.irdeviceConfig['DVD'].hide_device);" }, @@ -9237,7 +9455,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['DIY DVD'] && !model.options.irdeviceConfig['DIY DVD'].hide_device);" }, @@ -9366,7 +9584,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['Speaker'] && !model.options.irdeviceConfig['Speaker'].hide_device);" }, @@ -9495,7 +9713,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['DIY Speaker'] && !model.options.irdeviceConfig['DIY Speaker'].hide_device);" }, @@ -9624,7 +9842,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['Fan'] && !model.options.irdeviceConfig['Fan'].hide_device);" }, @@ -9753,7 +9971,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['DIY Fan'] && !model.options.irdeviceConfig['DIY Fan'].hide_device);" }, @@ -9882,7 +10100,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['Air Conditioner'] && !model.options.irdeviceConfig['Air Conditioner'].hide_device);" }, @@ -10011,7 +10229,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['DIY Air Conditioner'] && !model.options.irdeviceConfig['DIY Air Conditioner'].hide_device);" }, @@ -10140,7 +10358,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['Light'] && !model.options.irdeviceConfig['Light'].hide_device);" }, @@ -10269,7 +10487,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['DIY Light'] && !model.options.irdeviceConfig['DIY Light'].hide_device);" }, @@ -10398,7 +10616,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['Air Purifier'] && !model.options.irdeviceConfig['Air Purifier'].hide_device);" }, @@ -10527,7 +10745,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['DIY Air Purifier'] && !model.options.irdeviceConfig['DIY Air Purifier'].hide_device);" }, @@ -10656,7 +10874,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['Water Heater'] && !model.options.irdeviceConfig['Water Heater'].hide_device);" }, @@ -10785,7 +11003,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['DIY Water Heater'] && !model.options.irdeviceConfig['DIY Water Heater'].hide_device);" }, @@ -10914,7 +11132,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['Vacuum Cleaner'] && !model.options.irdeviceConfig['Vacuum Cleaner'].hide_device);" }, @@ -11043,7 +11261,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['DIY Vacuum Cleaner'] && !model.options.irdeviceConfig['DIY Vacuum Cleaner'].hide_device);" }, @@ -11172,7 +11390,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['Camera'] && !model.options.irdeviceConfig['Camera'].hide_device);" }, @@ -11301,7 +11519,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['DIY Camera'] && !model.options.irdeviceConfig['DIY Camera'].hide_device);" }, @@ -11430,7 +11648,7 @@ "connectionType": { "title": "Connection Type", "type": "string", - "description": "Bluetooth (BLE) API is only available for the following Device Types: Humidifier, Meter, MeterPlus, Curtain, Bot, Motion Sensor, Contact Sensor, Plug Mini (US), Plug Mini (JP), & Color Bulb", + "description": "Bluetooth (BLE) API is only available on certain Device Types, see the Wiki for more information.", "condition": { "functionBody": "return (model.options && model.options.irdeviceConfig && model.options.irdeviceConfig['Others'] && !model.options.irdeviceConfig['Others'].hide_device);" }, @@ -11690,6 +11908,8 @@ "options.devices[].hide_device", "options.devices[].configDeviceType", "options.devices[].connectionType", + "options.devices[].scanDuration", + "options.devices[].customBLEaddress", "options.devices[].webhook", "options.devices[].type", "options.devices[].mode", @@ -11701,31 +11921,33 @@ "options.devices[].convertUnitTo", "options.devices[].hide_humidity", "options.devices[].hide_lightsensor", - "options.devices[].set_minlux", - "options.devices[].set_maxlux", + "options.devices[].hide_motionsensor", + "options.devices[].hide_contactsensor", "options.devices[].hide_leak", + "options.devices[].disable_group", + "options.devices[].disableCaching", + "options.devices[].adaptiveLightingShift", + "options.devices[].activate_latchbutton", "options.devices[].dry", "options.devices[].set_minStep", "options.devices[].set_min", "options.devices[].set_max", + "options.devices[].set_minlux", + "options.devices[].set_maxlux", "options.devices[].setOpenMode", "options.devices[].setCloseMode", "options.devices[].silentModeSwitch", - "options.devices[].disable_group", - "options.devices[].hide_motionsensor", - "options.devices[].adaptiveLightingShift", - "options.devices[].hide_contactsensor", - "options.devices[].activate_latchbutton", - "options.devices[].disableCaching", + "options.devices[].maxRetry", "options.devices[].maxRetries", "options.devices[].delayBetweenRetries", - "options.devices[].maxRetry", "options.devices[].mqttURL", "options.devices[].mqttOptions", "options.devices[].mqttPubOptions", "options.devices[].history", + "options.devices[].offline", "options.devices[].firmware", - "options.devices[].scanDuration", + "options.devices[].external", + "options.devices[].logging", { "key": "options.devices[].refreshRate", "description": "Specifies the interval, in seconds, for retrieving the latest device status from the SwitchBot API. This interval applies only to this specific device." @@ -11737,10 +11959,7 @@ { "key": "options.devices[].pushRate", "description": "Specifies the interval, in seconds, between pushes to the SwitchBot API for this specific device." - }, - "options.devices[].offline", - "options.devices[].external", - "options.devices[].logging" + } ] } ] @@ -12205,7 +12424,6 @@ "expanded": false, "items": [ "options.deviceConfig['Plug'].hide_device", - "options.deviceConfig['Plug'].set_minStep", "options.deviceConfig['Plug'].connectionType", "options.deviceConfig['Plug'].scanDuration", "options.deviceConfig['Plug'].webhook", @@ -12230,7 +12448,6 @@ "expanded": false, "items": [ "options.deviceConfig['Plug Mini (US)'].hide_device", - "options.deviceConfig['Plug Mini (US)'].set_minStep", "options.deviceConfig['Plug Mini (US)'].connectionType", "options.deviceConfig['Plug Mini (US)'].scanDuration", "options.deviceConfig['Plug Mini (US)'].webhook", @@ -12255,7 +12472,6 @@ "expanded": false, "items": [ "options.deviceConfig['Plug Mini (JP)'].hide_device", - "options.deviceConfig['Plug Mini (JP)'].set_minStep", "options.deviceConfig['Plug Mini (JP)'].connectionType", "options.deviceConfig['Plug Mini (JP)'].scanDuration", "options.deviceConfig['Plug Mini (JP)'].webhook", @@ -12375,6 +12591,30 @@ "options.deviceConfig['K10+'].pushRate" ] }, + { + "type": "fieldset", + "title": "K10+ Pro Settings", + "expandable": true, + "expanded": false, + "items": [ + "options.deviceConfig['K10+ Pro'].hide_device", + "options.deviceConfig['K10+ Pro'].connectionType", + "options.deviceConfig['K10+ Pro'].scanDuration", + "options.deviceConfig['K10+ Pro'].webhook", + "options.deviceConfig['K10+ Pro'].external", + "options.deviceConfig['K10+ Pro'].maxRetry", + "options.deviceConfig['K10+ Pro'].maxRetries", + "options.deviceConfig['K10+ Pro'].delayBetweenRetries", + "options.deviceConfig['K10+ Pro'].disableCaching", + "options.deviceConfig['K10+ Pro'].offline", + "options.deviceConfig['K10+ Pro'].history", + "options.deviceConfig['K10+ Pro'].firmware", + "options.deviceConfig['K10+ Pro'].logging", + "options.deviceConfig['K10+ Pro'].refreshRate", + "options.deviceConfig['K10+ Pro'].updateRate", + "options.deviceConfig['K10+ Pro'].pushRate" + ] + }, { "type": "fieldset", "title": "WoSweeper Settings", @@ -12646,9 +12886,15 @@ "options.irdevices[].set_min", "options.irdevices[].set_max", "options.irdevices[].stateless", - "options.irdevices[].firmware", "options.irdevices[].external", - "options.irdevices[].logging" + "options.irdevices[].disableCaching", + "options.irdevices[].offline", + "options.irdevices[].history", + "options.irdevices[].firmware", + "options.irdevices[].logging", + "options.irdevices[].refreshRate", + "options.irdevices[].updateRate", + "options.irdevices[].pushRate" ] } ] diff --git a/package-lock.json b/package-lock.json index c264068f..44a92f38 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "async-mqtt": "^2.6.3", "fakegato-history": "^0.6.5", "homebridge-lib": "^7.0.9", - "node-switchbot": "^3.0.2-beta.5", + "node-switchbot": "^3.1.0", "rxjs": "^7.8.1" }, "devDependencies": { @@ -39,12 +39,12 @@ "eslint": "^9.12.0", "eslint-plugin-format": "^0.1.2", "homebridge": "^1.8.4", - "homebridge-config-ui-x": "4.60.1", + "homebridge-config-ui-x": "4.61.0", "nodemon": "^3.1.7", "npm-check-updates": "^17.1.3", "shx": "^0.3.4", "ts-node": "^10.9.2", - "typedoc": "^0.26.8", + "typedoc": "^0.26.9", "typescript": "^5.6.3", "vitest": "^2.1.2" }, @@ -327,13 +327,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.7.tgz", - "integrity": "sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz", + "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.25.7" + "@babel/types": "^7.25.8" }, "bin": { "parser": "bin/babel-parser.js" @@ -343,9 +343,9 @@ } }, "node_modules/@babel/types": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.7.tgz", - "integrity": "sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==", + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz", + "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==", "dev": true, "license": "MIT", "dependencies": { @@ -3140,45 +3140,45 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.5.11", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.11.tgz", - "integrity": "sha512-PwAdxs7/9Hc3ieBO12tXzmTD+Ln4qhT/56S+8DvrrZ4kLDn4Z/AMUr8tXJD0axiJBS0RKIoNaR0yMuQB9v9Udg==", + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.12.tgz", + "integrity": "sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "@babel/parser": "^7.25.3", - "@vue/shared": "3.5.11", + "@vue/shared": "3.5.12", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-dom": { - "version": "3.5.11", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.11.tgz", - "integrity": "sha512-pyGf8zdbDDRkBrEzf8p7BQlMKNNF5Fk/Cf/fQ6PiUz9at4OaUfyXW0dGJTo2Vl1f5U9jSLCNf0EZJEogLXoeew==", + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.12.tgz", + "integrity": "sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@vue/compiler-core": "3.5.11", - "@vue/shared": "3.5.11" + "@vue/compiler-core": "3.5.12", + "@vue/shared": "3.5.12" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.11", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.11.tgz", - "integrity": "sha512-gsbBtT4N9ANXXepprle+X9YLg2htQk1sqH/qGJ/EApl+dgpUBdTv3yP7YlR535uHZY3n6XaR0/bKo0BgwwDniw==", + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.12.tgz", + "integrity": "sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "@babel/parser": "^7.25.3", - "@vue/compiler-core": "3.5.11", - "@vue/compiler-dom": "3.5.11", - "@vue/compiler-ssr": "3.5.11", - "@vue/shared": "3.5.11", + "@vue/compiler-core": "3.5.12", + "@vue/compiler-dom": "3.5.12", + "@vue/compiler-ssr": "3.5.12", + "@vue/shared": "3.5.12", "estree-walker": "^2.0.2", "magic-string": "^0.30.11", "postcss": "^8.4.47", @@ -3186,21 +3186,21 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.11", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.11.tgz", - "integrity": "sha512-P4+GPjOuC2aFTk1Z4WANvEhyOykcvEd5bIj2KVNGKGfM745LaXGr++5njpdBTzVz5pZifdlR1kpYSJJpIlSePA==", + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.12.tgz", + "integrity": "sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@vue/compiler-dom": "3.5.11", - "@vue/shared": "3.5.11" + "@vue/compiler-dom": "3.5.12", + "@vue/shared": "3.5.12" } }, "node_modules/@vue/shared": { - "version": "3.5.11", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.11.tgz", - "integrity": "sha512-W8GgysJVnFo81FthhzurdRAWP/byq3q2qIw70e0JWblzVhjgOMiC2GyovXrZTFQJnFVryYaKGP3Tc9vYzYm6PQ==", + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.12.tgz", + "integrity": "sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==", "dev": true, "license": "MIT", "peer": true @@ -3827,9 +3827,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001667", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001667.tgz", - "integrity": "sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==", + "version": "1.0.30001668", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001668.tgz", + "integrity": "sha512-nWLrdxqCdblixUO+27JtGJJE/txpJlyUy5YN1u53wLZkP0emYCo5zgS6QYft7VUYR42LGgi/S5hdLZTrnyIddw==", "dev": true, "funding": [ { @@ -4728,9 +4728,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.33", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.33.tgz", - "integrity": "sha512-+cYTcFB1QqD4j4LegwLfpCNxifb6dDFUAwk6RsLusCwIaZI6or2f+q8rs5tTB2YC53HhOlIbEaqHMAAC8IOIwA==", + "version": "1.5.36", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.36.tgz", + "integrity": "sha512-HYTX8tKge/VNp6FGO+f/uVDmUkq+cEfcxYhKf15Akc4M5yxt5YmorwlAitKWjWhWQnKcDRBAQKXkhqqXMqcrjw==", "dev": true, "license": "ISC" }, @@ -5235,9 +5235,9 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "50.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.3.1.tgz", - "integrity": "sha512-SY9oUuTMr6aWoJggUS40LtMjsRzJPB5ZT7F432xZIHK3EfHF+8i48GbUBpwanrtlL9l1gILNTHK9o8gEhYLcKA==", + "version": "50.3.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.3.2.tgz", + "integrity": "sha512-TjgZocG53N3a84PdCFGqVMWLWwDitOUuKjlJftwTu/iTiD7N/Q2Q3eEy/Q4GfJqpM4rTJCkzUYWQfol6RZNDcA==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -5330,9 +5330,9 @@ } }, "node_modules/eslint-plugin-n": { - "version": "17.10.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.10.3.tgz", - "integrity": "sha512-ySZBfKe49nQZWR1yFaA0v/GsH6Fgp8ah6XV0WDz6CN8WO0ek4McMzb7A2xnf4DCYV43frjCygvb9f/wx7UUxRw==", + "version": "17.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.11.1.tgz", + "integrity": "sha512-93IUD82N6tIEgjztVI/l3ElHtC2wTa9boJHrD8iN+NyDxjxz/daZUZKfkedjBZNdg6EqDk4irybUsiPwDqXAEA==", "dev": true, "license": "MIT", "dependencies": { @@ -5497,9 +5497,9 @@ } }, "node_modules/eslint-plugin-vue": { - "version": "9.28.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.28.0.tgz", - "integrity": "sha512-ShrihdjIhOTxs+MfWun6oJWuk+g/LAhN+CiuOl/jjkG3l0F2AuK5NMTaWqyvBgkFtpYmyks6P4603mLmhNJW8g==", + "version": "9.29.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.29.0.tgz", + "integrity": "sha512-hamyjrBhNH6Li6R1h1VF9KHfshJlKgKEg3ARbGTn72CMNDSMhWbgC7NdkRDEh25AFW+4SDATzyNM+3gWuZii8g==", "dev": true, "license": "MIT", "dependencies": { @@ -6197,9 +6197,9 @@ } }, "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", "dev": true, "license": "MIT", "dependencies": { @@ -6438,9 +6438,9 @@ } }, "node_modules/globals": { - "version": "15.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.10.0.tgz", - "integrity": "sha512-tqFIbz83w4Y5TCbtgjZjApohbuh7K9BxGYFm7ifwDR240tvdb7P9x+/9VvUKlmkPoiknoJtanI8UOrqxS3a7lQ==", + "version": "15.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.11.0.tgz", + "integrity": "sha512-yeyNSjdbyVaWurlwCpcA6XNBrHTMIeDdj0/hnvX/OLJ9ekOXYbLsLinH/MucQyGvNnXhidTdNhTtJaffL2sMfw==", "dev": true, "license": "MIT", "engines": { @@ -6451,9 +6451,9 @@ } }, "node_modules/google-auth-library": { - "version": "9.14.1", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.14.1.tgz", - "integrity": "sha512-Rj+PMjoNFGFTmtItH7gHfbHpGVSb3vmnGK3nwNBqxQF9NoBpttSZI/rc0WiM63ma2uGDQtYEkMHkK9U6937NiA==", + "version": "9.14.2", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.14.2.tgz", + "integrity": "sha512-R+FRIfk1GBo3RdlRYWPdwk8nmtVUOn6+BkDomAC46KoU8kzXzE1HLmOasSCbWUByMMAGkknVF0G5kQ69Vj7dlA==", "license": "Apache-2.0", "dependencies": { "base64-js": "^1.3.0", @@ -6809,9 +6809,9 @@ } }, "node_modules/homebridge-config-ui-x": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/homebridge-config-ui-x/-/homebridge-config-ui-x-4.60.1.tgz", - "integrity": "sha512-OOf1IQB6dcPjpqWb3FOJIYXaT7SxO359WFeTCbc82aZtMIsiOvMyKiH0Dkydq50phOSkz+T49HfL16HcXCFt4g==", + "version": "4.61.0", + "resolved": "https://registry.npmjs.org/homebridge-config-ui-x/-/homebridge-config-ui-x-4.61.0.tgz", + "integrity": "sha512-jmilxafuUxwA7Wm1jJ02zAjNQb1anz2668p63ZpBHahbHYg8kT1sIKLIb53FmlTzVrf+CCoJzXo4EJ2UUqNn0Q==", "dev": true, "funding": [ { @@ -8104,9 +8104,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.11", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", - "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "version": "0.30.12", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", + "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", "dev": true, "license": "MIT", "dependencies": { @@ -9297,9 +9297,9 @@ "license": "MIT" }, "node_modules/nan": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", - "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==", + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz", + "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==", "dev": true, "license": "MIT" }, @@ -9373,9 +9373,9 @@ } }, "node_modules/node-addon-api": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.1.0.tgz", - "integrity": "sha512-yBY+qqWSv3dWKGODD6OGE6GnTX7Q2r+4+DfpqxHSHh8x0B4EKP9+wVGLS6U/AM1vxSNNmUEuIV5EGhYwPpfOwQ==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.2.1.tgz", + "integrity": "sha512-vmEOvxwiH8tlOcv4SyE8RH34rI5/nWVaigUeAUPawC6f0+HoDthwI0vkMu4tbtsZrXq6QXFfrkhjofzKEs5tpA==", "license": "MIT", "engines": { "node": "^18 || ^20 || >= 21" @@ -9466,14 +9466,14 @@ } }, "node_modules/node-switchbot": { - "version": "3.0.2-beta.5", - "resolved": "https://registry.npmjs.org/node-switchbot/-/node-switchbot-3.0.2-beta.5.tgz", - "integrity": "sha512-Cjh/rIfWREage86fmA86n/1KMoe47KD2ZU79fWzPcr+B3fZkeYmv+uIZ5RLyZ23t3EaQEMnv0BgnPpVj8qbDMA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/node-switchbot/-/node-switchbot-3.1.0.tgz", + "integrity": "sha512-Y2H0f5N0YzVFJksBaUivf6VSZm1ALgOzTJ2O4Iqu11NBDfSvUyxH9B2iLvlwqUj+R1yS66m5wqK0Esysr1JM6A==", "license": "MIT", "dependencies": { "@stoprocent/noble": "^1.15.1", "async-mutex": "^0.5.0", - "undici": "^6.19.8" + "undici": "^6.20.0" }, "engines": { "node": "^20 || ^22" @@ -9913,9 +9913,9 @@ "license": "BlueOak-1.0.0" }, "node_modules/package-manager-detector": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.1.tgz", - "integrity": "sha512-/hVW2fZvAdEas+wyKh0SnlZ2mx0NIa1+j11YaQkogEJkcMErbwchHCuo8z7lEtajZJQZ6rgZNVTWMVVd71Bjng==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.2.tgz", + "integrity": "sha512-VgXbyrSNsml4eHWIvxxG/nTL4wgybMTXCV2Un/+yEc3aDKKU6nQBZjbeP3Pl3qm9Qg92X/1ng4ffvCeD/zwHgg==", "dev": true, "license": "MIT" }, @@ -12490,9 +12490,9 @@ "license": "MIT" }, "node_modules/typedoc": { - "version": "0.26.8", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.26.8.tgz", - "integrity": "sha512-QBF0BMbnNeUc6U7pRHY7Jb8pjhmiNWZNQT8LU6uk9qP9t3goP9bJptdlNqMC0wBB2w9sQrxjZt835bpRSSq1LA==", + "version": "0.26.9", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.26.9.tgz", + "integrity": "sha512-Rc7QpWL7EtmrT8yxV0GmhOR6xHgFnnhphbD9Suti3fz3um7ZOrou6q/g9d6+zC5PssTLZmjaW4Upmzv8T1rCcQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12561,9 +12561,9 @@ "license": "MIT" }, "node_modules/undici": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.8.tgz", - "integrity": "sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.20.0.tgz", + "integrity": "sha512-AITZfPuxubm31Sx0vr8bteSalEbs9wQb/BOBi9FPlD9Qpd6HxZ4Q0+hI742jBhkPb4RT2v5MQzaW5VhRVyj+9A==", "license": "MIT", "engines": { "node": ">=18.17" diff --git a/package.json b/package.json index ba1da5fb..a49575a3 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,7 @@ "async-mqtt": "^2.6.3", "fakegato-history": "^0.6.5", "homebridge-lib": "^7.0.9", - "node-switchbot": "^3.0.2-beta.5", + "node-switchbot": "^3.1.0", "rxjs": "^7.8.1" }, "devDependencies": { @@ -97,12 +97,12 @@ "eslint": "^9.12.0", "eslint-plugin-format": "^0.1.2", "homebridge": "^1.8.4", - "homebridge-config-ui-x": "4.60.1", + "homebridge-config-ui-x": "4.61.0", "nodemon": "^3.1.7", "npm-check-updates": "^17.1.3", "shx": "^0.3.4", "ts-node": "^10.9.2", - "typedoc": "^0.26.8", + "typedoc": "^0.26.9", "typescript": "^5.6.3", "vitest": "^2.1.2" }, diff --git a/src/device/device.ts b/src/device/device.ts index b9533bd7..856e56eb 100644 --- a/src/device/device.ts +++ b/src/device/device.ts @@ -8,7 +8,7 @@ import type { MqttClient } from 'mqtt' import type { ad, bodyChange, device, deviceStatus, deviceStatusRequest, pushResponse } from 'node-switchbot' import type { SwitchBotPlatform } from '../platform.js' -import type { blindTiltConfig, botConfig, ceilingLightConfig, colorBulbConfig, contactConfig, curtainConfig, devicesConfig, hubConfig, humidifierConfig, indoorOutdoorSensorConfig, lockConfig, meterConfig, motionConfig, stripLightConfig, SwitchBotPlatformConfig, waterDetectorConfig } from '../settings.js' +import type { blindTiltConfig, botConfig, ceilingLightConfig, colorBulbConfig, contactConfig, curtainConfig, devicesConfig, hubConfig, humidifierConfig, indoorOutdoorSensorConfig, lockConfig, meterConfig, motionConfig, plugConfig, stripLightConfig, SwitchBotPlatformConfig, waterDetectorConfig } from '../settings.js' import { hostname } from 'node:os' @@ -188,7 +188,7 @@ export abstract class deviceBase { case 'MeterPlus': deviceSpecificConfig = device as meterConfig break - case 'IOSensor': + case 'WoIOSensor': deviceSpecificConfig = device as indoorOutdoorSensorConfig break case 'Humidifier': @@ -210,6 +210,11 @@ export abstract class deviceBase { case 'Water Detector': deviceSpecificConfig = device as waterDetectorConfig break + case 'Plug': + case 'Plug Mini (US)': + case 'Plug Mini (JP)': + deviceSpecificConfig = device as plugConfig + break case 'Color Bulb': deviceSpecificConfig = device as colorBulbConfig break @@ -220,11 +225,11 @@ export abstract class deviceBase { case 'Ceiling Light Pro': deviceSpecificConfig = device as ceilingLightConfig break - case 'Lock': - case 'Lock Pro': + case 'Smart Lock': + case 'Smart Lock Pro': deviceSpecificConfig = device as lockConfig break - case 'Hub2': + case 'Hub 2': deviceSpecificConfig = device as hubConfig break default: @@ -512,6 +517,18 @@ export abstract class deviceBase { bleModelName: SwitchBotBLEModelName.Curtain3, bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Curtain3, }, + 'WoRollerShade': { + model: SwitchBotModel.Curtain3, + bleModel: SwitchBotBLEModel.Curtain3, + bleModelName: SwitchBotBLEModelName.Curtain3, + bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Curtain3, + }, + 'Roller Shade': { + model: SwitchBotModel.Curtain3, + bleModel: SwitchBotBLEModel.Curtain3, + bleModelName: SwitchBotBLEModelName.Curtain3, + bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Curtain3, + }, 'Blind Tilt': { model: SwitchBotModel.BlindTilt, bleModel: SwitchBotBLEModel.BlindTilt, @@ -560,6 +577,12 @@ export abstract class deviceBase { bleModelName: SwitchBotBLEModelName.Unknown, bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Unknown, }, + 'K10+ Pro': { + model: SwitchBotModel.K10Pro, + bleModel: SwitchBotBLEModel.Unknown, + bleModelName: SwitchBotBLEModelName.Unknown, + bleModelFriendlyName: SwitchBotBLEModelFriendlyName.Unknown, + }, 'WoSweeper': { model: SwitchBotModel.WoSweeper, bleModel: SwitchBotBLEModel.Unknown, diff --git a/src/platform.ts b/src/platform.ts index 6c4c409b..af75e68d 100644 --- a/src/platform.ts +++ b/src/platform.ts @@ -646,6 +646,7 @@ export class SwitchBotPlatform implements DynamicPlatformPlugin { 'Smart Lock Pro': this.createLock.bind(this), 'Color Bulb': this.createColorBulb.bind(this), 'K10+': this.createRobotVacuumCleaner.bind(this), + 'K10+ Pro': this.createRobotVacuumCleaner.bind(this), 'WoSweeper': this.createRobotVacuumCleaner.bind(this), 'WoSweeperMini': this.createRobotVacuumCleaner.bind(this), 'Robot Vacuum Cleaner S1': this.createRobotVacuumCleaner.bind(this), diff --git a/src/settings.ts b/src/settings.ts index 7ba2d779..05f8e2cd 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -53,7 +53,7 @@ export interface options { logging?: string }; -export type devicesConfig = botConfig | meterConfig | indoorOutdoorSensorConfig | humidifierConfig | curtainConfig | blindTiltConfig | contactConfig | motionConfig | waterDetectorConfig | colorBulbConfig | stripLightConfig | ceilingLightConfig | lockConfig | hubConfig +export type devicesConfig = botConfig | meterConfig | indoorOutdoorSensorConfig | humidifierConfig | curtainConfig | blindTiltConfig | contactConfig | motionConfig | waterDetectorConfig | plugConfig | colorBulbConfig | stripLightConfig | ceilingLightConfig | lockConfig | hubConfig export interface BaseDeviceConfig extends device { bleMac?: string @@ -104,7 +104,7 @@ export interface meterConfig extends BaseDeviceConfig { }; export interface indoorOutdoorSensorConfig extends BaseDeviceConfig { - configDeviceType: 'IOSensor' + configDeviceType: 'WoIOSensor' hide_temperature?: boolean convertUnitTo?: string hide_humidity?: boolean @@ -118,7 +118,7 @@ export interface humidifierConfig extends BaseDeviceConfig { }; export interface curtainConfig extends BaseDeviceConfig { - configDeviceType: 'Curtain' | 'Curtain3' + configDeviceType: 'Curtain' | 'Curtain3' | 'WoRollerShade' | 'Roller Shade' disable_group?: boolean hide_lightsensor?: boolean set_minLux?: number @@ -167,6 +167,10 @@ export interface waterDetectorConfig extends BaseDeviceConfig { dry?: boolean }; +export interface plugConfig extends BaseDeviceConfig { + configDeviceType: 'Plug' | 'Plug Mini (US)' | 'Plug Mini (JP)' +}; + export interface colorBulbConfig extends BaseDeviceConfig { configDeviceType: 'Color Bulb' set_minStep?: number @@ -186,13 +190,13 @@ export interface ceilingLightConfig extends BaseDeviceConfig { }; export interface lockConfig extends BaseDeviceConfig { - configDeviceType: 'Lock' | 'Lock Pro' + configDeviceType: 'Smart Lock' | 'Smart Lock Pro' hide_contactsensor?: boolean activate_latchbutton?: boolean }; export interface hubConfig extends BaseDeviceConfig { - configDeviceType: 'Hub2' + configDeviceType: 'Hub 2' hide_temperature?: boolean convertUnitTo?: string hide_humidity?: boolean