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 ip: 192.168.xx.xx
ssid: !secret ssid password: !secret password
# 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
wifi: ssid: ${ssid} password: ${password} manual_ip: static_ip: ${ip} gateway: 192.168.xx.xx subnet: 255.255.255.0 dns1: 8.8.8.8 dns2: 8.8.4.4
# Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: ${devicename} password: ${password} manual_ip: static_ip: 192.168.100.2 gateway: 192.168.100.1 subnet: 255.255.255.0 dns1: 8.8.8.8 dns2: 8.8.4.4
captive_portal:
# Enable logginglogger: level: DEBUG
# Enable Home Assistant APIapi: encryption: key: !secret api_key
ota: password: ${password}
web_server: port: 80
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
sensor: - platform: wifi_signal name: "${devicename} WiFi Signal" update_interval: 300s
# 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