devices.esphome.io
Tuya Smart Plug 20A WHDZ03
Tuya Smart Plug 20A WHDZ03
Device Type: plugElectrical Standard: ukBoard: bk72xxDifficulty: Soldering required, 4/5
General Notes
These plugs with/without energy monitoring are sold under many brands on Aliexpress / taobao / pinduoduo, and are available in both 16A or 20A.
The 20A smart plug with energy monitor is not flashable using tuya-cloudcutter. The main module version on smart life app is V1.1.23, which is on the known patched firmware list.
The socket is not glued but factory pressed. I do not recommend using a screwdriver to pry it open, I did and I left some damage on the side (see picture). It may be better to try opening by pushing a tool through the earth pin to apply force, holding the outer shell. After opening we can see that it is using a CB2S wifi module with the BK7231N chip.
It is not possible to separate the PCB from the case without unsoldering the main socket pins. Therefore I chose to use a rotary tool to make a hole in the external casing. This provides us with access the 3v3 GND RX1 TX1 pins without soldering. I compiled the below configuration on esphome, saved the uf2 binary, and flashed it using ltchiptool with default settings, holding everything in place by hand while flashing the firmware. Press the physical button on the PCB for around 5-10 seconds to flash.
Product Images
GPIO Pinout
Pin | Function |
---|---|
P6 | CF1 pin |
P7 | CF pin |
P8 | Blue LED |
P11 | Switch button |
P24 | SEL pin |
P26 | Relay |
Basic configuration
# Basic Configsubstitutions: friendly_name: Socket 20A device_name: socket-20a
esphome: name: ${device_name} friendly_name: ${friendly_name}
bk72xx: board: cb2s
# Enable logginglogger:
# Enable Home Assistant APIapi: encryption: key: !secret api_encryption_key
ota: - platform: esphome password: !secret ota_password
wifi: ssid: !secret wifi_ssid password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: ${friendly_name} Fallback Hotspot password: ""
captive_portal:
#optionalweb_server: port: 80
text_sensor: - platform: libretiny version: name: LibreTiny Version
output: - platform: gpio id: button_led pin: P8 inverted: true
binary_sensor: - platform: gpio id: binary_switch pin: number: P11 inverted: true mode: INPUT_PULLUP on_press: then: - switch.toggle: relay
switch: - platform: gpio name: ${friendly_name} Relay Switch id: relay restore_mode: "RESTORE_DEFAULT_OFF" pin: P26 on_turn_on: then: - output.turn_on: button_led on_turn_off: then: - output.turn_off: button_led
sensor: - platform: hlw8012 model: BL0937 cf_pin: number: P7 inverted: true cf1_pin: number: P6 inverted: true sel_pin: number: P24 inverted: true current: name: ${friendly_name} Current filters: - multiply: 0.5 voltage: name: ${friendly_name} Voltage power: name: ${friendly_name} Power energy: name: ${friendly_name} Energy voltage_divider: 800 current_resistor: 0.001 ohm update_interval: 1s change_mode_every: 1