devices.esphome.io
Shelly 1PM Gen 4
Shelly 1PM Gen 4
Device Type: relayBoard: esp32
Shelly 1PM Gen 4
GPIO Pinout
Pin | Function |
---|---|
GPIO0 | LED (Inverted) |
GPIO1 | Button |
GPIO3 | NTC |
GPIO4 | Relay |
GPIO6 | UART Tx |
GPIO7 | UART Rx |
GPIO10 | Switch |
GPIO12 | Add-on module Digital in |
GPIO16 | Add-on module Data in |
GPIO17 | Add-on module Analog in |
The Shelly 1PM Gen 4 is based on the ESP32-C6 (Single core, 160MHz, 8MB embedded flash)
Please calibrate the NTC and the voltage / power measurements, the values below are just a rough estimate!
Basic config
esphome: name: shelly1pm-gen-4
esp32: board: esp32-c6-devkitc-1 flash_size: 8MB framework: type: esp-idf
# Enable logginglogger:
# Enable Home Assistant APIapi:
ota: - platform: esphome
wifi: ssid: !secret wifi_ssid password: !secret wifi_password
captive_portal:
web_server:
uart: id: bl0942_uart tx_pin: GPIO6 rx_pin: GPIO7 baud_rate: 9600 stop_bits: 1
output: - id: relay_output platform: gpio pin: GPIO4
sensor: - id: temperature name: Temperature platform: ntc sensor: temperature_sensor_resistance icon: mdi:thermometer entity_category: diagnostic unit_of_measurement: °C accuracy_decimals: 1 calibration: b_constant: 3350 reference_resistance: 10kOhm reference_temperature: 25°C - id: temperature_sensor_resistance platform: resistance sensor: temperature_sensor_voltage configuration: DOWNSTREAM resistor: 10kOhm - id: temperature_sensor_voltage platform: adc pin: GPIO3 attenuation: 11db
- platform: bl0942 uart_id: bl0942_uart update_interval: 1s line_frequency: 60Hz voltage: name: Voltage id: sensor_voltage entity_category: diagnostic current: id: sensor_current name: current power: name: Power id: sensor_power frequency: name: Frequency id: sensor_frequency accuracy_decimals: 2 entity_category: diagnostic energy: name: Energy id: sensor_energy entity_category: diagnostic device_class: energy state_class: total_increasing accuracy_decimals: 3
binary_sensor: - id: shelly_add_on_digital_in name: addon digital in platform: gpio pin: GPIO12 filters: - delayed_off: 50ms
- id: shelly_add_on_data name: addon data platform: gpio pin: GPIO16 filters: - delayed_off: 50ms
- id: shelly_add_on_analog_in name: addon analog in platform: gpio pin: GPIO17 filters: - delayed_off: 50ms
- id: shelly_1pm_gen4_switch name: Switch platform: gpio pin: GPIO10 filters: - delayed_off: 50ms
- id: shelly_1pm_gen4_button name: Button platform: gpio pin: GPIO1 filters: - delayed_off: 50ms
status_led: pin: number: GPIO0 inverted: true
Configuration with protections
Configuration as relay with overpower and overtemperature protection
esphome: name: shelly-1pm-gen-4
esp32: board: esp32-c6-devkitc-1 flash_size: 8MB framework: type: esp-idf
# Enable logginglogger:
# Enable Home Assistant APIapi:
ota: - platform: esphome
wifi: ssid: !secret wifi_ssid password: !secret wifi_password
captive_portal:
web_server:
uart: id: bl0942_uart tx_pin: GPIO6 rx_pin: GPIO7 baud_rate: 9600 stop_bits: 1
output: - id: relay_output platform: gpio pin: GPIO4
switch: # Use a template switch to allow for checking fault conditions before switching on the relay output. - platform: template id: relay name: Relay device_class: outlet restore_mode: ALWAYS_ON turn_on_action: if: any: - sensor.in_range: id: temperature below: 75.0 # Temperature sensor is unknown for several seconds on boot. Allow the relay to switch on anyway. - and: - lambda: "return isnan(id(temperature).state);" - binary_sensor.is_off: error_overtemp then: - output.turn_on: relay_output - binary_sensor.template.publish: id: error_overtemp state: OFF - binary_sensor.template.publish: id: error_overpower state: OFF - switch.template.publish: id: relay state: ON else: - switch.template.publish: id: relay state: OFF turn_off_action: then: - output.turn_off: relay_output - switch.template.publish: id: relay state: OFF
sensor: - id: temperature name: Temperature platform: ntc sensor: temperature_sensor_resistance icon: mdi:thermometer entity_category: diagnostic unit_of_measurement: °C accuracy_decimals: 1 calibration: b_constant: 3350 reference_resistance: 10kOhm reference_temperature: 25°C - id: temperature_sensor_resistance platform: resistance sensor: temperature_sensor_voltage configuration: DOWNSTREAM resistor: 10kOhm - id: temperature_sensor_voltage platform: adc pin: GPIO3 attenuation: 11db
- platform: bl0942 uart_id: bl0942_uart update_interval: 1s line_frequency: 60Hz voltage: name: Voltage id: sensor_voltage entity_category: diagnostic current: id: sensor_current name: current power: name: Power id: sensor_power frequency: name: Frequency id: sensor_frequency accuracy_decimals: 2 entity_category: diagnostic energy: name: Energy id: sensor_energy entity_category: diagnostic device_class: energy state_class: total_increasing accuracy_decimals: 3
binary_sensor: - id: shelly_add_on_digital_in name: addon digital in platform: gpio pin: GPIO12 filters: - delayed_off: 50ms
- id: shelly_add_on_data name: addon data platform: gpio pin: GPIO16 filters: - delayed_off: 50ms
- id: shelly_add_on_analog_in name: addon analog in platform: gpio pin: GPIO17 filters: - delayed_off: 50ms
- id: shelly_1pm_gen4_switch name: Switch platform: gpio pin: GPIO10 filters: - delayed_off: 50ms
- id: shelly_1pm_gen4_button name: Button platform: gpio pin: GPIO1 filters: - delayed_off: 50ms
- id: error_overtemp name: Overheating device_class: problem entity_category: diagnostic platform: template condition: any: - binary_sensor.is_on: error_overtemp # Latch ON - sensor.in_range: id: temperature above: 75.0 on_press: then: - switch.turn_off: relay - id: error_overpower name: Overpowering device_class: problem entity_category: diagnostic platform: template condition: any: - binary_sensor.is_on: error_overpower # Latch ON - for: time: 1s condition: sensor.in_range: id: sensor_current above: 16 # This is model specific! on_press: then: - switch.turn_off: relay
status_led: pin: number: GPIO0 inverted: true