From 86efd73a17449c2d6567535fa87320f369a90ad6 Mon Sep 17 00:00:00 2001 From: Marcel Date: Fri, 22 Jan 2021 23:36:58 +0100 Subject: [PATCH] [miio] add support for zhimi airpurifier 3C (mb4) (#9885) Signed-off-by: Marcel Verpaalen --- bundles/org.openhab.binding.miio/README.md | 48 +++- .../binding/miio/internal/MiIoDevices.java | 1 + .../database/zhimi.airpurifier.mb4-miot.json | 257 ++++++++++++++++++ 3 files changed, 302 insertions(+), 4 deletions(-) create mode 100644 bundles/org.openhab.binding.miio/src/main/resources/database/zhimi.airpurifier.mb4-miot.json diff --git a/bundles/org.openhab.binding.miio/README.md b/bundles/org.openhab.binding.miio/README.md index aace3de0a..5c6a77e06 100644 --- a/bundles/org.openhab.binding.miio/README.md +++ b/bundles/org.openhab.binding.miio/README.md @@ -441,6 +441,7 @@ Currently the miio binding supports more than 260 different models. | Mi Air Purifier 3 | miio:basic | [zhimi.airpurifier.ma4](#zhimi-airpurifier-ma4) | Yes | Identified manual actions for execution
`action{"did":"filter-reset-filter-life","siid":4,"aiid":1,"in":[]}`
`action{"did":"button-toggle","siid":8,"aiid":1,"in":[]}`
`action{"did":"button-toggle-mode","siid":8,"aiid":2,"in":[]}`
Please test and feedback if they are working to they can be linked to a channel.
Experimental support. Please report back if all channels are functional. Preferably share the debug log of property refresh and command responses | | Mi Air Purifier 2S | miio:basic | [zhimi.airpurifier.mb1](#zhimi-airpurifier-mb1) | Yes | | | Mi Air Purifier 3/3H | miio:basic | [zhimi.airpurifier.mb3](#zhimi-airpurifier-mb3) | Yes | Identified manual actions for execution
`action{"did":"filter-reset-filter-life","siid":4,"aiid":1,"in":[]}`
`action{"did":"button-toggle","siid":8,"aiid":1,"in":[]}`
`action{"did":"button-toggle-mode","siid":8,"aiid":2,"in":[]}`
Please test and feedback if they are working to they can be linked to a channel.
Experimental support. Please report back if all channels are functional. Preferably share the debug log of property refresh and command responses | +| Mi Air Purifier 3C | miio:basic | [zhimi.airpurifier.mb4](#zhimi-airpurifier-mb4) | Yes | Specified action for filter reset
`action{"did":"filter-reset-filter-life","siid":4,"aiid":1,"in":[3.0]}`
However, this has not been successfully tested yet. | | Mi Air Purifier 2S | miio:basic | [zhimi.airpurifier.mc1](#zhimi-airpurifier-mc1) | Yes | | | Mi Air Purifier 2H | miio:basic | [zhimi.airpurifier.mc2](#zhimi-airpurifier-mc2) | Yes | | | Mi Air Purifier Super | miio:basic | [zhimi.airpurifier.sa1](#zhimi-airpurifier-sa1) | Yes | | @@ -3770,7 +3771,7 @@ e.g. `openhab:send actionCommand 'upd_timer["1498595904821", "on"]'` would enabl | on | Switch | Air Purifier - Switch Status | | | fan-level | Number | Air Purifier - Fan Level | Value mapping ["1"="Level1","2"="Level2","3"="Level3"] | | mode | Number | Air Purifier - Mode | Value mapping ["0"="Auto","1"="Sleep","2"="Favorite","3"="None"] | -| pm2.5-density | Number | Environment - Pm2 5 Density | | +| pm2_5-density | Number | Environment - Pm2.5 Density | | | relative-humidity | Number:Dimensionless | Environment - Relative Humidity | | | temperature | Number:Temperature | Environment - Temperature | | | filter-life-level | Number:Dimensionless | Filter - Filter Life Level | | @@ -3846,7 +3847,7 @@ e.g. `openhab:send actionCommand 'upd_timer["1498595904821", "on"]'` would enabl | on | Switch | Air Purifier - Switch Status | | | fan-level | Number | Air Purifier - Fan Level | Value mapping ["1"="Level1","2"="Level2","3"="Level3"] | | mode | Number | Air Purifier - Mode | Value mapping ["0"="Auto","1"="Sleep","2"="Favorite","3"="None"] | -| pm2.5-density | Number | Environment - Pm2 5 | | +| pm2_5-density | Number | Environment - Pm2.5 density | | | relative-humidity | Number:Dimensionless | Environment - Relative Humidity | | | temperature | Number:Temperature | Environment - Temperature | | | filter-life-level | Number:Dimensionless | Filter - Filter Life Level | | @@ -3894,6 +3895,24 @@ e.g. `openhab:send actionCommand 'upd_timer["1498595904821", "on"]'` would enabl | manual-level | Number | Others - Manual Level | Value mapping ["1"="Level1","2"="Level2","3"="Level3"] | | country-code | Number | Others - National Code | Value mapping ["91"="印度","44"="分销英文","852"="中国香港","886"="中国台湾","82"="韩国"] | +### Mi Air Purifier 3C (zhimi.airpurifier.mb4) Channels + +| Channel | Type | Description | Comment | +|------------------|---------|-------------------------------------|------------| +| on | Switch | Power | | +| fault | String | Air Purifier - Device Fault | | +| mode | Number | Mode | Value mapping ["0"="Auto","1"="Sleep","2"="Favorite"] | +| pm2_5_density | Number | Environment - Pm2 5 Density | | +| filter_life_level | Number:Dimensionless | Filter - Filter Life Level | | +| filter_used_time | Number:Time | Filter - Filter Used Time | | +| alarm | Switch | Alarm - Alarm | | +| brightness | Number | Screen - Brightness | | +| physical_controls_locked | Switch | Physical Control Locked - Physical Control Locked | | +| moto_speed_rpm | Number | Custom Service - Moto Speed Rpm | | +| miio_lib_version | String | Custom Service - Miio Lib Version | | +| favorite_speed | Number | Custom Service - Favorite Speed | | +| aqi_updata_heartbeat | Number:Time | Custom Service - Aqi Updata Heartbeat | | + ### Mi Air Purifier 2S (zhimi.airpurifier.mc1) Channels | Channel | Type | Description | Comment | @@ -8353,7 +8372,7 @@ Number fault "Air Purifier - Device Fault" (G_airpurifier) {channel="miio:basic: Switch on "Air Purifier - Switch Status" (G_airpurifier) {channel="miio:basic:airpurifier:on"} Number fan_level "Air Purifier - Fan Level" (G_airpurifier) {channel="miio:basic:airpurifier:fan-level"} Number mode "Air Purifier - Mode" (G_airpurifier) {channel="miio:basic:airpurifier:mode"} -Number pm2.5_density "Environment - Pm2 5 Density" (G_airpurifier) {channel="miio:basic:airpurifier:pm2.5-density"} +Number pm2_5_density "Environment - Pm2.5 Density" (G_airpurifier) {channel="miio:basic:airpurifier:pm2_5-density"} Number:Dimensionless relative_humidity "Environment - Relative Humidity" (G_airpurifier) {channel="miio:basic:airpurifier:relative-humidity"} Number:Temperature temperature "Environment - Temperature" (G_airpurifier) {channel="miio:basic:airpurifier:temperature"} Number:Dimensionless filter_life_level "Filter - Filter Life Level" (G_airpurifier) {channel="miio:basic:airpurifier:filter-life-level"} @@ -8435,7 +8454,7 @@ Number fault "Air Purifier - Fault" (G_airpurifier) {channel="miio:basic:airpuri Switch on "Air Purifier - Switch Status" (G_airpurifier) {channel="miio:basic:airpurifier:on"} Number fan_level "Air Purifier - Fan Level" (G_airpurifier) {channel="miio:basic:airpurifier:fan-level"} Number mode "Air Purifier - Mode" (G_airpurifier) {channel="miio:basic:airpurifier:mode"} -Number pm2.5_density "Environment - Pm2 5" (G_airpurifier) {channel="miio:basic:airpurifier:pm2.5-density"} +Number pm2_5_density "Environment - Pm2.5 density" (G_airpurifier) {channel="miio:basic:airpurifier:pm2_5-density"} Number:Dimensionless relative_humidity "Environment - Relative Humidity" (G_airpurifier) {channel="miio:basic:airpurifier:relative-humidity"} Number:Temperature temperature "Environment - Temperature" (G_airpurifier) {channel="miio:basic:airpurifier:temperature"} Number:Dimensionless filter_life_level "Filter - Filter Life Level" (G_airpurifier) {channel="miio:basic:airpurifier:filter-life-level"} @@ -8484,6 +8503,27 @@ Number manual_level "Others - Manual Level" (G_airpurifier) {channel="miio:basic Number country_code "Others - National Code" (G_airpurifier) {channel="miio:basic:airpurifier:country-code"} ``` +### Mi Air Purifier 3C (zhimi.airpurifier.mb4) 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 3C" +Switch on "Power" (G_airpurifier) {channel="miio:basic:airpurifier:on"} +String fault "Air Purifier - Device Fault" (G_airpurifier) {channel="miio:basic:airpurifier:fault"} +Number mode "Mode" (G_airpurifier) {channel="miio:basic:airpurifier:mode"} +Number pm2_5_density "Environment - Pm2 5 Density" (G_airpurifier) {channel="miio:basic:airpurifier:pm2_5_density"} +Number:Dimensionless filter_life_level "Filter - Filter Life Level" (G_airpurifier) {channel="miio:basic:airpurifier:filter_life_level"} +Number:Time filter_used_time "Filter - Filter Used Time" (G_airpurifier) {channel="miio:basic:airpurifier:filter_used_time"} +Switch alarm "Alarm - Alarm" (G_airpurifier) {channel="miio:basic:airpurifier:alarm"} +Number brightness "Screen - Brightness" (G_airpurifier) {channel="miio:basic:airpurifier:brightness"} +Switch physical_controls_locked "Physical Control Locked - Physical Control Locked" (G_airpurifier) {channel="miio:basic:airpurifier:physical_controls_locked"} +Number moto_speed_rpm "Custom Service - Moto Speed Rpm" (G_airpurifier) {channel="miio:basic:airpurifier:moto_speed_rpm"} +String miio_lib_version "Custom Service - Miio Lib Version" (G_airpurifier) {channel="miio:basic:airpurifier:miio_lib_version"} +Number favorite_speed "Custom Service - Favorite Speed" (G_airpurifier) {channel="miio:basic:airpurifier:favorite_speed"} +Number:Time aqi_updata_heartbeat "Custom Service - Aqi Updata Heartbeat" (G_airpurifier) {channel="miio:basic:airpurifier:aqi_updata_heartbeat"} +``` + ### Mi Air Purifier 2S (zhimi.airpurifier.mc1) 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. 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 4b81f14ad..4aeb72555 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 @@ -325,6 +325,7 @@ public enum MiIoDevices { ZHIMI_AIRPURIFIER_MA4("zhimi.airpurifier.ma4", "Mi Air Purifier 3", THING_TYPE_BASIC), ZHIMI_AIRPURIFIER_MB1("zhimi.airpurifier.mb1", "Mi Air Purifier 2S", THING_TYPE_BASIC), ZHIMI_AIRPURIFIER_MB3("zhimi.airpurifier.mb3", "Mi Air Purifier 3/3H", THING_TYPE_BASIC), + ZHIMI_AIRPURIFIER_MB4("zhimi.airpurifier.mb4", "Mi Air Purifier 3C", THING_TYPE_BASIC), ZHIMI_AIRPURIFIER_MC1("zhimi.airpurifier.mc1", "Mi Air Purifier 2S", THING_TYPE_BASIC), ZHIMI_AIRPURIFIER_MC2("zhimi.airpurifier.mc2", "Mi Air Purifier 2H", THING_TYPE_BASIC), ZHIMI_AIRPURIFIER_SA1("zhimi.airpurifier.sa1", "Mi Air Purifier Super", THING_TYPE_BASIC), diff --git a/bundles/org.openhab.binding.miio/src/main/resources/database/zhimi.airpurifier.mb4-miot.json b/bundles/org.openhab.binding.miio/src/main/resources/database/zhimi.airpurifier.mb4-miot.json new file mode 100644 index 000000000..c4d613b06 --- /dev/null +++ b/bundles/org.openhab.binding.miio/src/main/resources/database/zhimi.airpurifier.mb4-miot.json @@ -0,0 +1,257 @@ +{ + "deviceMapping": { + "id": [ + "zhimi.airpurifier.mb4" + ], + "propertyMethod": "get_properties", + "maxProperties": 1, + "channels": [ + { + "property": "on", + "siid": 2, + "piid": 1, + "friendlyName": "Power", + "channel": "on", + "type": "Switch", + "refresh": true, + "actions": [ + { + "command": "set_properties", + "parameterType": "ONOFFBOOL" + } + ], + "category": "switch", + "tags": [ + "Switch" + ] + }, + { + "property": "fault", + "siid": 2, + "piid": 2, + "friendlyName": "Air Purifier - Device Fault", + "channel": "fault", + "type": "String", + "stateDescription": { + "readOnly": true + }, + "refresh": true, + "actions": [] + }, + { + "property": "mode", + "siid": 2, + "piid": 4, + "friendlyName": "Mode", + "channel": "mode", + "type": "Number", + "stateDescription": { + "options": [ + { + "value": "0", + "label": "Auto" + }, + { + "value": "1", + "label": "Sleep" + }, + { + "value": "2", + "label": "Favorite" + } + ] + }, + "refresh": true, + "actions": [ + { + "command": "set_properties", + "parameterType": "NUMBER" + } + ], + "tags": [ + "Control" + ], + "readmeComment": "Value mapping [\"0\"\u003d\"Auto\",\"1\"\u003d\"Sleep\",\"2\"\u003d\"Favorite\"]" + }, + { + "property": "pm2.5-density", + "siid": 3, + "piid": 4, + "friendlyName": "Environment - Pm2 5 Density", + "channel": "pm2_5_density", + "type": "Number", + "stateDescription": { + "minimum": 0, + "maximum": 600, + "step": 1, + "pattern": "%.1f", + "readOnly": true + }, + "refresh": true, + "actions": [] + }, + { + "property": "filter-life-level", + "siid": 4, + "piid": 1, + "friendlyName": "Filter - Filter Life Level", + "channel": "filter_life_level", + "type": "Number:Dimensionless", + "unit": "percentage", + "stateDescription": { + "minimum": 0, + "maximum": 100, + "step": 1, + "pattern": "%.0f %unit%", + "readOnly": true + }, + "refresh": true, + "actions": [] + }, + { + "property": "filter-used-time", + "siid": 4, + "piid": 3, + "friendlyName": "Filter - Filter Used Time", + "channel": "filter_used_time", + "type": "Number:Time", + "unit": "hours", + "stateDescription": { + "minimum": 0, + "maximum": 65000, + "step": 1, + "pattern": "%.0f %unit%", + "readOnly": true + }, + "refresh": true, + "actions": [] + }, + { + "property": "alarm", + "siid": 6, + "piid": 1, + "friendlyName": "Alarm - Alarm", + "channel": "alarm", + "type": "Switch", + "refresh": true, + "actions": [ + { + "command": "set_properties", + "parameterType": "ONOFFBOOL" + } + ] + }, + { + "property": "brightness", + "siid": 7, + "piid": 2, + "friendlyName": "Screen - Brightness", + "channel": "brightness", + "type": "Number", + "stateDescription": { + "minimum": 0, + "maximum": 8, + "step": 1, + "pattern": "%.0f" + }, + "refresh": true, + "actions": [ + { + "command": "set_properties", + "parameterType": "NUMBER" + } + ] + }, + { + "property": "physical-controls-locked", + "siid": 8, + "piid": 1, + "friendlyName": "Physical Control Locked - Physical Control Locked", + "channel": "physical_controls_locked", + "type": "Switch", + "refresh": true, + "actions": [ + { + "command": "set_properties", + "parameterType": "ONOFFBOOL" + } + ] + }, + { + "property": "moto-speed-rpm", + "siid": 9, + "piid": 1, + "friendlyName": "Custom Service - Moto Speed Rpm", + "channel": "moto_speed_rpm", + "type": "Number", + "stateDescription": { + "minimum": 0, + "maximum": 65535, + "step": 1, + "pattern": "%.1f", + "readOnly": true + }, + "refresh": true, + "actions": [] + }, + { + "property": "miio-lib-version", + "siid": 9, + "piid": 2, + "friendlyName": "Custom Service - Miio Lib Version", + "channel": "miio_lib_version", + "type": "String", + "stateDescription": { + "readOnly": true + }, + "refresh": true, + "actions": [] + }, + { + "property": "favorite-speed", + "siid": 9, + "piid": 3, + "friendlyName": "Custom Service - Favorite Speed", + "channel": "favorite_speed", + "type": "Number", + "stateDescription": { + "minimum": 300, + "maximum": 2200, + "step": 1, + "pattern": "%.1f" + }, + "refresh": true, + "actions": [ + { + "command": "set_properties", + "parameterType": "STRING" + } + ] + }, + { + "property": "aqi-updata-heartbeat", + "siid": 9, + "piid": 4, + "friendlyName": "Custom Service - Aqi Updata Heartbeat", + "channel": "aqi_updata_heartbeat", + "type": "Number:Time", + "unit": "seconds", + "stateDescription": { + "minimum": 0, + "maximum": 65534, + "step": 1, + "pattern": "%.0f %unit%" + }, + "refresh": true, + "actions": [ + { + "command": "set_properties", + "parameterType": "NUMBER" + } + ] + } + ], + "readmeComment": "Specified action for filter reset \u003cbr /\u003e`action{\"did\":\"filter-reset-filter-life\",\"siid\":4,\"aiid\":1,\"in\":[3.0]}`\u003cbr /\u003eHowever, this has not been successfully tested yet.", + "experimental": false + } +}