From 536fc5e7f0fca3866cbe89f3d0bf5c3379d2a6c8 Mon Sep 17 00:00:00 2001 From: Marcel Date: Tue, 29 Nov 2022 12:26:38 +0100 Subject: [PATCH] [miio] cloud login issues improvement (#13715) * [miio] cloud login issues improvement * Small change in debug loggin is login issues are expected * Additional trouble shooting steps in readme * Fix duplicate name in device list preventing readme maker running * Catch a json exception in readme maker close #13611 close #7459 * [miio] fix strange/foreign characters in readme Signed-off-by: Marcel Verpaalen --- .../org.openhab.binding.miio/README.base.md | 10 +- bundles/org.openhab.binding.miio/README.md | 81 +- .../miio/internal/cloud/CloudLogin1DTO.java | 122 + .../miio/internal/cloud/MiCloudConnector.java | 12 +- .../resources/OH-INF/i18n/basic.properties | 27 +- .../database/dreame.vacuum.p2029-miot.json | 19 +- .../database/ijai.vacuum.v19-miot.json | 2194 ++++++++--------- .../database/mijia.vacuum.v2-miot.json | 18 +- .../src/main/resources/misc/device_names.json | 1 - .../binding/miio/internal/ReadmeHelper.java | 3 +- 10 files changed, 1307 insertions(+), 1180 deletions(-) create mode 100644 bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/cloud/CloudLogin1DTO.java diff --git a/bundles/org.openhab.binding.miio/README.base.md b/bundles/org.openhab.binding.miio/README.base.md index ef881f4440f1d..81b2dda9ce895 100644 --- a/bundles/org.openhab.binding.miio/README.base.md +++ b/bundles/org.openhab.binding.miio/README.base.md @@ -172,7 +172,15 @@ Firmware of the device don't accept commands coming from other subnets. Set the communication in the thing configuration to 'cloud'. _Cloud connectivity is not working_ -The most common problem is a wrong userId/password. Try to fix your userId/password. +The most common problem is a wrong or missing userId/password. Update your Xiaomi cloud userId & password in the [miio binding configuration screen](#binding-configuration). +If the problem persists you can try the following: + +* Xiaomi Account verification might be needed. For some users login by the binding is unsuccessful as account verification is required, but the binding currently has no possibilities to handle this. +In order to pass validation your (openHAB server) ip need to be validated/confirmed. +Browse to [https://account.xiaomi.com/](https://account.xiaomi.com/) and logon to your account. Note: use the same external ip address as your openHAB server, e.g. you may need to disable your VPN. +* If above is not possible or fails, You can try to find in the binding debug logging a `location url`. Try to login using this url (just after it fails) with your browser. +* Several users also reported success by resetting their Xiaomi password. + If it still fails, you're bit out of luck. You may try to restart openHAB (not just the binding) to clean the cookies. As the cloud logon process is still little understood, your only luck might be to enable trace logging and see if you can translate the Chinese error code that it returns. diff --git a/bundles/org.openhab.binding.miio/README.md b/bundles/org.openhab.binding.miio/README.md index 9ecfa668187fd..934edad58a0a7 100644 --- a/bundles/org.openhab.binding.miio/README.md +++ b/bundles/org.openhab.binding.miio/README.md @@ -172,7 +172,15 @@ Firmware of the device don't accept commands coming from other subnets. Set the communication in the thing configuration to 'cloud'. _Cloud connectivity is not working_ -The most common problem is a wrong userId/password. Try to fix your userId/password. +The most common problem is a wrong or missing userId/password. Update your Xiaomi cloud userId & password in the [miio binding configuration screen](#binding-configuration). +If the problem persists you can try the following: + +* Xiaomi Account verification might be needed. For some users login by the binding is unsuccessful as account verification is required, but the binding currently has no possibilities to handle this. +In order to pass validation your (openHAB server) ip need to be validated/confirmed. +Browse to [https://account.xiaomi.com/](https://account.xiaomi.com/) and logon to your account. Note: use the same external ip address as your openHAB server, e.g. you may need to disable your VPN. +* If above is not possible or fails, You can try to find in the binding debug logging a `location url`. Try to login using this url (just after it fails) with your browser. +* Several users also reported success by resetting their Xiaomi password. + If it still fails, you're bit out of luck. You may try to restart openHAB (not just the binding) to clean the cookies. As the cloud logon process is still little understood, your only luck might be to enable trace logging and see if you can translate the Chinese error code that it returns. @@ -347,6 +355,17 @@ Currently the miio binding supports more than 340 different models. | Roborock S7 | miio:vacuum | [roborock.vacuum.a15](#roborock-vacuum-a15) | Yes | | | Roborock S4 Max | miio:vacuum | [roborock.vacuum.a19](#roborock-vacuum-a19) | Yes | | | Roborock T7S Plus | miio:vacuum | [roborock.vacuum.a23](#roborock-vacuum-a23) | Yes | | +| Roborock G10S Pro | miio:vacuum | [roborock.vacuum.a26](#roborock-vacuum-a26) | Yes | | +| Roborock S7 MaxV | miio:vacuum | [roborock.vacuum.a27](#roborock-vacuum-a27) | Yes | | +| Roborock G10 | miio:vacuum | [roborock.vacuum.a29](#roborock-vacuum-a29) | Yes | | +| Roborock G10 | miio:vacuum | [roborock.vacuum.a30](#roborock-vacuum-a30) | Yes | | +| Roborock Q5 | miio:vacuum | [roborock.vacuum.a34](#roborock-vacuum-a34) | Yes | | +| Roborock T8 | miio:vacuum | [roborock.vacuum.a37](#roborock-vacuum-a37) | Yes | | +| Roborock Q7 Max | miio:vacuum | [roborock.vacuum.a38](#roborock-vacuum-a38) | Yes | | +| Roborock Q7 | miio:vacuum | [roborock.vacuum.a40](#roborock-vacuum-a40) | Yes | | +| Roborock G10S | miio:vacuum | [roborock.vacuum.a46](#roborock-vacuum-a46) | Yes | | +| Roborock T8 Plus | miio:vacuum | [roborock.vacuum.a52](#roborock-vacuum-a52) | Yes | | +| Roborock S7 Pro Ultra | miio:vacuum | [roborock.vacuum.a62](#roborock-vacuum-a62) | Yes | | | Xiaowa C1 | miio:vacuum | [roborock.vacuum.c1](#roborock-vacuum-c1) | Yes | | | Roborock Xiaowa E Series Vacuum v2 | miio:unsupported | roborock.vacuum.e2 | No | | | Mi Robot Vacuum 1S | miio:vacuum | [roborock.vacuum.m1s](#roborock-vacuum-m1s) | Yes | | @@ -1259,7 +1278,7 @@ Note, not all the values need to be in the json file, e.g. a subset of the param | Channel | Type | Description | Comment | |----------------------|----------------------|------------------------------------------|------------| -| actions | String | Actions | | +| actions | String | Actions | Value mapping `["vacuum-start-sweep"="Vacuum Start Sweep","vacuum-stop-sweeping"="Vacuum Stop Sweeping","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","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"]` | | fault | Number | Robot Cleaner - Device Fault | | | battery_level | Number:Dimensionless | Battery - Battery Level | | @@ -1701,8 +1720,8 @@ Note, not all the values need to be in the json file, e.g. a subset of the param | Channel | Type | Description | Comment | |----------------------|----------------------|------------------------------------------|------------| -| actions | String | Robot Cleaner - Actions | | -| advanced_actions | String | Robot Cleaner - Advanced Actions | | +| actions | String | Robot Cleaner - Actions | Value mapping `["vacuum-start-sweep"="Start","vacuum-start-sweep-mop"="Start Sweep+Mop","vacuum-start-only-sweep"="Start Sweep","vacuum-start-only-mop"="Start Mop","vacuum-dock"="Dock","vacuum-stop-sweeping"="Pause","vacuum-start-room-sweep"="Start Room Sweep"]` | +| advanced_actions | String | Robot Cleaner - Advanced Actions | Value mapping `["sweep-reset-consumable"="Sweep Reset Consumable","sweep-set-calibration"="Sweep Set Calibration","sweep-set-room-clean"="Sweep Set Room Clean","sweep-set-preference-clean"="Sweep Set Preference Clean","sweep-get-preference-clean"="Sweep Get Preference Clean","sweep-set-preference-type"="Sweep Set Preference Type","sweep-set-go-charging"="Sweep Set Go Charging","sweep-erase-preference"="Sweep Erase Preference","sweep-set-preference-ii"="Sweep Set Preference Ii","sweep-get-preference-ii"="Sweep Get Preference Ii","order-add"="Order Add","order-del"="Order Del","order-get"="Order Get","order-add-ii"="Order Add Ii","order-get-map-order-count"="Order Get Map Order Count","order-add-iii"="Order Add Iii","point-zone-start-point-clean"="Point Zone Start Point Clean","point-zone-pause-point-clean"="Point Zone Pause Point Clean","point-zone-start-zone-clean"="Point Zone Start Zone Clean","point-zone-pause-zone-clean"="Point Zone Pause Zone Clean","point-zone-set-beauty-wall"="Point Zone Set Beauty Wall","point-zone-set-virtual-wall"="Point Zone Set Virtual Wall","point-zone-set-zone-point"="Point Zone Set Zone Point","point-zone-start-point-clean-ii"="Point Zone Start Point Clean Ii","map-get-map-list"="Map Get Map List","map-upload-by-mapid"="Map Upload By Mapid","map-set-cur-map"="Map Set Cur Map","map-del-map"="Map Del Map","map-rename-map"="Map Rename Map","map-upload-by-maptype"="Map Upload By Maptype","map-rename-room"="Map Rename Room","map-arrange-room"="Map Arrange Room","map-split-room"="Map Split Room","map-reset-map"="Map Reset Map","map-build-new-map"="Map Build New Map","map-get-cur-path"="Map Get Cur Path","map-get-map-room-list"="Map Get Map Room List","map-upload-by-mapid-ii"="Map Upload By Mapid Ii","map-upload-by-maptype-ii"="Map Upload By Maptype Ii","map-reset-map-ii"="Map Reset Map Ii","map-build-map-ii"="Map Build Map Ii","map-set-mijia-room-list"="Map Set Mijia Room List","disturb-set-notdisturb"="Disturb Set Notdisturb","language-download-voice"="Language Download Voice","language-get-download-status"="Language Get Download Status"]` | | status | Number | Robot Cleaner - Status | Value mapping `["0"="Sleep","1"="Idle","2"="Paused","3"="Go Charging","4"="Charging","5"="Sweeping","6"="Sweeping and Mopping","7"="Mopping","8"="Upgrading"]` | | fault | Number | Robot Cleaner - Device Fault | | | mode | Number | Robot Cleaner - Mode | Value mapping `["0"="Sweep","1"="Sweep And Mop","2"="Mop"]` | @@ -2013,7 +2032,7 @@ Note, not all the values need to be in the json file, e.g. a subset of the param | total-clean-area | Number:Area | Clean Record - Total Clean Area | | | total-clean-time | Number | Clean Record - Total Clean Time | | | total-clean-count | Number | Clean Record - Total Clean Count | | -| language | Number | Language - Language | Value mapping `["0"="English","1"="简体中文","2"="Español","3"="Русский","4"="Italiano","5"="Français","6"="Deutsch","7"="한국어","8"="Polski"]` | +| language | Number | Language - Language | Value mapping `["0"="English","1"="Chinese","2"="Spanish","3"="Russian","4"="Italian","5"="French","6"="German","7"="Korean","8"="Polish"]` | | not-disturb-switch | Switch | Language - Not Disturb Switch | | | mop-status | Number | Other Status - Mop Status | Value mapping `["0"="Mop Uninstall","1"="Mop Install"]` | @@ -2654,14 +2673,15 @@ Note, not all the values need to be in the json file, e.g. a subset of the param | Channel | Type | Description | Comment | |----------------------|----------------------|------------------------------------------|------------| | power | Switch | Power | | -| powerUsage | Number | Power Consumption | | +| mode | String | Mode | Value mapping `["normal"="Normal","green"="Green"]` | +| powerUsage | Number:Power | Power Consumption | | +| voltage | Number:ElectricPotential | Voltage | | | led | Switch | wifi LED | | -| power_price | Number | power_price | | -| current | Number | Current | | +| power_price | Number | Power Price | | +| power_factor | Number | Power Factor | | +| current | Number:ElectricCurrent | Current | | +| elec_leakage | Number:ElectricCurrent | Electic Leakage | | | temperature | Number:Temperature | Temperature | | -| lp_autooff | Number | Low Power Auto Off | | -| lp_autooff_delay | Number | Low Power Limit Time | | -| lp_threshold | Number | Low Power Threshold | | ### ROIDMI EVE vacuum (roidmi.vacuum.v60) Channels @@ -5243,15 +5263,21 @@ Note, not all the values need to be in the json file, e.g. a subset of the param | Channel | Type | Description | Comment | |----------------------|----------------------|------------------------------------------|------------| | power | Switch | Power | | -| mode | String | Mode | | +| mode | String | Mode | Value mapping `["auto"="Auto","favorite"="Favorite","silent"="Silent","high"="High","medium"="Medium","idle"="Idle","strong"="Strong"]` | | humidity | Number:Dimensionless | Humidity | | | aqi | Number | Air Quality Index | | -| brightness | Dimmer | Brightness | | +| averageaqi | Number | Average Air Quality Index | | | led | Switch | LED Status | | -| act_det | Switch | Air AutoDetect | | | buzzer | Switch | Buzzer Status | | | filtermaxlife | Number | Filter Max Life | | -| filterlive | Number | Filter Life | | +| filterhours | Number:Time | Filter Hours used | | +| usedhours | Number:Time | Run Time | | +| motorspeed | Number | Motor Speed | | +| filterlife | Number | Filter Life | | +| favoritelevel | Number | Favorite Level | Value mapping `["0"="Favorite 0","1"="Favorite 1","2"="Favorite 2","3"="Favorite 3","4"="Favorite 4","5"="Favorite 5","6"="Favorite 6","7"="Favorite 7","8"="Favorite 8","9"="Favorite 9","10"="Favorite 10","11"="Favorite 11","12"="Favorite 13","13"="Favorite 13","14"="Favorite 14","15"="Favorite 15"]` | +| temperature | Number:Temperature | Temperature | | +| purifyvolume | Number:Volume | Purified Volume | | +| childlock | Switch | Child Lock | | ### Mi Air Purifier v2 (zhimi.airpurifier.v2) Channels @@ -8331,14 +8357,15 @@ note: Autogenerated example. Replace the id (powerstrip) in the channel with you ``` Group G_powerstrip "CHINGMI Smart Power Strip v1" Switch power "Power" (G_powerstrip) {channel="miio:basic:powerstrip:power"} -Number powerUsage "Power Consumption" (G_powerstrip) {channel="miio:basic:powerstrip:powerUsage"} +String mode "Mode" (G_powerstrip) {channel="miio:basic:powerstrip:mode"} +Number:Power powerUsage "Power Consumption" (G_powerstrip) {channel="miio:basic:powerstrip:powerUsage"} +Number:ElectricPotential voltage "Voltage" (G_powerstrip) {channel="miio:basic:powerstrip:voltage"} Switch led "wifi LED" (G_powerstrip) {channel="miio:basic:powerstrip:led"} -Number power_price "power_price" (G_powerstrip) {channel="miio:basic:powerstrip:power_price"} -Number current "Current" (G_powerstrip) {channel="miio:basic:powerstrip:current"} +Number power_price "Power Price" (G_powerstrip) {channel="miio:basic:powerstrip:power_price"} +Number power_factor "Power Factor" (G_powerstrip) {channel="miio:basic:powerstrip:power_factor"} +Number:ElectricCurrent current "Current" (G_powerstrip) {channel="miio:basic:powerstrip:current"} +Number:ElectricCurrent elec_leakage "Electic Leakage" (G_powerstrip) {channel="miio:basic:powerstrip:elec_leakage"} Number:Temperature temperature "Temperature" (G_powerstrip) {channel="miio:basic:powerstrip:temperature"} -Number lp_autooff "Low Power Auto Off" (G_powerstrip) {channel="miio:basic:powerstrip:lp_autooff"} -Number lp_autooff_delay "Low Power Limit Time" (G_powerstrip) {channel="miio:basic:powerstrip:lp_autooff_delay"} -Number lp_threshold "Low Power Threshold" (G_powerstrip) {channel="miio:basic:powerstrip:lp_threshold"} ``` ### ROIDMI EVE vacuum (roidmi.vacuum.v60) item file lines @@ -11383,12 +11410,18 @@ Switch power "Power" (G_airpurifier) {channel="miio:basic:airpurifier:power"} String mode "Mode" (G_airpurifier) {channel="miio:basic:airpurifier:mode"} Number:Dimensionless humidity "Humidity" (G_airpurifier) {channel="miio:basic:airpurifier:humidity"} Number aqi "Air Quality Index" (G_airpurifier) {channel="miio:basic:airpurifier:aqi"} -Dimmer brightness "Brightness" (G_airpurifier) {channel="miio:basic:airpurifier:brightness"} +Number averageaqi "Average Air Quality Index" (G_airpurifier) {channel="miio:basic:airpurifier:averageaqi"} Switch led "LED Status" (G_airpurifier) {channel="miio:basic:airpurifier:led"} -Switch act_det "Air AutoDetect" (G_airpurifier) {channel="miio:basic:airpurifier:act_det"} Switch buzzer "Buzzer Status" (G_airpurifier) {channel="miio:basic:airpurifier:buzzer"} Number filtermaxlife "Filter Max Life" (G_airpurifier) {channel="miio:basic:airpurifier:filtermaxlife"} -Number filterlive "Filter Life" (G_airpurifier) {channel="miio:basic:airpurifier:filterlive"} +Number:Time filterhours "Filter Hours used" (G_airpurifier) {channel="miio:basic:airpurifier:filterhours"} +Number:Time usedhours "Run Time" (G_airpurifier) {channel="miio:basic:airpurifier:usedhours"} +Number motorspeed "Motor Speed" (G_airpurifier) {channel="miio:basic:airpurifier:motorspeed"} +Number filterlife "Filter Life" (G_airpurifier) {channel="miio:basic:airpurifier:filterlife"} +Number favoritelevel "Favorite Level" (G_airpurifier) {channel="miio:basic:airpurifier:favoritelevel"} +Number:Temperature temperature "Temperature" (G_airpurifier) {channel="miio:basic:airpurifier:temperature"} +Number:Volume purifyvolume "Purified Volume" (G_airpurifier) {channel="miio:basic:airpurifier:purifyvolume"} +Switch childlock "Child Lock" (G_airpurifier) {channel="miio:basic:airpurifier:childlock"} ``` ### Mi Air Purifier v2 (zhimi.airpurifier.v2) item file lines diff --git a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/cloud/CloudLogin1DTO.java b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/cloud/CloudLogin1DTO.java new file mode 100644 index 0000000000000..5c05854433664 --- /dev/null +++ b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/cloud/CloudLogin1DTO.java @@ -0,0 +1,122 @@ +/** + * Copyright (c) 2010-2022 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.miio.internal.cloud; + +import com.google.gson.annotations.Expose; +import com.google.gson.annotations.SerializedName; + +/** + * This DTO class wraps the login step 1 json structure + * + * @author Marcel Verpaalen - Initial contribution + */ +public class CloudLogin1DTO { + @SerializedName("serviceParam") + @Expose + private String serviceParam; + @SerializedName("qs") + @Expose + private String qs; + @SerializedName("code") + @Expose + private Integer code; + @SerializedName("description") + @Expose + private String description; + @SerializedName("securityStatus") + @Expose + private Integer securityStatus; + @SerializedName("_sign") + @Expose + private String sign; + @SerializedName("sid") + @Expose + private String sid; + @SerializedName("result") + @Expose + private String result; + @SerializedName("captchaUrl") + @Expose + private String captchaUrl; + @SerializedName("callback") + @Expose + private String callback; + @SerializedName("location") + @Expose + private String location; + @SerializedName("pwd") + @Expose + private Integer pwd; + @SerializedName("child") + @Expose + private Integer child; + @SerializedName("desc") + @Expose + private String desc; + + public String getServiceParam() { + return serviceParam; + } + + public String getQs() { + return qs; + } + + public Integer getCode() { + return code; + } + + public String getDescription() { + return description; + } + + public Integer getSecurityStatus() { + return securityStatus; + } + + public String getSign() { + return sign; + } + + public String getSid() { + return sid; + } + + public String getResult() { + return result; + } + + public String getCaptchaUrl() { + return captchaUrl; + } + + public String getCallback() { + return callback; + } + + public String getLocation() { + return location; + } + + public Integer getPwd() { + return pwd; + } + + public Integer getChild() { + return child; + } + + public String getDesc() { + return desc; + } +} diff --git a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/cloud/MiCloudConnector.java b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/cloud/MiCloudConnector.java index 9f3bc649101c7..947067c47832d 100644 --- a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/cloud/MiCloudConnector.java +++ b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/cloud/MiCloudConnector.java @@ -411,8 +411,9 @@ private String loginStep1() throws InterruptedException, TimeoutException, Execu logger.trace("Xiaomi Login step 1 response = {}", responseStep1); try { JsonElement resp = JsonParser.parseString(parseJson(content)); - if (resp.isJsonObject() && resp.getAsJsonObject().has("_sign")) { - String sign = resp.getAsJsonObject().get("_sign").getAsString(); + CloudLogin1DTO jsonResp = GSON.fromJson(resp, CloudLogin1DTO.class); + final String sign = jsonResp.getSign(); + if (sign != null && !sign.isBlank()) { logger.trace("Xiaomi Login step 1 sign = {}", sign); return sign; } else { @@ -472,6 +473,13 @@ private String loginStep2(String sign) throws MiIoCryptoException, InterruptedEx logger.trace("Xiaomi login passToken = {}", passToken); logger.trace("Xiaomi login location = {}", location); logger.trace("Xiaomi login code = {}", code); + if (0 != jsonResp.getSecurityStatus()) { + logger.debug("Xiaomi Cloud Step2 response: {}", parseJson(content2)); + logger.debug( + "Xiaomi Login code: {} \r\nSecurityStatus: {}\r\nPwd code: {}\r\nLocation logon URL: {}\r\nIn case of login issues check userId/password details are correct.\r\n" + + "If login details are correct, try to logon using browser from the openHAB ip using the browser. Alternatively try to complete logon with above URL.", + jsonResp.getCode(), jsonResp.getSecurityStatus(), jsonResp.getPwd(), jsonResp.getLocation()); + } if (logger.isTraceEnabled()) { dumpCookies(url, false); } 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 4d2e6759289cb..bf8cdf41c7799 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 @@ -161,6 +161,17 @@ thing.roborock.vacuum.a14 = Roborock T7S thing.roborock.vacuum.a15 = Roborock S7 thing.roborock.vacuum.a19 = Roborock S4 Max thing.roborock.vacuum.a23 = Roborock T7S Plus +thing.roborock.vacuum.a26 = Roborock G10S Pro +thing.roborock.vacuum.a27 = Roborock S7 MaxV +thing.roborock.vacuum.a29 = Roborock G10 +thing.roborock.vacuum.a30 = Roborock G10 +thing.roborock.vacuum.a34 = Roborock Q5 +thing.roborock.vacuum.a37 = Roborock T8 +thing.roborock.vacuum.a38 = Roborock Q7 Max +thing.roborock.vacuum.a40 = Roborock Q7 +thing.roborock.vacuum.a46 = Roborock G10S +thing.roborock.vacuum.a52 = Roborock T8 Plus +thing.roborock.vacuum.a62 = Roborock S7 Pro Ultra thing.roborock.vacuum.c1 = Xiaowa C1 thing.roborock.vacuum.e2 = Roborock Xiaowa E Series Vacuum v2 thing.roborock.vacuum.m1s = Mi Robot Vacuum 1S @@ -2773,14 +2784,14 @@ option.mijia.vacuum.v2-miot.fault-7 = Side-brush-error option.mijia.vacuum.v2-miot.fault-8 = Fan-motor-error option.mijia.vacuum.v2-miot.fault-9 = Dustbin-error option.mijia.vacuum.v2-miot.language-0 = English -option.mijia.vacuum.v2-miot.language-1 = 简体中文 -option.mijia.vacuum.v2-miot.language-2 = Español -option.mijia.vacuum.v2-miot.language-3 = Русский -option.mijia.vacuum.v2-miot.language-4 = Italiano -option.mijia.vacuum.v2-miot.language-5 = Français -option.mijia.vacuum.v2-miot.language-6 = Deutsch -option.mijia.vacuum.v2-miot.language-7 = 한국어 -option.mijia.vacuum.v2-miot.language-8 = Polski +option.mijia.vacuum.v2-miot.language-1 = Chinese +option.mijia.vacuum.v2-miot.language-2 = Spanish +option.mijia.vacuum.v2-miot.language-3 = Russian +option.mijia.vacuum.v2-miot.language-4 = Italian +option.mijia.vacuum.v2-miot.language-5 = French +option.mijia.vacuum.v2-miot.language-6 = German +option.mijia.vacuum.v2-miot.language-7 = Korean +option.mijia.vacuum.v2-miot.language-8 = Polish option.mijia.vacuum.v2-miot.mode-1 = Auto-clean option.mijia.vacuum.v2-miot.mode-2 = Spot-clean option.mijia.vacuum.v2-miot.mode-3 = Wallflow-clean diff --git a/bundles/org.openhab.binding.miio/src/main/resources/database/dreame.vacuum.p2029-miot.json b/bundles/org.openhab.binding.miio/src/main/resources/database/dreame.vacuum.p2029-miot.json index c581c8424738f..1511178e2d871 100644 --- a/bundles/org.openhab.binding.miio/src/main/resources/database/dreame.vacuum.p2029-miot.json +++ b/bundles/org.openhab.binding.miio/src/main/resources/database/dreame.vacuum.p2029-miot.json @@ -263,7 +263,8 @@ ] } } - ] + ], + "readmeComment": "Value mapping `[\"vacuum-start-sweep\"\u003d\"Vacuum Start Sweep\",\"vacuum-stop-sweeping\"\u003d\"Vacuum Stop Sweeping\",\"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\",\"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", @@ -307,7 +308,7 @@ }, "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\"]" + "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\"]`" }, { "property": "fault", @@ -370,7 +371,7 @@ }, "refresh": true, "actions": [], - "readmeComment": "Value mapping [\"1\"\u003d\"Charging\",\"2\"\u003d\"Not Charging\",\"5\"\u003d\"Go Charging\"]" + "readmeComment": "Value mapping `[\"1\"\u003d\"Charging\",\"2\"\u003d\"Not Charging\",\"5\"\u003d\"Go Charging\"]`" }, { "property": "brush-left-time", @@ -566,7 +567,7 @@ "parameterType": "STRING" } ], - "readmeComment": "Value mapping [\"0\"\u003d\"Silent\",\"1\"\u003d\"Standard\",\"2\"\u003d\"Strong\",\"3\"\u003d\"Turbo\"]" + "readmeComment": "Value mapping `[\"0\"\u003d\"Silent\",\"1\"\u003d\"Standard\",\"2\"\u003d\"Strong\",\"3\"\u003d\"Turbo\"]`" }, { "property": "mop-mode", @@ -598,7 +599,7 @@ "parameterType": "STRING" } ], - "readmeComment": "Value mapping [\"1\"\u003d\"Low\",\"2\"\u003d\"Medium\",\"3\"\u003d\"High\"]" + "readmeComment": "Value mapping `[\"1\"\u003d\"Low\",\"2\"\u003d\"Medium\",\"3\"\u003d\"High\"]`" }, { "property": "waterbox-status", @@ -622,7 +623,7 @@ }, "refresh": true, "actions": [], - "readmeComment": "Value mapping [\"0\"\u003d\"Removed\",\"1\"\u003d\"Installed\"]" + "readmeComment": "Value mapping `[\"0\"\u003d\"Removed\",\"1\"\u003d\"Installed\"]`" }, { "property": "task-status", @@ -682,7 +683,7 @@ "parameterType": "NUMBER" } ], - "readmeComment": "Value mapping [\"0\"\u003d\"Off\",\"1\"\u003d\"On\"]" + "readmeComment": "Value mapping `[\"0\"\u003d\"Off\",\"1\"\u003d\"On\"]`" }, { "property": "carpet-press", @@ -710,7 +711,7 @@ "parameterType": "NUMBER" } ], - "readmeComment": "Value mapping [\"0\"\u003d\"On\",\"1\"\u003d\"Off\"]" + "readmeComment": "Value mapping `[\"0\"\u003d\"On\",\"1\"\u003d\"Off\"]`" }, { "property": "serial-number", @@ -894,7 +895,7 @@ "parameterType": "NUMBER" } ], - "readmeComment": "Value mapping [\"0\"\u003d\"Close\",\"1\"\u003d\"Open\"]" + "readmeComment": "Value mapping `[\"0\"\u003d\"Close\",\"1\"\u003d\"Open\"]`" }, { "property": "mult-map-info", diff --git a/bundles/org.openhab.binding.miio/src/main/resources/database/ijai.vacuum.v19-miot.json b/bundles/org.openhab.binding.miio/src/main/resources/database/ijai.vacuum.v19-miot.json index 679dceb8ae5f9..741db7239c3d4 100644 --- a/bundles/org.openhab.binding.miio/src/main/resources/database/ijai.vacuum.v19-miot.json +++ b/bundles/org.openhab.binding.miio/src/main/resources/database/ijai.vacuum.v19-miot.json @@ -1,160 +1,161 @@ { - "deviceMapping":{ - "id":[ + "deviceMapping": { + "id": [ "ijai.vacuum.v19" ], - "propertyMethod":"get_properties", - "maxProperties":4, - "channels":[ + "propertyMethod": "get_properties", + "maxProperties": 4, + "channels": [ { - "property":"", - "friendlyName":"Robot Cleaner - Actions", - "channel":"actions", - "type":"String", - "stateDescription":{ - "options":[ + "property": "", + "friendlyName": "Robot Cleaner - Actions", + "channel": "actions", + "type": "String", + "stateDescription": { + "options": [ { - "value":"vacuum-start-sweep", - "label":"Start" + "value": "vacuum-start-sweep", + "label": "Start" }, { - "value":"vacuum-start-sweep-mop", - "label":"Start Sweep+Mop" + "value": "vacuum-start-sweep-mop", + "label": "Start Sweep+Mop" }, { - "value":"vacuum-start-only-sweep", - "label":"Start Sweep" + "value": "vacuum-start-only-sweep", + "label": "Start Sweep" }, { - "value":"vacuum-start-only-mop", - "label":"Start Mop" + "value": "vacuum-start-only-mop", + "label": "Start Mop" }, { - "value":"vacuum-dock", - "label":"Dock" + "value": "vacuum-dock", + "label": "Dock" }, { - "value":"vacuum-stop-sweeping", - "label":"Pause" + "value": "vacuum-stop-sweeping", + "label": "Pause" }, { - "value":"vacuum-start-room-sweep", - "label":"Start Room Sweep" + "value": "vacuum-start-room-sweep", + "label": "Start Room Sweep" } ] }, - "refresh":false, - "actions":[ - { - "command":"action", - "parameterType":"EMPTY", - "siid":2, - "aiid":1, - "condition":{ - "name":"matchValue", - "parameters":[ + "refresh": false, + "actions": [ + { + "command": "action", + "parameterType": "EMPTY", + "siid": 2, + "aiid": 1, + "condition": { + "name": "matchValue", + "parameters": [ { - "matchValue":"vacuum-start-sweep" + "matchValue": "vacuum-start-sweep" } ] } }, { - "command":"action", - "parameterType":"EMPTY", - "siid":2, - "aiid":2, - "condition":{ - "name":"matchValue", - "parameters":[ + "command": "action", + "parameterType": "EMPTY", + "siid": 2, + "aiid": 2, + "condition": { + "name": "matchValue", + "parameters": [ { - "matchValue":"vacuum-stop-sweeping" + "matchValue": "vacuum-stop-sweeping" } ] } }, { - "command":"action", - "parameterType":"EMPTY", - "siid":2, - "aiid":3, - "condition":{ - "name":"matchValue", - "parameters":[ + "command": "action", + "parameterType": "EMPTY", + "siid": 2, + "aiid": 3, + "condition": { + "name": "matchValue", + "parameters": [ { - "matchValue":"vacuum-start-only-sweep" + "matchValue": "vacuum-start-only-sweep" } ] } }, { - "command":"action", - "parameterType":"EMPTY", - "siid":2, - "aiid":5, - "condition":{ - "name":"matchValue", - "parameters":[ + "command": "action", + "parameterType": "EMPTY", + "siid": 2, + "aiid": 5, + "condition": { + "name": "matchValue", + "parameters": [ { - "matchValue":"vacuum-start-sweep-mop" + "matchValue": "vacuum-start-sweep-mop" } ] } }, { - "command":"action", - "parameterType":"EMPTY", - "siid":2, - "aiid":6, - "condition":{ - "name":"matchValue", - "parameters":[ + "command": "action", + "parameterType": "EMPTY", + "siid": 2, + "aiid": 6, + "condition": { + "name": "matchValue", + "parameters": [ { - "matchValue":"vacuum-start-only-mop" + "matchValue": "vacuum-start-only-mop" } ] } }, { - "command":"action", - "parameterType":"NUMBER", - "parameters":[ + "command": "action", + "parameterType": "NUMBER", + "parameters": [ 10.0 ], - "siid":2, - "aiid":7, - "condition":{ - "name":"matchValue", - "parameters":[ + "siid": 2, + "aiid": 7, + "condition": { + "name": "matchValue", + "parameters": [ { - "matchValue":"vacuum-start-room-sweep" + "matchValue": "vacuum-start-room-sweep" } ] } }, { - "command":"action", - "parameterType":"EMPTY", - "siid":3, - "aiid":1, - "condition":{ - "name":"matchValue", - "parameters":[ + "command": "action", + "parameterType": "EMPTY", + "siid": 3, + "aiid": 1, + "condition": { + "name": "matchValue", + "parameters": [ { - "matchValue":"vacuum-dock" + "matchValue": "vacuum-dock" } ] } } - ] + ], + "readmeComment": "Value mapping `[\"vacuum-start-sweep\"\u003d\"Start\",\"vacuum-start-sweep-mop\"\u003d\"Start Sweep+Mop\",\"vacuum-start-only-sweep\"\u003d\"Start Sweep\",\"vacuum-start-only-mop\"\u003d\"Start Mop\",\"vacuum-dock\"\u003d\"Dock\",\"vacuum-stop-sweeping\"\u003d\"Pause\",\"vacuum-start-room-sweep\"\u003d\"Start Room Sweep\"]`" }, { - "property":"", - "friendlyName":"Robot Cleaner - Advanced Actions", - "channel":"advanced_actions", - "type":"String", - "stateDescription":{ - "options":[ + "property": "", + "friendlyName": "Robot Cleaner - Advanced Actions", + "channel": "advanced_actions", + "type": "String", + "stateDescription": { + "options": [ { "value": "sweep-reset-consumable", "label": "Sweep Reset Consumable" @@ -1134,213 +1135,208 @@ ] } } - ] + ], + "readmeComment": "Value mapping `[\"sweep-reset-consumable\"\u003d\"Sweep Reset Consumable\",\"sweep-set-calibration\"\u003d\"Sweep Set Calibration\",\"sweep-set-room-clean\"\u003d\"Sweep Set Room Clean\",\"sweep-set-preference-clean\"\u003d\"Sweep Set Preference Clean\",\"sweep-get-preference-clean\"\u003d\"Sweep Get Preference Clean\",\"sweep-set-preference-type\"\u003d\"Sweep Set Preference Type\",\"sweep-set-go-charging\"\u003d\"Sweep Set Go Charging\",\"sweep-erase-preference\"\u003d\"Sweep Erase Preference\",\"sweep-set-preference-ii\"\u003d\"Sweep Set Preference Ii\",\"sweep-get-preference-ii\"\u003d\"Sweep Get Preference Ii\",\"order-add\"\u003d\"Order Add\",\"order-del\"\u003d\"Order Del\",\"order-get\"\u003d\"Order Get\",\"order-add-ii\"\u003d\"Order Add Ii\",\"order-get-map-order-count\"\u003d\"Order Get Map Order Count\",\"order-add-iii\"\u003d\"Order Add Iii\",\"point-zone-start-point-clean\"\u003d\"Point Zone Start Point Clean\",\"point-zone-pause-point-clean\"\u003d\"Point Zone Pause Point Clean\",\"point-zone-start-zone-clean\"\u003d\"Point Zone Start Zone Clean\",\"point-zone-pause-zone-clean\"\u003d\"Point Zone Pause Zone Clean\",\"point-zone-set-beauty-wall\"\u003d\"Point Zone Set Beauty Wall\",\"point-zone-set-virtual-wall\"\u003d\"Point Zone Set Virtual Wall\",\"point-zone-set-zone-point\"\u003d\"Point Zone Set Zone Point\",\"point-zone-start-point-clean-ii\"\u003d\"Point Zone Start Point Clean Ii\",\"map-get-map-list\"\u003d\"Map Get Map List\",\"map-upload-by-mapid\"\u003d\"Map Upload By Mapid\",\"map-set-cur-map\"\u003d\"Map Set Cur Map\",\"map-del-map\"\u003d\"Map Del Map\",\"map-rename-map\"\u003d\"Map Rename Map\",\"map-upload-by-maptype\"\u003d\"Map Upload By Maptype\",\"map-rename-room\"\u003d\"Map Rename Room\",\"map-arrange-room\"\u003d\"Map Arrange Room\",\"map-split-room\"\u003d\"Map Split Room\",\"map-reset-map\"\u003d\"Map Reset Map\",\"map-build-new-map\"\u003d\"Map Build New Map\",\"map-get-cur-path\"\u003d\"Map Get Cur Path\",\"map-get-map-room-list\"\u003d\"Map Get Map Room List\",\"map-upload-by-mapid-ii\"\u003d\"Map Upload By Mapid Ii\",\"map-upload-by-maptype-ii\"\u003d\"Map Upload By Maptype Ii\",\"map-reset-map-ii\"\u003d\"Map Reset Map Ii\",\"map-build-map-ii\"\u003d\"Map Build Map Ii\",\"map-set-mijia-room-list\"\u003d\"Map Set Mijia Room List\",\"disturb-set-notdisturb\"\u003d\"Disturb Set Notdisturb\",\"language-download-voice\"\u003d\"Language Download Voice\",\"language-get-download-status\"\u003d\"Language Get Download Status\"]`" }, { - "property":"status", - "siid":2, - "piid":1, - "friendlyName":"Robot Cleaner - Status", - "channel":"status", - "type":"Number", - "stateDescription":{ - "readOnly":true, - "options":[ + "property": "status", + "siid": 2, + "piid": 1, + "friendlyName": "Robot Cleaner - Status", + "channel": "status", + "type": "Number", + "stateDescription": { + "readOnly": true, + "options": [ { - "value":"0", - "label":"Sleep" + "value": "0", + "label": "Sleep" }, { - "value":"1", - "label":"Idle" + "value": "1", + "label": "Idle" }, { - "value":"2", - "label":"Paused" + "value": "2", + "label": "Paused" }, { - "value":"3", - "label":"Go Charging" + "value": "3", + "label": "Go Charging" }, { - "value":"4", - "label":"Charging" + "value": "4", + "label": "Charging" }, { - "value":"5", - "label":"Sweeping" + "value": "5", + "label": "Sweeping" }, { - "value":"6", - "label":"Sweeping and Mopping" + "value": "6", + "label": "Sweeping and Mopping" }, { - "value":"7", - "label":"Mopping" + "value": "7", + "label": "Mopping" }, { - "value":"8", - "label":"Upgrading" + "value": "8", + "label": "Upgrading" } ] }, - "refresh":true, - "actions":[ - - ], - "readmeComment":"Value mapping [\"0\"\u003d\"Sleep\",\"1\"\u003d\"Idle\",\"2\"\u003d\"Paused\",\"3\"\u003d\"Go Charging\",\"4\"\u003d\"Charging\",\"5\"\u003d\"Sweeping\",\"6\"\u003d\"Sweeping and Mopping\",\"7\"\u003d\"Mopping\",\"8\"\u003d\"Upgrading\"]" - }, - { - "property":"fault", - "siid":2, - "piid":2, - "friendlyName":"Robot Cleaner - Device Fault", - "channel":"fault", - "type":"Number", - "stateDescription":{ - "minimum":0, - "maximum":3000, - "step":1, - "pattern":"%.0f", - "readOnly":true + "refresh": true, + "actions": [], + "readmeComment": "Value mapping `[\"0\"\u003d\"Sleep\",\"1\"\u003d\"Idle\",\"2\"\u003d\"Paused\",\"3\"\u003d\"Go Charging\",\"4\"\u003d\"Charging\",\"5\"\u003d\"Sweeping\",\"6\"\u003d\"Sweeping and Mopping\",\"7\"\u003d\"Mopping\",\"8\"\u003d\"Upgrading\"]`" + }, + { + "property": "fault", + "siid": 2, + "piid": 2, + "friendlyName": "Robot Cleaner - Device Fault", + "channel": "fault", + "type": "Number", + "stateDescription": { + "minimum": 0, + "maximum": 3000, + "step": 1, + "pattern": "%.0f", + "readOnly": true }, - "refresh":true, - "actions":[ - - ] + "refresh": true, + "actions": [] }, { - "property":"mode", - "siid":2, - "piid":4, - "friendlyName":"Robot Cleaner - Mode", - "channel":"mode", - "type":"Number", - "stateDescription":{ - "options":[ + "property": "mode", + "siid": 2, + "piid": 4, + "friendlyName": "Robot Cleaner - Mode", + "channel": "mode", + "type": "Number", + "stateDescription": { + "options": [ { - "value":"0", - "label":"Sweep" + "value": "0", + "label": "Sweep" }, { - "value":"1", - "label":"Sweep And Mop" + "value": "1", + "label": "Sweep And Mop" }, { - "value":"2", - "label":"Mop" + "value": "2", + "label": "Mop" } ] }, - "refresh":true, - "actions":[ + "refresh": true, + "actions": [ { - "command":"set_properties", - "parameterType":"NUMBER" + "command": "set_properties", + "parameterType": "NUMBER" } ], - "readmeComment":"Value mapping [\"0\"\u003d\"Sweep\",\"1\"\u003d\"Sweep And Mop\",\"2\"\u003d\"Mop\"]" + "readmeComment": "Value mapping `[\"0\"\u003d\"Sweep\",\"1\"\u003d\"Sweep And Mop\",\"2\"\u003d\"Mop\"]`" }, { - "property":"sweep-type", - "siid":2, - "piid":8, - "friendlyName":"Robot Cleaner - Sweep Type", - "channel":"sweep_type", - "type":"Number", - "stateDescription":{ - "options":[ + "property": "sweep-type", + "siid": 2, + "piid": 8, + "friendlyName": "Robot Cleaner - Sweep Type", + "channel": "sweep_type", + "type": "Number", + "stateDescription": { + "options": [ { - "value":"0", - "label":"Global" + "value": "0", + "label": "Global" }, { - "value":"1", - "label":"Mop" + "value": "1", + "label": "Mop" }, { - "value":"2", - "label":"Edge" + "value": "2", + "label": "Edge" }, { - "value":"3", - "label":"Area" + "value": "3", + "label": "Area" }, { - "value":"4", - "label":"Point" + "value": "4", + "label": "Point" }, { - "value":"5", - "label":"Remote" + "value": "5", + "label": "Remote" }, { - "value":"6", - "label":"Explore" + "value": "6", + "label": "Explore" }, { - "value":"7", - "label":"Room" + "value": "7", + "label": "Room" }, { - "value":"8", - "label":"Floor" + "value": "8", + "label": "Floor" } ] }, - "refresh":true, - "actions":[ + "refresh": true, + "actions": [ { - "command":"set_properties", - "parameterType":"NUMBER" + "command": "set_properties", + "parameterType": "NUMBER" } ], - "readmeComment":"Value mapping [\"0\"\u003d\"Global\",\"1\"\u003d\"Mop\",\"2\"\u003d\"Edge\",\"3\"\u003d\"Area\",\"4\"\u003d\"Point\",\"5\"\u003d\"Remote\",\"6\"\u003d\"Explore\",\"7\"\u003d\"Room\",\"8\"\u003d\"Floor\"]" + "readmeComment": "Value mapping `[\"0\"\u003d\"Global\",\"1\"\u003d\"Mop\",\"2\"\u003d\"Edge\",\"3\"\u003d\"Area\",\"4\"\u003d\"Point\",\"5\"\u003d\"Remote\",\"6\"\u003d\"Explore\",\"7\"\u003d\"Room\",\"8\"\u003d\"Floor\"]`" }, { - "property":"on", - "siid":2, - "piid":9, - "friendlyName":"Robot Cleaner - Switch Status", - "channel":"on", - "type":"String", - "refresh":true, - "actions":[ + "property": "on", + "siid": 2, + "piid": 9, + "friendlyName": "Robot Cleaner - Switch Status", + "channel": "on", + "type": "String", + "refresh": true, + "actions": [ { - "command":"set_properties", - "parameterType":"STRING" + "command": "set_properties", + "parameterType": "STRING" } ] }, { - "property":"battery-level", - "siid":3, - "piid":1, - "friendlyName":"Robot Cleaner - Battery Level", - "channel":"battery_level", - "type":"Number:Dimensionless", - "unit":"percentage", - "stateDescription":{ - "minimum":0, - "maximum":100, - "step":1, - "pattern":"%.0f %unit%", - "readOnly":true + "property": "battery-level", + "siid": 3, + "piid": 1, + "friendlyName": "Robot Cleaner - 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":[ - - ] + "refresh": true, + "actions": [] }, { - "property":"alarm", - "siid":4, - "piid":1, - "friendlyName":"Robot Cleaner - Locate", - "channel":"alarm", - "type":"Switch", - "refresh":true, - "actions":[ + "property": "alarm", + "siid": 4, + "piid": 1, + "friendlyName": "Robot Cleaner - Locate", + "channel": "alarm", + "type": "Switch", + "refresh": true, + "actions": [ { "command": "set_properties", "parameterType": "ONOFFBOOL" @@ -1348,1204 +1344,1152 @@ ] }, { - "property":"volume", - "siid":4, - "piid":2, - "friendlyName":"Robot Cleaner - Locate Volume", - "channel":"volume", - "type":"Number:Dimensionless", - "stateDescription":{ - "minimum":0, - "maximum":10, - "step":1, - "pattern":"%.0f" + "property": "volume", + "siid": 4, + "piid": 2, + "friendlyName": "Robot Cleaner - Locate Volume", + "channel": "volume", + "type": "Number:Dimensionless", + "stateDescription": { + "minimum": 0, + "maximum": 10, + "step": 1, + "pattern": "%.0f" }, - "refresh":true, - "actions":[ + "refresh": true, + "actions": [ { - "command":"set_properties", - "parameterType":"NUMBER" + "command": "set_properties", + "parameterType": "NUMBER" } ] }, { - "property":"repeat-state", - "siid":7, - "piid":1, - "friendlyName":"Sweep - Repeat State", - "channel":"repeat_state", - "type":"Switch", - "refresh":true, - "actions":[ + "property": "repeat-state", + "siid": 7, + "piid": 1, + "friendlyName": "Sweep - Repeat State", + "channel": "repeat_state", + "type": "Switch", + "refresh": true, + "actions": [ { - "command":"set_properties", - "parameterType":"ONOFFNUMBER" + "command": "set_properties", + "parameterType": "ONOFFNUMBER" } ] }, { - "property":"door-state", - "siid":7, - "piid":3, - "friendlyName":"Sweep - Door State", - "channel":"door_state", - "type":"Number", - "stateDescription":{ - "readOnly":true, - "options":[ + "property": "door-state", + "siid": 7, + "piid": 3, + "friendlyName": "Sweep - Door State", + "channel": "door_state", + "type": "Number", + "stateDescription": { + "readOnly": true, + "options": [ { - "value":"0", - "label":"None" + "value": "0", + "label": "None" }, { - "value":"1", - "label":"DustBox" + "value": "1", + "label": "DustBox" }, { - "value":"2", - "label":"WaterBox" + "value": "2", + "label": "WaterBox" }, { - "value":"3", - "label":"TwoInOne" + "value": "3", + "label": "TwoInOne" } ] }, - "refresh":true, - "actions":[ - - ], - "readmeComment":"Value mapping [\"0\"\u003d\"None\",\"1\"\u003d\"DustBox\",\"2\"\u003d\"WaterBox\",\"3\"\u003d\"TwoInOne\"]" - }, - { - "property":"cloth-state", - "siid":7, - "piid":4, - "friendlyName":"Sweep - Cloth State", - "channel":"cloth_state", - "type":"Contact", - "stateDescription":{ - "readOnly":true + "refresh": true, + "actions": [], + "readmeComment": "Value mapping `[\"0\"\u003d\"None\",\"1\"\u003d\"DustBox\",\"2\"\u003d\"WaterBox\",\"3\"\u003d\"TwoInOne\"]`" + }, + { + "property": "cloth-state", + "siid": 7, + "piid": 4, + "friendlyName": "Sweep - Cloth State", + "channel": "cloth_state", + "type": "Contact", + "stateDescription": { + "readOnly": true }, - "refresh":true, - "actions":[ - - ] + "refresh": true, + "actions": [] }, { - "property":"suction-state", - "siid":7, - "piid":5, - "friendlyName":"Robot Cleaner - Power", - "channel":"suction_state", - "type":"Number", - "stateDescription":{ - "options":[ + "property": "suction-state", + "siid": 7, + "piid": 5, + "friendlyName": "Robot Cleaner - Power", + "channel": "suction_state", + "type": "Number", + "stateDescription": { + "options": [ { - "value":"0", - "label":"Slient" + "value": "0", + "label": "Slient" }, { - "value":"1", - "label":"Standard" + "value": "1", + "label": "Standard" }, { - "value":"2", - "label":"Medium" + "value": "2", + "label": "Medium" }, { - "value":"3", - "label":"Turbo" + "value": "3", + "label": "Turbo" } ] }, - "refresh":true, - "actions":[ + "refresh": true, + "actions": [ { - "command":"set_properties", - "parameterType":"NUMBER" + "command": "set_properties", + "parameterType": "NUMBER" } ], - "readmeComment":"Value mapping [\"0\"\u003d\"Slient\",\"1\"\u003d\"Standard\",\"2\"\u003d\"Medium\",\"3\"\u003d\"Turbo\"]" + "readmeComment": "Value mapping `[\"0\"\u003d\"Slient\",\"1\"\u003d\"Standard\",\"2\"\u003d\"Medium\",\"3\"\u003d\"Turbo\"]`" }, { - "property":"water-state", - "siid":7, - "piid":6, - "friendlyName":"Sweep - Water State", - "channel":"water_state", - "type":"Number", - "stateDescription":{ - "options":[ + "property": "water-state", + "siid": 7, + "piid": 6, + "friendlyName": "Sweep - Water State", + "channel": "water_state", + "type": "Number", + "stateDescription": { + "options": [ { - "value":"0", - "label":"Low" + "value": "0", + "label": "Low" }, { - "value":"1", - "label":"Mid" + "value": "1", + "label": "Mid" }, { - "value":"2", - "label":"High" + "value": "2", + "label": "High" } ] }, - "refresh":true, - "actions":[ + "refresh": true, + "actions": [ { - "command":"set_properties", - "parameterType":"NUMBER" + "command": "set_properties", + "parameterType": "NUMBER" } ], - "readmeComment":"Value mapping [\"0\"\u003d\"Low\",\"1\"\u003d\"Mid\",\"2\"\u003d\"High\"]" + "readmeComment": "Value mapping `[\"0\"\u003d\"Low\",\"1\"\u003d\"Mid\",\"2\"\u003d\"High\"]`" }, { - "property":"mop-route", - "siid":7, - "piid":7, - "friendlyName":"Sweep - Mop Route", - "channel":"mop_route", - "type":"Number", - "stateDescription":{ - "options":[ + "property": "mop-route", + "siid": 7, + "piid": 7, + "friendlyName": "Sweep - Mop Route", + "channel": "mop_route", + "type": "Number", + "stateDescription": { + "options": [ { - "value":"0", - "label":"S" + "value": "0", + "label": "S" }, { - "value":"1", - "label":"Y" + "value": "1", + "label": "Y" } ] }, - "refresh":true, - "actions":[ + "refresh": true, + "actions": [ { - "command":"set_properties", - "parameterType":"NUMBER" + "command": "set_properties", + "parameterType": "NUMBER" } ], - "readmeComment":"Value mapping [\"0\"\u003d\"S\",\"1\"\u003d\"Y\"]" - }, - { - "property":"side-brush-life", - "siid":7, - "piid":8, - "friendlyName":"Sweep - Side Brush Life", - "channel":"side_brush_life", - "type":"Number:Dimensionless", - "unit":"percentage", - "stateDescription":{ - "minimum":0, - "maximum":100, - "step":1, - "pattern":"%.0f %unit%", - "readOnly":true + "readmeComment": "Value mapping `[\"0\"\u003d\"S\",\"1\"\u003d\"Y\"]`" + }, + { + "property": "side-brush-life", + "siid": 7, + "piid": 8, + "friendlyName": "Sweep - Side Brush Life", + "channel": "side_brush_life", + "type": "Number:Dimensionless", + "unit": "percentage", + "stateDescription": { + "minimum": 0, + "maximum": 100, + "step": 1, + "pattern": "%.0f %unit%", + "readOnly": true }, - "refresh":true, - "actions":[ - - ] - }, - { - "property":"side-brush-hours", - "siid":7, - "piid":9, - "friendlyName":"Sweep - Side Brush Hours", - "channel":"side_brush_hours", - "type":"Number:Time", - "unit":"hours", - "stateDescription":{ - "minimum":0, - "maximum":180, - "step":1, - "pattern":"%.0f %unit%", - "readOnly":true + "refresh": true, + "actions": [] + }, + { + "property": "side-brush-hours", + "siid": 7, + "piid": 9, + "friendlyName": "Sweep - Side Brush Hours", + "channel": "side_brush_hours", + "type": "Number:Time", + "unit": "hours", + "stateDescription": { + "minimum": 0, + "maximum": 180, + "step": 1, + "pattern": "%.0f %unit%", + "readOnly": true }, - "refresh":true, - "actions":[ - - ] - }, - { - "property":"main-brush-life", - "siid":7, - "piid":10, - "friendlyName":"Sweep - Main Brush Life", - "channel":"main_brush_life", - "type":"Number:Dimensionless", - "unit":"percentage", - "stateDescription":{ - "minimum":0, - "maximum":100, - "step":1, - "pattern":"%.0f %unit%", - "readOnly":true + "refresh": true, + "actions": [] + }, + { + "property": "main-brush-life", + "siid": 7, + "piid": 10, + "friendlyName": "Sweep - Main Brush Life", + "channel": "main_brush_life", + "type": "Number:Dimensionless", + "unit": "percentage", + "stateDescription": { + "minimum": 0, + "maximum": 100, + "step": 1, + "pattern": "%.0f %unit%", + "readOnly": true }, - "refresh":true, - "actions":[ - - ] - }, - { - "property":"main-brush-hours", - "siid":7, - "piid":11, - "friendlyName":"Sweep - Main Brush Hours", - "channel":"main_brush_hours", - "type":"Number:Time", - "unit":"hours", - "stateDescription":{ - "minimum":0, - "maximum":360, - "step":1, - "pattern":"%.0f %unit%", - "readOnly":true + "refresh": true, + "actions": [] + }, + { + "property": "main-brush-hours", + "siid": 7, + "piid": 11, + "friendlyName": "Sweep - Main Brush Hours", + "channel": "main_brush_hours", + "type": "Number:Time", + "unit": "hours", + "stateDescription": { + "minimum": 0, + "maximum": 360, + "step": 1, + "pattern": "%.0f %unit%", + "readOnly": true }, - "refresh":true, - "actions":[ - - ] - }, - { - "property":"hypa-life", - "siid":7, - "piid":12, - "friendlyName":"Sweep - Hypa Life", - "channel":"hypa_life", - "type":"Number:Dimensionless", - "unit":"percentage", - "stateDescription":{ - "minimum":0, - "maximum":100, - "step":1, - "pattern":"%.0f %unit%", - "readOnly":true + "refresh": true, + "actions": [] + }, + { + "property": "hypa-life", + "siid": 7, + "piid": 12, + "friendlyName": "Sweep - Hypa Life", + "channel": "hypa_life", + "type": "Number:Dimensionless", + "unit": "percentage", + "stateDescription": { + "minimum": 0, + "maximum": 100, + "step": 1, + "pattern": "%.0f %unit%", + "readOnly": true }, - "refresh":true, - "actions":[ - - ] - }, - { - "property":"hypa-hours", - "siid":7, - "piid":13, - "friendlyName":"Sweep - Hypa Hours", - "channel":"hypa_hours", - "type":"Number:Time", - "unit":"hours", - "stateDescription":{ - "minimum":0, - "maximum":180, - "step":1, - "pattern":"%.0f %unit%", - "readOnly":true + "refresh": true, + "actions": [] + }, + { + "property": "hypa-hours", + "siid": 7, + "piid": 13, + "friendlyName": "Sweep - Hypa Hours", + "channel": "hypa_hours", + "type": "Number:Time", + "unit": "hours", + "stateDescription": { + "minimum": 0, + "maximum": 180, + "step": 1, + "pattern": "%.0f %unit%", + "readOnly": true }, - "refresh":true, - "actions":[ - - ] - }, - { - "property":"mop-life", - "siid":7, - "piid":14, - "friendlyName":"Sweep - Mop Life", - "channel":"mop_life", - "type":"Number:Dimensionless", - "unit":"percentage", - "stateDescription":{ - "minimum":0, - "maximum":100, - "step":1, - "pattern":"%.0f %unit%", - "readOnly":true + "refresh": true, + "actions": [] + }, + { + "property": "mop-life", + "siid": 7, + "piid": 14, + "friendlyName": "Sweep - Mop Life", + "channel": "mop_life", + "type": "Number:Dimensionless", + "unit": "percentage", + "stateDescription": { + "minimum": 0, + "maximum": 100, + "step": 1, + "pattern": "%.0f %unit%", + "readOnly": true }, - "refresh":true, - "actions":[ - - ] - }, - { - "property":"mop-hours", - "siid":7, - "piid":15, - "friendlyName":"Sweep - Mop Hours", - "channel":"mop_hours", - "type":"Number:Time", - "unit":"hours", - "stateDescription":{ - "minimum":0, - "maximum":180, - "step":1, - "pattern":"%.0f %unit%", - "readOnly":true + "refresh": true, + "actions": [] + }, + { + "property": "mop-hours", + "siid": 7, + "piid": 15, + "friendlyName": "Sweep - Mop Hours", + "channel": "mop_hours", + "type": "Number:Time", + "unit": "hours", + "stateDescription": { + "minimum": 0, + "maximum": 180, + "step": 1, + "pattern": "%.0f %unit%", + "readOnly": true }, - "refresh":true, - "actions":[ - - ] + "refresh": true, + "actions": [] }, { - "property":"direction", - "siid":7, - "piid":16, - "friendlyName":"Sweep - Direction", - "channel":"direction", - "type":"Number", - "stateDescription":{ - "options":[ + "property": "direction", + "siid": 7, + "piid": 16, + "friendlyName": "Sweep - Direction", + "channel": "direction", + "type": "Number", + "stateDescription": { + "options": [ { - "value":"1", - "label":"Forward" + "value": "1", + "label": "Forward" }, { - "value":"2", - "label":"Left" + "value": "2", + "label": "Left" }, { - "value":"3", - "label":"Right" + "value": "3", + "label": "Right" }, { - "value":"4", - "label":"Back" + "value": "4", + "label": "Back" }, { - "value":"5", - "label":"Stop" + "value": "5", + "label": "Stop" }, { - "value":"10", - "label":"Exit" + "value": "10", + "label": "Exit" } ] }, - "refresh":false, - "actions":[ + "refresh": false, + "actions": [ { - "command":"set_properties", - "parameterType":"NUMBER" + "command": "set_properties", + "parameterType": "NUMBER" } ], - "readmeComment":"Value mapping [\"1\"\u003d\"Forward\",\"2\"\u003d\"Left\",\"3\"\u003d\"Right\",\"4\"\u003d\"Back\",\"5\"\u003d\"Stop\",\"10\"\u003d\"Exit\"]" - }, - { - "property":"time-zone", - "siid":7, - "piid":20, - "friendlyName":"Sweep - Time Zone", - "channel":"time_zone", - "type":"Number", - "stateDescription":{ - "step":1, - "pattern":"%.0f" + "readmeComment": "Value mapping `[\"1\"\u003d\"Forward\",\"2\"\u003d\"Left\",\"3\"\u003d\"Right\",\"4\"\u003d\"Back\",\"5\"\u003d\"Stop\",\"10\"\u003d\"Exit\"]`" + }, + { + "property": "time-zone", + "siid": 7, + "piid": 20, + "friendlyName": "Sweep - Time Zone", + "channel": "time_zone", + "type": "Number", + "stateDescription": { + "step": 1, + "pattern": "%.0f" }, - "refresh":true, - "actions":[ + "refresh": true, + "actions": [ { - "command":"set_properties", - "parameterType":"NUMBER" + "command": "set_properties", + "parameterType": "NUMBER" } ] }, { - "property":"cur-lang", - "siid":7, - "piid":21, - "friendlyName":"Sweep - Cur Lang", - "channel":"cur_lang", - "type":"String", - "refresh":true, - "actions":[ + "property": "cur-lang", + "siid": 7, + "piid": 21, + "friendlyName": "Sweep - Cur Lang", + "channel": "cur_lang", + "type": "String", + "refresh": true, + "actions": [ { - "command":"set_properties", - "parameterType":"STRING" + "command": "set_properties", + "parameterType": "STRING" } ] }, { - "property":"cleaning-time", - "siid":7, - "piid":22, - "friendlyName":"Sweep - Cleaning Time", - "channel":"cleaning_time", - "type":"Number:Time", - "unit":"minutes", - "stateDescription":{ - "minimum":0, - "maximum":360, - "step":1, - "pattern":"%.0f %unit%", - "readOnly":true + "property": "cleaning-time", + "siid": 7, + "piid": 22, + "friendlyName": "Sweep - Cleaning Time", + "channel": "cleaning_time", + "type": "Number:Time", + "unit": "minutes", + "stateDescription": { + "minimum": 0, + "maximum": 360, + "step": 1, + "pattern": "%.0f %unit%", + "readOnly": true }, - "refresh":true, - "actions":[ - - ] - }, - { - "property":"cleaning-area", - "siid":7, - "piid":23, - "friendlyName":"Sweep - Cleaning Area", - "channel":"cleaning_area", - "type":"Number", - "stateDescription":{ - "minimum":0, - "maximum":1200, - "step":1, - "pattern":"%.0f", - "readOnly":true + "refresh": true, + "actions": [] + }, + { + "property": "cleaning-area", + "siid": 7, + "piid": 23, + "friendlyName": "Sweep - Cleaning Area", + "channel": "cleaning_area", + "type": "Number", + "stateDescription": { + "minimum": 0, + "maximum": 1200, + "step": 1, + "pattern": "%.0f", + "readOnly": true }, - "refresh":true, - "actions":[ - - ] + "refresh": true, + "actions": [] }, { - "property":"dirt-recognize", - "siid":7, - "piid":35, - "friendlyName":"Sweep - Dirt Recognize", - "channel":"dirt_recognize", - "type":"Switch", - "refresh":true, - "actions":[ + "property": "dirt-recognize", + "siid": 7, + "piid": 35, + "friendlyName": "Sweep - Dirt Recognize", + "channel": "dirt_recognize", + "type": "Switch", + "refresh": true, + "actions": [ { - "command":"set_properties", - "parameterType":"ONOFFNUMBER" + "command": "set_properties", + "parameterType": "ONOFFNUMBER" } ] }, { - "property":"pet-recognize", - "siid":7, - "piid":36, - "friendlyName":"Sweep - Pet Recognize", - "channel":"pet_recognize", - "type":"Switch", - "refresh":true, - "actions":[ + "property": "pet-recognize", + "siid": 7, + "piid": 36, + "friendlyName": "Sweep - Pet Recognize", + "channel": "pet_recognize", + "type": "Switch", + "refresh": true, + "actions": [ { - "command":"set_properties", - "parameterType":"ONOFFNUMBER" + "command": "set_properties", + "parameterType": "ONOFFNUMBER" } ] }, { - "property":"ai-recognize", - "siid":7, - "piid":42, - "friendlyName":"Sweep - Ai Recognize", - "channel":"ai_recognize", - "type":"Switch", - "refresh":true, - "actions":[ + "property": "ai-recognize", + "siid": 7, + "piid": 42, + "friendlyName": "Sweep - Ai Recognize", + "channel": "ai_recognize", + "type": "Switch", + "refresh": true, + "actions": [ { - "command":"set_properties", - "parameterType":"ONOFFNUMBER" + "command": "set_properties", + "parameterType": "ONOFFNUMBER" } ] }, { - "property":"carpet-booster", - "siid":7, - "piid":44, - "friendlyName":"Sweep - Carpet Booster", - "channel":"carpet_booster", - "type":"Switch", - "refresh":true, - "actions":[ + "property": "carpet-booster", + "siid": 7, + "piid": 44, + "friendlyName": "Sweep - Carpet Booster", + "channel": "carpet_booster", + "type": "Switch", + "refresh": true, + "actions": [ { - "command":"set_properties", - "parameterType":"ONOFFNUMBER" + "command": "set_properties", + "parameterType": "ONOFFNUMBER" } ] }, { - "property":"multi-prop-vacuum", - "siid":7, - "piid":45, - "friendlyName":"Sweep - Multi Prop Vacuum", - "channel":"multi_prop_vacuum", - "type":"String", - "stateDescription":{ - "readOnly":true + "property": "multi-prop-vacuum", + "siid": 7, + "piid": 45, + "friendlyName": "Sweep - Multi Prop Vacuum", + "channel": "multi_prop_vacuum", + "type": "String", + "stateDescription": { + "readOnly": true }, - "refresh":true, - "actions":[ - - ] + "refresh": true, + "actions": [] }, { - "property":"carpet-avoid", - "siid":7, - "piid":47, - "friendlyName":"Sweep - Carpet Avoid", - "channel":"carpet_avoid", - "type":"Switch", - "refresh":false, - "actions":[ + "property": "carpet-avoid", + "siid": 7, + "piid": 47, + "friendlyName": "Sweep - Carpet Avoid", + "channel": "carpet_avoid", + "type": "Switch", + "refresh": false, + "actions": [ { - "command":"set_properties", - "parameterType":"ONOFFNUMBER" + "command": "set_properties", + "parameterType": "ONOFFNUMBER" } ] }, { - "property":"tank-shake", - "siid":7, - "piid":48, - "friendlyName":"Sweep - Tank Shake", - "channel":"tank_shake", - "type":"Switch", - "refresh":true, - "actions":[ + "property": "tank-shake", + "siid": 7, + "piid": 48, + "friendlyName": "Sweep - Tank Shake", + "channel": "tank_shake", + "type": "Switch", + "refresh": true, + "actions": [ { - "command":"set_properties", - "parameterType":"ONOFFNUMBER" + "command": "set_properties", + "parameterType": "ONOFFNUMBER" } ] }, { - "property":"shake-shift", - "siid":7, - "piid":50, - "friendlyName":"Sweep - Shake Shift", - "channel":"shake_shift", - "type":"Number", - "stateDescription":{ - "options":[ + "property": "shake-shift", + "siid": 7, + "piid": 50, + "friendlyName": "Sweep - Shake Shift", + "channel": "shake_shift", + "type": "Number", + "stateDescription": { + "options": [ { - "value":"1", - "label":"Low" + "value": "1", + "label": "Low" }, { - "value":"2", - "label":"Mid" + "value": "2", + "label": "Mid" }, { - "value":"3", - "label":"High" + "value": "3", + "label": "High" } ] }, - "refresh":true, - "actions":[ + "refresh": true, + "actions": [ { - "command":"set_properties", - "parameterType":"NUMBER" + "command": "set_properties", + "parameterType": "NUMBER" } ], - "readmeComment":"Value mapping [\"1\"\u003d\"Low\",\"2\"\u003d\"Mid\",\"3\"\u003d\"High\"]" + "readmeComment": "Value mapping `[\"1\"\u003d\"Low\",\"2\"\u003d\"Mid\",\"3\"\u003d\"High\"]`" }, { - "property":"map-encrypt", - "siid":7, - "piid":55, - "friendlyName":"Sweep - Map Encrypt", - "channel":"map_encrypt", - "type":"Contact", - "stateDescription":{ - "readOnly":true + "property": "map-encrypt", + "siid": 7, + "piid": 55, + "friendlyName": "Sweep - Map Encrypt", + "channel": "map_encrypt", + "type": "Contact", + "stateDescription": { + "readOnly": true }, - "refresh":true, - "actions":[ - - ] - }, - { - "property":"order-id", - "siid":8, - "piid":1, - "friendlyName":"Order - Order Id", - "channel":"order_id", - "type":"Number", - "stateDescription":{ - "minimum":0, - "step":1, - "pattern":"%.0f" + "refresh": true, + "actions": [] + }, + { + "property": "order-id", + "siid": 8, + "piid": 1, + "friendlyName": "Order - Order Id", + "channel": "order_id", + "type": "Number", + "stateDescription": { + "minimum": 0, + "step": 1, + "pattern": "%.0f" }, - "refresh":false, - "actions":[ + "refresh": false, + "actions": [ { - "command":"set_properties", - "parameterType":"STRING" + "command": "set_properties", + "parameterType": "STRING" } ] }, { - "property":"enable", - "siid":8, - "piid":2, - "friendlyName":"Order - Enable", - "channel":"enable", - "type":"Switch", - "refresh":false, - "actions":[ + "property": "enable", + "siid": 8, + "piid": 2, + "friendlyName": "Order - Enable", + "channel": "enable", + "type": "Switch", + "refresh": false, + "actions": [ { - "command":"set_properties", - "parameterType":"ONOFFNUMBER" + "command": "set_properties", + "parameterType": "ONOFFNUMBER" } ] }, { - "property":"day", - "siid":8, - "piid":3, - "friendlyName":"Order - Day", - "channel":"day", - "type":"Number:Time", - "unit":"days", - "stateDescription":{ - "minimum":0, - "maximum":255, - "step":1, - "pattern":"%.0f %unit%" + "property": "day", + "siid": 8, + "piid": 3, + "friendlyName": "Order - Day", + "channel": "day", + "type": "Number:Time", + "unit": "days", + "stateDescription": { + "minimum": 0, + "maximum": 255, + "step": 1, + "pattern": "%.0f %unit%" }, - "refresh":false, - "actions":[ + "refresh": false, + "actions": [ { - "command":"set_properties", - "parameterType":"NUMBER" + "command": "set_properties", + "parameterType": "NUMBER" } ] }, { - "property":"hour", - "siid":8, - "piid":4, - "friendlyName":"Order - Hour", - "channel":"hour", - "type":"Number:Time", - "unit":"hours", - "stateDescription":{ - "minimum":0, - "maximum":23, - "step":1, - "pattern":"%.0f %unit%" + "property": "hour", + "siid": 8, + "piid": 4, + "friendlyName": "Order - Hour", + "channel": "hour", + "type": "Number:Time", + "unit": "hours", + "stateDescription": { + "minimum": 0, + "maximum": 23, + "step": 1, + "pattern": "%.0f %unit%" }, - "refresh":false, - "actions":[ + "refresh": false, + "actions": [ { - "command":"set_properties", - "parameterType":"NUMBER" + "command": "set_properties", + "parameterType": "NUMBER" } ] }, { - "property":"minute", - "siid":8, - "piid":5, - "friendlyName":"Order - Minute", - "channel":"minute", - "type":"Number:Time", - "unit":"minutes", - "stateDescription":{ - "minimum":0, - "maximum":59, - "step":1, - "pattern":"%.0f %unit%" + "property": "minute", + "siid": 8, + "piid": 5, + "friendlyName": "Order - Minute", + "channel": "minute", + "type": "Number:Time", + "unit": "minutes", + "stateDescription": { + "minimum": 0, + "maximum": 59, + "step": 1, + "pattern": "%.0f %unit%" }, - "refresh":false, - "actions":[ + "refresh": false, + "actions": [ { - "command":"set_properties", - "parameterType":"NUMBER" + "command": "set_properties", + "parameterType": "NUMBER" } ] }, { - "property":"repeat", - "siid":8, - "piid":6, - "friendlyName":"Order - Repeat", - "channel":"repeat", - "type":"Switch", - "refresh":false, - "actions":[ + "property": "repeat", + "siid": 8, + "piid": 6, + "friendlyName": "Order - Repeat", + "channel": "repeat", + "type": "Switch", + "refresh": false, + "actions": [ { - "command":"set_properties", - "parameterType":"ONOFFNUMBER" + "command": "set_properties", + "parameterType": "ONOFFNUMBER" } ] }, { - "property":"clean-way", - "siid":8, - "piid":7, - "friendlyName":"Order - Clean Way", - "channel":"clean_way", - "type":"Number", - "stateDescription":{ - "options":[ + "property": "clean-way", + "siid": 8, + "piid": 7, + "friendlyName": "Order - Clean Way", + "channel": "clean_way", + "type": "Number", + "stateDescription": { + "options": [ { - "value":"0", - "label":"Sweep" + "value": "0", + "label": "Sweep" }, { - "value":"1", - "label":"Sweep Mop" + "value": "1", + "label": "Sweep Mop" }, { - "value":"2", - "label":"Mop" + "value": "2", + "label": "Mop" } ] }, - "refresh":false, - "actions":[ + "refresh": false, + "actions": [ { - "command":"set_properties", - "parameterType":"NUMBER" + "command": "set_properties", + "parameterType": "NUMBER" } ], - "readmeComment":"Value mapping [\"0\"\u003d\"Sweep\",\"1\"\u003d\"Sweep Mop\",\"2\"\u003d\"Mop\"]" + "readmeComment": "Value mapping `[\"0\"\u003d\"Sweep\",\"1\"\u003d\"Sweep Mop\",\"2\"\u003d\"Mop\"]`" }, { - "property":"suction", - "siid":8, - "piid":8, - "friendlyName":"Order - Suction", - "channel":"suction", - "type":"Number", - "stateDescription":{ - "options":[ + "property": "suction", + "siid": 8, + "piid": 8, + "friendlyName": "Order - Suction", + "channel": "suction", + "type": "Number", + "stateDescription": { + "options": [ { - "value":"0", - "label":"Slient" + "value": "0", + "label": "Slient" }, { - "value":"1", - "label":"Normal" + "value": "1", + "label": "Normal" }, { - "value":"2", - "label":"Medium" + "value": "2", + "label": "Medium" }, { - "value":"3", - "label":"Turbo" + "value": "3", + "label": "Turbo" } ] }, - "refresh":false, - "actions":[ + "refresh": false, + "actions": [ { - "command":"set_properties", - "parameterType":"NUMBER" + "command": "set_properties", + "parameterType": "NUMBER" } ], - "readmeComment":"Value mapping [\"0\"\u003d\"Slient\",\"1\"\u003d\"Normal\",\"2\"\u003d\"Medium\",\"3\"\u003d\"Turbo\"]" + "readmeComment": "Value mapping `[\"0\"\u003d\"Slient\",\"1\"\u003d\"Normal\",\"2\"\u003d\"Medium\",\"3\"\u003d\"Turbo\"]`" }, { - "property":"water", - "siid":8, - "piid":9, - "friendlyName":"Order - Water", - "channel":"water", - "type":"Number", - "stateDescription":{ - "options":[ + "property": "water", + "siid": 8, + "piid": 9, + "friendlyName": "Order - Water", + "channel": "water", + "type": "Number", + "stateDescription": { + "options": [ { - "value":"0", - "label":"Low" + "value": "0", + "label": "Low" }, { - "value":"1", - "label":"Mid" + "value": "1", + "label": "Mid" }, { - "value":"2", - "label":"High" + "value": "2", + "label": "High" } ] }, - "refresh":false, - "actions":[ + "refresh": false, + "actions": [ { - "command":"set_properties", - "parameterType":"NUMBER" + "command": "set_properties", + "parameterType": "NUMBER" } ], - "readmeComment":"Value mapping [\"0\"\u003d\"Low\",\"1\"\u003d\"Mid\",\"2\"\u003d\"High\"]" + "readmeComment": "Value mapping `[\"0\"\u003d\"Low\",\"1\"\u003d\"Mid\",\"2\"\u003d\"High\"]`" }, { - "property":"twice-clean", - "siid":8, - "piid":10, - "friendlyName":"Order - Twice Clean", - "channel":"twice_clean", - "type":"Switch", - "refresh":false, - "actions":[ + "property": "twice-clean", + "siid": 8, + "piid": 10, + "friendlyName": "Order - Twice Clean", + "channel": "twice_clean", + "type": "Switch", + "refresh": false, + "actions": [ { - "command":"set_properties", - "parameterType":"ONOFFNUMBER" + "command": "set_properties", + "parameterType": "ONOFFNUMBER" } ] }, { - "property":"mapid", - "siid":8, - "piid":11, - "friendlyName":"Order - Mapid", - "channel":"mapid", - "type":"Number", - "stateDescription":{ - "minimum":0, - "step":1, - "pattern":"%.0f" + "property": "mapid", + "siid": 8, + "piid": 11, + "friendlyName": "Order - Mapid", + "channel": "mapid", + "type": "Number", + "stateDescription": { + "minimum": 0, + "step": 1, + "pattern": "%.0f" }, - "refresh":false, - "actions":[ + "refresh": false, + "actions": [ { - "command":"set_properties", - "parameterType":"STRING" + "command": "set_properties", + "parameterType": "STRING" } ] }, { - "property":"room-count", - "siid":8, - "piid":12, - "friendlyName":"Order - Room Count", - "channel":"room_count", - "type":"Number", - "stateDescription":{ - "minimum":0, - "maximum":64, - "step":1, - "pattern":"%.0f" + "property": "room-count", + "siid": 8, + "piid": 12, + "friendlyName": "Order - Room Count", + "channel": "room_count", + "type": "Number", + "stateDescription": { + "minimum": 0, + "maximum": 64, + "step": 1, + "pattern": "%.0f" }, - "refresh":false, - "actions":[ + "refresh": false, + "actions": [ { - "command":"set_properties", - "parameterType":"NUMBER" + "command": "set_properties", + "parameterType": "NUMBER" } ] }, { - "property":"room-data", - "siid":8, - "piid":13, - "friendlyName":"Order - Room Data", - "channel":"room_data", - "type":"String", - "refresh":false, - "actions":[ + "property": "room-data", + "siid": 8, + "piid": 13, + "friendlyName": "Order - Room Data", + "channel": "room_data", + "type": "String", + "refresh": false, + "actions": [ { - "command":"set_properties", - "parameterType":"STRING" + "command": "set_properties", + "parameterType": "STRING" } ] }, { - "property":"time-zone1", - "siid":8, - "piid":14, - "friendlyName":"Order - Time Zone", - "channel":"time_zone1", - "type":"Number", - "stateDescription":{ - "step":1, - "pattern":"%.0f" + "property": "time-zone1", + "siid": 8, + "piid": 14, + "friendlyName": "Order - Time Zone", + "channel": "time_zone1", + "type": "Number", + "stateDescription": { + "step": 1, + "pattern": "%.0f" }, - "refresh":false, - "actions":[ + "refresh": false, + "actions": [ { - "command":"set_properties", - "parameterType":"NUMBER" + "command": "set_properties", + "parameterType": "NUMBER" } ] }, { - "property":"all-enable-count", - "siid":8, - "piid":18, - "friendlyName":"Order - All Enable Count", - "channel":"all_enable_count", - "type":"String", - "stateDescription":{ - "readOnly":true + "property": "all-enable-count", + "siid": 8, + "piid": 18, + "friendlyName": "Order - All Enable Count", + "channel": "all_enable_count", + "type": "String", + "stateDescription": { + "readOnly": true }, - "refresh":true, - "actions":[ - - ] + "refresh": true, + "actions": [] }, { - "property":"zone-points", - "siid":9, - "piid":2, - "friendlyName":"Point Zone - Zone Points", - "channel":"zone_points", - "type":"String", - "refresh":false, - "actions":[ + "property": "zone-points", + "siid": 9, + "piid": 2, + "friendlyName": "Point Zone - Zone Points", + "channel": "zone_points", + "type": "String", + "refresh": false, + "actions": [ { - "command":"set_properties", - "parameterType":"STRING" + "command": "set_properties", + "parameterType": "STRING" } ] }, { - "property":"restrict-points", - "siid":9, - "piid":3, - "friendlyName":"Point Zone - Restrict Points", - "channel":"restrict_points", - "type":"String", - "refresh":false, - "actions":[ + "property": "restrict-points", + "siid": 9, + "piid": 3, + "friendlyName": "Point Zone - Restrict Points", + "channel": "restrict_points", + "type": "String", + "refresh": false, + "actions": [ { - "command":"set_properties", - "parameterType":"STRING" + "command": "set_properties", + "parameterType": "STRING" } ] }, { - "property":"target-point", - "siid":9, - "piid":5, - "friendlyName":"Point Zone - Target Point", - "channel":"target_point", - "type":"String", - "refresh":false, - "actions":[ + "property": "target-point", + "siid": 9, + "piid": 5, + "friendlyName": "Point Zone - Target Point", + "channel": "target_point", + "type": "String", + "refresh": false, + "actions": [ { - "command":"set_properties", - "parameterType":"STRING" + "command": "set_properties", + "parameterType": "STRING" } ] }, { - "property":"remember-state", - "siid":10, - "piid":1, - "friendlyName":"Map - Remember State", - "channel":"remember_state", - "type":"Switch", - "refresh":false, - "actions":[ + "property": "remember-state", + "siid": 10, + "piid": 1, + "friendlyName": "Map - Remember State", + "channel": "remember_state", + "type": "Switch", + "refresh": false, + "actions": [ { - "command":"set_properties", - "parameterType":"ONOFFNUMBER" + "command": "set_properties", + "parameterType": "ONOFFNUMBER" } ] }, { - "property":"cur-map-id", - "siid":10, - "piid":2, - "friendlyName":"Map - Cur Map Id", - "channel":"cur_map_id", - "type":"Number", - "stateDescription":{ - "minimum":0, - "step":1, - "pattern":"%.0f", - "readOnly":true + "property": "cur-map-id", + "siid": 10, + "piid": 2, + "friendlyName": "Map - Cur Map Id", + "channel": "cur_map_id", + "type": "Number", + "stateDescription": { + "minimum": 0, + "step": 1, + "pattern": "%.0f", + "readOnly": true }, - "refresh":false, - "actions":[ - - ] - }, - { - "property":"map-num", - "siid":10, - "piid":3, - "friendlyName":"Map - Map Num", - "channel":"map_num", - "type":"Number", - "stateDescription":{ - "minimum":0, - "maximum":5, - "step":1, - "pattern":"%.0f", - "readOnly":true + "refresh": false, + "actions": [] + }, + { + "property": "map-num", + "siid": 10, + "piid": 3, + "friendlyName": "Map - Map Num", + "channel": "map_num", + "type": "Number", + "stateDescription": { + "minimum": 0, + "maximum": 5, + "step": 1, + "pattern": "%.0f", + "readOnly": true }, - "refresh":false, - "actions":[ - - ] + "refresh": false, + "actions": [] }, { - "property":"cur-cleaning-path", - "siid":10, - "piid":5, - "friendlyName":"Map - Cur Cleaning Path", - "channel":"cur_cleaning_path", - "type":"String", - "stateDescription":{ - "readOnly":true + "property": "cur-cleaning-path", + "siid": 10, + "piid": 5, + "friendlyName": "Map - Cur Cleaning Path", + "channel": "cur_cleaning_path", + "type": "String", + "stateDescription": { + "readOnly": true }, - "refresh":false, - "actions":[ - - ] + "refresh": false, + "actions": [] }, { - "property":"build-map", - "siid":10, - "piid":14, - "friendlyName":"Map - Build Map", - "channel":"build_map", - "type":"Number", - "stateDescription":{ - "readOnly":true, - "options":[ + "property": "build-map", + "siid": 10, + "piid": 14, + "friendlyName": "Map - Build Map", + "channel": "build_map", + "type": "Number", + "stateDescription": { + "readOnly": true, + "options": [ { - "value":"0", - "label":"None" + "value": "0", + "label": "None" }, { - "value":"1", - "label":"Build" + "value": "1", + "label": "Build" }, { - "value":"2", - "label":"Clean" + "value": "2", + "label": "Clean" } ] }, - "refresh":false, - "actions":[ - - ], - "readmeComment":"Value mapping [\"0\"\u003d\"None\",\"1\"\u003d\"Build\",\"2\"\u003d\"Clean\"]" - }, - { - "property":"has-new-map", - "siid":10, - "piid":19, - "friendlyName":"Map - Has New Map", - "channel":"has_new_map", - "type":"Contact", - "stateDescription":{ - "readOnly":true + "refresh": false, + "actions": [], + "readmeComment": "Value mapping `[\"0\"\u003d\"None\",\"1\"\u003d\"Build\",\"2\"\u003d\"Clean\"]`" + }, + { + "property": "has-new-map", + "siid": 10, + "piid": 19, + "friendlyName": "Map - Has New Map", + "channel": "has_new_map", + "type": "Contact", + "stateDescription": { + "readOnly": true }, - "refresh":false, - "actions":[ - - ] + "refresh": false, + "actions": [] }, { - "property":"dnd-enable", - "siid":12, - "piid":1, - "friendlyName":"Disturb - Dnd Enable", - "channel":"dnd_enable", - "type":"Contact", - "stateDescription":{ - "readOnly":true + "property": "dnd-enable", + "siid": 12, + "piid": 1, + "friendlyName": "Disturb - Dnd Enable", + "channel": "dnd_enable", + "type": "Contact", + "stateDescription": { + "readOnly": true }, - "refresh":true, - "actions":[ - - ] - }, - { - "property":"dnd-start-hour", - "siid":12, - "piid":2, - "friendlyName":"Disturb - Dnd Start Hour", - "channel":"dnd_start_hour", - "type":"Number:Time", - "unit":"hours", - "stateDescription":{ - "minimum":0, - "maximum":23, - "step":1, - "pattern":"%.0f %unit%", - "readOnly":true + "refresh": true, + "actions": [] + }, + { + "property": "dnd-start-hour", + "siid": 12, + "piid": 2, + "friendlyName": "Disturb - Dnd Start Hour", + "channel": "dnd_start_hour", + "type": "Number:Time", + "unit": "hours", + "stateDescription": { + "minimum": 0, + "maximum": 23, + "step": 1, + "pattern": "%.0f %unit%", + "readOnly": true }, - "refresh":true, - "actions":[ - - ] - }, - { - "property":"dnd-start-minute", - "siid":12, - "piid":3, - "friendlyName":"Disturb - Dnd Start Minute", - "channel":"dnd_start_minute", - "type":"Number:Time", - "unit":"minutes", - "stateDescription":{ - "minimum":0, - "maximum":59, - "step":1, - "pattern":"%.0f %unit%", - "readOnly":true + "refresh": true, + "actions": [] + }, + { + "property": "dnd-start-minute", + "siid": 12, + "piid": 3, + "friendlyName": "Disturb - Dnd Start Minute", + "channel": "dnd_start_minute", + "type": "Number:Time", + "unit": "minutes", + "stateDescription": { + "minimum": 0, + "maximum": 59, + "step": 1, + "pattern": "%.0f %unit%", + "readOnly": true }, - "refresh":true, - "actions":[ - - ] - }, - { - "property":"dnd-end-hour", - "siid":12, - "piid":4, - "friendlyName":"Disturb - Dnd End Hour", - "channel":"dnd_end_hour", - "type":"Number:Time", - "unit":"hours", - "stateDescription":{ - "minimum":0, - "maximum":23, - "step":1, - "pattern":"%.0f %unit%", - "readOnly":true + "refresh": true, + "actions": [] + }, + { + "property": "dnd-end-hour", + "siid": 12, + "piid": 4, + "friendlyName": "Disturb - Dnd End Hour", + "channel": "dnd_end_hour", + "type": "Number:Time", + "unit": "hours", + "stateDescription": { + "minimum": 0, + "maximum": 23, + "step": 1, + "pattern": "%.0f %unit%", + "readOnly": true }, - "refresh":true, - "actions":[ - - ] - }, - { - "property":"dnd-end-minute", - "siid":12, - "piid":5, - "friendlyName":"Disturb - Dnd End Minute", - "channel":"dnd_end_minute", - "type":"Number:Time", - "unit":"minutes", - "stateDescription":{ - "minimum":0, - "maximum":59, - "step":1, - "pattern":"%.0f %unit%", - "readOnly":true + "refresh": true, + "actions": [] + }, + { + "property": "dnd-end-minute", + "siid": 12, + "piid": 5, + "friendlyName": "Disturb - Dnd End Minute", + "channel": "dnd_end_minute", + "type": "Number:Time", + "unit": "minutes", + "stateDescription": { + "minimum": 0, + "maximum": 59, + "step": 1, + "pattern": "%.0f %unit%", + "readOnly": true }, - "refresh":true, - "actions":[ - - ] - }, - { - "property":"multi-prop-dnd", - "siid":12, - "piid":7, - "friendlyName":"Disturb - Multi Prop Dnd", - "channel":"multi_prop_dnd", - "type":"String", - "stateDescription":{ - "readOnly":true + "refresh": true, + "actions": [] + }, + { + "property": "multi-prop-dnd", + "siid": 12, + "piid": 7, + "friendlyName": "Disturb - Multi Prop Dnd", + "channel": "multi_prop_dnd", + "type": "String", + "stateDescription": { + "readOnly": true }, - "refresh":true, - "actions":[ - - ] + "refresh": true, + "actions": [] } ], - "experimental":false + "experimental": false } } diff --git a/bundles/org.openhab.binding.miio/src/main/resources/database/mijia.vacuum.v2-miot.json b/bundles/org.openhab.binding.miio/src/main/resources/database/mijia.vacuum.v2-miot.json index 12655bf5cf46a..8753a92746029 100644 --- a/bundles/org.openhab.binding.miio/src/main/resources/database/mijia.vacuum.v2-miot.json +++ b/bundles/org.openhab.binding.miio/src/main/resources/database/mijia.vacuum.v2-miot.json @@ -657,35 +657,35 @@ }, { "value": "1", - "label": "简体中文" + "label": "Chinese" }, { "value": "2", - "label": "Español" + "label": "Spanish" }, { "value": "3", - "label": "Русский" + "label": "Russian" }, { "value": "4", - "label": "Italiano" + "label": "Italian" }, { "value": "5", - "label": "Français" + "label": "French" }, { "value": "6", - "label": "Deutsch" + "label": "German" }, { "value": "7", - "label": "한국어" + "label": "Korean" }, { "value": "8", - "label": "Polski" + "label": "Polish" } ] }, @@ -696,7 +696,7 @@ "parameterType": "NUMBER" } ], - "readmeComment": "Value mapping `[\"0\"\u003d\"English\",\"1\"\u003d\"简体中文\",\"2\"\u003d\"Español\",\"3\"\u003d\"Русский\",\"4\"\u003d\"Italiano\",\"5\"\u003d\"Français\",\"6\"\u003d\"Deutsch\",\"7\"\u003d\"한국어\",\"8\"\u003d\"Polski\"]`" + "readmeComment": "Value mapping `[\"0\"\u003d\"English\",\"1\"\u003d\"Chinese\",\"2\"\u003d\"Spanish\",\"3\"\u003d\"Russian\",\"4\"\u003d\"Italian\",\"5\"\u003d\"French\",\"6\"\u003d\"German\",\"7\"\u003d\"Korean\",\"8\"\u003d\"Polish\"]`" }, { "property": "not-disturb-switch", diff --git a/bundles/org.openhab.binding.miio/src/main/resources/misc/device_names.json b/bundles/org.openhab.binding.miio/src/main/resources/misc/device_names.json index 5316fe681c90d..c856d038cb031 100644 --- a/bundles/org.openhab.binding.miio/src/main/resources/misc/device_names.json +++ b/bundles/org.openhab.binding.miio/src/main/resources/misc/device_names.json @@ -1550,7 +1550,6 @@ "ijai.vacuum.v19": "Xiaomi Robot Vacuum-Mop 2S", "ijai.vacuum.v2": "Mi Robot Vacuum-Mop 2", "ijai.vacuum.v3": "Mi Robot Vacuum-Mop 2 Pro", - "ijai.vacuum.v19": "Mi Robot Vacuum-Mop 2S", "ijomoo.airer.mja6": "JOMOO smart clothes dryer -A6090", "ijomoo.bhf_light.jd071": "JOMOO Smart Bath Heater JD071", "ijomoo.toilet.i90": "JOMOO Smart Toilet I90", diff --git a/bundles/org.openhab.binding.miio/src/test/java/org/openhab/binding/miio/internal/ReadmeHelper.java b/bundles/org.openhab.binding.miio/src/test/java/org/openhab/binding/miio/internal/ReadmeHelper.java index a16a707ea6f50..c5b374771b5f1 100644 --- a/bundles/org.openhab.binding.miio/src/test/java/org/openhab/binding/miio/internal/ReadmeHelper.java +++ b/bundles/org.openhab.binding.miio/src/test/java/org/openhab/binding/miio/internal/ReadmeHelper.java @@ -51,6 +51,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import com.google.gson.JsonSyntaxException; import com.google.gson.stream.JsonReader; /** @@ -260,7 +261,7 @@ private void checkDatabaseEntrys() { try { JsonReader reader = new JsonReader(new FileReader(DEVICE_NAMES_FILE)); names = gson.fromJson(reader, names.getClass()); - } catch (IOException e) { + } catch (JsonSyntaxException | IOException e) { LOGGER.info("Error reading name list {}: ", DEVICE_NAMES_FILE, e.getMessage()); }