diff --git a/bundles/org.openhab.binding.miio/README.md b/bundles/org.openhab.binding.miio/README.md
index 20a5cce76ab..bc7e7f8ccc2 100644
--- a/bundles/org.openhab.binding.miio/README.md
+++ b/bundles/org.openhab.binding.miio/README.md
@@ -234,7 +234,7 @@ Currently the miio binding supports more than 360 different models.
| Mi IH Pressure Rice Cooker | miio:unsupported | chunmi.cooker.press1 | No | |
| Mi IH Pressure Rice Cooker | miio:unsupported | chunmi.cooker.press2 | No | |
| Gosund Smart Plug | miio:basic | [cuco.plug.cp1](#cuco-plug-cp1) | Yes | |
-| Xiaomi Smart Plug 2 (Wi-Fi) | miio:basic | [cuco.plug.v2eur](#cuco-plug-v2eur) | Yes | |
+| Xiaomi Smart Plug 2 (Wi-Fi) | miio:basic | [cuco.plug.v2eur](#cuco-plug-v2eur) | Yes | Device only works with cloud connection (stays offline with direct connection). Select in your thing configuration Communication Method 'Cloud' |
| Mi Smart Antibacterial Humidifier | miio:basic | [deerma.humidifier.jsq](#deerma-humidifier-jsq) | Yes | |
| Mi S Smart Humidifer | miio:basic | [deerma.humidifier.jsq1](#deerma-humidifier-jsq1) | Yes | |
| Xiaomi Smart Humidifier 2 | miio:basic | [deerma.humidifier.jsq2w](#deerma-humidifier-jsq2w) | Yes | |
@@ -461,6 +461,7 @@ Currently the miio binding supports more than 360 different models.
| Mi Smart Ultra Electricity Saving Air Conditioner (1HP/Inverter/New China Energy Label Level 1) | miio:basic | [xiaomi.aircondition.mt7](#xiaomi-aircondition-mt7) | Experimental | Experimental support. Please report back if all channels are functional. Preferably share the debug log of property refresh and command responses |
| Mi Smart Ultra Electricity Saving Air Conditioner (1.5HP/Inverter/New China Energy Label Level 1) | miio:basic | [xiaomi.aircondition.mt8](#xiaomi-aircondition-mt8) | Experimental | Experimental support. Please report back if all channels are functional. Preferably share the debug log of property refresh and command responses |
| Mi Wi-Fi Repeater 2 | miio:unsupported | xiaomi.repeater.v2 | No | |
+| Xiaomi Robot Vacuum X20+ | miio:basic | [xiaomi.vacuum.c102gl](#xiaomi-vacuum-c102gl) | Yes | |
| Mi Network Speaker | miio:unsupported | xiaomi.wifispeaker.v1 | No | |
| Uclean Smart Toilet Seat | miio:basic | [xjx.toilet.pro](#xjx-toilet-pro) | Experimental | Experimental support. Please report back if all channels are functional. Preferably share the debug log of property refresh and command responses |
| Uclean Smart Toilet pure | miio:basic | [xjx.toilet.pure](#xjx-toilet-pure) | Experimental | Experimental support. Please report back if all channels are functional. Preferably share the debug log of property refresh and command responses |
@@ -3905,6 +3906,59 @@ Note, not all the values need to be in the json file, e.g. a subset of the param
| fan-percent | Number:Dimentionless | Fan Speed % | |
| timer | String | Enhance - Timer | |
+### Xiaomi Robot Vacuum X20+ (xiaomi.vacuum.c102gl) Channels
+
+| Channel | Type | Description | Comment |
+|----------------------------|----------------------|------------------------------------------|------------|
+| actions | String | Actions | Value mapping `["vacuum-start-sweep"="Vacuum Start Sweep","vacuum-stop-sweeping"="Vacuum Stop Sweeping","vacuum-start-room-sweep"="Vacuum Start Room Sweep","vacuum-start-dust-arrest"="Vacuum Start Dust Arrest","vacuum-start-mop-wash"="Vacuum Start Mop Wash","vacuum-start-dry"="Vacuum Start Dry","vacuum-stop-dry"="Vacuum Stop Dry","vacuum-start-eject"="Vacuum Start Eject","battery-start-charge"="Battery Start Charge","brush-cleaner-reset-brush-life"="Brush Cleaner Reset Brush Life","brush-cleaner-reset-brush-life"="Brush Cleaner Reset Brush Life","filter-reset-filter-life"="Filter Reset Filter Life","mop-reset-mop-life"="Mop Reset Mop Life","vacuum-extend-start-clean"="Vacuum Extend Start Clean","vacuum-extend-stop-clean"="Vacuum Extend Stop Clean","map-map-req"="Map Map Req","map-update-map"="Map Update Map","audio-position"="Audio Position","audio-play-sound"="Audio Play Sound","time-delete-timer"="Time Delete Timer"]` |
+| status | Number | Robot Cleaner - Status | Value mapping `["1"="Sweeping","2"="Idle","3"="Paused","4"="Error","5"="Go Charging","6"="Charging","7"="Mopping","8"="Drying","9"="Washing","10"="Go Washing","11"="Building","12"="Sweeping And Mopping","13"="Charging Completed","14"="Upgrading","19"="WaterInspecting","21"="WashingMopPause","22"="DustCollecting","23"="RemoteClean"]` |
+| fault | Number | Robot Cleaner - Device Fault | |
+| mode | Number | Robot Cleaner - Mode | Value mapping `["0"="Silent","1"="Basic","2"="Strong","3"="Full Speed"]` |
+| dry_left_time | Number:Time | Robot Cleaner - Dry Left Time | |
+| battery_level | Number:Dimensionless | Battery - Battery Level | |
+| charging_state | Number | Battery - Charging State | Value mapping `["1"="Charging","2"="Not Charging","5"="Go Charging"]` |
+| brush_left_time | Number:Time | Main Cleaning Brush - Brush Left Time | |
+| brush_life_level | Number:Dimensionless | Main Cleaning Brush - Brush Life Level | |
+| brush_left_time1 | Number:Time | Side Cleaning Brush - Brush Left Time | |
+| brush_life_level1 | Number:Dimensionless | Side Cleaning Brush - Brush Life Level | |
+| filter_life_level | Number:Dimensionless | Filter - Filter Life Level | |
+| filter_left_time | Number:Time | Filter - Filter Left Time | |
+| mop_life_level | Number:Dimensionless | Mop - Mop Life Level | |
+| mop_left_time | Number:Time | Mop - Mop Left Time | |
+| work_mode | Number | Vacuum Extend - Work Mode | |
+| cleaning_time | Number:Time | Vacuum Extend - Cleaning Time | |
+| cleaning_area | Number | Vacuum Extend - Cleaning Area | |
+| cleaning_mode | Number | Vacuum Extend - Cleaning Mode | Value mapping `["0"="Quiet","1"="Standard","2"="Medium","3"="Strong"]` |
+| mop_mode | Number | Vacuum Extend - Mop Mode | Value mapping `["1"="Low","2"="Medium","3"="High"]` |
+| waterbox_status | Number | Vacuum Extend - Waterbox Status | Value mapping `["0"="No","1"="Yes"]` |
+| task_status | Number | Vacuum Extend - Task Status | |
+| clean_extend_data | String | Vacuum Extend - Clean Extend Data | |
+| break_point_restart | Number | Vacuum Extend - Break Point Restart | Value mapping `["0"="Close","1"="Open"]` |
+| carpet_press | Number | Vacuum Extend - Carpet Press | Value mapping `["0"="Close","1"="Open"]` |
+| serial_number | String | Vacuum Extend - Serial Number | |
+| remote_state | String | Vacuum Extend - Remote State | |
+| clean_rags_tip | Number:Time | Vacuum Extend - Clean Rags Tip | |
+| keep_sweeper_time | Number:Time | Vacuum Extend - Keep Sweeper Time | |
+| faults | String | Vacuum Extend - Faults | |
+| nation_matched | String | Vacuum Extend - Nation Matched | |
+| relocation_status | Number | Vacuum Extend - Relocation Status | |
+| wash_station | Number | Vacuum Extend - Wash Station | |
+| child_lock | Number | Vacuum Extend - Child Lock | Value mapping `["0"="Close","1"="Open"]` |
+| clean_cancel | Number | Vacuum Extend - Clean Cancel | |
+| enable | Switch | Do Not Disturb - Enable | |
+| start_time | String | Do Not Disturb - Start Time | |
+| end_time | String | Do Not Disturb - End Time | |
+| volume | Number | Audio - Volume | |
+| voice_packet_id | String | Audio - Voice Packet Id | |
+| voice_change_state | String | Audio - Voice Change State | |
+| set_voice | String | Audio - Set Voice | |
+| time_zone | String | Time - Time Zone | |
+| timer_clean | String | Time - Timer Clean | |
+| first_clean_time | Number | Clean Logs - First Clean Time | |
+| total_clean_time | Number:Time | Clean Logs - Total Clean Time | |
+| total_clean_times | Number | Clean Logs - Total Clean Times | |
+| total_clean_area | Number | Clean Logs - Total Clean Area | |
+
### Uclean Smart Toilet Seat (xjx.toilet.pro) Channels
| Channel | Type | Description | Comment |
@@ -10176,6 +10230,62 @@ Number:Dimentionless fan_percent "Fan Speed %" (G_aircondition) {channel="miio:b
String timer "Enhance - Timer" (G_aircondition) {channel="miio:basic:aircondition:timer"}
```
+### Xiaomi Robot Vacuum X20+ (xiaomi.vacuum.c102gl) item file lines
+
+note: Autogenerated example. Replace the id (vacuum) in the channel with your own. Replace `basic` with `generic` in the thing UID depending on how your thing was discovered.
+
+```java
+Group G_vacuum "Xiaomi Robot Vacuum X20+"
+String actions "Actions" (G_vacuum) {channel="miio:basic:vacuum:actions"}
+Number status "Robot Cleaner - Status" (G_vacuum) {channel="miio:basic:vacuum:status"}
+Number fault "Robot Cleaner - Device Fault" (G_vacuum) {channel="miio:basic:vacuum:fault"}
+Number mode "Robot Cleaner - Mode" (G_vacuum) {channel="miio:basic:vacuum:mode"}
+Number:Time dry_left_time "Robot Cleaner - Dry Left Time" (G_vacuum) {channel="miio:basic:vacuum:dry_left_time"}
+Number:Dimensionless battery_level "Battery - Battery Level" (G_vacuum) {channel="miio:basic:vacuum:battery_level"}
+Number charging_state "Battery - Charging State" (G_vacuum) {channel="miio:basic:vacuum:charging_state"}
+Number:Time brush_left_time "Main Cleaning Brush - Brush Left Time" (G_vacuum) {channel="miio:basic:vacuum:brush_left_time"}
+Number:Dimensionless brush_life_level "Main Cleaning Brush - Brush Life Level" (G_vacuum) {channel="miio:basic:vacuum:brush_life_level"}
+Number:Time brush_left_time1 "Side Cleaning Brush - Brush Left Time" (G_vacuum) {channel="miio:basic:vacuum:brush_left_time1"}
+Number:Dimensionless brush_life_level1 "Side Cleaning Brush - Brush Life Level" (G_vacuum) {channel="miio:basic:vacuum:brush_life_level1"}
+Number:Dimensionless filter_life_level "Filter - Filter Life Level" (G_vacuum) {channel="miio:basic:vacuum:filter_life_level"}
+Number:Time filter_left_time "Filter - Filter Left Time" (G_vacuum) {channel="miio:basic:vacuum:filter_left_time"}
+Number:Dimensionless mop_life_level "Mop - Mop Life Level" (G_vacuum) {channel="miio:basic:vacuum:mop_life_level"}
+Number:Time mop_left_time "Mop - Mop Left Time" (G_vacuum) {channel="miio:basic:vacuum:mop_left_time"}
+Number work_mode "Vacuum Extend - Work Mode" (G_vacuum) {channel="miio:basic:vacuum:work_mode"}
+Number:Time cleaning_time "Vacuum Extend - Cleaning Time" (G_vacuum) {channel="miio:basic:vacuum:cleaning_time"}
+Number cleaning_area "Vacuum Extend - Cleaning Area" (G_vacuum) {channel="miio:basic:vacuum:cleaning_area"}
+Number cleaning_mode "Vacuum Extend - Cleaning Mode" (G_vacuum) {channel="miio:basic:vacuum:cleaning_mode"}
+Number mop_mode "Vacuum Extend - Mop Mode" (G_vacuum) {channel="miio:basic:vacuum:mop_mode"}
+Number waterbox_status "Vacuum Extend - Waterbox Status" (G_vacuum) {channel="miio:basic:vacuum:waterbox_status"}
+Number task_status "Vacuum Extend - Task Status" (G_vacuum) {channel="miio:basic:vacuum:task_status"}
+String clean_extend_data "Vacuum Extend - Clean Extend Data" (G_vacuum) {channel="miio:basic:vacuum:clean_extend_data"}
+Number break_point_restart "Vacuum Extend - Break Point Restart" (G_vacuum) {channel="miio:basic:vacuum:break_point_restart"}
+Number carpet_press "Vacuum Extend - Carpet Press" (G_vacuum) {channel="miio:basic:vacuum:carpet_press"}
+String serial_number "Vacuum Extend - Serial Number" (G_vacuum) {channel="miio:basic:vacuum:serial_number"}
+String remote_state "Vacuum Extend - Remote State" (G_vacuum) {channel="miio:basic:vacuum:remote_state"}
+Number:Time clean_rags_tip "Vacuum Extend - Clean Rags Tip" (G_vacuum) {channel="miio:basic:vacuum:clean_rags_tip"}
+Number:Time keep_sweeper_time "Vacuum Extend - Keep Sweeper Time" (G_vacuum) {channel="miio:basic:vacuum:keep_sweeper_time"}
+String faults "Vacuum Extend - Faults" (G_vacuum) {channel="miio:basic:vacuum:faults"}
+String nation_matched "Vacuum Extend - Nation Matched" (G_vacuum) {channel="miio:basic:vacuum:nation_matched"}
+Number relocation_status "Vacuum Extend - Relocation Status" (G_vacuum) {channel="miio:basic:vacuum:relocation_status"}
+Number wash_station "Vacuum Extend - Wash Station" (G_vacuum) {channel="miio:basic:vacuum:wash_station"}
+Number child_lock "Vacuum Extend - Child Lock" (G_vacuum) {channel="miio:basic:vacuum:child_lock"}
+Number clean_cancel "Vacuum Extend - Clean Cancel" (G_vacuum) {channel="miio:basic:vacuum:clean_cancel"}
+Switch enable "Do Not Disturb - Enable" (G_vacuum) {channel="miio:basic:vacuum:enable"}
+String start_time "Do Not Disturb - Start Time" (G_vacuum) {channel="miio:basic:vacuum:start_time"}
+String end_time "Do Not Disturb - End Time" (G_vacuum) {channel="miio:basic:vacuum:end_time"}
+Number volume "Audio - Volume" (G_vacuum) {channel="miio:basic:vacuum:volume"}
+String voice_packet_id "Audio - Voice Packet Id" (G_vacuum) {channel="miio:basic:vacuum:voice_packet_id"}
+String voice_change_state "Audio - Voice Change State" (G_vacuum) {channel="miio:basic:vacuum:voice_change_state"}
+String set_voice "Audio - Set Voice" (G_vacuum) {channel="miio:basic:vacuum:set_voice"}
+String time_zone "Time - Time Zone" (G_vacuum) {channel="miio:basic:vacuum:time_zone"}
+String timer_clean "Time - Timer Clean" (G_vacuum) {channel="miio:basic:vacuum:timer_clean"}
+Number first_clean_time "Clean Logs - First Clean Time" (G_vacuum) {channel="miio:basic:vacuum:first_clean_time"}
+Number:Time total_clean_time "Clean Logs - Total Clean Time" (G_vacuum) {channel="miio:basic:vacuum:total_clean_time"}
+Number total_clean_times "Clean Logs - Total Clean Times" (G_vacuum) {channel="miio:basic:vacuum:total_clean_times"}
+Number total_clean_area "Clean Logs - Total Clean Area" (G_vacuum) {channel="miio:basic:vacuum:total_clean_area"}
+```
+
### Uclean Smart Toilet Seat (xjx.toilet.pro) item file lines
note: Autogenerated example. Replace the id (toilet) in the channel with your own. Replace `basic` with `generic` in the thing UID depending on how your thing was discovered.
@@ -13048,6 +13158,7 @@ Number lp_autooff_delay "Low Power Limit Time" (G_powerstrip) {channel="miio:bas
Number lp_threshold "Low Power Threshold" (G_powerstrip) {channel="miio:basic:powerstrip:lp_threshold"}
```
+
### Country Servers
Known country Servers: cn, de, i2, ru, sg, us
diff --git a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/MiIoDevices.java b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/MiIoDevices.java
index aafbac3c626..c8a7eda18eb 100644
--- a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/MiIoDevices.java
+++ b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/MiIoDevices.java
@@ -312,6 +312,7 @@ public enum MiIoDevices {
"Mi Smart Ultra Electricity Saving Air Conditioner (1.5HP/Inverter/New China Energy Label Level 1)",
THING_TYPE_BASIC),
XIAOMI_REPEATER_V2("xiaomi.repeater.v2", "Mi Wi-Fi Repeater 2", THING_TYPE_UNSUPPORTED),
+ XIAOMI_VACUUM_C102GL("xiaomi.vacuum.c102gl", "Xiaomi Robot Vacuum X20+", THING_TYPE_BASIC),
XIAOMI_WIFISPEAKER_V1("xiaomi.wifispeaker.v1", "Mi Network Speaker", THING_TYPE_UNSUPPORTED),
XJX_TOILET_PRO("xjx.toilet.pro", "Uclean Smart Toilet Seat", THING_TYPE_BASIC),
XJX_TOILET_PURE("xjx.toilet.pure", "Uclean Smart Toilet pure", THING_TYPE_BASIC),
diff --git a/bundles/org.openhab.binding.miio/src/main/resources/OH-INF/i18n/basic.properties b/bundles/org.openhab.binding.miio/src/main/resources/OH-INF/i18n/basic.properties
index 8ec7d2d72b9..dff4d7d4751 100644
--- a/bundles/org.openhab.binding.miio/src/main/resources/OH-INF/i18n/basic.properties
+++ b/bundles/org.openhab.binding.miio/src/main/resources/OH-INF/i18n/basic.properties
@@ -253,6 +253,7 @@ thing.xiaomi.aircondition.mt5 = Mi Smart Gentle Breeze Vertical Air Conditioner
thing.xiaomi.aircondition.mt7 = Mi Smart Ultra Electricity Saving Air Conditioner (1HP/Inverter/New China Energy Label Level 1)
thing.xiaomi.aircondition.mt8 = Mi Smart Ultra Electricity Saving Air Conditioner (1.5HP/Inverter/New China Energy Label Level 1)
thing.xiaomi.repeater.v2 = Mi Wi-Fi Repeater 2
+thing.xiaomi.vacuum.c102gl = Xiaomi Robot Vacuum X20+
thing.xiaomi.wifispeaker.v1 = Mi Network Speaker
thing.xjx.toilet.pro = Uclean Smart Toilet Seat
thing.xjx.toilet.pure = Uclean Smart Toilet pure
@@ -1719,6 +1720,54 @@ ch.xiaomi.aircondition.mc1-miot.target-temperature = Air Conditioner - Target Te
ch.xiaomi.aircondition.mc1-miot.temperature = Environment - Temperature
ch.xiaomi.aircondition.mc1-miot.timer = Enhance - Timer
ch.xiaomi.aircondition.mc1-miot.vertical-swing = Fan Control - Vertical Swing
+ch.xiaomi.vacuum.c102gl-miot.actions = Actions
+ch.xiaomi.vacuum.c102gl-miot.battery_level = Battery - Battery Level
+ch.xiaomi.vacuum.c102gl-miot.break_point_restart = Vacuum Extend - Break Point Restart
+ch.xiaomi.vacuum.c102gl-miot.brush_left_time = Main Cleaning Brush - Brush Left Time
+ch.xiaomi.vacuum.c102gl-miot.brush_left_time1 = Side Cleaning Brush - Brush Left Time
+ch.xiaomi.vacuum.c102gl-miot.brush_life_level = Main Cleaning Brush - Brush Life Level
+ch.xiaomi.vacuum.c102gl-miot.brush_life_level1 = Side Cleaning Brush - Brush Life Level
+ch.xiaomi.vacuum.c102gl-miot.carpet_press = Vacuum Extend - Carpet Press
+ch.xiaomi.vacuum.c102gl-miot.charging_state = Battery - Charging State
+ch.xiaomi.vacuum.c102gl-miot.child_lock = Vacuum Extend - Child Lock
+ch.xiaomi.vacuum.c102gl-miot.clean_cancel = Vacuum Extend - Clean Cancel
+ch.xiaomi.vacuum.c102gl-miot.clean_extend_data = Vacuum Extend - Clean Extend Data
+ch.xiaomi.vacuum.c102gl-miot.clean_rags_tip = Vacuum Extend - Clean Rags Tip
+ch.xiaomi.vacuum.c102gl-miot.cleaning_area = Vacuum Extend - Cleaning Area
+ch.xiaomi.vacuum.c102gl-miot.cleaning_mode = Vacuum Extend - Cleaning Mode
+ch.xiaomi.vacuum.c102gl-miot.cleaning_time = Vacuum Extend - Cleaning Time
+ch.xiaomi.vacuum.c102gl-miot.dry_left_time = Robot Cleaner - Dry Left Time
+ch.xiaomi.vacuum.c102gl-miot.enable = Do Not Disturb - Enable
+ch.xiaomi.vacuum.c102gl-miot.end_time = Do Not Disturb - End Time
+ch.xiaomi.vacuum.c102gl-miot.fault = Robot Cleaner - Device Fault
+ch.xiaomi.vacuum.c102gl-miot.faults = Vacuum Extend - Faults
+ch.xiaomi.vacuum.c102gl-miot.filter_left_time = Filter - Filter Left Time
+ch.xiaomi.vacuum.c102gl-miot.filter_life_level = Filter - Filter Life Level
+ch.xiaomi.vacuum.c102gl-miot.first_clean_time = Clean Logs - First Clean Time
+ch.xiaomi.vacuum.c102gl-miot.keep_sweeper_time = Vacuum Extend - Keep Sweeper Time
+ch.xiaomi.vacuum.c102gl-miot.mode = Robot Cleaner - Mode
+ch.xiaomi.vacuum.c102gl-miot.mop_left_time = Mop - Mop Left Time
+ch.xiaomi.vacuum.c102gl-miot.mop_life_level = Mop - Mop Life Level
+ch.xiaomi.vacuum.c102gl-miot.mop_mode = Vacuum Extend - Mop Mode
+ch.xiaomi.vacuum.c102gl-miot.nation_matched = Vacuum Extend - Nation Matched
+ch.xiaomi.vacuum.c102gl-miot.relocation_status = Vacuum Extend - Relocation Status
+ch.xiaomi.vacuum.c102gl-miot.remote_state = Vacuum Extend - Remote State
+ch.xiaomi.vacuum.c102gl-miot.serial_number = Vacuum Extend - Serial Number
+ch.xiaomi.vacuum.c102gl-miot.set_voice = Audio - Set Voice
+ch.xiaomi.vacuum.c102gl-miot.start_time = Do Not Disturb - Start Time
+ch.xiaomi.vacuum.c102gl-miot.status = Robot Cleaner - Status
+ch.xiaomi.vacuum.c102gl-miot.task_status = Vacuum Extend - Task Status
+ch.xiaomi.vacuum.c102gl-miot.time_zone = Time - Time Zone
+ch.xiaomi.vacuum.c102gl-miot.timer_clean = Time - Timer Clean
+ch.xiaomi.vacuum.c102gl-miot.total_clean_area = Clean Logs - Total Clean Area
+ch.xiaomi.vacuum.c102gl-miot.total_clean_time = Clean Logs - Total Clean Time
+ch.xiaomi.vacuum.c102gl-miot.total_clean_times = Clean Logs - Total Clean Times
+ch.xiaomi.vacuum.c102gl-miot.voice_change_state = Audio - Voice Change State
+ch.xiaomi.vacuum.c102gl-miot.voice_packet_id = Audio - Voice Packet Id
+ch.xiaomi.vacuum.c102gl-miot.volume = Audio - Volume
+ch.xiaomi.vacuum.c102gl-miot.wash_station = Vacuum Extend - Wash Station
+ch.xiaomi.vacuum.c102gl-miot.waterbox_status = Vacuum Extend - Waterbox Status
+ch.xiaomi.vacuum.c102gl-miot.work_mode = Vacuum Extend - Work Mode
ch.xjx.toilet.fan_temp = Fan Temperature
ch.xjx.toilet.seat_temp = Seat Temperature
ch.xjx.toilet.status_led = Night Light
@@ -3864,6 +3913,65 @@ option.xiaomi.aircondition.mc1-miot.mode-2 = Cool
option.xiaomi.aircondition.mc1-miot.mode-3 = Dry
option.xiaomi.aircondition.mc1-miot.mode-4 = Fan
option.xiaomi.aircondition.mc1-miot.mode-5 = Heat
+option.xiaomi.vacuum.c102gl-miot.actions-audio-play-sound = Audio Play Sound
+option.xiaomi.vacuum.c102gl-miot.actions-audio-position = Audio Position
+option.xiaomi.vacuum.c102gl-miot.actions-battery-start-charge = Battery Start Charge
+option.xiaomi.vacuum.c102gl-miot.actions-brush-cleaner-reset-brush-life = Brush Cleaner Reset Brush Life
+option.xiaomi.vacuum.c102gl-miot.actions-filter-reset-filter-life = Filter Reset Filter Life
+option.xiaomi.vacuum.c102gl-miot.actions-map-map-req = Map Map Req
+option.xiaomi.vacuum.c102gl-miot.actions-map-update-map = Map Update Map
+option.xiaomi.vacuum.c102gl-miot.actions-mop-reset-mop-life = Mop Reset Mop Life
+option.xiaomi.vacuum.c102gl-miot.actions-time-delete-timer = Time Delete Timer
+option.xiaomi.vacuum.c102gl-miot.actions-vacuum-extend-start-clean = Vacuum Extend Start Clean
+option.xiaomi.vacuum.c102gl-miot.actions-vacuum-extend-stop-clean = Vacuum Extend Stop Clean
+option.xiaomi.vacuum.c102gl-miot.actions-vacuum-start-dry = Vacuum Start Dry
+option.xiaomi.vacuum.c102gl-miot.actions-vacuum-start-dust-arrest = Vacuum Start Dust Arrest
+option.xiaomi.vacuum.c102gl-miot.actions-vacuum-start-eject = Vacuum Start Eject
+option.xiaomi.vacuum.c102gl-miot.actions-vacuum-start-mop-wash = Vacuum Start Mop Wash
+option.xiaomi.vacuum.c102gl-miot.actions-vacuum-start-room-sweep = Vacuum Start Room Sweep
+option.xiaomi.vacuum.c102gl-miot.actions-vacuum-start-sweep = Vacuum Start Sweep
+option.xiaomi.vacuum.c102gl-miot.actions-vacuum-stop-dry = Vacuum Stop Dry
+option.xiaomi.vacuum.c102gl-miot.actions-vacuum-stop-sweeping = Vacuum Stop Sweeping
+option.xiaomi.vacuum.c102gl-miot.break_point_restart-0 = Close
+option.xiaomi.vacuum.c102gl-miot.break_point_restart-1 = Open
+option.xiaomi.vacuum.c102gl-miot.carpet_press-0 = Close
+option.xiaomi.vacuum.c102gl-miot.carpet_press-1 = Open
+option.xiaomi.vacuum.c102gl-miot.charging_state-1 = Charging
+option.xiaomi.vacuum.c102gl-miot.charging_state-2 = Not Charging
+option.xiaomi.vacuum.c102gl-miot.charging_state-5 = Go Charging
+option.xiaomi.vacuum.c102gl-miot.child_lock-0 = Close
+option.xiaomi.vacuum.c102gl-miot.child_lock-1 = Open
+option.xiaomi.vacuum.c102gl-miot.cleaning_mode-0 = Quiet
+option.xiaomi.vacuum.c102gl-miot.cleaning_mode-1 = Standard
+option.xiaomi.vacuum.c102gl-miot.cleaning_mode-2 = Medium
+option.xiaomi.vacuum.c102gl-miot.cleaning_mode-3 = Strong
+option.xiaomi.vacuum.c102gl-miot.mode-0 = Silent
+option.xiaomi.vacuum.c102gl-miot.mode-1 = Basic
+option.xiaomi.vacuum.c102gl-miot.mode-2 = Strong
+option.xiaomi.vacuum.c102gl-miot.mode-3 = Full Speed
+option.xiaomi.vacuum.c102gl-miot.mop_mode-1 = Low
+option.xiaomi.vacuum.c102gl-miot.mop_mode-2 = Medium
+option.xiaomi.vacuum.c102gl-miot.mop_mode-3 = High
+option.xiaomi.vacuum.c102gl-miot.status-1 = Sweeping
+option.xiaomi.vacuum.c102gl-miot.status-10 = Go Washing
+option.xiaomi.vacuum.c102gl-miot.status-11 = Building
+option.xiaomi.vacuum.c102gl-miot.status-12 = Sweeping And Mopping
+option.xiaomi.vacuum.c102gl-miot.status-13 = Charging Completed
+option.xiaomi.vacuum.c102gl-miot.status-14 = Upgrading
+option.xiaomi.vacuum.c102gl-miot.status-19 = WaterInspecting
+option.xiaomi.vacuum.c102gl-miot.status-2 = Idle
+option.xiaomi.vacuum.c102gl-miot.status-21 = WashingMopPause
+option.xiaomi.vacuum.c102gl-miot.status-22 = DustCollecting
+option.xiaomi.vacuum.c102gl-miot.status-23 = RemoteClean
+option.xiaomi.vacuum.c102gl-miot.status-3 = Paused
+option.xiaomi.vacuum.c102gl-miot.status-4 = Error
+option.xiaomi.vacuum.c102gl-miot.status-5 = Go Charging
+option.xiaomi.vacuum.c102gl-miot.status-6 = Charging
+option.xiaomi.vacuum.c102gl-miot.status-7 = Mopping
+option.xiaomi.vacuum.c102gl-miot.status-8 = Drying
+option.xiaomi.vacuum.c102gl-miot.status-9 = Washing
+option.xiaomi.vacuum.c102gl-miot.waterbox_status-0 = No
+option.xiaomi.vacuum.c102gl-miot.waterbox_status-1 = Yes
option.yeelink.light.ceiling.colorMode-0 = Default
option.yeelink.light.ceiling.colorMode-1 = RGB mode
option.yeelink.light.ceiling.colorMode-2 = CT mode
diff --git a/bundles/org.openhab.binding.miio/src/main/resources/database/xiaomi.vacuum.c102gl-miot.json b/bundles/org.openhab.binding.miio/src/main/resources/database/xiaomi.vacuum.c102gl-miot.json
new file mode 100644
index 00000000000..c84124ac0c8
--- /dev/null
+++ b/bundles/org.openhab.binding.miio/src/main/resources/database/xiaomi.vacuum.c102gl-miot.json
@@ -0,0 +1,1357 @@
+{
+ "deviceMapping": {
+ "id": [
+ "xiaomi.vacuum.c102gl"
+ ],
+ "propertyMethod": "get_properties",
+ "maxProperties": 1,
+ "channels": [
+ {
+ "property": "",
+ "friendlyName": "Actions",
+ "channel": "actions",
+ "type": "String",
+ "stateDescription": {
+ "options": [
+ {
+ "value": "vacuum-start-sweep",
+ "label": "Vacuum Start Sweep"
+ },
+ {
+ "value": "vacuum-stop-sweeping",
+ "label": "Vacuum Stop Sweeping"
+ },
+ {
+ "value": "vacuum-start-room-sweep",
+ "label": "Vacuum Start Room Sweep"
+ },
+ {
+ "value": "vacuum-start-dust-arrest",
+ "label": "Vacuum Start Dust Arrest"
+ },
+ {
+ "value": "vacuum-start-mop-wash",
+ "label": "Vacuum Start Mop Wash"
+ },
+ {
+ "value": "vacuum-start-dry",
+ "label": "Vacuum Start Dry"
+ },
+ {
+ "value": "vacuum-stop-dry",
+ "label": "Vacuum Stop Dry"
+ },
+ {
+ "value": "vacuum-start-eject",
+ "label": "Vacuum Start Eject"
+ },
+ {
+ "value": "battery-start-charge",
+ "label": "Battery Start Charge"
+ },
+ {
+ "value": "brush-cleaner-reset-brush-life",
+ "label": "Brush Cleaner Reset Brush Life"
+ },
+ {
+ "value": "brush-cleaner-reset-brush-life",
+ "label": "Brush Cleaner Reset Brush Life"
+ },
+ {
+ "value": "filter-reset-filter-life",
+ "label": "Filter Reset Filter Life"
+ },
+ {
+ "value": "mop-reset-mop-life",
+ "label": "Mop Reset Mop Life"
+ },
+ {
+ "value": "vacuum-extend-start-clean",
+ "label": "Vacuum Extend Start Clean"
+ },
+ {
+ "value": "vacuum-extend-stop-clean",
+ "label": "Vacuum Extend Stop Clean"
+ },
+ {
+ "value": "map-map-req",
+ "label": "Map Map Req"
+ },
+ {
+ "value": "map-update-map",
+ "label": "Map Update Map"
+ },
+ {
+ "value": "audio-position",
+ "label": "Audio Position"
+ },
+ {
+ "value": "audio-play-sound",
+ "label": "Audio Play Sound"
+ },
+ {
+ "value": "time-delete-timer",
+ "label": "Time Delete Timer"
+ }
+ ]
+ },
+ "refresh": false,
+ "actions": [
+ {
+ "command": "action",
+ "parameterType": "EMPTY",
+ "siid": 2,
+ "aiid": 1,
+ "condition": {
+ "name": "matchValue",
+ "parameters": [
+ {
+ "matchValue": "vacuum-start-sweep"
+ }
+ ]
+ }
+ },
+ {
+ "command": "action",
+ "parameterType": "EMPTY",
+ "siid": 2,
+ "aiid": 2,
+ "condition": {
+ "name": "matchValue",
+ "parameters": [
+ {
+ "matchValue": "vacuum-stop-sweeping"
+ }
+ ]
+ }
+ },
+ {
+ "command": "action",
+ "parameterType": "UNKNOWN",
+ "parameters": [
+ 4.0
+ ],
+ "siid": 2,
+ "aiid": 3,
+ "condition": {
+ "name": "matchValue",
+ "parameters": [
+ {
+ "matchValue": "vacuum-start-room-sweep"
+ }
+ ]
+ }
+ },
+ {
+ "command": "action",
+ "parameterType": "EMPTY",
+ "siid": 2,
+ "aiid": 4,
+ "condition": {
+ "name": "matchValue",
+ "parameters": [
+ {
+ "matchValue": "vacuum-start-dust-arrest"
+ }
+ ]
+ }
+ },
+ {
+ "command": "action",
+ "parameterType": "EMPTY",
+ "siid": 2,
+ "aiid": 6,
+ "condition": {
+ "name": "matchValue",
+ "parameters": [
+ {
+ "matchValue": "vacuum-start-mop-wash"
+ }
+ ]
+ }
+ },
+ {
+ "command": "action",
+ "parameterType": "EMPTY",
+ "siid": 2,
+ "aiid": 8,
+ "condition": {
+ "name": "matchValue",
+ "parameters": [
+ {
+ "matchValue": "vacuum-start-dry"
+ }
+ ]
+ }
+ },
+ {
+ "command": "action",
+ "parameterType": "EMPTY",
+ "siid": 2,
+ "aiid": 9,
+ "condition": {
+ "name": "matchValue",
+ "parameters": [
+ {
+ "matchValue": "vacuum-stop-dry"
+ }
+ ]
+ }
+ },
+ {
+ "command": "action",
+ "parameterType": "EMPTY",
+ "siid": 2,
+ "aiid": 10,
+ "condition": {
+ "name": "matchValue",
+ "parameters": [
+ {
+ "matchValue": "vacuum-start-eject"
+ }
+ ]
+ }
+ },
+ {
+ "command": "action",
+ "parameterType": "EMPTY",
+ "siid": 3,
+ "aiid": 1,
+ "condition": {
+ "name": "matchValue",
+ "parameters": [
+ {
+ "matchValue": "battery-start-charge"
+ }
+ ]
+ }
+ },
+ {
+ "command": "action",
+ "parameterType": "EMPTY",
+ "siid": 9,
+ "aiid": 1,
+ "condition": {
+ "name": "matchValue",
+ "parameters": [
+ {
+ "matchValue": "brush-cleaner-reset-brush-life"
+ }
+ ]
+ }
+ },
+ {
+ "command": "action",
+ "parameterType": "EMPTY",
+ "siid": 10,
+ "aiid": 1,
+ "condition": {
+ "name": "matchValue",
+ "parameters": [
+ {
+ "matchValue": "brush-cleaner-reset-brush-life"
+ }
+ ]
+ }
+ },
+ {
+ "command": "action",
+ "parameterType": "EMPTY",
+ "siid": 11,
+ "aiid": 1,
+ "condition": {
+ "name": "matchValue",
+ "parameters": [
+ {
+ "matchValue": "filter-reset-filter-life"
+ }
+ ]
+ }
+ },
+ {
+ "command": "action",
+ "parameterType": "EMPTY",
+ "siid": 18,
+ "aiid": 1,
+ "condition": {
+ "name": "matchValue",
+ "parameters": [
+ {
+ "matchValue": "mop-reset-mop-life"
+ }
+ ]
+ }
+ },
+ {
+ "command": "action",
+ "parameterType": "UNKNOWN",
+ "parameters": [
+ 10.0
+ ],
+ "siid": 4,
+ "aiid": 1,
+ "condition": {
+ "name": "matchValue",
+ "parameters": [
+ {
+ "matchValue": "vacuum-extend-start-clean"
+ }
+ ]
+ }
+ },
+ {
+ "command": "action",
+ "parameterType": "EMPTY",
+ "siid": 4,
+ "aiid": 2,
+ "condition": {
+ "name": "matchValue",
+ "parameters": [
+ {
+ "matchValue": "vacuum-extend-stop-clean"
+ }
+ ]
+ }
+ },
+ {
+ "command": "action",
+ "parameterType": "UNKNOWN",
+ "parameters": [
+ 2.0
+ ],
+ "siid": 6,
+ "aiid": 1,
+ "condition": {
+ "name": "matchValue",
+ "parameters": [
+ {
+ "matchValue": "map-map-req"
+ }
+ ]
+ }
+ },
+ {
+ "command": "action",
+ "parameterType": "UNKNOWN",
+ "parameters": [
+ 4.0
+ ],
+ "siid": 6,
+ "aiid": 2,
+ "condition": {
+ "name": "matchValue",
+ "parameters": [
+ {
+ "matchValue": "map-update-map"
+ }
+ ]
+ }
+ },
+ {
+ "command": "action",
+ "parameterType": "EMPTY",
+ "siid": 7,
+ "aiid": 1,
+ "condition": {
+ "name": "matchValue",
+ "parameters": [
+ {
+ "matchValue": "audio-position"
+ }
+ ]
+ }
+ },
+ {
+ "command": "action",
+ "parameterType": "EMPTY",
+ "siid": 7,
+ "aiid": 2,
+ "condition": {
+ "name": "matchValue",
+ "parameters": [
+ {
+ "matchValue": "audio-play-sound"
+ }
+ ]
+ }
+ },
+ {
+ "command": "action",
+ "parameterType": "UNKNOWN",
+ "parameters": [
+ 3.0
+ ],
+ "siid": 8,
+ "aiid": 1,
+ "condition": {
+ "name": "matchValue",
+ "parameters": [
+ {
+ "matchValue": "time-delete-timer"
+ }
+ ]
+ }
+ }
+ ],
+ "readmeComment": "Value mapping `[\"vacuum-start-sweep\"\u003d\"Vacuum Start Sweep\",\"vacuum-stop-sweeping\"\u003d\"Vacuum Stop Sweeping\",\"vacuum-start-room-sweep\"\u003d\"Vacuum Start Room Sweep\",\"vacuum-start-dust-arrest\"\u003d\"Vacuum Start Dust Arrest\",\"vacuum-start-mop-wash\"\u003d\"Vacuum Start Mop Wash\",\"vacuum-start-dry\"\u003d\"Vacuum Start Dry\",\"vacuum-stop-dry\"\u003d\"Vacuum Stop Dry\",\"vacuum-start-eject\"\u003d\"Vacuum Start Eject\",\"battery-start-charge\"\u003d\"Battery Start Charge\",\"brush-cleaner-reset-brush-life\"\u003d\"Brush Cleaner Reset Brush Life\",\"brush-cleaner-reset-brush-life\"\u003d\"Brush Cleaner Reset Brush Life\",\"filter-reset-filter-life\"\u003d\"Filter Reset Filter Life\",\"mop-reset-mop-life\"\u003d\"Mop Reset Mop Life\",\"vacuum-extend-start-clean\"\u003d\"Vacuum Extend Start Clean\",\"vacuum-extend-stop-clean\"\u003d\"Vacuum Extend Stop Clean\",\"map-map-req\"\u003d\"Map Map Req\",\"map-update-map\"\u003d\"Map Update Map\",\"audio-position\"\u003d\"Audio Position\",\"audio-play-sound\"\u003d\"Audio Play Sound\",\"time-delete-timer\"\u003d\"Time Delete Timer\"]`"
+ },
+ {
+ "property": "status",
+ "siid": 2,
+ "piid": 1,
+ "friendlyName": "Robot Cleaner - Status",
+ "channel": "status",
+ "type": "Number",
+ "stateDescription": {
+ "readOnly": true,
+ "options": [
+ {
+ "value": "1",
+ "label": "Sweeping"
+ },
+ {
+ "value": "2",
+ "label": "Idle"
+ },
+ {
+ "value": "3",
+ "label": "Paused"
+ },
+ {
+ "value": "4",
+ "label": "Error"
+ },
+ {
+ "value": "5",
+ "label": "Go Charging"
+ },
+ {
+ "value": "6",
+ "label": "Charging"
+ },
+ {
+ "value": "7",
+ "label": "Mopping"
+ },
+ {
+ "value": "8",
+ "label": "Drying"
+ },
+ {
+ "value": "9",
+ "label": "Washing"
+ },
+ {
+ "value": "10",
+ "label": "Go Washing"
+ },
+ {
+ "value": "11",
+ "label": "Building"
+ },
+ {
+ "value": "12",
+ "label": "Sweeping And Mopping"
+ },
+ {
+ "value": "13",
+ "label": "Charging Completed"
+ },
+ {
+ "value": "14",
+ "label": "Upgrading"
+ },
+ {
+ "value": "19",
+ "label": "WaterInspecting"
+ },
+ {
+ "value": "21",
+ "label": "WashingMopPause"
+ },
+ {
+ "value": "22",
+ "label": "DustCollecting"
+ },
+ {
+ "value": "23",
+ "label": "RemoteClean"
+ }
+ ]
+ },
+ "refresh": true,
+ "actions": [],
+ "readmeComment": "Value mapping `[\"1\"\u003d\"Sweeping\",\"2\"\u003d\"Idle\",\"3\"\u003d\"Paused\",\"4\"\u003d\"Error\",\"5\"\u003d\"Go Charging\",\"6\"\u003d\"Charging\",\"7\"\u003d\"Mopping\",\"8\"\u003d\"Drying\",\"9\"\u003d\"Washing\",\"10\"\u003d\"Go Washing\",\"11\"\u003d\"Building\",\"12\"\u003d\"Sweeping And Mopping\",\"13\"\u003d\"Charging Completed\",\"14\"\u003d\"Upgrading\",\"19\"\u003d\"WaterInspecting\",\"21\"\u003d\"WashingMopPause\",\"22\"\u003d\"DustCollecting\",\"23\"\u003d\"RemoteClean\"]`"
+ },
+ {
+ "property": "fault",
+ "siid": 2,
+ "piid": 2,
+ "friendlyName": "Robot Cleaner - Device Fault",
+ "channel": "fault",
+ "type": "Number",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": 255,
+ "step": 1,
+ "pattern": "%.0f",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "mode",
+ "siid": 2,
+ "piid": 3,
+ "friendlyName": "Robot Cleaner - Mode",
+ "channel": "mode",
+ "type": "Number",
+ "stateDescription": {
+ "options": [
+ {
+ "value": "0",
+ "label": "Silent"
+ },
+ {
+ "value": "1",
+ "label": "Basic"
+ },
+ {
+ "value": "2",
+ "label": "Strong"
+ },
+ {
+ "value": "3",
+ "label": "Full Speed"
+ }
+ ]
+ },
+ "refresh": true,
+ "actions": [
+ {
+ "command": "set_properties",
+ "parameterType": "NUMBER"
+ }
+ ],
+ "readmeComment": "Value mapping `[\"0\"\u003d\"Silent\",\"1\"\u003d\"Basic\",\"2\"\u003d\"Strong\",\"3\"\u003d\"Full Speed\"]`"
+ },
+ {
+ "property": "dry-left-time",
+ "siid": 2,
+ "piid": 5,
+ "friendlyName": "Robot Cleaner - Dry Left Time",
+ "channel": "dry_left_time",
+ "type": "Number:Time",
+ "unit": "minutes",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": 9999,
+ "step": 1,
+ "pattern": "%.0f %unit%",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "battery-level",
+ "siid": 3,
+ "piid": 1,
+ "friendlyName": "Battery - Battery Level",
+ "channel": "battery_level",
+ "type": "Number:Dimensionless",
+ "unit": "percentage",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": 100,
+ "step": 1,
+ "pattern": "%.0f %unit%",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "charging-state",
+ "siid": 3,
+ "piid": 2,
+ "friendlyName": "Battery - Charging State",
+ "channel": "charging_state",
+ "type": "Number",
+ "stateDescription": {
+ "readOnly": true,
+ "options": [
+ {
+ "value": "1",
+ "label": "Charging"
+ },
+ {
+ "value": "2",
+ "label": "Not Charging"
+ },
+ {
+ "value": "5",
+ "label": "Go Charging"
+ }
+ ]
+ },
+ "refresh": true,
+ "actions": [],
+ "readmeComment": "Value mapping `[\"1\"\u003d\"Charging\",\"2\"\u003d\"Not Charging\",\"5\"\u003d\"Go Charging\"]`"
+ },
+ {
+ "property": "brush-left-time",
+ "siid": 9,
+ "piid": 1,
+ "friendlyName": "Main Cleaning Brush - Brush Left Time",
+ "channel": "brush_left_time",
+ "type": "Number:Time",
+ "unit": "hours",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": 300,
+ "step": 1,
+ "pattern": "%.0f %unit%",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "brush-life-level",
+ "siid": 9,
+ "piid": 2,
+ "friendlyName": "Main Cleaning Brush - Brush Life Level",
+ "channel": "brush_life_level",
+ "type": "Number:Dimensionless",
+ "unit": "percentage",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": 100,
+ "step": 1,
+ "pattern": "%.0f %unit%",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "brush-left-time1",
+ "siid": 10,
+ "piid": 1,
+ "friendlyName": "Side Cleaning Brush - Brush Left Time",
+ "channel": "brush_left_time1",
+ "type": "Number:Time",
+ "unit": "hours",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": 200,
+ "step": 1,
+ "pattern": "%.0f %unit%",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "brush-life-level1",
+ "siid": 10,
+ "piid": 2,
+ "friendlyName": "Side Cleaning Brush - Brush Life Level",
+ "channel": "brush_life_level1",
+ "type": "Number:Dimensionless",
+ "unit": "percentage",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": 100,
+ "step": 1,
+ "pattern": "%.0f %unit%",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "filter-life-level",
+ "siid": 11,
+ "piid": 1,
+ "friendlyName": "Filter - Filter Life Level",
+ "channel": "filter_life_level",
+ "type": "Number:Dimensionless",
+ "unit": "percentage",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": 100,
+ "step": 1,
+ "pattern": "%.0f %unit%",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "filter-left-time",
+ "siid": 11,
+ "piid": 2,
+ "friendlyName": "Filter - Filter Left Time",
+ "channel": "filter_left_time",
+ "type": "Number:Time",
+ "unit": "hours",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": 1000,
+ "step": 1,
+ "pattern": "%.0f %unit%",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "mop-life-level",
+ "siid": 18,
+ "piid": 1,
+ "friendlyName": "Mop - Mop Life Level",
+ "channel": "mop_life_level",
+ "type": "Number:Dimensionless",
+ "unit": "percentage",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": 100,
+ "step": 1,
+ "pattern": "%.0f %unit%",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "mop-left-time",
+ "siid": 18,
+ "piid": 2,
+ "friendlyName": "Mop - Mop Left Time",
+ "channel": "mop_left_time",
+ "type": "Number:Time",
+ "unit": "hours",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": 9999,
+ "step": 1,
+ "pattern": "%.0f %unit%",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "work-mode",
+ "siid": 4,
+ "piid": 1,
+ "friendlyName": "Vacuum Extend - Work Mode",
+ "channel": "work_mode",
+ "type": "Number",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": 50,
+ "step": 1,
+ "pattern": "%.0f",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "cleaning-time",
+ "siid": 4,
+ "piid": 2,
+ "friendlyName": "Vacuum Extend - Cleaning Time",
+ "channel": "cleaning_time",
+ "type": "Number:Time",
+ "unit": "minutes",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": 32767,
+ "step": 1,
+ "pattern": "%.0f %unit%",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "cleaning-area",
+ "siid": 4,
+ "piid": 3,
+ "friendlyName": "Vacuum Extend - Cleaning Area",
+ "channel": "cleaning_area",
+ "type": "Number",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": 32767,
+ "step": 1,
+ "pattern": "%.0f",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "cleaning-mode",
+ "siid": 4,
+ "piid": 4,
+ "friendlyName": "Vacuum Extend - Cleaning Mode",
+ "channel": "cleaning_mode",
+ "type": "Number",
+ "stateDescription": {
+ "readOnly": true,
+ "options": [
+ {
+ "value": "0",
+ "label": "Quiet"
+ },
+ {
+ "value": "1",
+ "label": "Standard"
+ },
+ {
+ "value": "2",
+ "label": "Medium"
+ },
+ {
+ "value": "3",
+ "label": "Strong"
+ }
+ ]
+ },
+ "refresh": true,
+ "actions": [],
+ "readmeComment": "Value mapping `[\"0\"\u003d\"Quiet\",\"1\"\u003d\"Standard\",\"2\"\u003d\"Medium\",\"3\"\u003d\"Strong\"]`"
+ },
+ {
+ "property": "mop-mode",
+ "siid": 4,
+ "piid": 5,
+ "friendlyName": "Vacuum Extend - Mop Mode",
+ "channel": "mop_mode",
+ "type": "Number",
+ "stateDescription": {
+ "options": [
+ {
+ "value": "1",
+ "label": "Low"
+ },
+ {
+ "value": "2",
+ "label": "Medium"
+ },
+ {
+ "value": "3",
+ "label": "High"
+ }
+ ]
+ },
+ "refresh": true,
+ "actions": [
+ {
+ "command": "set_properties",
+ "parameterType": "STRING"
+ }
+ ],
+ "readmeComment": "Value mapping `[\"1\"\u003d\"Low\",\"2\"\u003d\"Medium\",\"3\"\u003d\"High\"]`"
+ },
+ {
+ "property": "waterbox-status",
+ "siid": 4,
+ "piid": 6,
+ "friendlyName": "Vacuum Extend - Waterbox Status",
+ "channel": "waterbox_status",
+ "type": "Number",
+ "stateDescription": {
+ "readOnly": true,
+ "options": [
+ {
+ "value": "0",
+ "label": "No"
+ },
+ {
+ "value": "1",
+ "label": "Yes"
+ }
+ ]
+ },
+ "refresh": true,
+ "actions": [],
+ "readmeComment": "Value mapping `[\"0\"\u003d\"No\",\"1\"\u003d\"Yes\"]`"
+ },
+ {
+ "property": "task-status",
+ "siid": 4,
+ "piid": 7,
+ "friendlyName": "Vacuum Extend - Task Status",
+ "channel": "task_status",
+ "type": "Number",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": 255,
+ "step": 1,
+ "pattern": "%.0f",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "clean-extend-data",
+ "siid": 4,
+ "piid": 10,
+ "friendlyName": "Vacuum Extend - Clean Extend Data",
+ "channel": "clean_extend_data",
+ "type": "String",
+ "refresh": false,
+ "actions": [
+ {
+ "command": "set_properties",
+ "parameterType": "STRING"
+ }
+ ]
+ },
+ {
+ "property": "break-point-restart",
+ "siid": 4,
+ "piid": 11,
+ "friendlyName": "Vacuum Extend - Break Point Restart",
+ "channel": "break_point_restart",
+ "type": "Number",
+ "stateDescription": {
+ "options": [
+ {
+ "value": "0",
+ "label": "Close"
+ },
+ {
+ "value": "1",
+ "label": "Open"
+ }
+ ]
+ },
+ "refresh": true,
+ "actions": [
+ {
+ "command": "set_properties",
+ "parameterType": "NUMBER"
+ }
+ ],
+ "readmeComment": "Value mapping `[\"0\"\u003d\"Close\",\"1\"\u003d\"Open\"]`"
+ },
+ {
+ "property": "carpet-press",
+ "siid": 4,
+ "piid": 12,
+ "friendlyName": "Vacuum Extend - Carpet Press",
+ "channel": "carpet_press",
+ "type": "Number",
+ "stateDescription": {
+ "options": [
+ {
+ "value": "0",
+ "label": "Close"
+ },
+ {
+ "value": "1",
+ "label": "Open"
+ }
+ ]
+ },
+ "refresh": true,
+ "actions": [
+ {
+ "command": "set_properties",
+ "parameterType": "NUMBER"
+ }
+ ],
+ "readmeComment": "Value mapping `[\"0\"\u003d\"Close\",\"1\"\u003d\"Open\"]`"
+ },
+ {
+ "property": "serial-number",
+ "siid": 4,
+ "piid": 14,
+ "friendlyName": "Vacuum Extend - Serial Number",
+ "channel": "serial_number",
+ "type": "String",
+ "stateDescription": {
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "remote-state",
+ "siid": 4,
+ "piid": 15,
+ "friendlyName": "Vacuum Extend - Remote State",
+ "channel": "remote_state",
+ "type": "String",
+ "refresh": false,
+ "actions": [
+ {
+ "command": "set_properties",
+ "parameterType": "STRING"
+ }
+ ]
+ },
+ {
+ "property": "clean-rags-tip",
+ "siid": 4,
+ "piid": 16,
+ "friendlyName": "Vacuum Extend - Clean Rags Tip",
+ "channel": "clean_rags_tip",
+ "type": "Number:Time",
+ "unit": "minutes",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": 120,
+ "step": 1,
+ "pattern": "%.0f %unit%"
+ },
+ "refresh": true,
+ "actions": [
+ {
+ "command": "set_properties",
+ "parameterType": "STRING"
+ }
+ ]
+ },
+ {
+ "property": "keep-sweeper-time",
+ "siid": 4,
+ "piid": 17,
+ "friendlyName": "Vacuum Extend - Keep Sweeper Time",
+ "channel": "keep_sweeper_time",
+ "type": "Number:Time",
+ "unit": "minutes",
+ "stateDescription": {
+ "minimum": -1,
+ "maximum": 1000000,
+ "step": 1,
+ "pattern": "%.0f %unit%",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "faults",
+ "siid": 4,
+ "piid": 18,
+ "friendlyName": "Vacuum Extend - Faults",
+ "channel": "faults",
+ "type": "String",
+ "stateDescription": {
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "nation-matched",
+ "siid": 4,
+ "piid": 19,
+ "friendlyName": "Vacuum Extend - Nation Matched",
+ "channel": "nation_matched",
+ "type": "String",
+ "stateDescription": {
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "relocation-status",
+ "siid": 4,
+ "piid": 20,
+ "friendlyName": "Vacuum Extend - Relocation Status",
+ "channel": "relocation_status",
+ "type": "Number",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": 1000000,
+ "step": 1,
+ "pattern": "%.0f",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "wash-station",
+ "siid": 4,
+ "piid": 25,
+ "friendlyName": "Vacuum Extend - Wash Station",
+ "channel": "wash_station",
+ "type": "Number",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": 255,
+ "step": 1,
+ "pattern": "%.0f",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "child-lock",
+ "siid": 4,
+ "piid": 27,
+ "friendlyName": "Vacuum Extend - Child Lock",
+ "channel": "child_lock",
+ "type": "Number",
+ "stateDescription": {
+ "options": [
+ {
+ "value": "0",
+ "label": "Close"
+ },
+ {
+ "value": "1",
+ "label": "Open"
+ }
+ ]
+ },
+ "refresh": true,
+ "actions": [
+ {
+ "command": "set_properties",
+ "parameterType": "NUMBER"
+ }
+ ],
+ "readmeComment": "Value mapping `[\"0\"\u003d\"Close\",\"1\"\u003d\"Open\"]`"
+ },
+ {
+ "property": "clean-cancel",
+ "siid": 4,
+ "piid": 30,
+ "friendlyName": "Vacuum Extend - Clean Cancel",
+ "channel": "clean_cancel",
+ "type": "Number",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": 255,
+ "step": 1,
+ "pattern": "%.0f",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "enable",
+ "siid": 5,
+ "piid": 1,
+ "friendlyName": "Do Not Disturb - Enable",
+ "channel": "enable",
+ "type": "Switch",
+ "refresh": true,
+ "actions": [
+ {
+ "command": "set_properties",
+ "parameterType": "ONOFFBOOL"
+ }
+ ]
+ },
+ {
+ "property": "start-time",
+ "siid": 5,
+ "piid": 2,
+ "friendlyName": "Do Not Disturb - Start Time",
+ "channel": "start_time",
+ "type": "String",
+ "refresh": true,
+ "actions": [
+ {
+ "command": "set_properties",
+ "parameterType": "STRING"
+ }
+ ]
+ },
+ {
+ "property": "end-time",
+ "siid": 5,
+ "piid": 3,
+ "friendlyName": "Do Not Disturb - End Time",
+ "channel": "end_time",
+ "type": "String",
+ "refresh": true,
+ "actions": [
+ {
+ "command": "set_properties",
+ "parameterType": "STRING"
+ }
+ ]
+ },
+ {
+ "property": "volume",
+ "siid": 7,
+ "piid": 1,
+ "friendlyName": "Audio - Volume",
+ "channel": "volume",
+ "type": "Number",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": 100,
+ "step": 1,
+ "pattern": "%.0f"
+ },
+ "refresh": true,
+ "actions": [
+ {
+ "command": "set_properties",
+ "parameterType": "NUMBER"
+ }
+ ]
+ },
+ {
+ "property": "voice-packet-id",
+ "siid": 7,
+ "piid": 2,
+ "friendlyName": "Audio - Voice Packet Id",
+ "channel": "voice_packet_id",
+ "type": "String",
+ "refresh": true,
+ "actions": [
+ {
+ "command": "set_properties",
+ "parameterType": "STRING"
+ }
+ ]
+ },
+ {
+ "property": "voice-change-state",
+ "siid": 7,
+ "piid": 3,
+ "friendlyName": "Audio - Voice Change State",
+ "channel": "voice_change_state",
+ "type": "String",
+ "stateDescription": {
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "set-voice",
+ "siid": 7,
+ "piid": 4,
+ "friendlyName": "Audio - Set Voice",
+ "channel": "set_voice",
+ "type": "String",
+ "refresh": false,
+ "actions": [
+ {
+ "command": "set_properties",
+ "parameterType": "STRING"
+ }
+ ]
+ },
+ {
+ "property": "time-zone",
+ "siid": 8,
+ "piid": 1,
+ "friendlyName": "Time - Time Zone",
+ "channel": "time_zone",
+ "type": "String",
+ "stateDescription": {
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "timer-clean",
+ "siid": 8,
+ "piid": 2,
+ "friendlyName": "Time - Timer Clean",
+ "channel": "timer_clean",
+ "type": "String",
+ "refresh": true,
+ "actions": [
+ {
+ "command": "set_properties",
+ "parameterType": "STRING"
+ }
+ ]
+ },
+ {
+ "property": "first-clean-time",
+ "siid": 12,
+ "piid": 1,
+ "friendlyName": "Clean Logs - First Clean Time",
+ "channel": "first_clean_time",
+ "type": "Number",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": -1,
+ "step": 1,
+ "pattern": "%.0f",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "total-clean-time",
+ "siid": 12,
+ "piid": 2,
+ "friendlyName": "Clean Logs - Total Clean Time",
+ "channel": "total_clean_time",
+ "type": "Number:Time",
+ "unit": "minutes",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": -1,
+ "step": 1,
+ "pattern": "%.0f %unit%",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "total-clean-times",
+ "siid": 12,
+ "piid": 3,
+ "friendlyName": "Clean Logs - Total Clean Times",
+ "channel": "total_clean_times",
+ "type": "Number",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": -1,
+ "step": 1,
+ "pattern": "%.0f",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ },
+ {
+ "property": "total-clean-area",
+ "siid": 12,
+ "piid": 4,
+ "friendlyName": "Clean Logs - Total Clean Area",
+ "channel": "total_clean_area",
+ "type": "Number",
+ "stateDescription": {
+ "minimum": 0,
+ "maximum": -1,
+ "step": 1,
+ "pattern": "%.0f",
+ "readOnly": true
+ },
+ "refresh": true,
+ "actions": []
+ }
+ ],
+ "experimental": false
+ }
+}