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.
311 lines
6.5 KiB
311 lines
6.5 KiB
4 months ago
|
# 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
|
||
|
|
||
|
|