Breville LAD358 All Climate 2-in-1 Dehumidifier & Purifier - Tuya-Local

Hey all,

I’ve been poking around trying to get my new dehumidifier working with HA and Tuya-Local. The baked in Tuya integration doesn’t work very well, and it doesn’t expose all the controls available.

I’ve been using the thread for the LAD208 as a bit of a reference in getting started (link) which has had a lot of useful information.

So far I’ve used TinyTuya to get things started in identifying the different DPS codes that the unit exposes and I’ve gotten a bit over 3/4 of the way there but there are a few codes that I’m a little unsure of. I used the device monitor example in the readme to pull what I could.

This is what I’ve found from that process with some notes added:

    '1': False, Switch
    '2': 50, Set Humidity
    '4': 'mid', Fan Speed
    '5': 'Auto', Mode
    '6': 693, Current Humidity
    '7': 214, Current Temp
    '11': True, All Lights
    '14': False, Sleep Mode
    '16': False, Child Lock
    '18': 0, Timer
    '19': 0, Fault
    '23': 97, Filter Life
    '101': 175,
    '102': '80angle', Oscillate
    '103': 0,
    '104': False, Button Sound
    '105': True, Humidity Light
    '106': True, Tank Light
    '108': True, Tank Presence
    '109': False,
    '110': False,
    '111': False

So out of the 22 codes, all but 5 have been relatively easy to figure out.

I’m mainly posting to share my progress with others as I’m sure I’m not the only person who has bought this and wants to be able to integrate it with HA.

This is my current yaml to integrate it with Tuya-Local. Note that it has not been tested yet as I’m still doing some research so there may be errors or points where I’ve misunderstood how to format. Some IDs are blank as I haven’t figured out what they are yet or if they even exist. Further updates will be posted as replies.

name: Dehumidifier
products:
  - id: lq3onfjynoozlcws
    manufacturer: Breville
    model: All Climate 2-in-1 Dehumidifier & Purifier
    model_id: LAD358
entities:
  - entity: humidifier
    class: dehumidifier
    translation_only_key: extended
    dps:
      - id: 1
        name: switch
        type: boolean
      - id: 5
        name: mode
        type: string
        mapping:
          - dps_val: 0
            value: "auto"
          - dps_val: 1
            value: "dehumid"
          - dps_val: 2
            value: "laundry"
          - dps_val: 3
            value: "purify"
      - id: 2
        name: humidity
        type: integer
        range:
          min: 30
          max: 80
        mapping:
          - step: 5
      - id: 6
        type: integer
        name: current_humidity
  - entity: fan
    name: Fan
    category: config
    dps:
      - id: 1
        type: boolean
        name: switch
      - id: 4
        type: string
        name: speed
        mapping:
          - dps_val: 1
            value: "low"
          - dps_val: 2
            value: "mid"
          - dps_val: 3
            value: "high"
  - entity: select
    translation_key: timer
    category: config
    dps:
      - id: 18
        type: integer
        range:
          min: 0
          max: 1440
        mapping:
          - step: 1        
  - entity: sensor
    class: temperature
    dps:
      - id: 17
        type: integer
        name: sensor
        unit: C
        class: measurement
  - entity: switch
    translation_key: sleep
    category: config
    dps:
      - id: 14
        type: boolean
        name: switch
  - entity: lock
    translation_key: child_lock
    category: config
    dps:
      - id: 16
        type: boolean
        name: lock
  - entity: binary_sensor
    translation_key: tank_full
    dps:
      - id: 
        type: bitfield
        name: sensor
        optional: true
        mapping:
          - dps_val: 8
            value: true
          - value: false
  - entity: binary_sensor
    translation_key: defrost
    category: diagnostic
    dps:
      - id: 
        type: boolean
        name: sensor
  - entity: binary_sensor
    class: problem
    category: diagnostic
    dps:
      - id: 19
        type: bitfield
        name: sensor
        optional: true
        mapping:
          - dps_val: 0
            value: false
          - dps_val: null
            value: false
          - value: true
      - id: 19
        type: bitfield
        optional: true
        name: fault_code

Any fresh insight or ideas are of course welcome.

I’ve just run a quick test using the yaml below and found what’s currently working and what’s not.

Working

  • Power On/Off
  • Set Target Humidity
  • Child Lock On/Off
  • Sleep Mode On/Off

Not Working

  • Set operating mode
  • Set fan speed
  • Temp and humidity are off by a factor of 10 (So 21.5c is showing as 215c, etc.)

Looks fine but unverified:

  • Fault reporting
name: Dehumidifier
products:
  - id: lq3onfjynoozlcws
    manufacturer: Breville
    model: All Climate 2-in-1 Dehumidifier & Purifier
    model_id: LAD358
entities:
  - entity: humidifier
    class: dehumidifier
    translation_only_key: extended
    dps:
      - id: 1
        name: switch
        type: boolean
      - id: 5
        name: mode
        type: string
        mapping:
          - dps_val: 0
            value: "auto"
          - dps_val: 1
            value: "dehumid"
          - dps_val: 2
            value: "laundry"
          - dps_val: 3
            value: "purify"
      - id: 2
        name: humidity
        type: integer
        range:
          min: 30
          max: 80
        mapping:
          - step: 5
      - id: 6
        type: integer
        name: current_humidity
        scale: 10
  - entity: fan
    name: Fan
    category: config
    dps:
      - id: 1
        type: boolean
        name: switch
      - id: 4
        type: string
        name: speed
        mapping:
          - dps_val: 1
            value: "low"
          - dps_val: 2
            value: "mid"
          - dps_val: 3
            value: "high"
  - entity: select
    translation_key: timer
    category: config
    dps:
      - id: 18
        type: integer
        range:
          min: 0
          max: 1440
        mapping:
          - step: 1
  - entity: sensor
    class: temperature
    dps:
      - id: 17
        type: integer
        name: sensor
        unit: C
        class: measurement
        scale: 10
  - entity: switch
    translation_key: sleep
    category: config
    dps:
      - id: 14
        type: boolean
        name: switch
  - entity: lock
    translation_key: child_lock
    category: config
    dps:
      - id: 16
        type: boolean
        name: lock
  - entity: binary_sensor
    class: problem
    category: diagnostic
    dps:
      - id: 19
        type: bitfield
        name: sensor
        optional: true
        mapping:
          - dps_val: 0
            value: false
          - dps_val: null
            value: false
          - value: true
      - id: 19
        type: bitfield
        optional: true
        name: fault_code

Using the Tuya IOT portal, I’ve found the following info about different DPS IDs:

{
  "result": {
    "properties": [
      {
        "code": "switch",
        "custom_name": "",
        "dp_id": 1,
        "time": 1787636554468,
        "type": "bool",
        "value": false
      },
      {
        "code": "dehumidify_set_value",
        "custom_name": "",
        "dp_id": 2,
        "time": 1787636441860,
        "type": "value",
        "value": 50
      },
      {
        "code": "fan_speed_enum",
        "custom_name": "",
        "dp_id": 4,
        "time": 1787636525604,
        "type": "enum",
        "value": "low"
      },
      {
        "code": "mode",
        "custom_name": "",
        "dp_id": 5,
        "time": 1787631778138,
        "type": "enum",
        "value": "Auto"
      },
      {
        "code": "humidity_indoor",
        "custom_name": "",
        "dp_id": 6,
        "time": 1787641450451,
        "type": "value",
        "value": 667
      },
      {
        "code": "temp_indoor",
        "custom_name": "",
        "dp_id": 7,
        "time": 1787640971786,
        "type": "value",
        "value": 220
      },
      {
        "code": "light",
        "custom_name": "",
        "dp_id": 11,
        "time": 1787631831558,
        "type": "bool",
        "value": true
      },
      {
        "code": "sleep",
        "custom_name": "",
        "dp_id": 14,
        "time": 1787636502796,
        "type": "bool",
        "value": false
      },
      {
        "code": "child_lock",
        "custom_name": "",
        "dp_id": 16,
        "time": 1787636538180,
        "type": "bool",
        "value": false
      },
      {
        "code": "countdown_left",
        "custom_name": "",
        "dp_id": 18,
        "time": 1787631925566,
        "type": "value",
        "value": 0
      },
      {
        "code": "fault",
        "custom_name": "",
        "dp_id": 19,
        "time": 1785650738478,
        "type": "bitmap",
        "value": 0
      },
      {
        "code": "filter_reset",
        "custom_name": "",
        "dp_id": 20,
        "time": 1785650734700,
        "type": "bool",
        "value": false
      },
      {
        "code": "filter_life",
        "custom_name": "",
        "dp_id": 23,
        "time": 1787428888954,
        "type": "value",
        "value": 97
      },
      {
        "code": "remind",
        "custom_name": "",
        "dp_id": 25,
        "time": 1785650734700,
        "type": "enum",
        "value": "on"
      },
      {
        "code": "air_quality",
        "custom_name": "",
        "dp_id": 33,
        "time": 1785650734700,
        "type": "enum",
        "value": "great"
      },
      {
        "code": "filter_days",
        "custom_name": "",
        "dp_id": 101,
        "time": 1787257270740,
        "type": "value",
        "value": 175
      },
      {
        "code": "dp_swing",
        "custom_name": "",
        "dp_id": 102,
        "time": 1787631874590,
        "type": "enum",
        "value": "80angle"
      },
      {
        "code": "dp_countdown_set",
        "custom_name": "",
        "dp_id": 103,
        "time": 1787631925558,
        "type": "value",
        "value": 0
      },
      {
        "code": "dp_mute",
        "custom_name": "",
        "dp_id": 104,
        "time": 1787631884854,
        "type": "bool",
        "value": false
      },
      {
        "code": "dp_humilight",
        "custom_name": "",
        "dp_id": 105,
        "time": 1787631818666,
        "type": "bool",
        "value": true
      },
      {
        "code": "dp_watertanklight",
        "custom_name": "",
        "dp_id": 106,
        "time": 1787631808914,
        "type": "bool",
        "value": true
      },
      {
        "code": "dp_factoryreset",
        "custom_name": "",
        "dp_id": 107,
        "time": 1785650734700,
        "type": "bool",
        "value": false
      },
      {
        "code": "dp_watertank",
        "custom_name": "",
        "dp_id": 108,
        "time": 1787635721859,
        "type": "bool",
        "value": true
      },
      {
        "code": "dp_tpping",
        "custom_name": "",
        "dp_id": 109,
        "time": 1785650740337,
        "type": "bool",
        "value": false
      },
      {
        "code": "dp_fullwater",
        "custom_name": "",
        "dp_id": 110,
        "time": 1787539832569,
        "type": "bool",
        "value": false
      },
      {
        "code": "dp_70water",
        "custom_name": "",
        "dp_id": 111,
        "time": 1787506214091,
        "type": "bool",
        "value": false
      }
    ]
  },
}

Updated readable table of values:

    '1': False, Switch
    '2': 50, Set Humidity
    '4': 'mid', Fan Speed: 'low', 'mid', 'high'
    '5': 'Auto', Mode: 'Auto', 'Dehumi', 'Drying', 'AirPurification'
    '6': 693, Current Humidity
    '7': 214, Current Temp
    '11': True, All Lights
    '14': False, Sleep Mode
    '16': False, Child Lock
    '18': 0, Timer Remaining
    '19': 0, Fault
    '20': False, Filter Reset
    '23': 97, Filter Life
    '25': 'on', Remind? Unsure what this is
    '33': 'great', Air Quality
    '101': 175, Filter Days Remaining
    '102': '80angle', Oscillate: '80angle', 'stop', 'swing'
    '103': 0, Timer Set Value
    '104': False, Button Sound
    '105': True, Humidity Light
    '106': True, Tank Light
    '107': False, Factory Reset
    '108': True, Tank Presence
    '109': False, Tip Sensor? API returns name of tpping
    '110': False, Tank Full
    '111': False, Tank 70% Full

EDIT: Thank you @sir_goodenough for updating the thread tags, I’m new here