Skip to main content

SONOFF S31

One of the top favorite smart plugs. Easy to disassemble with a screw driver, exposed pin headers to the ESP8266, button on GPIO 0, and excellent power monitoring! You can even flash it without soldering utilizing a USB TTL adapter and dupont test clips known as clippy bois - see the pics section below.

Purchase on Amazon Amazon
Purchase on iTead iTead
Purchase on Aliexpress Aliexpress
Purchase on CloudFree CloudFree

Video Setup

Tasmota Template

None needed as it is built into TASMOTA. Click Configuration -> Configure Module -> Pick SONOFF S31 and hit Save.

alt text

TASMOTA Settings

The power calibration for the S31 is usually pretty close on default but it can be fine tuned via Tasmota Calibration Procedure

GPIO Layout

GPIOComponentDescription
GPIO00Button 1
GPIO01CSE7766 TxPower monitoring chip
GPIO03CSE7766 RxPower monitoring chip
GPIO12Relay1Relay for Load
GPIO13Led_i_1Onboard LED

ESPHome YAML

esphome:
name: plug-s31-a
friendly_name: plug-s31-a

esp8266:
board: esp01_1m
early_pin_init: false # Prevent the physical relay flipping on reboot.

logger:
baud_rate: 0 # (UART logging disabled due to cse7766 power mon chip)
api:
ota:
captive_portal:

wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# domain: !secret wifi_mydomain
ap:
password: !secret ap_password

web_server:

uart:
rx_pin: RX
baud_rate: 4800

binary_sensor:
- platform: gpio
pin:
number: GPIO0
mode: INPUT_PULLUP
inverted: True
name: Button
on_press:
- switch.toggle: relay

sensor:
- platform: cse7766
current:
name: Amps
unit_of_measurement: A
accuracy_decimals: 2
filters:
- throttle_average: 10s
voltage:
name: Voltage
unit_of_measurement: V
accuracy_decimals: 1
filters:
- throttle_average: 10s
power:
name: Watts
accuracy_decimals: 0
id: plug_power
filters:
- throttle_average: 10s
- platform: total_daily_energy
name: Daily Energy
power_id: plug_power
filters:
- multiply: 0.001 ## convert Wh to kWh
unit_of_measurement: kWh

switch:
- platform: gpio
name: Relay
pin: GPIO12
id: relay
restore_mode: ALWAYS_ON

time:
- platform: homeassistant
id: homeassistant_time

status_led:
pin:
number: GPIO13
inverted: True

Pics

alt text alt text alt text alt text alt text alt text alt text

alt text