diff --git a/bundles/org.openhab.binding.miio/README.md b/bundles/org.openhab.binding.miio/README.md index 7259f8278486..b0955db28285 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 (zhimi.airpurifier.mb3) 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 (zhimi.airpurifier.sa1) 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" -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" +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" 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" 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" 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" 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" 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)" 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" 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" 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" 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" 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" 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" 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" 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" 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" 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" 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" 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" 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" 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" 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" 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" 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" 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" 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" 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" 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" 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" 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)" 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 d1772d71b60a..c3103ebe91db 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 8ffc7f606ab2..95c78cf48740 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 000000000000..fdc92223f03b --- /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 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 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 2ca570b1f13f..975dad9e58d6 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 27db674df3c1..7a2f8254a843 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 000000000000..d1b96621648d --- /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 346a1f9e3666..b42f504836aa 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 bcd493ffc0d2..426e2c5fe457 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 3c6c3b32f61f..43c55131f141 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 refreshList = new ArrayList<>(); private @Nullable MiIoBasicDevice miioDevice; - private Map actions = new HashMap<>(); + private Map 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 37b9ecc90426..496795834082 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 @@ + + Number + + + + Number + + + + Number + + + + String + + + + Switch + + 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 5574eb1fbfa4..4daa33fa2637 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 195184aa41e5..4687ee4c0533 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 8a357d6d5846..8a23d97aad7e 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 936149b04573..d4ecb7873b06 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 d2a9fa480684..13894279d637 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 ed12bab6bb91..a6ede3fa0661 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 7e1831b40e24..3998ff34ed70 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 af188aa680e5..1428911f3342 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 32a8975b850f..2fa408e9ca47 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 ba53cdae6e1b..37c6bfe0d740 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 686237708faf..c9e65997f52f 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 f6932c94106c..ae5e035cb9fd 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 000000000000..d23a846c76e8 --- /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 000000000000..5ec483a0b145 --- /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" + } + ] + } + ] + } +}