wez / govee2mqtt

Govee2MQTT: Connect Govee lights and devices to Home Assistant
MIT License
334 stars 17 forks source link

Smart Dehumidifier missing humidity selector #86

Closed fjrichman closed 5 months ago

fjrichman commented 5 months ago

Govee Device SKU

H7151

Govee2MQTT Version

2024.01.18-e0a27816

Describe the issue

The smart dehumidifier is missing an option to select the humidity target.

Below is the devices response from the API showing that it supports humidity.

    {
            "sku": "H7151",
            "device": "",
            "deviceName": "Smart Dehumidifier Max",
            "type": "devices.types.dehumidifier",
            "capabilities": [
                {
                    "type": "devices.capabilities.on_off",
                    "instance": "powerSwitch",
                    "parameters": {
                        "dataType": "ENUM",
                        "options": [
                            {
                                "name": "on",
                                "value": 1
                            },
                            {
                                "name": "off",
                                "value": 0
                            }
                        ]
                    }
                },
                {
                    "type": "devices.capabilities.range",
                    "instance": "humidity",
                    "parameters": {
                        "unit": "unit.percent",
                        "dataType": "INTEGER",
                        "range": {
                            "min": 30,
                            "max": 80,
                            "precision": 1
                        }
                    }
                },
                {
                    "type": "devices.capabilities.work_mode",
                    "instance": "workMode",
                    "parameters": {
                        "dataType": "STRUCT",
                        "fields": [
                            {
                                "fieldName": "workMode",
                                "dataType": "ENUM",
                                "options": [
                                    {
                                        "name": "gearMode",
                                        "value": 1
                                    },
                                    {
                                        "name": "Auto",
                                        "value": 3
                                    },
                                    {
                                        "name": "Dryer",
                                        "value": 8
                                    }
                                ],
                                "required": true
                            },
                            {
                                "fieldName": "modeValue",
                                "dataType": "ENUM",
                                "options": [
                                    {
                                        "name": "gearMode",
                                        "options": [
                                            {
                                                "name": "Low",
                                                "value": 1
                                            },
                                            {
                                                "name": "Medium",
                                                "value": 2
                                            },
                                            {
                                                "name": "High",
                                                "value": 3
                                            }
                                        ]
                                    },
                                    {
                                        "name": "Auto",
                                        "range": {
                                            "min": 80,
                                            "max": 80
                                        }
                                    },
                                    {
                                        "defaultValue": 0,
                                        "name": "Dryer"
                                    }
                                ],
                                "required": true
                            }
                        ]
                    }
                },
                {
                    "type": "devices.capabilities.event",
                    "instance": "waterFullEvent",
                    "alarmType": 58,
                    "eventState": {
                        "options": [
                            {
                                "name": "waterFull",
                                "value": 1,
                                "message": "Water bucket is full or has been pulled out"
                            }
                        ]
                    }
                }
            ]
        }

Startup Diagnostics

[2024-01-19T00:46:06Z INFO govee::commands::serve] Starting service. version 2024.01.18-e0a27816

[2024-01-19T00:46:06Z INFO govee::commands::serve] Querying platform API for device list

[2024-01-19T00:46:06Z INFO govee::commands::serve] Querying undocumented API for device + room list

[2024-01-19T00:46:07Z INFO govee::service::iot] Connected to IoT: CONNACK code 0: Connection Accepted.

[2024-01-19T00:46:07Z INFO govee::commands::serve] Starting LAN discovery

[2024-01-19T00:46:07Z INFO govee::service::iot] IoT (re)connected with status CONNACK code 0: Connection Accepted.

[2024-01-19T00:46:07Z INFO govee::commands::serve] Waiting 10 seconds for LAN API discovery

[2024-01-19T00:46:17Z INFO govee::commands::serve] Devices returned from Govee's APIs

[2024-01-19T00:46:17Z INFO govee::commands::serve] H5106_1A58 (::::::: H5106)

[2024-01-19T00:46:17Z INFO govee::commands::serve] Undoc: room=Some("Bedroom") supports_iot=true ble_only=true

[2024-01-19T00:46:17Z WARN govee::commands::serve] Unknown device type. Cannot map to Home Assistant.

[2024-01-19T00:46:17Z INFO govee::commands::serve]

[2024-01-19T00:46:17Z INFO govee::commands::serve] Smart Dehumidifier Max (::::::: H7151)

[2024-01-19T00:46:17Z INFO govee::commands::serve] Platform API: Other. supports_rgb=false supports_brightness=false

[2024-01-19T00:46:17Z INFO govee::commands::serve] color_temp=None segment_rgb=None

[2024-01-19T00:46:17Z INFO govee::commands::serve] Undoc: room=None supports_iot=true ble_only=false

[2024-01-19T00:46:17Z INFO govee::commands::serve]

[2024-01-19T00:46:17Z INFO govee::commands::serve] Bedroom Humidifier (::::::: H7160)

[2024-01-19T00:46:17Z INFO govee::commands::serve] Platform API: devices.types.humidifier. supports_rgb=false supports_brightness=false

[2024-01-19T00:46:17Z INFO govee::commands::serve] color_temp=None segment_rgb=None

[2024-01-19T00:46:17Z INFO govee::commands::serve] Undoc: room=Some("Bedroom") supports_iot=true ble_only=false

[2024-01-19T00:46:17Z INFO govee::commands::serve] Quirk { sku: "H7160", icon: "mdi:air-humidifier", supports_rgb: true, supports_brightness: true, color_temp_range: None, avoid_platform_api: true, ble_only: false, lan_api_capable: false, device_type: Humidifier, platform_temperature_sensor_units: None, platform_humidity_sensor_units: None, iot_api_supported: true, show_as_preset_buttons: None }

[2024-01-19T00:46:17Z INFO govee::commands::serve]

[2024-01-19T00:46:17Z INFO govee::commands::serve] Living Room Humidifier (::::::: H7160)

[2024-01-19T00:46:17Z INFO govee::commands::serve] Platform API: devices.types.humidifier. supports_rgb=false supports_brightness=false

[2024-01-19T00:46:17Z INFO govee::commands::serve] color_temp=None segment_rgb=None

[2024-01-19T00:46:17Z INFO govee::commands::serve] Undoc: room=Some("Living Room") supports_iot=true ble_only=false

[2024-01-19T00:46:17Z INFO govee::commands::serve] Quirk { sku: "H7160", icon: "mdi:air-humidifier", supports_rgb: true, supports_brightness: true, color_temp_range: None, avoid_platform_api: true, ble_only: false, lan_api_capable: false, device_type: Humidifier, platform_temperature_sensor_units: None, platform_humidity_sensor_units: None, iot_api_supported: true, show_as_preset_buttons: None }

[2024-01-19T00:46:17Z INFO govee::commands::serve]

[2024-01-19T00:46:17Z INFO govee::commands::serve] Mini Air Purifier (::::::: H7120)

[2024-01-19T00:46:17Z INFO govee::commands::serve] Platform API: devices.types.air_purifier. supports_rgb=true supports_brightness=true

[2024-01-19T00:46:17Z INFO govee::commands::serve] color_temp=None segment_rgb=None

[2024-01-19T00:46:17Z INFO govee::commands::serve] Undoc: room=Some("Bedroom") supports_iot=true ble_only=false

[2024-01-19T00:46:17Z INFO govee::commands::serve]

[2024-01-19T00:46:17Z INFO govee::commands::serve] H5100_1570 (::::::: H5100)

[2024-01-19T00:46:17Z INFO govee::commands::serve] Undoc: room=Some("Bedroom") supports_iot=false ble_only=true

[2024-01-19T00:46:17Z WARN govee::commands::serve] Unknown device type. Cannot map to Home Assistant.

[2024-01-19T00:46:17Z INFO govee::commands::serve]

[2024-01-19T00:46:17Z INFO govee::commands::serve] Smart Humidifier (::::::: H7143)

[2024-01-19T00:46:17Z INFO govee::commands::serve] Platform API: devices.types.humidifier. supports_rgb=true supports_brightness=true

[2024-01-19T00:46:17Z INFO govee::commands::serve] color_temp=None segment_rgb=None

[2024-01-19T00:46:17Z INFO govee::commands::serve] Undoc: room=None supports_iot=true ble_only=false

[2024-01-19T00:46:17Z INFO govee::commands::serve]

[2024-01-19T00:46:17Z INFO govee::commands::serve] Big Air Purifier (::::::: H7122)

[2024-01-19T00:46:17Z INFO govee::commands::serve] Platform API: devices.types.air_purifier. supports_rgb=false supports_brightness=false

[2024-01-19T00:46:17Z INFO govee::commands::serve] color_temp=None segment_rgb=None

[2024-01-19T00:46:17Z INFO govee::commands::serve] Undoc: room=Some("Living Room") supports_iot=true ble_only=false

[2024-01-19T00:46:17Z INFO govee::commands::serve]

[2024-01-19T00:46:17Z INFO govee::commands::serve] H5100_5841 (::::::: H5100)

[2024-01-19T00:46:17Z INFO govee::commands::serve] Undoc: room=Some("Living Room") supports_iot=false ble_only=true

[2024-01-19T00:46:17Z WARN govee::commands::serve] Unknown device type. Cannot map to Home Assistant.

[2024-01-19T00:46:17Z INFO govee::commands::serve]

[2024-01-19T00:46:17Z INFO govee::service::http] http server addr is 0.0.0.0:8056

[2024-01-19T00:46:22Z WARN govee::hass_mqtt::enumerator] Do something about Mode nightlightScene for Mini Air Purifier (::::::: H7120) DeviceCapability { kind: Mode, instance: "nightlightScene", parameters: Some(Enum { options: [EnumOption { name: "Forest", value: Number(1), extras: {} }, EnumOption { name: "Ocean", value: Number(2), extras: {} }, EnumOption { name: "Wetland", value: Number(3), extras: {} }, EnumOption { name: "Leisurely", value: Number(4), extras: {} }, EnumOption { name: "Sleep", value: Number(5), extras: {} }] }), alarm_type: None, event_state: None }

[2024-01-19T00:46:22Z WARN govee::hass_mqtt::enumerator] Do something about Mode nightlightScene for Smart Humidifier (::::::: H7143) DeviceCapability { kind: Mode, instance: "nightlightScene", parameters: Some(Enum { options: [EnumOption { name: "Forest", value: Number(1), extras: {} }, EnumOption { name: "Ocean", value: Number(2), extras: {} }, EnumOption { name: "Wetland", value: Number(3), extras: {} }, EnumOption { name: "Leisurely", value: Number(4), extras: {} }, EnumOption { name: "ASleep", value: Number(5), extras: {} }] }), alarm_type: None, event_state: None }

[2024-01-19T00:46:22Z INFO govee::service::hass] Wait 3.15s for hass to settle on 63 entity configs

[2024-01-19T00:46:25Z INFO govee::service::hass] MQTT connected with status=CONNACK code 0: Connection Accepted.

[2024-01-19T00:46:37Z INFO govee::service::state] requesting update via Platform API Smart Dehumidifier Max (::::::: H7151) None

[2024-01-19T00:46:38Z INFO govee::service::state] requesting update via IoT MQTT Bedroom Humidifier (::::::: H7160) None

[2024-01-19T00:46:38Z INFO govee::service::state] requesting update via IoT MQTT Living Room Humidifier ::::::: H7160) None

[2024-01-19T00:46:38Z INFO govee::service::state] requesting update via Platform API Mini Air Purifier (::::::: H7120) None

Additional Logs

No response

Home Assistant Logs

No response

Anything else?

No response

wez commented 5 months ago

FWIW, the metadata you shared doesn't include any explicit humidity control. However, the Auto mode is probably the humidity control. If you install 2024.01.18-b83b7d15 which was released earlier today, then you should get a slider in the HASS UI to control that within that range.

2024.01.18-4475eb63 which just built and released will try to to represent dehumidifiers as humidifiers, but for this particular device it won't be able to control the humidity target because it doesn't have metadata that indicates how to explicitly control the humidity:

   {
        "alarmType": null,
        "eventState": null,
        "instance": "humidity",
        "parameters": {
          "dataType": "INTEGER",
          "range": {
            "max": 80,
            "min": 40,
            "precision": 1
          },
          "unit": "unit.percent"
        },
        "type": "devices.capabilities.range"
      },

it should be possible to define a quirk for this specific device to teach it that the Auto parameter is the humidity, but I'll have to do some thinking about how to indicate that in the code.

In the meantime: please install a newer version and let me know whether that Auto slider actually does control humidity!

wez commented 5 months ago

Ah: I just saw that you do have the humidity item in the metadata, in that case, the newest release should do what you need!

fjrichman commented 5 months ago

Confirmed newest release gives the new control!