devices.esphome.io
Shelly 2.5
Shelly 2.5
Device Type: relayBoard: esp8266
GPIO Pinout
Pin | Function |
---|---|
GPIO0 | LED 1i |
GPIO2 | Button 1 |
GPIO4 | Relay 1 |
GPIO5 | Switch 2 Input |
GPIO12 | i2c SDA |
GPIO13 | Switch 1 Input |
GPIO14 | i2c SCL |
GPIO15 | Relay 2 |
GPIO16 | ADE7953 IRQ (power measurement) |
GPIOA0 | Internal Temperature |
Basic Configuration As Relay
When integration with home assistant exists, it will appear as 2 Relays with icons and 2 switches (including power, current and sensors) Use cases for this configuration: Roller / Shutter automation and device swichting and monitoring
Thanks to "Anaro" from home assistant forum topic config tested by "Datux"
# Basic Configsubstitutions: devicename: shelly_25
esphome: name: ${devicename} platform: ESP8266 board: esp01_1m
wifi: ssid: !secret wifi_ssid password: !secret wifi_password power_save_mode: HIGH # for ESP8266 LOW/HIGH are mixed up, esphome/issues/issues/1532
captive_portal:
# Enable logginglogger:
# Enable Home Assistant APIapi:
ota:
i2c: sda: GPIO12 scl: GPIO14
sensor: - platform: ade7953_i2c irq_pin: GPIO16 # Prevent overheating by setting this voltage: name: ${devicename} Voltage # On the Shelly 2.5 channels are mixed ch1=B ch2=A current_a: name: ${devicename} Current B current_b: name: ${devicename} Current A active_power_a: name: ${devicename} Active Power B # active_power_a is normal, so don't multiply by -1 active_power_b: name: ${devicename} Active Power A # active_power_b is inverted, so take the absolute value filters: - lambda: return abs(x); update_interval: 60s
# 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 - platform: resistance id: temp_resistance_reading sensor: temp_analog_reading configuration: DOWNSTREAM resistor: 32kOhm - platform: adc id: temp_analog_reading pin: A0
status_led: pin: number: GPIO0 inverted: yes
binary_sensor: - platform: gpio pin: number: GPIO13 name: ${devicename} Switch1 on_press: then: - switch.toggle: shelly_relay_1 - platform: gpio pin: number: GPIO5 name: ${devicename} Switch2 on_press: then: - switch.toggle: shelly_relay_2
switch: - platform: gpio id: shelly_relay_1 name: ${devicename} Relay1 pin: GPIO4 icon: "mdi:electric-switch" restore_mode: RESTORE_DEFAULT_OFF # Ensure only one switch at a time is on (https://esphome.io/components/switch/gpio.html#interlocking) interlock: &interlock_group [shelly_relay_1, shelly_relay_2]
- platform: gpio id: shelly_relay_2 name: ${devicename} Relay2 pin: GPIO15 icon: "mdi:electric-switch" restore_mode: RESTORE_DEFAULT_OFF interlock: *interlock_group
Configuration as relay with overpower and overtemperature protection
When integration with home assistant exists, it will appear as 2 relays with icons and 2 binary sensors (including power, current and sensors)
When the max_power
is exceeded on 1 channel, that channel will be switched off and a persistent notification will be created in home-assistant
When the max_temp
is exceeded, the 2 channels are switched off and a persistent notification will be created in home-assistant
Thanks to Datux modified and tested by gieljnssns
substitutions: devicename: shelly_25 ip: 192.168.xx.xx channel_1: Relay 1 channel_2: Relay 2
ssid: !secret ssid password: !secret password
max_power: "2000.0" max_temp: "70.0"
esphome: name: ${devicename} platform: ESP8266 board: esp01_1m
wifi: ssid: ${ssid} password: ${password} power_save_mode: HIGH # for ESP8266 LOW/HIGH are mixed up, esphome/issues/issues/1532 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 encryption_key
ota: password: ${password}
web_server: port: 80
time: - platform: sntp id: my_time
i2c: sda: GPIO12 scl: GPIO14
sensor: - platform: ade7953_i2c irq_pin: GPIO16 # Prevent overheating by setting this voltage: name: ${devicename} voltage # On the Shelly 2.5 channels are mixed ch1=B ch2=A current_a: name: ${channel_2} current internal: true current_b: name: ${channel_1} current internal: true active_power_a: name: ${channel_2} power id: power_channel_2 # active_power_a is normal, so don't multiply by -1 on_value_range: - above: ${max_power} then: - switch.turn_off: shelly_relay_2 - homeassistant.service: service: persistent_notification.create data: title: Message from ${devicename} data_template: message: Switch turned off because power exceeded ${max_power}W active_power_b: name: ${channel_1} power id: power_channel_1 # active_power_b is inverted, so take the absolute value filters: - lambda: return abs(x); on_value_range: - above: ${max_power} then: - switch.turn_off: shelly_relay_1 - 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: 30s
- platform: total_daily_energy name: ${channel_1} energy power_id: power_channel_1 filters: # Multiplication factor from W to kWh is 0.001 - multiply: 0.001 unit_of_measurement: kWh
- platform: total_daily_energy name: ${channel_2} energy power_id: power_channel_2 filters: # Multiplication factor from W to kWh is 0.001 - multiply: 0.001 unit_of_measurement: kWh
# 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: shelly_relay_1 - switch.turn_off: shelly_relay_2 - 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
status_led: pin: number: GPIO0 inverted: yes
switch: - platform: gpio id: shelly_relay_1 name: ${channel_1} relay pin: GPIO4 icon: "mdi:electric-switch" restore_mode: RESTORE_DEFAULT_OFF # Ensure only one switch at a time is on (https://esphome.io/components/switch/gpio.html#interlocking) interlock: &interlock_group [shelly_relay_1, shelly_relay_2]
- platform: gpio id: shelly_relay_2 name: ${channel_2} relay pin: GPIO15 icon: "mdi:electric-switch" restore_mode: RESTORE_DEFAULT_OFF interlock: *interlock_group
binary_sensor: - platform: gpio pin: number: GPIO13 name: "${channel_1} input" on_state: then: - switch.toggle: shelly_relay_1 - platform: gpio pin: number: GPIO5 name: "${channel_2} input" on_state: then: - switch.toggle: shelly_relay_2
Basic Configuration As Lights
Using this config wil make the Shelly show up as lights within Home Assistant Use Case for this configuration: Automate light sources Based uppon the Shelly 1 configuration (modified and tested by "Datux" )
# basic configuration
# Basic Configsubstitutions: devicename: shelly_25
esphome: name: ${devicename} platform: ESP8266 board: esp01_1m
wifi: ssid: !secret ssid1 password: !secret ssid1_pass power_save_mode: HIGH # for ESP8266 LOW/HIGH are mixed up, esphome/issues/issues/1532
captive_portal:
# Enable logginglogger:
# Enable Home Assistant APIapi:
ota:
i2c: sda: GPIO12 scl: GPIO14
sensor: - platform: ade7953_i2c irq_pin: GPIO16 # Prevent overheating by setting this voltage: name: ${devicename} Voltage # On the Shelly 2.5 channels are mixed ch1=B ch2=A current_a: name: ${devicename} Current B current_b: name: ${devicename} Current A active_power_a: name: ${devicename} Active Power B # active_power_a is normal, so don't multiply by -1 active_power_b: name: ${devicename} Active Power A # active_power_b is inverted, so take the absolute value filters: - lambda: return abs(x); update_interval: 60s
# 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 - platform: resistance id: temp_resistance_reading sensor: temp_analog_reading configuration: DOWNSTREAM resistor: 32kOhm - platform: adc id: temp_analog_reading pin: A0
status_led: pin: number: GPIO0 inverted: yes
output: - platform: gpio pin: GPIO4 id: shelly_25_relay_1 - platform: gpio pin: GPIO15 id: shelly_25_relay_2
light: - platform: binary name: "${devicename} Light 1" output: shelly_25_relay_1 id: lightid1 - platform: binary name: "${devicename} Light 2" output: shelly_25_relay_2 id: lightid2
binary_sensor: - platform: gpio pin: number: GPIO13 #mode: INPUT_PULLUP #inverted: True name: "${devicename} Switch 1" on_state: then: - light.toggle: lightid1 internal: true id: switchid1 - platform: gpio pin: number: GPIO5 #mode: INPUT_PULLUP #inverted: True name: "${devicename} Switch 2" on_state: then: - light.toggle: lightid2 internal: true id: switchid2
Configuration as light with overpower and overtemperature protection
When integration with home assistant exists, it will appear as 2 relays with icons and 2 binary sensors (including power, current and sensors)
When the max_power
is exceeded on 1 channel, that channel will be switched off and a persistent notification will be created in home-assistant
When the max_temp
is exceeded, the 2 channels are switched off and a persistent notification will be created in home-assistant
Thanks to Datux modified and tested by gieljnssns
substitutions: devicename: shelly_25 ip: 192.168.xx.xx channel_1: Light 1 channel_2: Light 2
ssid: !secret ssid password: !secret password
max_power: "2000.0" max_temp: "70.0"
esphome: name: ${devicename} platform: ESP8266 board: esp01_1m
wifi: ssid: ${ssid} password: ${password} power_save_mode: HIGH # for ESP8266 LOW/HIGH are mixed up, esphome/issues/issues/1532 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 encryption_key
ota: password: ${password}
web_server: port: 80
time: - platform: sntp id: my_time
i2c: sda: GPIO12 scl: GPIO14
sensor: - platform: ade7953_i2c irq_pin: GPIO16 # Prevent overheating by setting this voltage: name: ${devicename} voltage # On the Shelly 2.5 channels are mixed ch1=B ch2=A current_a: name: ${channel_2} current internal: true current_b: name: ${channel_1} current internal: true active_power_a: name: ${channel_2} power id: power_channel_2 # active_power_a is normal, so don't multiply by -1 on_value_range: - above: ${max_power} then: - light.turn_off: lightid2 - homeassistant.service: service: persistent_notification.create data: title: Message from ${devicename} data_template: message: Switch turned off because power exceeded ${max_power}W active_power_b: name: ${channel_1} power id: power_channel_1 # active_power_b is inverted, so take the absolute value filters: - lambda: return abs(x); on_value_range: - above: ${max_power} then: - light.turn_off: lightid1 - 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: 30s
- platform: total_daily_energy name: ${channel_1} energy power_id: power_channel_1 filters: # Multiplication factor from W to kWh is 0.001 - multiply: 0.001 unit_of_measurement: kWh
- platform: total_daily_energy name: ${channel_2} energy power_id: power_channel_2 filters: # Multiplication factor from W to kWh is 0.001 - multiply: 0.001 unit_of_measurement: kWh
# 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: - light.turn_off: lightid1 - light.turn_off: lightid2 - 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
status_led: pin: number: GPIO0 inverted: yes
output: - platform: gpio pin: GPIO4 id: shelly_25_relay_1 - platform: gpio pin: GPIO15 id: shelly_25_relay_2
light: - platform: binary name: "${channel_1}" output: shelly_25_relay_1 id: lightid1 - platform: binary name: "${channel_2}" output: shelly_25_relay_2 id: lightid2
binary_sensor: - platform: gpio pin: number: GPIO13 name: "${channel_1} input" on_state: then: - light.toggle: lightid1 - platform: gpio pin: number: GPIO5 name: "${channel_2} input" on_state: then: - light.toggle: lightid2