Clothes Dryer Automations

I was able to modify your configuration to successfully retrieve the temperature and humidity values.

Some notes on the data encoding:

  1. The first 4 bytes is the “Temperature” in Celsius as a float
  2. The next 4 bytes is the “Humidity” percentage as a float
  3. The “Wake” value has only output 0 when the dryer is off or 7 when it is running.
esp32_ble_tracker:
  on_ble_manufacturer_data_advertise:
    - manufacturer_id: "01AE"
      then:
        - lambda: |-
            id(raw_sensor).publish_state(format_hex(x));
            uint32_t temp = (x[0] + (x[1] << 8) + (x[2] << 16) + (x[3] << 24));
            uint32_t hum = (x[4] + (x[5] << 8) + (x[6] << 16) + (x[7] << 24));
            uint16_t shake = x[8] + (x[9] << 8);
            uint8_t batt = x[10];
            uint8_t wake = x[11];
            id(temp_sensor).publish_state((*(float *) &temp));
            id(hum_sensor).publish_state((*(float *) &hum));
            id(shake_sensor).publish_state(shake);
            id(batt_sensor).publish_state(batt);
            id(wake_sensor).publish_state(wake);

sensor:
  - platform: template
    name: "SmartDry Temperature"
    device_class: 'temperature'
    unit_of_measurement: "°C"
    accuracy_decimals: 4
    id: temp_sensor
  - platform: template
    name: "SmartDry Humidity"
    device_class: 'humidity'
    unit_of_measurement: "%"
    accuracy_decimals: 4
    id: hum_sensor
  - platform: template
    name: "SmartDry Shake"
    id: shake_sensor
  - platform: template
    name: "SmartDry Battery"
    device_class: battery
    id: batt_sensor
  - platform: template
    name: "SmartDry Awake"
    id: wake_sensor
text_sensor:
  - platform: template
    name: "SmartDry Raw"
    id: raw_sensor
3 Likes

Great job! I knew somebody could crack it! I’m just gonna go upload this to the ESP32 in my laundry room.

Thank you! It would have taken me much longer without your config to start with.

Let me know if you see any other values for the “Wake” parameter. I haven’t had a chance to compare that parameter against the AWS endpoint. I’ll try to check when I do laundry this weekend.

The “Battery” parameter does reflect the value for “vbat” from the endpoint. I’m not sure how that value is scaled. I recently changed my battery and it has been hovering around “130”.

By the way, I recently disassembled the SmartDry sensor to check out the internals and it was caked with lint inside. I would suggest that everyone clean their sensor out at least every 6 months (along with their dryer exhaust). The sensor is only held shut with 4 internal clips around the perimeter of the case. I was able to open it without tools just using pressure with my hands.

Thank you, this works perfectly.

I had come to the same observation of the “wake” value. In all my data I’ve only ever seen 0 and 7. in binary it would be 00000111, so perhaps it’s a bytefield and it’s the self-check status of the temp, humidity and inertial sensors?

Only real way to check would be to make one fail, which… I’d rather not, since they don’t make them any more.

so i have this working with HA through the cloud, but Im not sure what I need to do/buy once they remove cloud service.

Do i need to buy a Esp32 board?

Yes, to leverage the work in this thread, you’ll need an ESP32 platform joined to your network and integrated to HA.

I too would love someone to write this up. I’m happy to document my personal experience migrating from the current platform to an ESPHome-based solution, but I don’t currently have any ESP32 devices in my network, so need the beginners guide to get started.

To get this working without the SmartDry cloud, you will need to buy an esp32 dev board. I bought this one from amazon (https://www.amazon.com/ESP-WROOM-32-Development-Microcontroller-Integrated-Compatible/dp/B08D5ZD528/).

Install the ESPHome addon for Home Assistant, plug your esp32 device into your computer, and open ESPHome on your computer (it should be in your Home Assistant side bar).

Click the “NEW DEVICE” button and set up your device. After it is set up, you will see the device on the ESPHome page. Click the EDIT button under your device name. Here is what my YAML file looks like, you can leave the top portion of your yaml file that was automatically set up when you added the new device, just add the important stuff to the bottom that starts with the “esp32_ble_tracker” line:

esphome:
  name: smartdry

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:
  password: "xxxxxxxxxxxxx"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Smartdry Fallback Hotspot"
    password: "xxxxxxxxxxx"

captive_portal:
    
esp32_ble_tracker:
  on_ble_manufacturer_data_advertise:
    - manufacturer_id: "01AE"
      then:
        - lambda: |-
            id(raw_sensor).publish_state(format_hex(x));
            uint32_t temp = (x[0] + (x[1] << 8) + (x[2] << 16) + (x[3] << 24));
            uint32_t hum = (x[4] + (x[5] << 8) + (x[6] << 16) + (x[7] << 24));
            uint16_t shake = x[8] + (x[9] << 8);
            uint8_t batt = x[10];
            uint8_t wake = x[11];
            id(temp_sensor).publish_state((*(float *) &temp));
            id(hum_sensor).publish_state((*(float *) &hum));
            id(shake_sensor).publish_state(shake);
            id(batt_sensor).publish_state(batt);
            id(wake_sensor).publish_state(wake);

sensor:
  - platform: template
    name: "SmartDry Temperature"
    device_class: 'temperature'
    unit_of_measurement: "°C"
    accuracy_decimals: 4
    id: temp_sensor
  - platform: template
    name: "SmartDry Humidity"
    device_class: 'humidity'
    unit_of_measurement: "%"
    accuracy_decimals: 4
    id: hum_sensor
  - platform: template
    name: "SmartDry Shake"
    id: shake_sensor
  - platform: template
    name: "SmartDry Battery"
    device_class: battery
    id: batt_sensor
  - platform: template
    name: "SmartDry Awake"
    id: wake_sensor
text_sensor:
  - platform: template
    name: "SmartDry Raw"
    id: raw_sensor

Save this file, then click the INSTALL button. After it finishes, you should have sensors for humidity, temperature, shake, and awake. You can move this esp32 device close to your dryer now and plug it in.

You can set up a dryness sensor like this (in your Home Assistant configuration.yaml):

- platform: template
  sensors:
    dryer_dry:
      value_template: "{{ states('sensor.smartdry_humidity') | float * -1.03 + 100 }}"
      friendly_name: DryerDryness

Then you can set up an automation to notify you when the desired dryness is reached (83 seems to work well). You can also set up a dryer status sensor like this (in your Home Assistant configuration.yaml):

binary_sensor:
- platform: template
  sensors: 
    dryer_on:
      value_template: "{{ states('sensor.smartdry_shake')  | float > 10.0  }}"
      friendly_name: Dryer
      delay_on:
        minutes: 1
      delay_off:
        minutes: 1

Then you can set up an automation to notify you when the dryer is stopped. I hope this helps, and all credit goes to DieKatzchen , jmtorres22 , doublebishop and others for figuring all this stuff out.

12 Likes

Thanks for making it into one easy-howto guide. I will be switching over on the weekend! I am unsure how this forum works but is there a way of ‘pinning’ posts?

Where do you add the dryness and status sensors? I’m a noob integrating with Hubitat.

I have no idea what Hubitat is. Hopefully someone else can help you out.

Home assistant community is specific to Home Assistant integrations… Not Hubitat.

I suggest you create a post there about converting the integration over from Home Assistant to Hubitat. Or switch to Home Assistant!

Just to clarify and not to be missunderstood. I was asking a question about Home Assistant which I am new to. Then I made a comment that I was new and I also am using and familiar with Hubitat.
Question regarding HA was, where do I add the last 2 sensors listed in the how to guide? Do I add them to the ESP32 or HA configuation.yaml? Thanks in advanced for being welcoming and for the help. The time put in to this is much appreciated.

You need to add them to your HA configuration.yaml.

Sorry for the misunderstanding!

The configuration.yaml can be edited via an addon like File Editor

Just adding on to this, the top part of Bryangerlachs config, has stuff which has api encryption key and a ota password. dont change those.

Once you have installed the new config, grab the encryption key out of the config file, then go settings → integrations → smartdry configure (ESPHome) and paste the encryption key in there

@bryangerlach Just got it all working on my end, thanks so much for writing it up in a nice concise post!

Cheers

I have the ESP32 set up and smartdry sensors working. However I’m not following how to add the extra sensors mentioned, dryness and dryer status. Can someone please explain, show a screenshot or point me in the correct direction where to learn how to add to configuration.yaml? Thanks.

I’m working on adding this device in BLE monitor, a custom component for passive BLE monitoring of sensors. I do not get how you convert the temperature from the data send by the device, can you explain how you do that.

E.g. if the BLE service data is 0fffae019bc8af4108d7c34208016807, temperature data is 0x9bc8af4108 converting that to decimals in little endian ends up with 1102039195. How did you get temperature out of that?

I’m also asking on behalf of the theengs encoder @ 1technophile, who also want to add this to his decoder.

1 Like

@Ernst I am not the one who figured this stuff out, but I believe in your example, the temperature is 9bc8af41, so you have to take those 4 values in decimal and add them together to get 155 + 200 + 175 + 65 = 595, so you have 59.5 degrees Celsius which is 139.1 degrees Fahrenheit. I think that this is correct, but again I am not the one who figured this out, and only used others formulas to write how I got it working for me.