diff --git a/bundles/org.openhab.binding.miio/README.md b/bundles/org.openhab.binding.miio/README.md
index 7259f82784868..b0955db282854 100644
--- a/bundles/org.openhab.binding.miio/README.md
+++ b/bundles/org.openhab.binding.miio/README.md
@@ -98,6 +98,7 @@ However, for devices that are unsupported, you may override the value and try to
 | Mi Air Purifier MS1          | miio:basic       | [zhimi.airpurifier.ma1](#zhimi-airpurifier-ma1) | Yes       |            |
 | Mi Air Purifier MS2          | miio:basic       | [zhimi.airpurifier.ma2](#zhimi-airpurifier-ma2) | Yes       |            |
 | Mi Air Purifier 3            | miio:basic       | [zhimi.airpurifier.ma4](#zhimi-airpurifier-ma4) | Yes       |            |
+| Mi Air Purifier 3            | miio:basic       | [zhimi.airpurifier.mb3](#zhimi-airpurifier-mb3) | Yes       |            |
 | Mi Air Purifier Super        | miio:basic       | [zhimi.airpurifier.sa1](#zhimi-airpurifier-sa1) | Yes       |            |
 | Mi Air Purifier Super 2      | miio:basic       | [zhimi.airpurifier.sa2](#zhimi-airpurifier-sa2) | Yes       |            |
 | Mi Fresh Air Ventilator      | miio:basic       | [dmaker.airfresh.t2017](#dmaker-airfresh-t2017) | Yes       |            |
@@ -561,22 +562,120 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
-| power            | Switch  | Power                               |
-| mode             | String  | Mode                                |
-| humidity         | Number  | Humidity                            |
-| aqi              | Number  | Air Quality Index                   |
-| averageaqi       | Number  | Average Air Quality Index           |
-| led              | Switch  | LED Status                          |
-| buzzer           | Switch  | Buzzer Status                       |
-| filtermaxlife    | Number  | Filter Max Life                     |
-| filterhours      | Number  | Filter Hours used                   |
-| usedhours        | Number  | Run Time                            |
-| motorspeed       | Number  | Motor Speed                         |
-| filterlife       | Number  | Filter  Life                        |
-| favoritelevel    | Number  | Favorite Level                      |
-| temperature      | Number  | Temperature                         |
-| purifyvolume     | Number  | Purivied Volume                     |
-| childlock        | Switch  | Child Lock                          |
+| Fault            | Number  | Air Purifier-Device Fault           |
+| On               | Switch  | Air Purifier-Switch Status          |
+| FanLevel         | Number  | Air Purifier-Fan Level              |
+| Mode             | Number  | Air Purifier-Mode                   |
+| FirmwareRevision | String  | Device Information-Current Firmware Version |
+| Manufacturer     | String  | Device Information-Device Manufacturer |
+| Model            | String  | Device Information-Device Model     |
+| SerialNumber     | String  | Device Information-Device Serial Number |
+| Pm25Density      | Number  | Environment-PM2.5 Density           |
+| RelativeHumidity | Number  | Environment-Relative Humidity       |
+| Temperature      | Number  | Environment-Temperature             |
+| FilterLifeLevel  | Number  | Filter-Filter Life Level            |
+| FilterUsedTime   | String  | Filter-Filter Used Time             |
+| Alarm            | Switch  | Alarm-Alarm                         |
+| Brightness       | Number  | Indicator Light-Brightness          |
+| On1              | Switch  | Indicator Light-Switch Status       |
+| PhysicalControlsLocked | Switch  | Physical Control Locked-Physical Control Locked |
+| ButtonPressed    | String  | button-button_pressed               |
+| FilterMaxTime    | Number  | filter-time-filter-max-time         |
+| FilterHourUsedDebug | Number  | filter-time-filter-hour-used-debug  |
+| M1Strong         | Number  | motor-speed-m1-strong               |
+| M1High           | Number  | motor-speed-m1-high                 |
+| M1Med            | Number  | motor-speed-m1-med                  |
+| M1MedL           | Number  | motor-speed-m1-med-l                |
+| M1Low            | Number  | motor-speed-m1-low                  |
+| M1Silent         | Number  | motor-speed-m1-silent               |
+| M1Favorite       | Number  | motor-speed-m1-favorite             |
+| Motor1Speed      | Number  | motor-speed-motor1-speed            |
+| Motor1SetSpeed   | Number  | motor-speed-motor1-set-speed        |
+| FavoriteFanLevel | Number  | motor-speed-favorite fan level      |
+| UseTime          | Number  | use-time-use-time                   |
+| PurifyVolume     | Number  | aqi-purify-volume                   |
+| AverageAqi       | Number  | aqi-average-aqi                     |
+| AverageAqiCnt    | Number  | aqi-average-aqi-cnt                 |
+| AqiZone          | String  | aqi-aqi-zone                        |
+| SensorState      | String  | aqi-sensor-state                    |
+| AqiGoodh         | Number  | aqi-aqi-goodh                       |
+| AqiRunstate      | Number  | aqi-aqi-runstate                    |
+| AqiState         | Number  | aqi-aqi-state                       |
+| AqiUpdataHeartbeat | Number  | aqi-aqi-updata-heartbeat            |
+| RfidTag          | String  | rfid-rfid-tag                       |
+| RfidFactoryId    | String  | rfid-rfid-factory-id                |
+| RfidProductId    | String  | rfid-rfid-product-id                |
+| RfidTime         | String  | rfid-rfid-time                      |
+| RfidSerialNum    | String  | rfid-rfid-serial-num                |
+| AppExtra         | Number  | others-app-extra                    |
+| MainChannel      | Number  | others-main-channel                 |
+| SlaveChannel     | Number  | others-slave-channel                |
+| Cola             | String  | others-cola                         |
+| ButtomDoor       | Switch  | others-buttom-door                  |
+| RebootCause      | Number  | others-reboot_cause                 |
+| HwVersion        | Number  | others-hw-version                   |
+| I2cErrorCount    | Number  | others-i2c-error-count              |
+| ManualLevel      | Number  | others-manual-level                 |
+
+### Mi Air Purifier 3 (<a name="zhimi-airpurifier-mb3">zhimi.airpurifier.mb3</a>) Channels
+
+| Channel          | Type    | Description                         |
+|------------------|---------|-------------------------------------|
+| Fault            | Number  | Air Purifier-fault                  |
+| On               | Switch  | Air Purifier-Switch Status          |
+| FanLevel         | Number  | Air Purifier-Fan Level              |
+| Mode             | Number  | Air Purifier-Mode                   |
+| FirmwareRevision | String  | Device Information-Current Firmware Version |
+| Manufacturer     | String  | Device Information-Device Manufacturer |
+| Model            | String  | Device Information-Device Model     |
+| SerialNumber     | String  | Device Information-Device Serial Number |
+| Pm25Density      | Number  | Environment-PM2.5                   |
+| RelativeHumidity | Number  | Environment-Relative Humidity       |
+| Temperature      | Number  | Environment-Temperature             |
+| FilterLifeLevel  | Number  | Filter-Filter Life Level            |
+| FilterUsedTime   | String  | Filter-Filter Used Time             |
+| Alarm            | Switch  | Alarm-Alarm                         |
+| Brightness       | Number  | Indicator Light-brightness          |
+| On1              | Switch  | Indicator Light-Switch Status       |
+| PhysicalControlsLocked | Switch  | Physical Control Locked-Physical Control Locked |
+| ButtonPressed    | String  | Button-button-pressed               |
+| FilterMaxTime    | Number  | filter-time-filter-max-time         |
+| FilterHourDebug  | Number  | filter-time-filter-hour-debug       |
+| MotorStrong      | Number  | motor-speed-motor-strong            |
+| MotorHigh        | Number  | motor-speed-motor-high              |
+| MotorMed         | Number  | motor-speed-motor-med               |
+| MotorMedL        | Number  | motor-speed-motor-med-l             |
+| MotorLow         | Number  | motor-speed-motor-low               |
+| MotorSilent      | Number  | motor-speed-motor-silent            |
+| MotorFavorite    | Number  | motor-speed-motor-favorite          |
+| MotorSpeed       | Number  | motor-speed-motor-speed             |
+| MotorSetSpeed    | Number  | motor-speed-motor-set-speed         |
+| FavoriteFanLevel | Number  | motor-speed-favorite-fan-level      |
+| UseTime          | Number  | use-time-use-time                   |
+| PurifyVolume     | Number  | aqi-purify-volume                   |
+| AverageAqi       | Number  | aqi-average-aqi                     |
+| AverageAqiCnt    | Number  | aqi-average-aqi-cnt                 |
+| AqiZone          | String  | aqi-aqi-zone                        |
+| SensorState      | String  | aqi-sensor-state                    |
+| AqiGoodh         | Number  | aqi-aqi-goodh                       |
+| AqiRunstate      | Number  | aqi-aqi-runstate                    |
+| AqiState         | Number  | aqi-aqi-state                       |
+| AqiUpdataHeartbeat | Number  | aqi-aqi-updata-heartbeat            |
+| RfidTag          | String  | rfid-rfid-tag                       |
+| RfidFactoryId    | String  | rfid-rfid-factory-id                |
+| RfidProductId    | String  | rfid-rfid-product-id                |
+| RfidTime         | String  | rfid-rfid-time                      |
+| RfidSerialNum    | String  | rfid-rfid-serial-num                |
+| AppExtra         | Number  | others-app-extra                    |
+| MainChannel      | Number  | others-main-channel                 |
+| SlaveChannel     | Number  | others-slave-channel                |
+| Cola             | String  | others-cola                         |
+| ButtomDoor       | Switch  | others-buttom-door                  |
+| RebootCause      | Number  | others-reboot-cause                 |
+| HwVersion        | Number  | others-hw-version                   |
+| IicErrorCount    | Number  | others-iic-error-count              |
+| ManualLevel      | Number  | others-manual-level                 |
+| CountryCode      | Number  | others-National code                |
 
 ### Mi Air Purifier Super (<a name="zhimi-airpurifier-sa1">zhimi.airpurifier.sa1</a>) Channels
 
@@ -1106,7 +1205,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | String  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | String  | Color Mode                          |
@@ -1119,7 +1218,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | String  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | String  | Color Mode                          |
@@ -1132,7 +1231,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | Number  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | Number  | Color Mode                          |
@@ -1145,7 +1244,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | Number  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | Number  | Color Mode                          |
@@ -1158,7 +1257,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | Number  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | Number  | Color Mode                          |
@@ -1171,7 +1270,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | ambientBrightness | Number  | Ambient Brightness                  |
 | delayoff         | Number  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
@@ -1189,7 +1288,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | ambientBrightness | Number  | Ambient Brightness                  |
 | delayoff         | Number  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
@@ -1207,7 +1306,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | Number  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | Number  | Color Mode                          |
@@ -1220,7 +1319,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | Number  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | Number  | Color Mode                          |
@@ -1233,7 +1332,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | Number  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | Number  | Color Mode                          |
@@ -1246,7 +1345,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | Number  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | Number  | Color Mode                          |
@@ -1259,7 +1358,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | Number  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | Number  | Color Mode                          |
@@ -1272,7 +1371,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | ambientBrightness | Number  | Ambient Brightness                  |
 | delayoff         | Number  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
@@ -1290,7 +1389,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | Number  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | Number  | Color Mode                          |
@@ -1303,7 +1402,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | Number  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | Number  | Color Mode                          |
@@ -1316,7 +1415,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | Number  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | Number  | Color Mode                          |
@@ -1329,7 +1428,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | Number  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | Number  | Color Mode                          |
@@ -1340,7 +1439,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | Number  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | Number  | Color Mode                          |
@@ -1351,7 +1450,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | Number  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | Number  | Color Mode                          |
@@ -1362,7 +1461,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | Number  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | Number  | Color Mode                          |
@@ -1373,7 +1472,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | Number  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | Number  | Color Mode                          |
@@ -1384,7 +1483,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | Number  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | Number  | Color Mode                          |
@@ -1395,7 +1494,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | String  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | String  | Color Mode                          |
@@ -1408,7 +1507,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | String  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | String  | Color Mode                          |
@@ -1421,7 +1520,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | Number  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | Number  | Color Mode                          |
@@ -1432,7 +1531,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | String  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | String  | Color Mode                          |
@@ -1445,7 +1544,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | String  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | String  | Color Mode                          |
@@ -1458,7 +1557,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | String  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | String  | Color Mode                          |
@@ -1471,7 +1570,7 @@ e.g. `smarthome:send actionCommand 'upd_timer["1498595904821", "on"]'` would ena
 | Channel          | Type    | Description                         |
 |------------------|---------|-------------------------------------|
 | power            | Switch  | Power                               |
-| brightness       | Number  | Brightness                          |
+| brightness       | Dimmer  | Brightness                          |
 | delayoff         | String  | Shutdown Timer                      |
 | colorTemperature | Number  | Color Temperature                   |
 | colorMode        | String  | Color Mode                          |
@@ -1884,22 +1983,123 @@ note: Autogenerated example. Replace the id (airpurifier) in the channel with yo
 
 ```java
 Group G_airpurifier "Mi Air Purifier 3" <status>
-Switch power "Power" (G_airpurifier) {channel="miio:basic:airpurifier:power"}
-String mode "Mode" (G_airpurifier) {channel="miio:basic:airpurifier:mode"}
-Number humidity "Humidity" (G_airpurifier) {channel="miio:basic:airpurifier:humidity"}
-Number aqi "Air Quality Index" (G_airpurifier) {channel="miio:basic:airpurifier:aqi"}
-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 buzzer "Buzzer Status" (G_airpurifier) {channel="miio:basic:airpurifier:buzzer"}
-Number filtermaxlife "Filter Max Life" (G_airpurifier) {channel="miio:basic:airpurifier:filtermaxlife"}
-Number filterhours "Filter Hours used" (G_airpurifier) {channel="miio:basic:airpurifier:filterhours"}
-Number 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" (G_airpurifier) {channel="miio:basic:airpurifier:temperature"}
-Number purifyvolume "Purivied Volume" (G_airpurifier) {channel="miio:basic:airpurifier:purifyvolume"}
-Switch childlock "Child Lock" (G_airpurifier) {channel="miio:basic:airpurifier:childlock"}
+Number Fault "Air Purifier-Device Fault" (G_airpurifier) {channel="miio:basic:airpurifier:Fault"}
+Switch On "Air Purifier-Switch Status" (G_airpurifier) {channel="miio:basic:airpurifier:On"}
+Number FanLevel "Air Purifier-Fan Level" (G_airpurifier) {channel="miio:basic:airpurifier:FanLevel"}
+Number Mode "Air Purifier-Mode" (G_airpurifier) {channel="miio:basic:airpurifier:Mode"}
+String FirmwareRevision "Device Information-Current Firmware Version" (G_airpurifier) {channel="miio:basic:airpurifier:FirmwareRevision"}
+String Manufacturer "Device Information-Device Manufacturer" (G_airpurifier) {channel="miio:basic:airpurifier:Manufacturer"}
+String Model "Device Information-Device Model" (G_airpurifier) {channel="miio:basic:airpurifier:Model"}
+String SerialNumber "Device Information-Device Serial Number" (G_airpurifier) {channel="miio:basic:airpurifier:SerialNumber"}
+Number Pm25Density "Environment-PM2.5 Density" (G_airpurifier) {channel="miio:basic:airpurifier:Pm25Density"}
+Number RelativeHumidity "Environment-Relative Humidity" (G_airpurifier) {channel="miio:basic:airpurifier:RelativeHumidity"}
+Number Temperature "Environment-Temperature" (G_airpurifier) {channel="miio:basic:airpurifier:Temperature"}
+Number FilterLifeLevel "Filter-Filter Life Level" (G_airpurifier) {channel="miio:basic:airpurifier:FilterLifeLevel"}
+String FilterUsedTime "Filter-Filter Used Time" (G_airpurifier) {channel="miio:basic:airpurifier:FilterUsedTime"}
+Switch Alarm "Alarm-Alarm" (G_airpurifier) {channel="miio:basic:airpurifier:Alarm"}
+Number Brightness "Indicator Light-Brightness" (G_airpurifier) {channel="miio:basic:airpurifier:Brightness"}
+Switch On1 "Indicator Light-Switch Status" (G_airpurifier) {channel="miio:basic:airpurifier:On1"}
+Switch PhysicalControlsLocked "Physical Control Locked-Physical Control Locked" (G_airpurifier) {channel="miio:basic:airpurifier:PhysicalControlsLocked"}
+String ButtonPressed "button-button_pressed" (G_airpurifier) {channel="miio:basic:airpurifier:ButtonPressed"}
+Number FilterMaxTime "filter-time-filter-max-time" (G_airpurifier) {channel="miio:basic:airpurifier:FilterMaxTime"}
+Number FilterHourUsedDebug "filter-time-filter-hour-used-debug" (G_airpurifier) {channel="miio:basic:airpurifier:FilterHourUsedDebug"}
+Number M1Strong "motor-speed-m1-strong" (G_airpurifier) {channel="miio:basic:airpurifier:M1Strong"}
+Number M1High "motor-speed-m1-high" (G_airpurifier) {channel="miio:basic:airpurifier:M1High"}
+Number M1Med "motor-speed-m1-med" (G_airpurifier) {channel="miio:basic:airpurifier:M1Med"}
+Number M1MedL "motor-speed-m1-med-l" (G_airpurifier) {channel="miio:basic:airpurifier:M1MedL"}
+Number M1Low "motor-speed-m1-low" (G_airpurifier) {channel="miio:basic:airpurifier:M1Low"}
+Number M1Silent "motor-speed-m1-silent" (G_airpurifier) {channel="miio:basic:airpurifier:M1Silent"}
+Number M1Favorite "motor-speed-m1-favorite" (G_airpurifier) {channel="miio:basic:airpurifier:M1Favorite"}
+Number Motor1Speed "motor-speed-motor1-speed" (G_airpurifier) {channel="miio:basic:airpurifier:Motor1Speed"}
+Number Motor1SetSpeed "motor-speed-motor1-set-speed" (G_airpurifier) {channel="miio:basic:airpurifier:Motor1SetSpeed"}
+Number FavoriteFanLevel "motor-speed-favorite fan level" (G_airpurifier) {channel="miio:basic:airpurifier:FavoriteFanLevel"}
+Number UseTime "use-time-use-time" (G_airpurifier) {channel="miio:basic:airpurifier:UseTime"}
+Number PurifyVolume "aqi-purify-volume" (G_airpurifier) {channel="miio:basic:airpurifier:PurifyVolume"}
+Number AverageAqi "aqi-average-aqi" (G_airpurifier) {channel="miio:basic:airpurifier:AverageAqi"}
+Number AverageAqiCnt "aqi-average-aqi-cnt" (G_airpurifier) {channel="miio:basic:airpurifier:AverageAqiCnt"}
+String AqiZone "aqi-aqi-zone" (G_airpurifier) {channel="miio:basic:airpurifier:AqiZone"}
+String SensorState "aqi-sensor-state" (G_airpurifier) {channel="miio:basic:airpurifier:SensorState"}
+Number AqiGoodh "aqi-aqi-goodh" (G_airpurifier) {channel="miio:basic:airpurifier:AqiGoodh"}
+Number AqiRunstate "aqi-aqi-runstate" (G_airpurifier) {channel="miio:basic:airpurifier:AqiRunstate"}
+Number AqiState "aqi-aqi-state" (G_airpurifier) {channel="miio:basic:airpurifier:AqiState"}
+Number AqiUpdataHeartbeat "aqi-aqi-updata-heartbeat" (G_airpurifier) {channel="miio:basic:airpurifier:AqiUpdataHeartbeat"}
+String RfidTag "rfid-rfid-tag" (G_airpurifier) {channel="miio:basic:airpurifier:RfidTag"}
+String RfidFactoryId "rfid-rfid-factory-id" (G_airpurifier) {channel="miio:basic:airpurifier:RfidFactoryId"}
+String RfidProductId "rfid-rfid-product-id" (G_airpurifier) {channel="miio:basic:airpurifier:RfidProductId"}
+String RfidTime "rfid-rfid-time" (G_airpurifier) {channel="miio:basic:airpurifier:RfidTime"}
+String RfidSerialNum "rfid-rfid-serial-num" (G_airpurifier) {channel="miio:basic:airpurifier:RfidSerialNum"}
+Number AppExtra "others-app-extra" (G_airpurifier) {channel="miio:basic:airpurifier:AppExtra"}
+Number MainChannel "others-main-channel" (G_airpurifier) {channel="miio:basic:airpurifier:MainChannel"}
+Number SlaveChannel "others-slave-channel" (G_airpurifier) {channel="miio:basic:airpurifier:SlaveChannel"}
+String Cola "others-cola" (G_airpurifier) {channel="miio:basic:airpurifier:Cola"}
+Switch ButtomDoor "others-buttom-door" (G_airpurifier) {channel="miio:basic:airpurifier:ButtomDoor"}
+Number RebootCause "others-reboot_cause" (G_airpurifier) {channel="miio:basic:airpurifier:RebootCause"}
+Number HwVersion "others-hw-version" (G_airpurifier) {channel="miio:basic:airpurifier:HwVersion"}
+Number I2cErrorCount "others-i2c-error-count" (G_airpurifier) {channel="miio:basic:airpurifier:I2cErrorCount"}
+Number ManualLevel "others-manual-level" (G_airpurifier) {channel="miio:basic:airpurifier:ManualLevel"}
+```
+
+### Mi Air Purifier 3 (zhimi.airpurifier.mb3) item file lines
+
+note: Autogenerated example. Replace the id (airpurifier) in the channel with your own. Replace `basic` with `generic` in the thing UID depending on how your thing was discovered.
+
+```java
+Group G_airpurifier "Mi Air Purifier 3" <status>
+Number Fault "Air Purifier-fault" (G_airpurifier) {channel="miio:basic:airpurifier:Fault"}
+Switch On "Air Purifier-Switch Status" (G_airpurifier) {channel="miio:basic:airpurifier:On"}
+Number FanLevel "Air Purifier-Fan Level" (G_airpurifier) {channel="miio:basic:airpurifier:FanLevel"}
+Number Mode "Air Purifier-Mode" (G_airpurifier) {channel="miio:basic:airpurifier:Mode"}
+String FirmwareRevision "Device Information-Current Firmware Version" (G_airpurifier) {channel="miio:basic:airpurifier:FirmwareRevision"}
+String Manufacturer "Device Information-Device Manufacturer" (G_airpurifier) {channel="miio:basic:airpurifier:Manufacturer"}
+String Model "Device Information-Device Model" (G_airpurifier) {channel="miio:basic:airpurifier:Model"}
+String SerialNumber "Device Information-Device Serial Number" (G_airpurifier) {channel="miio:basic:airpurifier:SerialNumber"}
+Number Pm25Density "Environment-PM2.5" (G_airpurifier) {channel="miio:basic:airpurifier:Pm25Density"}
+Number RelativeHumidity "Environment-Relative Humidity" (G_airpurifier) {channel="miio:basic:airpurifier:RelativeHumidity"}
+Number Temperature "Environment-Temperature" (G_airpurifier) {channel="miio:basic:airpurifier:Temperature"}
+Number FilterLifeLevel "Filter-Filter Life Level" (G_airpurifier) {channel="miio:basic:airpurifier:FilterLifeLevel"}
+String FilterUsedTime "Filter-Filter Used Time" (G_airpurifier) {channel="miio:basic:airpurifier:FilterUsedTime"}
+Switch Alarm "Alarm-Alarm" (G_airpurifier) {channel="miio:basic:airpurifier:Alarm"}
+Number Brightness "Indicator Light-brightness" (G_airpurifier) {channel="miio:basic:airpurifier:Brightness"}
+Switch On1 "Indicator Light-Switch Status" (G_airpurifier) {channel="miio:basic:airpurifier:On1"}
+Switch PhysicalControlsLocked "Physical Control Locked-Physical Control Locked" (G_airpurifier) {channel="miio:basic:airpurifier:PhysicalControlsLocked"}
+String ButtonPressed "Button-button-pressed" (G_airpurifier) {channel="miio:basic:airpurifier:ButtonPressed"}
+Number FilterMaxTime "filter-time-filter-max-time" (G_airpurifier) {channel="miio:basic:airpurifier:FilterMaxTime"}
+Number FilterHourDebug "filter-time-filter-hour-debug" (G_airpurifier) {channel="miio:basic:airpurifier:FilterHourDebug"}
+Number MotorStrong "motor-speed-motor-strong" (G_airpurifier) {channel="miio:basic:airpurifier:MotorStrong"}
+Number MotorHigh "motor-speed-motor-high" (G_airpurifier) {channel="miio:basic:airpurifier:MotorHigh"}
+Number MotorMed "motor-speed-motor-med" (G_airpurifier) {channel="miio:basic:airpurifier:MotorMed"}
+Number MotorMedL "motor-speed-motor-med-l" (G_airpurifier) {channel="miio:basic:airpurifier:MotorMedL"}
+Number MotorLow "motor-speed-motor-low" (G_airpurifier) {channel="miio:basic:airpurifier:MotorLow"}
+Number MotorSilent "motor-speed-motor-silent" (G_airpurifier) {channel="miio:basic:airpurifier:MotorSilent"}
+Number MotorFavorite "motor-speed-motor-favorite" (G_airpurifier) {channel="miio:basic:airpurifier:MotorFavorite"}
+Number MotorSpeed "motor-speed-motor-speed" (G_airpurifier) {channel="miio:basic:airpurifier:MotorSpeed"}
+Number MotorSetSpeed "motor-speed-motor-set-speed" (G_airpurifier) {channel="miio:basic:airpurifier:MotorSetSpeed"}
+Number FavoriteFanLevel "motor-speed-favorite-fan-level" (G_airpurifier) {channel="miio:basic:airpurifier:FavoriteFanLevel"}
+Number UseTime "use-time-use-time" (G_airpurifier) {channel="miio:basic:airpurifier:UseTime"}
+Number PurifyVolume "aqi-purify-volume" (G_airpurifier) {channel="miio:basic:airpurifier:PurifyVolume"}
+Number AverageAqi "aqi-average-aqi" (G_airpurifier) {channel="miio:basic:airpurifier:AverageAqi"}
+Number AverageAqiCnt "aqi-average-aqi-cnt" (G_airpurifier) {channel="miio:basic:airpurifier:AverageAqiCnt"}
+String AqiZone "aqi-aqi-zone" (G_airpurifier) {channel="miio:basic:airpurifier:AqiZone"}
+String SensorState "aqi-sensor-state" (G_airpurifier) {channel="miio:basic:airpurifier:SensorState"}
+Number AqiGoodh "aqi-aqi-goodh" (G_airpurifier) {channel="miio:basic:airpurifier:AqiGoodh"}
+Number AqiRunstate "aqi-aqi-runstate" (G_airpurifier) {channel="miio:basic:airpurifier:AqiRunstate"}
+Number AqiState "aqi-aqi-state" (G_airpurifier) {channel="miio:basic:airpurifier:AqiState"}
+Number AqiUpdataHeartbeat "aqi-aqi-updata-heartbeat" (G_airpurifier) {channel="miio:basic:airpurifier:AqiUpdataHeartbeat"}
+String RfidTag "rfid-rfid-tag" (G_airpurifier) {channel="miio:basic:airpurifier:RfidTag"}
+String RfidFactoryId "rfid-rfid-factory-id" (G_airpurifier) {channel="miio:basic:airpurifier:RfidFactoryId"}
+String RfidProductId "rfid-rfid-product-id" (G_airpurifier) {channel="miio:basic:airpurifier:RfidProductId"}
+String RfidTime "rfid-rfid-time" (G_airpurifier) {channel="miio:basic:airpurifier:RfidTime"}
+String RfidSerialNum "rfid-rfid-serial-num" (G_airpurifier) {channel="miio:basic:airpurifier:RfidSerialNum"}
+Number AppExtra "others-app-extra" (G_airpurifier) {channel="miio:basic:airpurifier:AppExtra"}
+Number MainChannel "others-main-channel" (G_airpurifier) {channel="miio:basic:airpurifier:MainChannel"}
+Number SlaveChannel "others-slave-channel" (G_airpurifier) {channel="miio:basic:airpurifier:SlaveChannel"}
+String Cola "others-cola" (G_airpurifier) {channel="miio:basic:airpurifier:Cola"}
+Switch ButtomDoor "others-buttom-door" (G_airpurifier) {channel="miio:basic:airpurifier:ButtomDoor"}
+Number RebootCause "others-reboot-cause" (G_airpurifier) {channel="miio:basic:airpurifier:RebootCause"}
+Number HwVersion "others-hw-version" (G_airpurifier) {channel="miio:basic:airpurifier:HwVersion"}
+Number IicErrorCount "others-iic-error-count" (G_airpurifier) {channel="miio:basic:airpurifier:IicErrorCount"}
+Number ManualLevel "others-manual-level" (G_airpurifier) {channel="miio:basic:airpurifier:ManualLevel"}
+Number CountryCode "others-National code" (G_airpurifier) {channel="miio:basic:airpurifier:CountryCode"}
 ```
 
 ### Mi Air Purifier Super (zhimi.airpurifier.sa1) item file lines
@@ -2558,7 +2758,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight Lamp" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 String delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 String colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2574,7 +2774,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight Lamp" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 String delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 String colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2590,7 +2790,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight LED Ceiling Lamp" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 Number delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 Number colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2606,7 +2806,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight LED Ceiling Lamp v2" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 Number delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 Number colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2622,7 +2822,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight LED Ceiling Lamp v3" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 Number delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 Number colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2638,7 +2838,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight LED Ceiling Lamp v4 (JIAOYUE 650 RGB)" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 Number ambientBrightness "Ambient Brightness" (G_light) {channel="miio:basic:light:ambientBrightness"}
 Number delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
@@ -2659,7 +2859,7 @@ note: Autogenerated example. Replace the id (ceiling4) in the channel with your
 ```java
 Group G_ceiling4 "Yeelight LED Ceiling Lamp v4" <status>
 Switch power "Power" (G_ceiling4) {channel="miio:basic:ceiling4:power"}
-Number brightness "Brightness" (G_ceiling4) {channel="miio:basic:ceiling4:brightness"}
+Dimmer brightness "Brightness" (G_ceiling4) {channel="miio:basic:ceiling4:brightness"}
 Number ambientBrightness "Ambient Brightness" (G_ceiling4) {channel="miio:basic:ceiling4:ambientBrightness"}
 Number delayoff "Shutdown Timer" (G_ceiling4) {channel="miio:basic:ceiling4:delayoff"}
 Number colorTemperature "Color Temperature" (G_ceiling4) {channel="miio:basic:ceiling4:colorTemperature"}
@@ -2680,7 +2880,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight LED Ceiling Lamp v5" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 Number delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 Number colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2696,7 +2896,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight LED Ceiling Lamp v6" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 Number delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 Number colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2712,7 +2912,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight LED Ceiling Lamp v7" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 Number delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 Number colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2728,7 +2928,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight LED Ceiling Lamp v8" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 Number delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 Number colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2744,7 +2944,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight LED Ceiling Lamp v9" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 Number delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 Number colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2760,7 +2960,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight LED Meteorite lamp" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 Number ambientBrightness "Ambient Brightness" (G_light) {channel="miio:basic:light:ambientBrightness"}
 Number delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
@@ -2781,7 +2981,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight LED Ceiling Lamp v11" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 Number delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 Number colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2797,7 +2997,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight LED Ceiling Lamp v12" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 Number delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 Number colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2813,7 +3013,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight LED Ceiling Lamp v13" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 Number delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 Number colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2829,7 +3029,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight ct2" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 Number delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 Number colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2843,7 +3043,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight White Bulb" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 Number delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 Number colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2857,7 +3057,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight White Bulb v2" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 Number delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 Number colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2871,7 +3071,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 Number delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 Number colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2885,7 +3085,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 Number delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 Number colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2899,7 +3099,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 Number delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 Number colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2913,7 +3113,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight Strip" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 String delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 String colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2929,7 +3129,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight Strip" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 String delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 String colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2945,7 +3145,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 Number delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 Number colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2959,7 +3159,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight Color Bulb" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 String delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 String colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2975,7 +3175,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight Color Bulb YLDP06YL 10W" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 String delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 String colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -2991,7 +3191,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight Color Bulb YLDP02YL 9W" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 String delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 String colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
@@ -3007,7 +3207,7 @@ note: Autogenerated example. Replace the id (light) in the channel with your own
 ```java
 Group G_light "Yeelight Bulb YLDP13YL (8,5W)" <status>
 Switch power "Power" (G_light) {channel="miio:basic:light:power"}
-Number brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
+Dimmer brightness "Brightness" (G_light) {channel="miio:basic:light:brightness"}
 String delayoff "Shutdown Timer" (G_light) {channel="miio:basic:light:delayoff"}
 Number colorTemperature "Color Temperature" (G_light) {channel="miio:basic:light:colorTemperature"}
 String colorMode "Color Mode" (G_light) {channel="miio:basic:light:colorMode"}
diff --git a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/MiIoCommand.java b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/MiIoCommand.java
index d1772d71b60a7..c3103ebe91dbe 100644
--- a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/MiIoCommand.java
+++ b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/MiIoCommand.java
@@ -37,6 +37,7 @@ public enum MiIoCommand {
     SET_BRIGHT("set_bright"),
     SET_WIFI_LET("set_wifi_led"),
     SET_FAVORITE("set_level_favorite"),
+    ACTION("action"),
 
     // vacuum commands
     START_VACUUM("app_start"),
diff --git a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/MiIoDevices.java b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/MiIoDevices.java
index 8ffc7f606ab2f..95c78cf487403 100644
--- a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/MiIoDevices.java
+++ b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/MiIoDevices.java
@@ -47,6 +47,7 @@ public enum MiIoDevices {
     AIR_PURIFIERMA1("zhimi.airpurifier.ma1", "Mi Air Purifier MS1", THING_TYPE_BASIC),
     AIR_PURIFIERMA2("zhimi.airpurifier.ma2", "Mi Air Purifier MS2", THING_TYPE_BASIC),
     AIR_PURIFIERMA4("zhimi.airpurifier.ma4", "Mi Air Purifier 3", THING_TYPE_BASIC),
+    AIR_PURIFIERMMB3("zhimi.airpurifier.mb3", "Mi Air Purifier 3", THING_TYPE_BASIC),
     AIR_PURIFIERSA1("zhimi.airpurifier.sa1", "Mi Air Purifier Super", THING_TYPE_BASIC),
     AIR_PURIFIERSA2("zhimi.airpurifier.sa2", "Mi Air Purifier Super 2", THING_TYPE_BASIC),
     AIRFRESH_T2017("dmaker.airfresh.t2017", "Mi Fresh Air Ventilator", THING_TYPE_BASIC),
diff --git a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/basic/ActionConditions.java b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/basic/ActionConditions.java
new file mode 100644
index 0000000000000..fdc92223f03b2
--- /dev/null
+++ b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/basic/ActionConditions.java
@@ -0,0 +1,104 @@
+/**
+ * Copyright (c) 2010-2020 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.basic;
+
+import java.util.Map;
+
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonPrimitive;
+
+/**
+ * Conditional Execution of rules
+ *
+ * @author Marcel Verpaalen - Initial contribution
+ */
+@NonNullByDefault
+public class ActionConditions {
+    private static final Logger LOGGER = LoggerFactory.getLogger(ActionConditions.class);
+
+    /**
+     * Check if it matches the firmware version.
+     *
+     * @param condition
+     * @param deviceVariables
+     * @param value
+     * @return value in case firmware is matching, return null if not
+     */
+    private static @Nullable JsonElement firmwareCheck(MiIoDeviceActionCondition condition,
+            Map<String, Object> deviceVariables, @Nullable JsonElement value) {
+        // TODO: placeholder for firmware version check to allow for firmware dependent actions
+        return value;
+    }
+
+    /**
+     * Check if the value is a valid brightness between 1-99.
+     * If <1 returns Off, if >99 returns On to activate the power On/Off switch
+     *
+     * @param value
+     * @return
+     */
+    private static @Nullable JsonElement brightness(@Nullable JsonElement value) {
+        if (value != null && value.isJsonPrimitive() && value.getAsJsonPrimitive().isNumber()) {
+            int intVal = value.getAsInt();
+            if (intVal > 99) {
+                return new JsonPrimitive("on");
+            }
+            if (intVal < 1) {
+                return new JsonPrimitive("off");
+            }
+        } else {
+            LOGGER.debug("Could not parse brightness. Value '{}' is not an int", value);
+        }
+        return null;
+    }
+
+    /**
+     * Check if the value is a valid brightness between 1-99 which can be send to brightness channel.
+     * If not returns a null
+     *
+     * @param value
+     * @return
+     */
+    private static @Nullable JsonElement brightnessExists(@Nullable JsonElement value) {
+        if (value != null && value.isJsonPrimitive() && value.getAsJsonPrimitive().isNumber()) {
+            int intVal = value.getAsInt();
+            if (intVal > 0 && intVal < 99) {
+                return value;
+            }
+        } else {
+            LOGGER.debug("Could not parse brightness. Value '{}' is not an int", value);
+        }
+        return null;
+    }
+
+    public static @Nullable JsonElement executeAction(MiIoDeviceActionCondition condition,
+            Map<String, Object> deviceVariables, @Nullable JsonElement value) {
+        switch (condition.getName().toUpperCase()) {
+            case "FIRMWARE":
+                return firmwareCheck(condition, deviceVariables, value);
+            case "BRIGHTNESSEXISTING":
+                return brightnessExists(value);
+            case "BRIGHTNESSONOFF":
+                return brightness(value);
+            default:
+                LOGGER.debug("Condition {} not found. Returning '{}'", condition,
+                        value != null ? value.toString() : "");
+                return value;
+        }
+    }
+}
diff --git a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/basic/MiIoBasicChannel.java b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/basic/MiIoBasicChannel.java
index 2ca570b1f13f4..975dad9e58d65 100644
--- a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/basic/MiIoBasicChannel.java
+++ b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/basic/MiIoBasicChannel.java
@@ -35,6 +35,12 @@ public class MiIoBasicChannel {
     @SerializedName("property")
     @Expose
     private @Nullable String property;
+    @SerializedName("siid")
+    @Expose
+    private @Nullable Integer siid;
+    @SerializedName("piid")
+    @Expose
+    private @Nullable Integer piid;
     @SerializedName("friendlyName")
     @Expose
     private @Nullable String friendlyName;
@@ -69,6 +75,40 @@ public void setProperty(String property) {
         this.property = property;
     }
 
+    public int getSiid() {
+        final Integer siid = this.siid;
+        if (siid != null) {
+            return siid.intValue();
+        } else {
+            return 0;
+        }
+    }
+
+    public void setSiid(Integer siid) {
+        this.siid = siid;
+    }
+
+    public int getPiid() {
+        final Integer piid = this.piid;
+        if (piid != null) {
+            return piid.intValue();
+        } else {
+            return 0;
+        }
+    }
+
+    public void setPiid(Integer piid) {
+        this.piid = piid;
+    }
+
+    public boolean isMiOt() {
+        if (piid != null && siid != null && (getPiid() != 0 || getSiid() != 0)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
     public String getFriendlyName() {
         final String fn = friendlyName;
         return (fn == null || type == null || fn.isEmpty()) ? getChannel() : fn;
diff --git a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/basic/MiIoDeviceAction.java b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/basic/MiIoDeviceAction.java
index 27db674df3c13..7a2f8254a8433 100644
--- a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/basic/MiIoDeviceAction.java
+++ b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/basic/MiIoDeviceAction.java
@@ -33,19 +33,12 @@ public class MiIoDeviceAction {
     @SerializedName("parameterType")
     @Expose
     private CommandParameterType commandParameterType = CommandParameterType.EMPTY;
-    @SerializedName("preCommandParameter1")
+    @SerializedName("parameters")
     @Expose
-    private @Nullable String preCommandParameter1;
-    @SerializedName("parameter1")
-    @Expose
-    private @Nullable String parameter1;
-    @SerializedName("parameter2")
-    @Expose
-    private @Nullable String parameter2;
-    @SerializedName("parameter3")
-    @Expose
-    private @Nullable String parameter3;
     private @Nullable JsonArray parameters;
+    @SerializedName("condition")
+    @Expose
+    private @Nullable MiIoDeviceActionCondition condition;
 
     public JsonArray getParameters() {
         final @Nullable JsonArray parameter = this.parameters;
@@ -77,42 +70,17 @@ public void setparameterType(String type) {
         this.commandParameterType = org.openhab.binding.miio.internal.basic.CommandParameterType.fromString(type);
     }
 
-    public @Nullable String getPreCommandParameter1() {
-        return preCommandParameter1;
-    }
-
-    public void setPreCommandParameter1(String preCommandParameter1) {
-        this.preCommandParameter1 = preCommandParameter1;
-    }
-
-    public @Nullable String getParameter1() {
-        return parameter1;
-    }
-
-    public void setParameter1(String parameter1) {
-        this.parameter1 = parameter1;
-    }
-
-    public @Nullable String getParameter2() {
-        return parameter2;
-    }
-
-    public void setParameter2(String parameter2) {
-        this.parameter1 = parameter2;
-    }
-
-    public @Nullable String getParameter3() {
-        return parameter3;
+    public @Nullable MiIoDeviceActionCondition getCondition() {
+        return condition;
     }
 
-    public void setParameter3(String parameter3) {
-        this.parameter1 = parameter3;
+    public void setCondition(@Nullable MiIoDeviceActionCondition condition) {
+        this.condition = condition;
     }
 
     @Override
     public String toString() {
         return "MiIoDeviceAction [command=" + command + ", commandParameterType=" + commandParameterType
-                + ", preCommandParameter1=" + preCommandParameter1 + ", parameter1=" + parameter1 + ", parameter2="
-                + parameter2 + ", parameter3=" + parameter3 + "]";
+                + (parameters != null ? ", parameters=" + getParameters().toString() : "") + "]";
     }
 }
diff --git a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/basic/MiIoDeviceActionCondition.java b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/basic/MiIoDeviceActionCondition.java
new file mode 100644
index 0000000000000..d1b96621648d7
--- /dev/null
+++ b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/basic/MiIoDeviceActionCondition.java
@@ -0,0 +1,61 @@
+/**
+ * Copyright (c) 2010-2020 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.basic;
+
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonNull;
+import com.google.gson.annotations.Expose;
+import com.google.gson.annotations.SerializedName;
+
+/**
+ * Mapping actions conditions
+ *
+ * @author Marcel Verpaalen - Initial contribution
+ */
+@NonNullByDefault
+public class MiIoDeviceActionCondition {
+
+    @SerializedName("name")
+    @Expose
+    private @Nullable String name;
+    @SerializedName("parameters")
+    @Expose
+    private @Nullable JsonElement parameters;
+
+    public String getName() {
+        final @Nullable String command = this.name;
+        return command != null ? command : "";
+    }
+
+    public void setName(String command) {
+        this.name = command;
+    }
+
+    public JsonElement getParameters() {
+        final JsonElement parameter = this.parameters;
+        return parameter != null ? parameter : JsonNull.INSTANCE;
+    }
+
+    public void setParameters(JsonArray parameters) {
+        this.parameters = parameters;
+    }
+
+    @Override
+    public String toString() {
+        return "MiIoDeviceActionCondition [condition=" + name + ",parameters=" + getParameters().toString() + "]";
+    }
+}
diff --git a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/cloud/CloudConnector.java b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/cloud/CloudConnector.java
index 346a1f9e3666f..b42f504836aae 100644
--- a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/cloud/CloudConnector.java
+++ b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/cloud/CloudConnector.java
@@ -159,7 +159,7 @@ public void setCredentials(@Nullable String username, @Nullable String password,
 
     private boolean logon() {
         if (username.isEmpty() || password.isEmpty()) {
-            logger.info("No Xiaomi cloud credentials. Cloud connectivity diabled");
+            logger.info("No Xiaomi cloud credentials. Cloud connectivity disabled");
             logger.debug("Logon details: username: '{}', pass: '{}', country: '{}'", username,
                     password.replaceAll(".", "*"), country);
             return connected;
diff --git a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/handler/MiIoAbstractHandler.java b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/handler/MiIoAbstractHandler.java
index bcd493ffc0d25..426e2c5fe4570 100644
--- a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/handler/MiIoAbstractHandler.java
+++ b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/handler/MiIoAbstractHandler.java
@@ -372,6 +372,7 @@ private void updateProperties(JsonObject miioInfo) {
         if (info.mcuFwVer != null) {
             properties.put("mcuFirmware", info.mcuFwVer);
         }
+        deviceVariables.putAll(properties);
         updateProperties(properties);
     }
 
diff --git a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/handler/MiIoBasicHandler.java b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/handler/MiIoBasicHandler.java
index 3c6c3b32f61f5..43c55131f1414 100644
--- a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/handler/MiIoBasicHandler.java
+++ b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/handler/MiIoBasicHandler.java
@@ -45,12 +45,14 @@
 import org.openhab.binding.miio.internal.MiIoCryptoException;
 import org.openhab.binding.miio.internal.MiIoSendCommand;
 import org.openhab.binding.miio.internal.Utils;
+import org.openhab.binding.miio.internal.basic.ActionConditions;
 import org.openhab.binding.miio.internal.basic.CommandParameterType;
 import org.openhab.binding.miio.internal.basic.Conversions;
 import org.openhab.binding.miio.internal.basic.MiIoBasicChannel;
 import org.openhab.binding.miio.internal.basic.MiIoBasicDevice;
 import org.openhab.binding.miio.internal.basic.MiIoDatabaseWatchService;
 import org.openhab.binding.miio.internal.basic.MiIoDeviceAction;
+import org.openhab.binding.miio.internal.basic.MiIoDeviceActionCondition;
 import org.openhab.binding.miio.internal.transport.MiIoAsyncCommunication;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -84,7 +86,7 @@ public class MiIoBasicHandler extends MiIoAbstractHandler {
     List<MiIoBasicChannel> refreshList = new ArrayList<>();
 
     private @Nullable MiIoBasicDevice miioDevice;
-    private Map<String, MiIoDeviceAction> actions = new HashMap<>();
+    private Map<ChannelUID, MiIoBasicChannel> actions = new HashMap<>();
 
     public MiIoBasicHandler(Thing thing, MiIoDatabaseWatchService miIoDatabaseWatchService) {
         super(thing, miIoDatabaseWatchService);
@@ -130,73 +132,94 @@ public void handleCommand(ChannelUID channelUID, Command command) {
         }
         logger.debug("Locating action for channel {}: {}", channelUID.getId(), command);
         if (!actions.isEmpty()) {
-            if (actions.containsKey(channelUID.getId())) {
+            if (actions.containsKey(channelUID)) {
                 int valuePos = 0;
-                @Nullable
-                JsonElement value = null;
-                MiIoDeviceAction action = actions.get(channelUID.getId());
-                JsonArray parameters = actions.get(channelUID.getId()).getParameters();
-                for (int i = 0; i < action.getParameters().size(); i++) {
-                    JsonElement p = action.getParameters().get(i);
-                    if (p.isJsonPrimitive() && p.getAsString().toLowerCase().contains("$value$")) {
-                        valuePos = i;
+                MiIoBasicChannel miIoBasicChannel = actions.get(channelUID);
+                for (MiIoDeviceAction action : miIoBasicChannel.getActions()) {
+                    @Nullable
+                    JsonElement value = null;
+                    JsonArray parameters = action.getParameters();
+                    for (int i = 0; i < action.getParameters().size(); i++) {
+                        JsonElement p = action.getParameters().get(i);
+                        if (p.isJsonPrimitive() && p.getAsString().toLowerCase().contains("$value$")) {
+                            valuePos = i;
+                        }
                     }
-                }
-                String cmd = actions.get(channelUID.getId()).getCommand();
-                CommandParameterType paramType = actions.get(channelUID.getId()).getparameterType();
-                if (paramType == CommandParameterType.COLOR) {
-                    if (command instanceof HSBType) {
-                        HSBType hsb = (HSBType) command;
-                        Color color = Color.getHSBColor(hsb.getHue().floatValue() / 360,
-                                hsb.getSaturation().floatValue() / 100, hsb.getBrightness().floatValue() / 100);
-                        value = new JsonPrimitive(
-                                (color.getRed() * 65536) + (color.getGreen() * 256) + color.getBlue());
+                    String cmd = action.getCommand();
+                    CommandParameterType paramType = action.getparameterType();
+                    if (paramType == CommandParameterType.COLOR) {
+                        if (command instanceof HSBType) {
+                            HSBType hsb = (HSBType) command;
+                            Color color = Color.getHSBColor(hsb.getHue().floatValue() / 360,
+                                    hsb.getSaturation().floatValue() / 100, hsb.getBrightness().floatValue() / 100);
+                            value = new JsonPrimitive(
+                                    (color.getRed() << 16) + (color.getGreen() << 8) + color.getBlue());
+                        } else if (command instanceof DecimalType) {
+                            // actually brightness is being set instead of a color
+                            cmd = "set_bright";
+                            value = new JsonPrimitive(((DecimalType) command).toBigDecimal());
+                        } else {
+                            logger.debug("Unsupported command for COLOR: {}", command);
+                        }
+                    } else if (command instanceof OnOffType) {
+                        if (paramType == CommandParameterType.ONOFF) {
+                            value = new JsonPrimitive(command == OnOffType.ON ? "on" : "off");
+                        } else if (paramType == CommandParameterType.ONOFFPARA) {
+                            cmd = cmd.replace("*", command == OnOffType.ON ? "on" : "off");
+                        } else if (paramType == CommandParameterType.ONOFFBOOL) {
+                            boolean boolCommand = command == OnOffType.ON;
+                            value = new JsonPrimitive(boolCommand);
+                        } else if (paramType == CommandParameterType.ONOFFBOOLSTRING) {
+                            value = new JsonPrimitive(command == OnOffType.ON ? "true" : "false");
+                        }
                     } else if (command instanceof DecimalType) {
-                        // actually brightness is being set instead of a color
-                        cmd = "set_bright";
                         value = new JsonPrimitive(((DecimalType) command).toBigDecimal());
+                    } else if (command instanceof StringType) {
+                        if (paramType == CommandParameterType.STRING) {
+                            value = new JsonPrimitive(command.toString().toLowerCase());
+                        } else if (paramType == CommandParameterType.CUSTOMSTRING) {
+                            value = new JsonPrimitive(parameters.get(valuePos).getAsString().replace("$value",
+                                    command.toString().toLowerCase()));
+                        }
                     } else {
-                        logger.debug("Unsupported command for COLOR: {}", command);
+                        value = new JsonPrimitive(command.toString().toLowerCase());
                     }
-                } else if (command instanceof OnOffType) {
-                    if (paramType == CommandParameterType.ONOFF) {
-                        value = new JsonPrimitive(command == OnOffType.ON ? "on" : "off");
-                    } else if (paramType == CommandParameterType.ONOFFPARA) {
-                        cmd = cmd.replace("*", command == OnOffType.ON ? "on" : "off");
-                    } else if (paramType == CommandParameterType.ONOFFBOOL) {
-                        boolean boolCommand = command == OnOffType.ON;
-                        value = new JsonPrimitive(boolCommand);
-                    } else if (paramType == CommandParameterType.ONOFFBOOLSTRING) {
-                        value = new JsonPrimitive(command == OnOffType.ON ? "true" : "false");
+                    // Check for miot channel
+                    if (miIoBasicChannel.isMiOt()) {
+                        value = miotTransform(miIoBasicChannel, value);
                     }
-                } else if (command instanceof DecimalType) {
-                    value = new JsonPrimitive(((DecimalType) command).toBigDecimal());
-                } else if (command instanceof StringType) {
-                    if (paramType == CommandParameterType.STRING) {
-                        value = new JsonPrimitive(command.toString().toLowerCase());
-                    } else if (paramType == CommandParameterType.CUSTOMSTRING) {
-                        value = new JsonPrimitive(parameters.get(valuePos).getAsString().replace("$value",
-                                command.toString().toLowerCase()));
+                    final MiIoDeviceActionCondition miIoDeviceActionCondition = action.getCondition();
+                    if (miIoDeviceActionCondition != null) {
+                        value = ActionConditions.executeAction(miIoDeviceActionCondition, deviceVariables, value);
                     }
-                } else {
-                    value = new JsonPrimitive(command.toString().toLowerCase());
-                }
-                if (paramType != CommandParameterType.NONE && value != null) {
-                    if (parameters.size() > 0) {
-                        parameters.set(valuePos, value);
+                    if (paramType != CommandParameterType.NONE && value != null) {
+                        if (parameters.size() > 0) {
+                            parameters.set(valuePos, value);
+                        } else {
+                            parameters.add(value);
+                        }
+                    }
+                    if (paramType != CommandParameterType.EMPTY) {
+                        cmd = cmd + parameters.toString();
+                    }
+                    if (value != null) {
+                        logger.debug("Sending command {}", cmd);
+                        sendCommand(cmd);
                     } else {
-                        parameters.add(value);
+                        if (miIoDeviceActionCondition != null) {
+                            logger.debug("Conditional command {} not send, condition {} not met", cmd,
+                                    miIoDeviceActionCondition.getName());
+                        } else {
+                            logger.debug("Command not send. Value null");
+                        }
                     }
                 }
-                if (paramType != CommandParameterType.EMPTY) {
-                    cmd = cmd + parameters.toString();
-                }
-                logger.debug("Sending command {}", cmd);
-                sendCommand(cmd);
             } else {
                 logger.debug("Channel Id {} not in mapping.", channelUID.getId());
-                for (String a : actions.keySet()) {
-                    logger.trace("Available entries: {} : {}", a, actions.get(a).getCommand());
+                if (logger.isTraceEnabled()) {
+                    for (ChannelUID a : actions.keySet()) {
+                        logger.trace("Available entries: {} : {}", a, actions.get(a).getFriendlyName());
+                    }
                 }
             }
             updateDataCache.invalidateValue();
@@ -206,6 +229,15 @@ public void handleCommand(ChannelUID channelUID, Command command) {
         }
     }
 
+    private @Nullable JsonElement miotTransform(MiIoBasicChannel miIoBasicChannel, @Nullable JsonElement value) {
+        JsonObject json = new JsonObject();
+        json.addProperty("did", miIoBasicChannel.getChannel());
+        json.addProperty("siid", miIoBasicChannel.getSiid());
+        json.addProperty("piid", miIoBasicChannel.getPiid());
+        json.add("value", value);
+        return json;
+    }
+
     @Override
     protected synchronized void updateData() {
         logger.debug("Periodic update for '{}' ({})", getThing().getUID().toString(), getThing().getThingTypeUID());
@@ -233,7 +265,17 @@ private boolean refreshProperties(MiIoBasicDevice device) {
         int maxProperties = device.getDevice().getMaxProperties();
         JsonArray getPropString = new JsonArray();
         for (MiIoBasicChannel miChannel : refreshList) {
-            getPropString.add(miChannel.getProperty());
+            JsonElement property;
+            if (miChannel.isMiOt()) {
+                JsonObject json = new JsonObject();
+                json.addProperty("did", miChannel.getProperty());
+                json.addProperty("siid", miChannel.getSiid());
+                json.addProperty("piid", miChannel.getPiid());
+                property = json;
+            } else {
+                property = new JsonPrimitive(miChannel.getProperty());
+            }
+            getPropString.add(property);
             if (getPropString.size() >= maxProperties) {
                 sendRefreshProperties(command, getPropString);
                 getPropString = new JsonArray();
@@ -309,12 +351,13 @@ private boolean buildChannelStructure(String deviceName) {
             if (device != null) {
                 for (MiIoBasicChannel miChannel : device.getDevice().getChannels()) {
                     logger.debug("properties {}", miChannel);
-                    for (MiIoDeviceAction action : miChannel.getActions()) {
-                        actions.put(miChannel.getChannel(), action);
-                    }
                     if (!miChannel.getType().isEmpty()) {
-                        channelsAdded += addChannel(thingBuilder, miChannel.getChannel(), miChannel.getChannelType(),
-                                miChannel.getType(), miChannel.getFriendlyName()) ? 1 : 0;
+                        ChannelUID channelUID = addChannel(thingBuilder, miChannel.getChannel(),
+                                miChannel.getChannelType(), miChannel.getType(), miChannel.getFriendlyName());
+                        if (channelUID != null) {
+                            actions.put(channelUID, miChannel);
+                            channelsAdded++;
+                        }
                     }
                 }
             }
@@ -334,12 +377,12 @@ private boolean buildChannelStructure(String deviceName) {
         return false;
     }
 
-    private boolean addChannel(ThingBuilder thingBuilder, @Nullable String channel, String channelType,
+    private @Nullable ChannelUID addChannel(ThingBuilder thingBuilder, @Nullable String channel, String channelType,
             @Nullable String datatype, String friendlyName) {
         if (channel == null || channel.isEmpty() || datatype == null || datatype.isEmpty()) {
             logger.info("Channel '{}', UID '{}' cannot be added incorrectly configured database. ", channel,
                     getThing().getUID());
-            return false;
+            return null;
         }
         ChannelUID channelUID = new ChannelUID(getThing().getUID(), channel);
         ChannelTypeUID channelTypeUID = new ChannelTypeUID(channelType);
@@ -350,11 +393,10 @@ private boolean addChannel(ThingBuilder thingBuilder, @Nullable String channel,
             logger.info("Channel '{}' for thing {} already exist... removing", channel, getThing().getUID());
             thingBuilder.withoutChannel(new ChannelUID(getThing().getUID(), channel));
         }
-
         Channel newChannel = ChannelBuilder.create(channelUID, datatype).withType(channelTypeUID)
                 .withLabel(friendlyName).build();
         thingBuilder.withChannel(newChannel);
-        return true;
+        return channelUID;
     }
 
     private @Nullable MiIoBasicChannel getChannel(String parameter) {
@@ -375,11 +417,20 @@ private void updatePropsFromJsonArray(MiIoSendCommand response) {
                     para.size(), res.size(), para, res);
         }
         for (int i = 0; i < para.size(); i++) {
-            String param = para.get(i).getAsString();
+            // This is a miot parameter
+            String param;
+            final JsonElement paraElement = para.get(i);
+            if (paraElement.isJsonObject()) { // miot channel
+                param = paraElement.getAsJsonObject().get("did").getAsString();
+            } else {
+                param = paraElement.getAsString();
+            }
             JsonElement val = res.get(i);
             if (val.isJsonNull()) {
                 logger.debug("Property '{}' returned null (is it supported?).", param);
                 continue;
+            } else if (val.isJsonObject()) { // miot channel
+                val = val.getAsJsonObject().get("value");
             }
             MiIoBasicChannel basicChannel = getChannel(param);
             updateChannel(basicChannel, param, val);
@@ -454,6 +505,7 @@ public void onMessageReceived(MiIoSendCommand response) {
                 case MIIO_INFO:
                     break;
                 case GET_VALUE:
+                case GET_PROPERTIES:
                 case GET_PROPERTY:
                     if (response.getResult().isJsonArray()) {
                         updatePropsFromJsonArray(response);
diff --git a/bundles/org.openhab.binding.miio/src/main/resources/ESH-INF/thing/commonChannels.xml b/bundles/org.openhab.binding.miio/src/main/resources/ESH-INF/thing/commonChannels.xml
index 37b9ecc90426e..496795834082c 100644
--- a/bundles/org.openhab.binding.miio/src/main/resources/ESH-INF/thing/commonChannels.xml
+++ b/bundles/org.openhab.binding.miio/src/main/resources/ESH-INF/thing/commonChannels.xml
@@ -438,4 +438,24 @@
 		<label>Filter Pro Days Remaining</label>
 		<state pattern="%.0f" readOnly="true" />
 	</channel-type>
+	<channel-type id="miot_uint8">
+		<item-type>Number</item-type>
+		<label>Generic Number</label>
+	</channel-type>
+	<channel-type id="miot_int32">
+		<item-type>Number</item-type>
+		<label>Generic Number</label>
+	</channel-type>
+	<channel-type id="miot_float">
+		<item-type>Number</item-type>
+		<label>Generic Number</label>
+	</channel-type>
+	<channel-type id="miot_string">
+		<item-type>String</item-type>
+		<label>Generic String</label>
+	</channel-type>
+	<channel-type id="miot_bool">
+		<item-type>Switch</item-type>
+		<label>Generic Bool</label>
+	</channel-type>
 </thing:thing-descriptions>
diff --git a/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.bulb.json b/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.bulb.json
index 5574eb1fbfa47..4daa33fa26373 100644
--- a/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.bulb.json
+++ b/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.bulb.json
@@ -32,7 +32,17 @@
 				"actions": [
 					{
 						"command": "set_bright",
-						"parameterType": "NUMBER"
+						"parameterType": "NUMBER",
+						"condition": {
+							"name": "BrightnessExisting"
+						}
+					},
+					{
+						"command": "set_power",
+						"parameterType": "ONOFF",
+						"condition": {
+							"name": "BrightnessOnOff"
+						}
 					}
 				]
 			},
diff --git a/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.candle.json b/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.candle.json
index 195184aa41e57..4687ee4c0533f 100644
--- a/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.candle.json
+++ b/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.candle.json
@@ -29,7 +29,17 @@
 				"actions": [
 					{
 						"command": "set_bright",
-						"parameterType": "NUMBER"
+						"parameterType": "NUMBER",
+						"condition": {
+							"name": "BrightnessExisting"
+						}
+					},
+					{
+						"command": "set_power",
+						"parameterType": "ONOFF",
+						"condition": {
+							"name": "BrightnessOnOff"
+						}
 					}
 				]
 			},
diff --git a/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.ceiling.json b/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.ceiling.json
index 8a357d6d58460..8a23d97aad7e0 100644
--- a/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.ceiling.json
+++ b/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.ceiling.json
@@ -29,7 +29,17 @@
 				"actions": [
 					{
 						"command": "set_bright",
-						"parameterType": "NUMBER"
+						"parameterType": "NUMBER",
+						"condition": {
+							"name": "BrightnessExisting"
+						}
+					},
+					{
+						"command": "set_power",
+						"parameterType": "ONOFF",
+						"condition": {
+							"name": "BrightnessOnOff"
+						}
 					}
 				]
 			},
diff --git a/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.mono.json b/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.mono.json
index 936149b045731..d4ecb7873b06d 100644
--- a/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.mono.json
+++ b/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.mono.json
@@ -28,7 +28,17 @@
 				"actions": [
 					{
 						"command": "set_bright",
-						"parameterType": "NUMBER"
+						"parameterType": "NUMBER",
+						"condition": {
+							"name": "BrightnessExisting"
+						}
+					},
+					{
+						"command": "set_power",
+						"parameterType": "ONOFF",
+						"condition": {
+							"name": "BrightnessOnOff"
+						}
 					}
 				]
 			},
diff --git a/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.moonlight.json b/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.moonlight.json
index d2a9fa4806845..13894279d6378 100644
--- a/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.moonlight.json
+++ b/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.moonlight.json
@@ -28,7 +28,17 @@
 				"actions": [
 					{
 						"command": "set_bright",
-						"parameterType": "NUMBER"
+						"parameterType": "NUMBER",
+						"condition": {
+							"name": "BrightnessExisting"
+						}
+					},
+					{
+						"command": "set_power",
+						"parameterType": "ONOFF",
+						"condition": {
+							"name": "BrightnessOnOff"
+						}
 					}
 				]
 			},
diff --git a/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.sread1.json b/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.sread1.json
index ed12bab6bb911..a6ede3fa06612 100644
--- a/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.sread1.json
+++ b/bundles/org.openhab.binding.miio/src/main/resources/database/philips.light.sread1.json
@@ -28,7 +28,17 @@
 				"actions": [
 					{
 						"command": "set_bright",
-						"parameterType": "NUMBER"
+						"parameterType": "NUMBER",
+						"condition": {
+							"name": "BrightnessExisting"
+						}
+					},
+					{
+						"command": "set_power",
+						"parameterType": "ONOFF",
+						"condition": {
+							"name": "BrightnessOnOff"
+						}
 					}
 				]
 			},
diff --git a/bundles/org.openhab.binding.miio/src/main/resources/database/yeelink.light.ceiling.json b/bundles/org.openhab.binding.miio/src/main/resources/database/yeelink.light.ceiling.json
index 7e1831b40e243..3998ff34ed705 100644
--- a/bundles/org.openhab.binding.miio/src/main/resources/database/yeelink.light.ceiling.json
+++ b/bundles/org.openhab.binding.miio/src/main/resources/database/yeelink.light.ceiling.json
@@ -31,13 +31,23 @@
 				"property": "bright",
 				"friendlyName": "Brightness",
 				"channel": "brightness",
-				"type": "Number",
+				"type": "Dimmer",
 				"refresh": true,
 				"ChannelGroup": "actions",
 				"actions": [
 					{
 						"command": "set_bright",
-						"parameterType": "NUMBER"
+						"parameterType": "NUMBER",
+						"condition": {
+							"name": "BrightnessExisting"
+						}
+					},
+					{
+						"command": "set_power",
+						"parameterType": "ONOFF",
+						"condition": {
+							"name": "BrightnessOnOff"
+						}
 					}
 				]
 			},
diff --git a/bundles/org.openhab.binding.miio/src/main/resources/database/yeelink.light.ceiling2.json b/bundles/org.openhab.binding.miio/src/main/resources/database/yeelink.light.ceiling2.json
index af188aa680e55..1428911f33421 100644
--- a/bundles/org.openhab.binding.miio/src/main/resources/database/yeelink.light.ceiling2.json
+++ b/bundles/org.openhab.binding.miio/src/main/resources/database/yeelink.light.ceiling2.json
@@ -22,13 +22,23 @@
 				"property": "bright",
 				"friendlyName": "Brightness",
 				"channel": "brightness",
-				"type": "Number",
+				"type": "Dimmer",
 				"refresh": true,
 				"ChannelGroup": "actions",
 				"actions": [
 					{
 						"command": "set_bright",
-						"parameterType": "NUMBER"
+						"parameterType": "NUMBER",
+						"condition": {
+							"name": "BrightnessExisting"
+						}
+					},
+					{
+						"command": "set_power",
+						"parameterType": "ONOFF",
+						"condition": {
+							"name": "BrightnessOnOff"
+						}
 					}
 				]
 			},
diff --git a/bundles/org.openhab.binding.miio/src/main/resources/database/yeelink.light.ceiling4.json b/bundles/org.openhab.binding.miio/src/main/resources/database/yeelink.light.ceiling4.json
index 32a8975b850f3..2fa408e9ca474 100644
--- a/bundles/org.openhab.binding.miio/src/main/resources/database/yeelink.light.ceiling4.json
+++ b/bundles/org.openhab.binding.miio/src/main/resources/database/yeelink.light.ceiling4.json
@@ -24,13 +24,23 @@
 				"property": "bright",
 				"friendlyName": "Brightness",
 				"channel": "brightness",
-				"type": "Number",
+				"type": "Dimmer",
 				"refresh": true,
 				"ChannelGroup": "actions",
 				"actions": [
 					{
 						"command": "set_bright",
-						"parameterType": "NUMBER"
+						"parameterType": "NUMBER",
+						"condition": {
+							"name": "BrightnessExisting"
+						}
+					},
+					{
+						"command": "set_power",
+						"parameterType": "ONOFF",
+						"condition": {
+							"name": "BrightnessOnOff"
+						}
 					}
 				]
 			},
diff --git a/bundles/org.openhab.binding.miio/src/main/resources/database/yeelink.light.color1.json b/bundles/org.openhab.binding.miio/src/main/resources/database/yeelink.light.color1.json
index ba53cdae6e1b5..37c6bfe0d7402 100644
--- a/bundles/org.openhab.binding.miio/src/main/resources/database/yeelink.light.color1.json
+++ b/bundles/org.openhab.binding.miio/src/main/resources/database/yeelink.light.color1.json
@@ -29,13 +29,23 @@
 				"property": "bright",
 				"friendlyName": "Brightness",
 				"channel": "brightness",
-				"type": "Number",
+				"type": "Dimmer",
 				"refresh": true,
 				"ChannelGroup": "actions",
 				"actions": [
 					{
 						"command": "set_bright",
-						"parameterType": "NUMBER"
+						"parameterType": "NUMBER",
+						"condition": {
+							"name": "BrightnessExisting"
+						}
+					},
+					{
+						"command": "set_power",
+						"parameterType": "ONOFF",
+						"condition": {
+							"name": "BrightnessOnOff"
+						}
 					}
 				]
 			},
diff --git a/bundles/org.openhab.binding.miio/src/main/resources/database/yeelink.light.lamp1.json b/bundles/org.openhab.binding.miio/src/main/resources/database/yeelink.light.lamp1.json
index 686237708faf4..c9e65997f52f2 100644
--- a/bundles/org.openhab.binding.miio/src/main/resources/database/yeelink.light.lamp1.json
+++ b/bundles/org.openhab.binding.miio/src/main/resources/database/yeelink.light.lamp1.json
@@ -28,13 +28,23 @@
 				"property": "bright",
 				"friendlyName": "Brightness",
 				"channel": "brightness",
-				"type": "Number",
+				"type": "Dimmer",
 				"refresh": true,
 				"ChannelGroup": "actions",
 				"actions": [
 					{
 						"command": "set_bright",
-						"parameterType": "NUMBER"
+						"parameterType": "NUMBER",
+						"condition": {
+							"name": "BrightnessExisting"
+						}
+					},
+					{
+						"command": "set_power",
+						"parameterType": "ONOFF",
+						"condition": {
+							"name": "BrightnessOnOff"
+						}
 					}
 				]
 			},
diff --git a/bundles/org.openhab.binding.miio/src/main/resources/database/zhimi.airpurifier.m1.json b/bundles/org.openhab.binding.miio/src/main/resources/database/zhimi.airpurifier.m1.json
index f6932c94106cb..ae5e035cb9fdb 100644
--- a/bundles/org.openhab.binding.miio/src/main/resources/database/zhimi.airpurifier.m1.json
+++ b/bundles/org.openhab.binding.miio/src/main/resources/database/zhimi.airpurifier.m1.json
@@ -8,7 +8,6 @@
 			"zhimi.airpurifier.v3",
 			"zhimi.airpurifier.v5",
 			"zhimi.airpurifier.ma1",
-			"zhimi.airpurifier.ma4",
 			"zhimi.airpurifier.sa1",
 			"zhimi.airpurifier.sa2",
 			"zhimi.airpurifier.mb1",
diff --git a/bundles/org.openhab.binding.miio/src/main/resources/database/zhimi.airpurifier.ma4-miot.json b/bundles/org.openhab.binding.miio/src/main/resources/database/zhimi.airpurifier.ma4-miot.json
new file mode 100644
index 0000000000000..d23a846c76e87
--- /dev/null
+++ b/bundles/org.openhab.binding.miio/src/main/resources/database/zhimi.airpurifier.ma4-miot.json
@@ -0,0 +1,715 @@
+{
+	"deviceMapping": {
+		"id": [
+			"zhimi.airpurifier.ma4"
+		],
+		"propertyMethod": "get_properties",
+		"maxProperties": 2,
+		"channels": [
+			{
+				"property": "fault",
+				"siid": 2,
+				"piid": 1,
+				"friendlyName": "Air Purifier-Device Fault",
+				"channel": "Fault",
+				"channelType": "miot_uint8",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "on",
+				"siid": 2,
+				"piid": 2,
+				"friendlyName": "Air Purifier-Switch Status",
+				"channel": "On",
+				"channelType": "miot_bool",
+				"type": "Switch",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "ONOFFBOOL"
+					}
+				]
+			},
+			{
+				"property": "fan-level",
+				"siid": 2,
+				"piid": 4,
+				"friendlyName": "Air Purifier-Fan Level",
+				"channel": "FanLevel",
+				"channelType": "miot_uint8",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "mode",
+				"siid": 2,
+				"piid": 5,
+				"friendlyName": "Air Purifier-Mode",
+				"channel": "Mode",
+				"channelType": "miot_uint8",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "firmware-revision",
+				"siid": 1,
+				"piid": 4,
+				"friendlyName": "Device Information-Current Firmware Version",
+				"channel": "FirmwareRevision",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "manufacturer",
+				"siid": 1,
+				"piid": 1,
+				"friendlyName": "Device Information-Device Manufacturer",
+				"channel": "Manufacturer",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "model",
+				"siid": 1,
+				"piid": 2,
+				"friendlyName": "Device Information-Device Model",
+				"channel": "Model",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "serial-number",
+				"siid": 1,
+				"piid": 3,
+				"friendlyName": "Device Information-Device Serial Number",
+				"channel": "SerialNumber",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "pm2.5-density",
+				"siid": 3,
+				"piid": 6,
+				"friendlyName": "Environment-PM2.5 Density",
+				"channel": "Pm25Density",
+				"channelType": "miot_float",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "relative-humidity",
+				"siid": 3,
+				"piid": 7,
+				"friendlyName": "Environment-Relative Humidity",
+				"channel": "RelativeHumidity",
+				"channelType": "miot_uint8",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "temperature",
+				"siid": 3,
+				"piid": 8,
+				"friendlyName": "Environment-Temperature",
+				"channel": "Temperature",
+				"channelType": "miot_float",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "filter-life-level",
+				"siid": 4,
+				"piid": 3,
+				"friendlyName": "Filter-Filter Life Level",
+				"channel": "FilterLifeLevel",
+				"channelType": "miot_uint8",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "filter-used-time",
+				"siid": 4,
+				"piid": 5,
+				"friendlyName": "Filter-Filter Used Time",
+				"channel": "FilterUsedTime",
+				"channelType": "miot_uint16",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "alarm",
+				"siid": 5,
+				"piid": 1,
+				"friendlyName": "Alarm-Alarm",
+				"channel": "Alarm",
+				"channelType": "miot_bool",
+				"type": "Switch",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "ONOFFBOOL"
+					}
+				]
+			},
+			{
+				"property": "brightness",
+				"siid": 6,
+				"piid": 1,
+				"friendlyName": "Indicator Light-Brightness",
+				"channel": "Brightness",
+				"channelType": "miot_uint8",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "on1",
+				"siid": 6,
+				"piid": 6,
+				"friendlyName": "Indicator Light-Switch Status",
+				"channel": "On1",
+				"channelType": "miot_bool",
+				"type": "Switch",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "ONOFFBOOL"
+					}
+				]
+			},
+			{
+				"property": "physical-controls-locked",
+				"siid": 7,
+				"piid": 1,
+				"friendlyName": "Physical Control Locked-Physical Control Locked",
+				"channel": "PhysicalControlsLocked",
+				"channelType": "miot_bool",
+				"type": "Switch",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "ONOFFBOOL"
+					}
+				]
+			},
+			{
+				"property": "button-pressed",
+				"siid": 8,
+				"piid": 1,
+				"friendlyName": "button-button_pressed",
+				"channel": "ButtonPressed",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "filter-max-time",
+				"siid": 9,
+				"piid": 1,
+				"friendlyName": "filter-time-filter-max-time",
+				"channel": "FilterMaxTime",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "filter-hour-used-debug",
+				"siid": 9,
+				"piid": 2,
+				"friendlyName": "filter-time-filter-hour-used-debug",
+				"channel": "FilterHourUsedDebug",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "m1-strong",
+				"siid": 10,
+				"piid": 1,
+				"friendlyName": "motor-speed-m1-strong",
+				"channel": "M1Strong",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "m1-high",
+				"siid": 10,
+				"piid": 2,
+				"friendlyName": "motor-speed-m1-high",
+				"channel": "M1High",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "m1-med",
+				"siid": 10,
+				"piid": 3,
+				"friendlyName": "motor-speed-m1-med",
+				"channel": "M1Med",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "m1-med-l",
+				"siid": 10,
+				"piid": 4,
+				"friendlyName": "motor-speed-m1-med-l",
+				"channel": "M1MedL",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "m1-low",
+				"siid": 10,
+				"piid": 5,
+				"friendlyName": "motor-speed-m1-low",
+				"channel": "M1Low",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "m1-silent",
+				"siid": 10,
+				"piid": 6,
+				"friendlyName": "motor-speed-m1-silent",
+				"channel": "M1Silent",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "m1-favorite",
+				"siid": 10,
+				"piid": 7,
+				"friendlyName": "motor-speed-m1-favorite",
+				"channel": "M1Favorite",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "motor1-speed",
+				"siid": 10,
+				"piid": 8,
+				"friendlyName": "motor-speed-motor1-speed",
+				"channel": "Motor1Speed",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "motor1-set-speed",
+				"siid": 10,
+				"piid": 9,
+				"friendlyName": "motor-speed-motor1-set-speed",
+				"channel": "Motor1SetSpeed",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "favorite-fan-level",
+				"siid": 10,
+				"piid": 10,
+				"friendlyName": "motor-speed-favorite fan level",
+				"channel": "FavoriteFanLevel",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "use-time",
+				"siid": 12,
+				"piid": 1,
+				"friendlyName": "use-time-use-time",
+				"channel": "UseTime",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "purify-volume",
+				"siid": 13,
+				"piid": 1,
+				"friendlyName": "aqi-purify-volume",
+				"channel": "PurifyVolume",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "average-aqi",
+				"siid": 13,
+				"piid": 2,
+				"friendlyName": "aqi-average-aqi",
+				"channel": "AverageAqi",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "average-aqi-cnt",
+				"siid": 13,
+				"piid": 3,
+				"friendlyName": "aqi-average-aqi-cnt",
+				"channel": "AverageAqiCnt",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "aqi-zone",
+				"siid": 13,
+				"piid": 4,
+				"friendlyName": "aqi-aqi-zone",
+				"channel": "AqiZone",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "sensor-state",
+				"siid": 13,
+				"piid": 5,
+				"friendlyName": "aqi-sensor-state",
+				"channel": "SensorState",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "aqi-goodh",
+				"siid": 13,
+				"piid": 6,
+				"friendlyName": "aqi-aqi-goodh",
+				"channel": "AqiGoodh",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "aqi-runstate",
+				"siid": 13,
+				"piid": 7,
+				"friendlyName": "aqi-aqi-runstate",
+				"channel": "AqiRunstate",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "aqi-state",
+				"siid": 13,
+				"piid": 8,
+				"friendlyName": "aqi-aqi-state",
+				"channel": "AqiState",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "aqi-updata-heartbeat",
+				"siid": 13,
+				"piid": 9,
+				"friendlyName": "aqi-aqi-updata-heartbeat",
+				"channel": "AqiUpdataHeartbeat",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "rfid-tag",
+				"siid": 14,
+				"piid": 1,
+				"friendlyName": "rfid-rfid-tag",
+				"channel": "RfidTag",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "rfid-factory-id",
+				"siid": 14,
+				"piid": 2,
+				"friendlyName": "rfid-rfid-factory-id",
+				"channel": "RfidFactoryId",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "rfid-product-id",
+				"siid": 14,
+				"piid": 3,
+				"friendlyName": "rfid-rfid-product-id",
+				"channel": "RfidProductId",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "rfid-time",
+				"siid": 14,
+				"piid": 4,
+				"friendlyName": "rfid-rfid-time",
+				"channel": "RfidTime",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "rfid-serial-num",
+				"siid": 14,
+				"piid": 5,
+				"friendlyName": "rfid-rfid-serial-num",
+				"channel": "RfidSerialNum",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "app-extra",
+				"siid": 15,
+				"piid": 1,
+				"friendlyName": "others-app-extra",
+				"channel": "AppExtra",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "main-channel",
+				"siid": 15,
+				"piid": 2,
+				"friendlyName": "others-main-channel",
+				"channel": "MainChannel",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "slave-channel",
+				"siid": 15,
+				"piid": 3,
+				"friendlyName": "others-slave-channel",
+				"channel": "SlaveChannel",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "cola",
+				"siid": 15,
+				"piid": 4,
+				"friendlyName": "others-cola",
+				"channel": "Cola",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "STRING"
+					}
+				]
+			},
+			{
+				"property": "buttom-door",
+				"siid": 15,
+				"piid": 5,
+				"friendlyName": "others-buttom-door",
+				"channel": "ButtomDoor",
+				"channelType": "miot_bool",
+				"type": "Switch",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "reboot-cause",
+				"siid": 15,
+				"piid": 6,
+				"friendlyName": "others-reboot_cause",
+				"channel": "RebootCause",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "hw-version",
+				"siid": 15,
+				"piid": 8,
+				"friendlyName": "others-hw-version",
+				"channel": "HwVersion",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "i2c-error-count",
+				"siid": 15,
+				"piid": 9,
+				"friendlyName": "others-i2c-error-count",
+				"channel": "I2cErrorCount",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "manual-level",
+				"siid": 15,
+				"piid": 10,
+				"friendlyName": "others-manual-level",
+				"channel": "ManualLevel",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			}
+		]
+	}
+}
diff --git a/bundles/org.openhab.binding.miio/src/main/resources/database/zhimi.airpurifier.mb3-miot.json b/bundles/org.openhab.binding.miio/src/main/resources/database/zhimi.airpurifier.mb3-miot.json
new file mode 100644
index 0000000000000..5ec483a0b1458
--- /dev/null
+++ b/bundles/org.openhab.binding.miio/src/main/resources/database/zhimi.airpurifier.mb3-miot.json
@@ -0,0 +1,736 @@
+{
+	"deviceMapping": {
+		"id": [
+			"zhimi.airpurifier.mb3"
+		],
+		"propertyMethod": "get_properties",
+		"maxProperties": 2,
+		"channels": [
+			{
+				"property": "fault",
+				"siid": 2,
+				"piid": 1,
+				"friendlyName": "Air Purifier-fault",
+				"channel": "Fault",
+				"channelType": "miot_uint8",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "on",
+				"siid": 2,
+				"piid": 2,
+				"friendlyName": "Air Purifier-Switch Status",
+				"channel": "On",
+				"channelType": "miot_bool",
+				"type": "Switch",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "ONOFFBOOL"
+					}
+				]
+			},
+			{
+				"property": "fan-level",
+				"siid": 2,
+				"piid": 4,
+				"friendlyName": "Air Purifier-Fan Level",
+				"channel": "FanLevel",
+				"channelType": "miot_uint8",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "mode",
+				"siid": 2,
+				"piid": 5,
+				"friendlyName": "Air Purifier-Mode",
+				"channel": "Mode",
+				"channelType": "miot_uint8",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "firmware-revision",
+				"siid": 1,
+				"piid": 4,
+				"friendlyName": "Device Information-Current Firmware Version",
+				"channel": "FirmwareRevision",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "manufacturer",
+				"siid": 1,
+				"piid": 1,
+				"friendlyName": "Device Information-Device Manufacturer",
+				"channel": "Manufacturer",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "model",
+				"siid": 1,
+				"piid": 2,
+				"friendlyName": "Device Information-Device Model",
+				"channel": "Model",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "serial-number",
+				"siid": 1,
+				"piid": 3,
+				"friendlyName": "Device Information-Device Serial Number",
+				"channel": "SerialNumber",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "pm2.5-density",
+				"siid": 3,
+				"piid": 6,
+				"friendlyName": "Environment-PM2.5",
+				"channel": "Pm25Density",
+				"channelType": "miot_float",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "relative-humidity",
+				"siid": 3,
+				"piid": 7,
+				"friendlyName": "Environment-Relative Humidity",
+				"channel": "RelativeHumidity",
+				"channelType": "miot_uint8",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "temperature",
+				"siid": 3,
+				"piid": 8,
+				"friendlyName": "Environment-Temperature",
+				"channel": "Temperature",
+				"channelType": "miot_float",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "filter-life-level",
+				"siid": 4,
+				"piid": 3,
+				"friendlyName": "Filter-Filter Life Level",
+				"channel": "FilterLifeLevel",
+				"channelType": "miot_uint8",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "filter-used-time",
+				"siid": 4,
+				"piid": 5,
+				"friendlyName": "Filter-Filter Used Time",
+				"channel": "FilterUsedTime",
+				"channelType": "miot_uint16",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "alarm",
+				"siid": 5,
+				"piid": 1,
+				"friendlyName": "Alarm-Alarm",
+				"channel": "Alarm",
+				"channelType": "miot_bool",
+				"type": "Switch",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "ONOFFBOOL"
+					}
+				]
+			},
+			{
+				"property": "brightness",
+				"siid": 6,
+				"piid": 1,
+				"friendlyName": "Indicator Light-brightness",
+				"channel": "Brightness",
+				"channelType": "miot_uint8",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "on1",
+				"siid": 6,
+				"piid": 6,
+				"friendlyName": "Indicator Light-Switch Status",
+				"channel": "On1",
+				"channelType": "miot_bool",
+				"type": "Switch",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "ONOFFBOOL"
+					}
+				]
+			},
+			{
+				"property": "physical-controls-locked",
+				"siid": 7,
+				"piid": 1,
+				"friendlyName": "Physical Control Locked-Physical Control Locked",
+				"channel": "PhysicalControlsLocked",
+				"channelType": "miot_bool",
+				"type": "Switch",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "ONOFFBOOL"
+					}
+				]
+			},
+			{
+				"property": "button-pressed",
+				"siid": 8,
+				"piid": 1,
+				"friendlyName": "Button-button-pressed",
+				"channel": "ButtonPressed",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "filter-max-time",
+				"siid": 9,
+				"piid": 1,
+				"friendlyName": "filter-time-filter-max-time",
+				"channel": "FilterMaxTime",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "filter-hour-debug",
+				"siid": 9,
+				"piid": 2,
+				"friendlyName": "filter-time-filter-hour-debug",
+				"channel": "FilterHourDebug",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "motor-strong",
+				"siid": 10,
+				"piid": 1,
+				"friendlyName": "motor-speed-motor-strong",
+				"channel": "MotorStrong",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "motor-high",
+				"siid": 10,
+				"piid": 2,
+				"friendlyName": "motor-speed-motor-high",
+				"channel": "MotorHigh",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "motor-med",
+				"siid": 10,
+				"piid": 3,
+				"friendlyName": "motor-speed-motor-med",
+				"channel": "MotorMed",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "motor-med-l",
+				"siid": 10,
+				"piid": 4,
+				"friendlyName": "motor-speed-motor-med-l",
+				"channel": "MotorMedL",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "motor-low",
+				"siid": 10,
+				"piid": 5,
+				"friendlyName": "motor-speed-motor-low",
+				"channel": "MotorLow",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "motor-silent",
+				"siid": 10,
+				"piid": 6,
+				"friendlyName": "motor-speed-motor-silent",
+				"channel": "MotorSilent",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "motor-favorite",
+				"siid": 10,
+				"piid": 7,
+				"friendlyName": "motor-speed-motor-favorite",
+				"channel": "MotorFavorite",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "motor-speed",
+				"siid": 10,
+				"piid": 8,
+				"friendlyName": "motor-speed-motor-speed",
+				"channel": "MotorSpeed",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "motor-set-speed",
+				"siid": 10,
+				"piid": 9,
+				"friendlyName": "motor-speed-motor-set-speed",
+				"channel": "MotorSetSpeed",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "favorite-fan-level",
+				"siid": 10,
+				"piid": 10,
+				"friendlyName": "motor-speed-favorite-fan-level",
+				"channel": "FavoriteFanLevel",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "use-time",
+				"siid": 12,
+				"piid": 1,
+				"friendlyName": "use-time-use-time",
+				"channel": "UseTime",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "purify-volume",
+				"siid": 13,
+				"piid": 1,
+				"friendlyName": "aqi-purify-volume",
+				"channel": "PurifyVolume",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "average-aqi",
+				"siid": 13,
+				"piid": 2,
+				"friendlyName": "aqi-average-aqi",
+				"channel": "AverageAqi",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "average-aqi-cnt",
+				"siid": 13,
+				"piid": 3,
+				"friendlyName": "aqi-average-aqi-cnt",
+				"channel": "AverageAqiCnt",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "aqi-zone",
+				"siid": 13,
+				"piid": 4,
+				"friendlyName": "aqi-aqi-zone",
+				"channel": "AqiZone",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "sensor-state",
+				"siid": 13,
+				"piid": 5,
+				"friendlyName": "aqi-sensor-state",
+				"channel": "SensorState",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "aqi-goodh",
+				"siid": 13,
+				"piid": 6,
+				"friendlyName": "aqi-aqi-goodh",
+				"channel": "AqiGoodh",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "aqi-runstate",
+				"siid": 13,
+				"piid": 7,
+				"friendlyName": "aqi-aqi-runstate",
+				"channel": "AqiRunstate",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "aqi-state",
+				"siid": 13,
+				"piid": 8,
+				"friendlyName": "aqi-aqi-state",
+				"channel": "AqiState",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "aqi-updata-heartbeat",
+				"siid": 13,
+				"piid": 9,
+				"friendlyName": "aqi-aqi-updata-heartbeat",
+				"channel": "AqiUpdataHeartbeat",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "rfid-tag",
+				"siid": 14,
+				"piid": 1,
+				"friendlyName": "rfid-rfid-tag",
+				"channel": "RfidTag",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "rfid-factory-id",
+				"siid": 14,
+				"piid": 2,
+				"friendlyName": "rfid-rfid-factory-id",
+				"channel": "RfidFactoryId",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "rfid-product-id",
+				"siid": 14,
+				"piid": 3,
+				"friendlyName": "rfid-rfid-product-id",
+				"channel": "RfidProductId",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "rfid-time",
+				"siid": 14,
+				"piid": 4,
+				"friendlyName": "rfid-rfid-time",
+				"channel": "RfidTime",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "rfid-serial-num",
+				"siid": 14,
+				"piid": 5,
+				"friendlyName": "rfid-rfid-serial-num",
+				"channel": "RfidSerialNum",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "app-extra",
+				"siid": 15,
+				"piid": 1,
+				"friendlyName": "others-app-extra",
+				"channel": "AppExtra",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "main-channel",
+				"siid": 15,
+				"piid": 2,
+				"friendlyName": "others-main-channel",
+				"channel": "MainChannel",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "slave-channel",
+				"siid": 15,
+				"piid": 3,
+				"friendlyName": "others-slave-channel",
+				"channel": "SlaveChannel",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			},
+			{
+				"property": "cola",
+				"siid": 15,
+				"piid": 4,
+				"friendlyName": "others-cola",
+				"channel": "Cola",
+				"channelType": "miot_string",
+				"type": "String",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "STRING"
+					}
+				]
+			},
+			{
+				"property": "buttom-door",
+				"siid": 15,
+				"piid": 5,
+				"friendlyName": "others-buttom-door",
+				"channel": "ButtomDoor",
+				"channelType": "miot_bool",
+				"type": "Switch",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "reboot-cause",
+				"siid": 15,
+				"piid": 6,
+				"friendlyName": "others-reboot-cause",
+				"channel": "RebootCause",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "hw-version",
+				"siid": 15,
+				"piid": 8,
+				"friendlyName": "others-hw-version",
+				"channel": "HwVersion",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "iic-error-count",
+				"siid": 15,
+				"piid": 9,
+				"friendlyName": "others-iic-error-count",
+				"channel": "IicErrorCount",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "manual-level",
+				"siid": 15,
+				"piid": 10,
+				"friendlyName": "others-manual-level",
+				"channel": "ManualLevel",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": []
+			},
+			{
+				"property": "country-code",
+				"siid": 15,
+				"piid": 11,
+				"friendlyName": "others-National code",
+				"channel": "CountryCode",
+				"channelType": "miot_int32",
+				"type": "Number",
+				"refresh": true,
+				"actions": [
+					{
+						"command": "set_properties",
+						"parameterType": "NUMBER"
+					}
+				]
+			}
+		]
+	}
+}