]> git.basschouten.com Git - openhab-addons.git/commitdiff
[miio] cloud login issues improvement (#13715)
authorMarcel <marcel@verpaalen.com>
Tue, 29 Nov 2022 11:26:38 +0000 (12:26 +0100)
committerGitHub <noreply@github.com>
Tue, 29 Nov 2022 11:26:38 +0000 (12:26 +0100)
* [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 <marcel@verpaalen.com>
bundles/org.openhab.binding.miio/README.base.md
bundles/org.openhab.binding.miio/README.md
bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/cloud/CloudLogin1DTO.java [new file with mode: 0644]
bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/cloud/MiCloudConnector.java
bundles/org.openhab.binding.miio/src/main/resources/OH-INF/i18n/basic.properties
bundles/org.openhab.binding.miio/src/main/resources/database/dreame.vacuum.p2029-miot.json
bundles/org.openhab.binding.miio/src/main/resources/database/ijai.vacuum.v19-miot.json
bundles/org.openhab.binding.miio/src/main/resources/database/mijia.vacuum.v2-miot.json
bundles/org.openhab.binding.miio/src/main/resources/misc/device_names.json
bundles/org.openhab.binding.miio/src/test/java/org/openhab/binding/miio/internal/ReadmeHelper.java

index ef881f4440f1d00212811feda6f3671a5db2c7ad..81b2dda9ce89596a47f5c070b90e8e2c08392a96 100644 (file)
@@ -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.
 
index 9ecfa668187fdec1fdbf016688fd98567341d1d8..934edad58a0a7d61a83566514d557c295d1bf2d3 100644 (file)
@@ -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 (<a name="roidmi-vacuum-v60">roidmi.vacuum.v60</a>) 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 (<a name="zhimi-airpurifier-v2">zhimi.airpurifier.v2</a>) 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" <status>
 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 (file)
index 0000000..5c05854
--- /dev/null
@@ -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;
+    }
+}
index 9f3bc649101c7d530800a7cf58893ad454c28bb5..947067c47832db368a84d2dd3d9e0b75ac8b10ef 100644 (file)
@@ -411,8 +411,9 @@ public class MiCloudConnector {
         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 @@ public class MiCloudConnector {
         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);
         }
index 4d2e6759289cbde4c295e00c4d973989fb9ed5f3..bf8cdf41c779937097f31161ed9766ff736d5e25 100644 (file)
@@ -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
index c581c8424738ff43bda7a511a33e9a2e642f02e0..1511178e2d871e0918faa988aa88eeee51d0f865 100644 (file)
                                                        ]
                                                }
                                        }
-                               ]
+                               ],
+                               "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",
                                },
                                "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",
                                },
                                "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",
                                                "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",
                                                "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",
                                },
                                "refresh": true,
                                "actions": [],
-                               "readmeComment": "Value mapping [\"0\"\u003d\"Removed\",\"1\"\u003d\"Installed\"]"
+                               "readmeComment": "Value mapping `[\"0\"\u003d\"Removed\",\"1\"\u003d\"Installed\"]`"
                        },
                        {
                                "property": "task-status",
                                                "parameterType": "NUMBER"
                                        }
                                ],
-                               "readmeComment": "Value mapping [\"0\"\u003d\"Off\",\"1\"\u003d\"On\"]"
+                               "readmeComment": "Value mapping `[\"0\"\u003d\"Off\",\"1\"\u003d\"On\"]`"
                        },
                        {
                                "property": "carpet-press",
                                                "parameterType": "NUMBER"
                                        }
                                ],
-                               "readmeComment": "Value mapping [\"0\"\u003d\"On\",\"1\"\u003d\"Off\"]"
+                               "readmeComment": "Value mapping `[\"0\"\u003d\"On\",\"1\"\u003d\"Off\"]`"
                        },
                        {
                                "property": "serial-number",
                                                "parameterType": "NUMBER"
                                        }
                                ],
-                               "readmeComment": "Value mapping [\"0\"\u003d\"Close\",\"1\"\u003d\"Open\"]"
+                               "readmeComment": "Value mapping `[\"0\"\u003d\"Close\",\"1\"\u003d\"Open\"]`"
                        },
                        {
                                "property": "mult-map-info",
index 679dceb8ae5f9746a74b000ce78843cc4df293ae..741db7239c3d4ef21d4be2dca6bfdb307efa185a 100644 (file)
 {
-       "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"
                                                        ]
                                                }
                                        }
-                               ]
+                               ],
+                               "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"
                                ]
                        },
                        {
-                               "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
        }
 }
index 12655bf5cf46af99338e1eea84cd21546b979ca6..8753a92746029c1d29368a5b3c4d0fe673aa3f56 100644 (file)
                                                },
                                                {
                                                        "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"
                                                }
                                        ]
                                },
                                                "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",
index 5316fe681c90d6abeefc009f2fccf8800af80996..c856d038cb031e18397121d202131ac5ae23b3ae 100644 (file)
   "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",
index a16a707ea6f50882a2d4dd899bbea29f439410f4..c5b374771b5f122dd40afed7eb11bb5ade4d8ea6 100644 (file)
@@ -51,6 +51,7 @@ import com.google.gson.GsonBuilder;
 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 @@ public class ReadmeHelper {
         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());
         }