Files
esphome/templates/mystrom.yaml
T
artem c3cb5cb54a Power cycle button for myStrom relays
This can be used to power cycle critical infrastructure, which may
render the switch unavailable if turned off.
2026-05-03 10:33:00 +00:00

143 lines
2.8 KiB
YAML

substitutions:
# Change this via CLI with:
# $ esphome -s name tools -s friendly_name Tools run mystrom.yaml
name: "spare-power-meter"
friendly_name: "Spare power meter"
esphome:
name: "${name}"
friendly_name: "${friendly_name}"
project:
name: "dasfoo.${name}"
version: "1.0"
esp32:
board: esp32doit-devkit-v1
framework:
type: esp-idf
packages:
mqtt: !include mqtt.yaml
ota: !include ota.yaml
wifi: !include wifi.yaml
uptime: !include uptime.yaml
restart: !include restart.yaml
syslog: !include syslog.yaml
logger:
wifi:
# BSS Transition Management support which we have enabled in APs.
enable_btm: true
i2c:
sda: 22
scl: 19
scan: false
status_led:
# Red LED on the front panel.
pin: GPIO16
binary_sensor:
- platform: gpio
id: mystrom_side
name: "Side button (plus) pressed"
pin:
number: GPIO23
mode:
input: true
pullup: true
inverted: true
- platform: gpio
id: mystrom_bottom
name: "Bottom button (power) pressed"
pin:
number: GPIO18
mode:
input: true
pullup: true
inverted: true
on_press:
then:
- switch.toggle: mystrom_relay
script:
- id: power_cycle_relay
mode: single
then:
- if:
condition:
switch.is_on: mystrom_relay
then:
- switch.turn_off: mystrom_relay
- delay: 7s
- switch.turn_on: mystrom_relay
button:
- platform: template
name: "Power cycle relay"
icon: "mdi:restart"
on_press:
- script.execute: power_cycle_relay
sensor:
- platform: pulse_counter
pin: 4
update_interval: 10s
id: mystrom_power_consumption
name: "Power relay consumption"
device_class: "power"
state_class: "measurement"
unit_of_measurement: "W"
accuracy_decimals: 0
filters:
- multiply: 3.29E-02 # pulse/min -> W
total:
name: "Energy consumption"
unit_of_measurement: "kWh"
device_class: "energy"
state_class: "total_increasing"
accuracy_decimals: 3
filters:
- multiply: 5.48E-07 # pulses -> kWh
- platform: tmp102
id: mystrom_temperature
name: "Internal temperature"
update_interval: 60s
entity_category: diagnostic
address: 0x48
on_value_range:
above: 80
then:
- switch.turn_off: mystrom_relay
- platform: duty_time
id: continuous_on_time
name: Continuous on time
lambda: "return id(mystrom_relay).state;"
accuracy_decimals: 0
switch:
- platform: gpio
name: None # Main entity for the device.
pin: GPIO27
id: mystrom_relay
restore_mode: RESTORE_DEFAULT_ON
device_class: outlet
on_turn_off:
- sensor.duty_time.reset: continuous_on_time
- platform: gpio
# Exposing this as a switch rather than light to avoid
# automations and dashboard picking it up as illuminance
# source.
name: "Identify LED (white)"
restore_mode: ALWAYS_OFF
pin:
number: GPIO17
inverted: true