Breville Smart Dry Connect Dehumidifier

Just got this device. Uses TUYA. I am using LocalTuya integration. These are the entities I have been able to hack so far. There is a defrost sensor which may be entity 7 or 101. Entity 12 might be one of the 2 timers but i am not using that (Home assistant can do a better job).

The most valuable sensors for me was the humidity, temperature and tank full alert! I have an equivalent, slightly older (cheaper) version of the same product with no wifi, and because room humidity climbs back up to its original air humidity within 30-90 minutes I want to be able to know the device is full. It has an alarm which isn’t so audible in a large house with shut doors, or if you are away when it alarms. I had been using a separate wifi humidity sensor to detect full tank by looking for the sudden increase in humidity, but this is much more reliable.

Using localtuya these are the reports entity values. Please reply here if you discover the meanings of the remaining ones.

Entity 1: Device on/off: switch type: true/false
Entity 2: Mode: integer number type: valid settings: auto - 0, continuous - 1, laundry - 2, ventilation - 3
Entity 4: humidity % target : integer number type: valid ranges: 30-80 (in steps of 5)
Entity 6: Fan Speed: integer number type: valid settings: 1 - low speed fan, 3 - high speed fan
Entity 7: Unknown entity: boolean - false - function not known
Entity 11: Empty Me: integer number type: (sensor only) valid values: 0 - not empty, 8 - tank full
Entity 12: Unknown entity: integer type - function not known
Entity 101: Unknown entity: boolean - false - function not known
Entity 102: Night Mode: switch type: false - night mode off, true - night mode on
Entity 103: Temperature: climate type, temperature: integer degrees
Entity 104: Humidity: climate type, humidity: integer %

1 Like

My experience is that you have to put your Sherlock Holmes hat on…while there are many useful devices in the Tuya universe, it is a real wild west.
Have you gone to the Tuya developer web site and dumped the definition for the device?
I have found the python library and tools ‘tinytuya’ to be very helpful.

The example code below just watches for status changes from a device, it is just a small mod to Jason’s example at his tinytuya github repository. Manipulate the device using either the Tuya app or the physical controls on the device. And watch what gets reported.

For example, I have a Tuya space heater that has a ‘knocked over/tilt’ sensor. It was not documented at the Tuya developer site, but the Tuya app posted notices when it occurred. So I just watched the device with the code shown and ‘knocked it over’.

I still have ‘mystery’ DPS attributes for some of my Tuya devices, it just an iterative process of the device doing things and watching the reporting.

The second code snip below just dumps out the DPS’s for device, this dump is like the report for the Tuya developer website.

Good hunting!

#! /usr/bin/env python3

import sys

from datetime import datetime
import tinytuya

def main():

    tinytuya.set_debug(False)


    # Small Bedroom Sunbeam Bedding
    # d = tinytuya.OutletDevice('zzz', '192.168.2.111', 'xxx')

    # # dining room atomi heater
    # d = tinytuya.OutletDevice('zzz', '192.168.2.112', 'xxx')

    # kitchen Galaxy AI-Plus Sink lamp
    # d = tinytuya.OutletDevice('zzz', '192.168.2.113', 'xxx')

    # Ustellar Tunable White Light Strip
    d = tinytuya.BulbDevice('zzz', '192.168.2.114', 'xxx', 'device22')

    d.set_version(3.3)
    d.set_socketPersistent(True)
    d.set_dpsUsed({"20": None})

    # d.set_sendWait(1)
    # d.set_socketTimeout(1)
    # d.set_socketNODELAY(True)
    # data =  d.status()
    # print(data)


    print(" > Send Request for Status < ")
    payload = d.generate_payload(tinytuya.DP_QUERY)
    d.send(payload)

    print(" > Begin Monitor Loop <")
    while(True):
        # d.status()
        # payload = d.generate_payload(tinytuya.DP_QUERY)
        # d.send(payload)

        # See if any data is available
        # print(1)
        data = d.receive()
        # print(2)
        if data is not None :
            print(datetime.now().strftime("%Y-%m-%d %H:%M:%S "), 'Received Payload: %r' % data)
        # else :
        #     print(".")

        # Send keep alive heartbeat
        # print(" > Send Heartbeat Ping < ")
        payload = d.generate_payload(tinytuya.HEART_BEAT)
        d.send(payload)

        # NOTE If you are not seeing updates, you can force them - uncomment:
        # print(" > Send Request for Status < ")
        # payload = d.generate_payload(tinytuya.DP_QUERY)
        # d.send(payload)

        # NOTE Some smart plugs require an UPDATEDPS command to update power data
        # print(" > Send DPS Update Request < ")
        # payload = d.generate_payload(tinytuya.UPDATEDPS)
        # d.send(payload)

    sys.exit(0)
 
if __name__ == '__main__':
   main()


# EOF

#! /usr/bin/env python3
# or force unbuffered stdout output for piping to another program
####! /usr/bin/env -S python3 -u


import tinytuya

import json
import pprint

c = tinytuya.Cloud(
        apiRegion="us",
        apiKey="xxx",
        apiSecret="yyy",
        apiDeviceID="zzz") # any of your enabled devices

# Display list of devices
# devices = c.getdevices()
# print("Device List: %r" % devices)

# Select a Device ID to Test
id = "xyz"

# Display DPS IDs of Device
result = c.getdps(id)

print(json.dumps(result, sort_keys=False, indent=4))


1 Like

Thanks for the feedback and especially taking the time! I will check out tinytuya.

I have been watching status changes, pressing different buttons, etc, and logging them (see below) which is how i got the above, especially the tank full - as i thought that was a timer setting but it turned out to be the tank full setting. The entity values are as reported by localtuya which like tinytuya is a LAN based integration (intercepting comms between the devices and TUYA).

However a key thing i wanted to work out was where best should i contribute my findings? As each person does the detective work, it would be great to efficiently share these - kind of like a device integration wiki.

Yes, the Tuya products need a website similar to what the web sites below do for Tasmota and Zigbee compatible products. Both of these are wild wests, but I feel Tuya devices are wiid time 10 west.

https://www.zigbee2mqtt.io/supported-devices/

Screen Shot 2022-03-14 at 10.41.43 pm

A bit of exploration on the developer.tuya.com website i found this list of “DP IDs” and “standard status set” JSON. Looking at other TUYA devices i get far more descriptive information including max and min values of integers, so it seems to be down to how well they are designed/integrated into TUYA whether you will get the detail or not.

just got one of these

the defrost function allows you to turn it on once temperature goes below 23 if you want to find out which one it is

mine shows 105 and has a boolean - false

105? Wow that doesn’t come up in the localtuya integration I use as a valid entity to configure. Which integration are you using? @dproffer suggested tinytuya but I haven’t used it.

its localtuya im not sure why its showing up and no idea what it does

i thought it would be something for tank removed, but tank removed just shows up as tank full

there are error codes in the manual E2 humidity sensor failed, E3 defroster failed E6 pump failer

it could be related to those but again its still new so havent crossed that bridge yet

Re: entity 105 (value: false) maybe you might have a different firmware/hardware to the one i bought (in late February 2022), as I don’t have that entity. :frowning:

Yes I get the tank full alert only when removing the tank. I reckon the entities 7, 12 and 101 are error entities but am not about to try to force a failure to check.

Not sure if anyone is still following this conversation, but I have just purchased one of these and successfully integrated it into Home Assistant using Local Tuya.
I am fairly confident that 105 is when the dehumidifier goes into defrost.
I have used some automation, helpers and sensors to make a fairly easy to use control panel.


If anyone is interested I am happy to share my process.

1 Like

Please share. I am trying to add mine.

So ExtremeBias had the most helpful info breaking down the Entities, but here’s what I have for use with local tuya:

Entity Name Platform Value
1 Power switch -
2 Dehumifier Mode Number 0-3
4 Humidity Target Number 0-100
6 Fan Speed Number 1-3
7 Unkown binary_sensor -
11 Empty Tank sensor -
12 Unknown binary_sensor -
101 Unknown binary_sensor -
102 Night Mode switch -
103 Temperature sensor Device Class: temperature, Unit: °
104 Humidity sensor Device Class: humidity, Unit: %
105 Defrost binary_sensor -

This gets the device setup, but I wanted it to work a little better than having to move a number line to select the fan speed or mode.
I made some helpers to use in the UI with automations to translate the change in value and send it to the device.

Type Name Options
input_boolean Dehumidifier Remote Lock -
input_select Dehumifier Mode Auto, Continuous, Laundry, Ventilation
input_select Dehumifier Fan Speed Low, High

I also added some template sensors to track the state of the inputs and used them as triggers for updating the UI when the device is changed using the buttons on the device itself.

- sensor:
  - name: "Dehumidifier Fan Speed"
    state: "{{ states('number.fan_speed') }}"
  - name: "Dehumidifier mode"
    state: "{{ states('number.dehumidifier_mode') }}"
- sensor:
  - name: "Dehumidifier Empty Tank"
    state: >
      {% if states('sensor.empty_tank') == '0' %}
        {{ "Tank Fine" }}
      {% else %}
        {{ "Empty Tank" }}
      {% endif %}

Now there are just 4 automations to make it work. 2 each for the mode and fan speed, with one monitoring for changes in Home Assistant and the other for changes from the device. One issue I did come across was that changing on the device updated the values in home assistant which then triggered the automations to change it back on the dehumidifier, hence why I added the remote lock helper.
Fan Speed on Home Assitant:

alias: Dehumidifier Fan Speed - Changed Local
description: ""
trigger:
  - platform: state
    entity_id:
      - input_select.dehumidifier_fan_speed
condition:
  - condition: state
    entity_id: input_boolean.dehumidifier_remote_lock
    state: "off"
action:
  - if:
      - condition: state
        entity_id: input_select.dehumidifier_fan_speed
        state: Low
    then:
      - service: number.set_value
        data:
          value: "1"
        target:
          entity_id:
            - number.fan_speed
    else:
      - service: number.set_value
        data:
          value: "3"
        target:
          entity_id: number.fan_speed
mode: single

Fan Speed on Device:

alias: Dehumidifier Fan Speed - Changed Remote
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.dehumidifier_mode
condition: []
action:
  - service: input_boolean.turn_on
    data: {}
    target:
      entity_id: input_boolean.dehumidifier_remote_lock
  - if:
      - condition: state
        entity_id: sensor.dehumidifier_mode
        state: "0"
    then:
      - service: input_select.select_option
        data:
          option: Auto
        target:
          entity_id: input_select.dehumidifier_mode
    else: []
  - delay:
      hours: 0
      minutes: 0
      seconds: 5
      milliseconds: 0
  - service: input_boolean.turn_off
    data: {}
    target:
      entity_id: input_boolean.dehumidifier_remote_lock
mode: single

Mode on Home Assistant:

alias: Dehumidifier Mode - Changed Local
description: ""
trigger:
  - platform: state
    entity_id:
      - input_select.dehumidifier_mode
    alias: When Dehumidifier Mode Select is changed
condition:
  - condition: state
    entity_id: input_boolean.dehumidifier_remote_lock
    state: "off"
action:
  - choose:
      - conditions:
          - condition: state
            entity_id: input_select.dehumidifier_mode
            state: Auto
        sequence:
          - service: number.set_value
            data:
              value: "0"
            target:
              entity_id: number.dehumidifier_mode
      - conditions:
          - condition: state
            entity_id: input_select.dehumidifier_mode
            state: Continuous
        sequence:
          - service: number.set_value
            data:
              value: "1"
            target:
              entity_id: number.dehumidifier_mode
      - conditions:
          - condition: state
            entity_id: input_select.dehumidifier_mode
            state: Laundry
        sequence:
          - service: number.set_value
            data:
              value: "2"
            target:
              entity_id: number.dehumidifier_mode
      - conditions:
          - condition: state
            entity_id: input_select.dehumidifier_mode
            state: Ventilation
        sequence:
          - service: number.set_value
            data:
              value: "3"
            target:
              entity_id: number.dehumidifier_mode
mode: single

Mode on device:

alias: Dehumidifier Mode - Changed Remote
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.dehumidifier_mode
condition: []
action:
  - service: input_boolean.turn_on
    data: {}
    target:
      entity_id: input_boolean.dehumidifier_remote_lock
  - if:
      - condition: state
        entity_id: sensor.dehumidifier_mode
        state: "0"
    then:
      - service: input_select.select_option
        data:
          option: Auto
        target:
          entity_id: input_select.dehumidifier_mode
    else:
      - if:
          - condition: state
            entity_id: sensor.dehumidifier_mode
            state: "1"
        then:
          - service: input_select.select_option
            data:
              option: Continuous
            target:
              entity_id: input_select.dehumidifier_mode
        else:
          - if:
              - condition: state
                entity_id: sensor.dehumidifier_mode
                state: "2"
            then:
              - service: input_select.select_option
                data:
                  option: Laundry
                target:
                  entity_id: input_select.dehumidifier_mode
            else:
              - service: input_select.select_option
                data:
                  option: Ventilation
                target:
                  entity_id: input_select.dehumidifier_mode
  - delay:
      hours: 0
      minutes: 0
      seconds: 5
      milliseconds: 0
  - service: input_boolean.turn_off
    data: {}
    target:
      entity_id: input_boolean.dehumidifier_remote_lock
mode: single

I also added an extra automation that sends a notification to my phone when the tank needs emptying.
Last thing was to shove it all in a lovelace entities card for easy use:

type: entities
entities:
  - entity: switch.power
  - entity: switch.night_mode
  - entity: sensor.temperature
  - entity: sensor.humidity
  - entity: number.humidity_target
  - entity: binary_sensor.defrost
  - entity: sensor.dehumidifier_empty_tank
  - entity: input_select.dehumidifier_fan_speed
  - entity: input_select.dehumidifier_mode
title: Dehumidifier


Hope that helps anyone who needs it :slight_smile:

4 Likes
Entity Name Platform Value Note
1 Power switch - -
2 Dehumifier Mode select 0;1;2;3 - Auto;Continuous;Laundry;Ventilation
4 Humidity Target number 30-80 Increment 5
6 Fan Speed select 1;3 Low;High
7 Fault binary_sensor -
11 Empty Tank sensor -
12 TImer select 0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24 - Off;1 hour;2 hours;3 hours;4 hours;5 hours;6 hours;7 hours;8 hours;9 hours;10 hours;11 hours;12 hours;13 hours;14 hours;15 hours;16 hours;17 hours;18 hours;19 hours;20 hours;21 hours;22 hours;23 hours;24 hours
101 Timer binary_sensor -
102 Night Mode switch -
103 Temperature sensor Device Class: temperature, Unit: °
104 Humidity sensor Device Class: humidity, Unit: %
105 Defrost binary_sensor -
2 Likes

this is amazing, thank you!!!

I just set this dehumidifier up in Home Assistant and I am now looking to integrate it to HomeKit. Is there any way to compile the separate entities of the device into a single humidifier entity that I can then expose to HomeKit via a bridge? The HomeKit integration supports the humidifier component. I am really new to Home Assistant and this is my first major project I am working on. Thanks!

Anyone who’s been using this for a while, would you recommend it as a good dehumidifier option for a walk in robe prone to dust/damp? I’m using quite a few localtuya devices so I’m familair with setting them up an automating them. I will need to include some automation for sliding doors, have a smart GPO in the room too. Wondering I get a ‘smart’ unit like this and leverage the great work already done here, or just get a dumb unit and control from the GPO.

I’ve been using mine for close to a year in the same environment as you mention, a walk-in robe that is prone to dampness. I recommend it both as a dehumidifier, it just works. In fact a little scary just how much moisture it pulls from the air! As for the smart, I have it setup to play a TTS message when it’s full, for this reason alone I would recommend it from a smart point of view.

1 Like

Thank-you for the quick response. Yes my idea with a dumb unit would be to compare energy consumption vs. expected to tell if it’s probably full. But that would take some trial and error plus finding a unit that turns on with the supply power. Paying a bit extra for a wifi connected unit seems well worth with some assurance it’s good at it’s primary job! Thanks again.

Is anyone here using the “Breville Smart Dry Plus” dehumidifier?

Just wondering if it also works with local tuya?

I’ve narrowed my choice to either this dehumidifier or the midea cube one but the cube one looks to be difficult to empty and can’t easily be moved when full so I’m leaning more towards this one. Home Assistant connectivity is essential.

It should do. I’ve just plugged in the “bigger brother” the Breville Smart Dry™ 2-in-1 Viral Protect Dehumidifier and it works.

For setting up use the Tuya app, rather than the Breville one. The Breville app is a white label Tuya app (spec’ed down). Unfortunately, I’ve been unable to link that app to the Tuya dev account. So, if you use the Tuya app straight off, you’ll get the same functionality in the app and will be able to get the ‘local key’ etc via the dev account. It’s still a piggery to get it setup in HA, but the tables above should help a lot.