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.