devices.esphome.io
Shelly EM
Shelly EM
Device Type: sensorBoard: esp8266
GPIO Pinout
Pin | Function |
---|---|
GPIO0 | LED |
GPIO12 | I2C SDA |
GPIO13 | ADE7953 IRQ |
GPIO14 | I2C SCL |
GPIO15 | Contactor Control |
Configuration for 2-Phase Whole-Home Energy Monitor
Configuration to use a Shelly EM as per its native design. Requries 2x CT clamps, which can be purchased from the shelly.cloud store. Set the scales of the ST clamps according to your model (50A or 120A or other model you may want to use).
Be sure to set GPIO13 to the ADE7953 IRQ pin to prevent overheating!
substitutions: # "esphome" prefix to avoid confusion with native Shelly devices devicename: esphome-shelly-em # 120A clamp (3000:1): 1.143207411 # 50A clamp (2400:1): 1.156612516 # 50A Victron clamp (2000:1): 0.76 scale_a_power: '1.143207411' scale_b_power: '1.143207411' # Consider calibrating CT clamps, measurements were closer to the stock Shelly EM firmware for me without calibration # See: https://community.home-assistant.io/t/anyone-using-shelly-em/149867
esphome: name: $devicename friendly_name: Esphome Shelly EM
esp8266: board: esp01_1m
# Enable logginglogger:
# Enable HA APIapi: encryption: key: !secret api_key
# Enable OTAsota: password: !secret api_password
# Sync RTC with HAtime: - platform: homeassistant timezone: America/Chicago
# Wi-Fi Setupwifi: ssid: !secret wifi_ssid password: !secret wifi_password fast_connect: true #power_save_mode: LIGHT
# Enable fallback hotspot (captive portal) in case Wi-Fi connection fails ap: ssid: shelly-em AP password: !secret ap_password
captive_portal:
i2c: sda: GPIO12 scl: GPIO14
sensor: - platform: ade7953_i2c # WARNING: Prevent overheating by setting this IRQ pin! - See https://esphome.io/components/sensor/ade7953.html irq_pin: GPIO13 voltage: name: Voltage id: voltage filters: - or: - delta: 1% - throttle_average: 60s frequency: name: Frequency id: frequency filters: - throttle: 60s current_a: name: Phase 1 Current id: current_phase_1 filters: - or: - delta: 10% - throttle_average: 15s current_b: name: Phase 2 Current id: current_phase_2 filters: - or: - delta: 10% - throttle_average: 15s active_power_a: name: Phase 1 Power id: power_phase_1 filters: - multiply: $scale_a_power - or: - delta: 10% - throttle_average: 15s # In case you don't want negative power values. I don't see why you wouldn't - this allows to measure returned power, for instance by PV panels. # Regarding the energy calculation with both forward and return energy, this may need further consideration. #- lambda: if (x <= 0.0) return 0; else return x * $scale_a_power; active_power_b: name: Phase 2 Power id: power_phase_2 filters: - multiply: $scale_b_power - or: - delta: 10% - throttle_average: 15s #- lambda: if (x <= 0.0) return 0; else return x * $scale_b_power; apparent_power_a: name: Phase 1 Apparent Power id: apparent_power_phase_1 filters: - multiply: $scale_a_power - or: - delta: 10% - throttle_average: 15s apparent_power_b: name: Phase 2 Apparent Power id: apparent_power_phase_2 filters: - multiply: $scale_b_power - or: - delta: 10% - throttle_average: 15s power_factor_a: name: Phase 1 Power Factor id: power_factor_phase_1 filters: - throttle_average: 15s power_factor_b: name: Phase 2 Power Factor id: power_factor_phase_2 filters: - throttle_average: 15s reactive_power_a: name: Phase 1 Reactive Power id: reactive_power_phase_1 filters: - multiply: $scale_a_power - or: - delta: 10% - throttle_average: 15s reactive_power_b: name: Phase 2 Reactive Power id: reactive_power_phase_2 filters: - multiply: $scale_b_power - or: - delta: 10% - throttle_average: 15s # Short (internal) update interval while using the throttling settings in all sensors above (provides results close to the native Shellys) update_interval: 1s
- platform: total_daily_energy name: Phase 1 Energy id: energy_phase_1 power_id: power_phase_1 filters: # Multiplication factor from W to kWh is 0.001 - multiply: 0.001 - throttle: 60s unit_of_measurement: kWh
- platform: total_daily_energy name: Phase 2 Energy id: energy_phase_2 power_id: power_phase_2 filters: # Multiplication factor from W to kWh is 0.001 - multiply: 0.001 - throttle: 60s unit_of_measurement: kWh
# NTC Temperature - platform: ntc sensor: temp_resistance_reading name: "Temperature" calibration: b_constant: 3350 reference_resistance: 10kOhm reference_temperature: 298.15K - platform: resistance id: temp_resistance_reading sensor: temp_analog_reading configuration: DOWNSTREAM # This value is a guess, based on the temperature values compared to native Shelly EM devices resistor: 100kOhm - platform: adc id: temp_analog_reading pin: A0
status_led: pin: number: GPIO0 inverted: yes
switch: - platform: gpio name: Shelly EM Switch pin: GPIO15 id: relay