devices.esphome.io
Shelly Plug S
Shelly Plug S
Device Type: plugElectrical Standard: euBoard: esp8266
GPIO Pinout
| Pin | Function |
|---|---|
| GPIO0 | Red LED |
| GPIO2 | Blue LED |
| GPIO5 | CF Pin |
| GPIO12 | HLW8012 (power measurement) |
| GPIO13 | Button |
| GPIO14 | CF1 Pin |
| GPIO15 | Relay |
| GPIOA0 | Internal 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 flashingota: - platform: esphome
wifi: # Your Wifi network details # Enable fallback hotspot in case wifi connection fails ap:
# Enabling the logging componentlogger: level: DEBUG
# Enable Home Assistant APIapi:
# Enable the captive portalcaptive_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