Clothes Dryer Automations

For those who are trying to help, i am using BLE Scan Data Viewer on android and getting the amazon values from the following url (change the dryer id)

https://qn54iu63v9.execute-api.us-east-1.amazonaws.com/prod/RDSQuery?Id=DRYERIDHERE&Write=0&SQLString='select%20*%20from%20DryerballList'

Could you share a screenshot from nrf connect , like below for the Thermobeacon:


1 Like

Oh, the manufacturer ID is just part of the BLE broadcast standard. It’s just easier than figuring the device ID since it’s unlikely for there to be two SmartDry devices in range at once.

is your calculations (from post #82) on the hex dump ive done accurate? or have i dumped different data to what you have received?

Just confirmed that the number written on the chip and printed on the back of the unit is the same. Agree it’s probably an “inspector” number or “lot” number. Doesn’t seem to be used anywhere else.

Do you have the corresponding values when getting those screenshots please ?

no. i wasnt told to do that at the same time.

we should have some washing on tonight and ill try and capture some stuff

1 Like

What value is really needed from nrf connect? Then we need the coresponding data from sensor test page right?

First reading:


[{"idDryerballList":1726,"name":"2AHZDV","phoneToken":"TYZ19AMZ44","phoneEndpoint":"arn:aws:sns:us-east-1:074171373810:endpoint/GCM/dryerball-ccb23/79932b39-52b5-33f4-bbb7-2e26d20db7a9","phoneType":0,"linkActive":1,"LessDry":80,"Dry":83,"VeryDry":85,"delicateTemp":11.11,"tempUnits":1,"notifyLessDry":1,"notifyLessDryShd":1,"notifyDry":0,"notifyDryShd":1,"notifyVeryDry":1,"notifyVeryDryShd":1,"notifyStop":1,"notifyStopShd":1,"notifyDelicate":1,"notifyDelicateShd":1,"notifyHighHeat":0,"notifyHighHeatShd":0,"temperature":15.92,"humidity":84.79,"tempAvg":15.6784,"humAvg":76.0528,"vbat":1874,"shake":153,"shakeCount":0,"notifyLowBat":0,"notifyLowBatShd":0,"notifySleep":1,"notifySleepShd":1,"heartBeat":null,"hubHeartBeat":null,"datalog":1,"reset":315,"moveCount":15,"loadCount":289,"resetCount":8,"rowLock":0,"rDate":1656323683185,"reminder":0,"lastReminder":null,"avgCount":10,"hubName":"HB1587","heartBeatFlag":0,"firstDataFlag":0,"loadStart":1656323604783,"active":1,"notifyAlexa":0,"loadWeek":172,"multiUser":1,"processStep":1,"failCode":0,"stEnable":0,"stDate":1655978792221,"dtSum":782009817,"npoints":135992,"stacked":0,"alexaDeviceEnable":0,"relayEnable":0,"lastWasherDate":0,"washerOn":0,"washerLoadStart":0,"washerLoadCount":0,"notifWasher":0,"washerHubEnable":1,"defDry":0,"defStop":1,"minLoad":10,"dataEnable":0}]

Second Reading:


[{"idDryerballList":1726,"name":"2AHZDV","phoneToken":"TYZ19AMZ44","phoneEndpoint":"arn:aws:sns:us-east-1:074171373810:endpoint/GCM/dryerball-ccb23/79932b39-52b5-33f4-bbb7-2e26d20db7a9","phoneType":0,"linkActive":1,"LessDry":80,"Dry":83,"VeryDry":85,"delicateTemp":11.11,"tempUnits":1,"notifyLessDry":1,"notifyLessDryShd":1,"notifyDry":0,"notifyDryShd":1,"notifyVeryDry":1,"notifyVeryDryShd":1,"notifyStop":1,"notifyStopShd":1,"notifyDelicate":1,"notifyDelicateShd":1,"notifyHighHeat":0,"notifyHighHeatShd":0,"temperature":34.24,"humidity":100,"tempAvg":34.1224,"humAvg":99.9995,"vbat":1897,"shake":86,"shakeCount":0,"notifyLowBat":0,"notifyLowBatShd":0,"notifySleep":1,"notifySleepShd":1,"heartBeat":null,"hubHeartBeat":null,"datalog":1,"reset":315,"moveCount":296,"loadCount":289,"resetCount":8,"rowLock":0,"rDate":1656325445098,"reminder":0,"lastReminder":null,"avgCount":10,"hubName":"HB1587","heartBeatFlag":0,"firstDataFlag":0,"loadStart":1656323604783,"active":1,"notifyAlexa":0,"loadWeek":172,"multiUser":1,"processStep":1,"failCode":0,"stEnable":0,"stDate":1655978792221,"dtSum":783771730,"npoints":136273,"stacked":0,"alexaDeviceEnable":0,"relayEnable":0,"lastWasherDate":0,"washerOn":0,"washerLoadStart":0,"washerLoadCount":0,"notifWasher":0,"washerHubEnable":1,"defDry":0,"defStop":1,"minLoad":10,"dataEnable":0}]![image|230x500]

hey all.

has anyone had any luck converting it across to a esp32 chip yet?

I will check it this week. Thanks for sharing !

Just another way of attacking this device… From lasers to laundry: How three guys built SmartDry - Stacey on IoT | Internet of Things news and analysis mentions that the ESP32 chip they use at the start, had a security flaw to it that may or may not have been patched (probably not???)

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.