devices.esphome.io

Shelly Plug S

Shelly Plug S

Device Type: plug
Electrical Standard: eu
Board: esp8266

GPIO Pinout

PinFunction
GPIO0Red LED
GPIO2Blue LED
GPIO5CF Pin
GPIO12HLW8012 (power measurement)
GPIO13Button
GPIO14CF1 Pin
GPIO15Relay
GPIOA0Internal Temperature

Configuration as relay with overpower and overtemperature protection

When integration with home assistant exists, it will appear as a switch, 4 sensors (power, temperature, wifi strenght and total daily energy) When the max_power is exceeded, the relay will be switched off and a persistent notification will be created in home-assistant When the max_temp is exceeded, the relay will be switched off and a persistent notification will be created in home-assistant Thanks to Tasmota and Tijmen from this topic Config tested by gieljnssns

substitutions:
devicename: shelly_plug_s
channel_1: Relay
# Higher value gives lower watt readout
current_res: "0.000943"
# Lower value gives lower voltage readout
voltage_div: "2066"
# measure a relatively strong load and enter values measured by the device vs the values your reference measurement provided here
power_cal_meas: "1710.0"
power_cal_real: "1685.0"
max_current: "10"
max_power: "2400"
max_temp: "70.0"
esphome:
name: ${devicename}
esp8266:
board: esp8285
# OTA flashing
ota:
- platform: esphome
wifi: # Your Wifi network details
# Enable fallback hotspot in case wifi connection fails
ap:
# Enabling the logging component
logger:
level: DEBUG
# Enable Home Assistant API
api:
# Enable the captive portal
captive_portal:
time:
- platform: sntp
id: my_time
binary_sensor:
- platform: gpio
pin:
number: GPIO13
inverted: True
name: "${devicename}_button"
on_press:
- switch.toggle: relay
status_led:
pin:
number: GPIO02
inverted: True
output:
- platform: gpio
pin: GPIO00
inverted: true
id: led
switch:
- platform: gpio
pin: GPIO15
id: relay
name: "${channel_1}"
on_turn_on:
- output.turn_on: led
on_turn_off:
- output.turn_off: led
# NTC Temperature
- platform: ntc
sensor: temp_resistance_reading
name: ${devicename} temperature
unit_of_measurement: "°C"
accuracy_decimals: 1
icon: "mdi:thermometer"
calibration:
b_constant: 3350
reference_resistance: 10kOhm
reference_temperature: 298.15K
on_value_range:
- above: ${max_temp}
then:
- switch.turn_off: relay
- homeassistant.service:
service: persistent_notification.create
data:
title: Message from ${devicename}
data_template:
message: Switch turned off because temperature exceeded ${max_temp}°C
- platform: resistance
id: temp_resistance_reading
sensor: temp_analog_reading
configuration: DOWNSTREAM
resistor: 32kOhm
- platform: adc
id: temp_analog_reading
pin: A0
- platform: hlw8012
model: BL0937
sel_pin:
number: GPIO12
inverted: true
cf_pin: GPIO05
cf1_pin: GPIO14
current_resistor: ${current_res}
voltage_divider: ${voltage_div}
current:
name: "${channel_1} current"
unit_of_measurement: "A"
accuracy_decimals: 3
icon: mdi:flash-outline
on_value_range:
- above: ${max_current}
then:
- switch.turn_off: relay
- homeassistant.service:
service: persistent_notification.create
data:
title: Message from ${devicename}
data_template:
message: Switch turned off because current exceeded ${max_current}A
voltage:
name: "${channel_1} voltage"
unit_of_measurement: "V"
icon: mdi:flash-outline
power:
name: "${channel_1} power"
id: power
unit_of_measurement: "W"
filters:
- calibrate_linear:
- 0.0 -> 0.0
- ${power_cal_meas} -> ${power_cal_real}
icon: mdi:flash-outline
on_value_range:
- above: ${max_power}
then:
- switch.turn_off: relay
- homeassistant.service:
service: persistent_notification.create
data:
title: Message from ${devicename}
data_template:
message: Switch turned off because power exceeded ${max_power}W
update_interval: 10s
- platform: total_daily_energy
name: "${channel_1} daily energy"
power_id: power
filters:
# Multiplication factor from W to kW is 0.001
- multiply: 0.001
unit_of_measurement: kWh
Edit this page on GitHub