The config files for my esphome devices
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

310 lines
6.5 KiB

# Largely based off this:
#https://github.com/JamesSwift/localbytes-plug-pm/blob/main/localbytes-plug-pm.yaml
substitutions:
# Icon
main_icon: "power-socket-uk"
default_state: "RESTORE_DEFAULT_OFF"
esphome:
name: ${hostname}
build_path: ./build/${hostname}
friendly_name: ${friendly_name}
wifi:
output_power: 18db
power_save_mode: light
esp8266:
board: esp01_1m
restore_from_flash: true
packages:
base: !include ../common/base.yaml
basicSensors: !include ../common/basicSensors.yaml
globals:
- id: voltage_multiply
type: float
restore_value: true
initial_value: "0.3"
- id: power_multiply
type: float
restore_value: true
initial_value: "0.133"
- id: current_multiply
type: float
restore_value: true
initial_value: "0.805"
api:
services:
- service: calibrate_voltage
variables:
actual_value: float
then:
- lambda: |-
id(voltage_multiply) = actual_value / id(voltage).raw_state;
- number.set:
id: voltage_factor
value: !lambda "return id(voltage_multiply);"
- service: calibrate_power
variables:
actual_value: float
then:
- lambda: |-
id(power_multiply) = actual_value / id(power).raw_state;
- number.set:
id: power_factor
value: !lambda "return id(power_multiply);"
- service: calibrate_current
variables:
actual_value: float
then:
- lambda: |-
id(current_multiply) = actual_value / id(current).raw_state;
- number.set:
id: current_factor
value: !lambda "return id(current_multiply);"
sensor:
# Power Monitoring
- platform: hlw8012
sel_pin:
number: GPIO12
inverted: true
cf_pin: GPIO4
cf1_pin: GPIO5
change_mode_every: 3
update_interval: 6s
voltage:
name: "Voltage"
id: voltage
unit_of_measurement: V
accuracy_decimals: 1
filters:
- lambda: return x * id(voltage_multiply);
power:
name: "Power"
id: power
unit_of_measurement: W
accuracy_decimals: 0
filters:
- lambda: return x * id(power_multiply);
current:
name: "Current"
id: current
unit_of_measurement: A
accuracy_decimals: 3
filters:
- lambda: return x * id(current_multiply);
# Total daily energy sensor
- platform: total_daily_energy
name: "Daily Energy"
power_id: power
filters:
# Multiplication factor from W to kW is 0.001
- multiply: 0.001
unit_of_measurement: kWh
# Make calibration factor data readable/setable from home assistant
number:
- platform: template
name: "Voltage Calibration Factor"
id: voltage_factor
icon: "mdi:sine-wave"
min_value: 0
max_value: 10
step: 0.001
entity_category: diagnostic
mode: box
lambda: |-
return id(voltage_multiply);
set_action:
lambda: |-
id(voltage_multiply) = x;
- platform: template
name: "Power Calibration Factor"
id: power_factor
icon: "mdi:flash"
min_value: 0
max_value: 10
step: 0.001
entity_category: diagnostic
mode: box
lambda: |-
return id(power_multiply);
set_action:
lambda: |-
id(power_multiply) = x;
- platform: template
name: "Current Calibration Factor"
id: current_factor
icon: "mdi:current-ac"
min_value: 0
max_value: 10
step: 0.001
entity_category: diagnostic
mode: box
lambda: |-
return id(current_multiply);
set_action:
lambda: |-
id(current_multiply) = x;
# Relay State LED
output:
- platform: esp8266_pwm
id: state_led
pin:
number: GPIO13
inverted: true
light:
- platform: binary
output: state_led
id: led
binary_sensor:
# Push Button (Toggles Relay When Pressed)
- platform: gpio
pin:
number: GPIO3
mode: INPUT_PULLUP
inverted: true
name: "Button"
on_click:
- max_length: 1s
then:
if:
condition:
switch.is_off: disable_button
then:
switch.toggle: relay
- min_length: 1.5s
max_length: 5s
then:
switch.toggle: disable_led
- min_length: 8s
max_length: 12s
then:
switch.toggle: disable_button
switch:
# Relay (As Switch)
- platform: gpio
name: ""
icon: "mdi:${main_icon}"
pin: GPIO14
id: relay
restore_mode: "${default_state}"
on_turn_on:
if:
condition:
switch.is_off: disable_led
then:
light.turn_on:
id: led
on_turn_off:
- light.turn_off:
id: led
- platform: template
name: "Disable LED"
id: disable_led
icon: "mdi:led-variant-off"
restore_mode: "${default_state}"
optimistic: true
on_turn_on:
#Flash twice
- light.turn_off: led
- delay: 0.1s
- light.turn_on: led
- delay: 0.1s
- light.turn_off: led
- delay: 0.1s
- light.turn_on: led
- delay: 0.1s
#Final state
- light.turn_off: led
on_turn_off:
#Flash twice
- light.turn_on: led
- delay: 0.1s
- light.turn_off: led
- delay: 0.1s
- light.turn_on: led
- delay: 0.1s
- light.turn_off: led
- delay: 0.7s
#Final state
- if:
condition:
switch.is_on: relay
then:
light.turn_on: led
- platform: template
name: "Disable Button"
id: disable_button
icon: "mdi:toggle-switch-off-outline"
restore_mode: "${default_state}"
optimistic: true
on_turn_on:
#Flash thrice
- light.turn_off: led
- delay: 0.15s
- light.turn_on: led
- delay: 0.15s
- light.turn_off: led
- delay: 0.15s
- light.turn_on: led
- delay: 0.15s
- light.turn_off: led
- delay: 0.15s
- light.turn_on: led
- delay: 0.15s
#Final state
- if:
condition:
switch.is_off: relay
then:
light.turn_off: led
on_turn_off:
#Flash thrice
- light.turn_on: led
- delay: 0.15s
- light.turn_off: led
- delay: 0.15s
- light.turn_on: led
- delay: 0.15s
- light.turn_off: led
- delay: 0.15s
- light.turn_on: led
- delay: 0.15s
- light.turn_off: led
- delay: 0.7s
#Final state
- if:
condition:
switch.is_on: relay
then:
light.turn_on: led