Last active
November 18, 2023 21:13
-
-
Save clintkev251/9ca16757bddb8e57f424f26c64e6b94a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
esphome: | |
name: emporiavue2 | |
external_components: | |
- source: github://emporia-vue-local/esphome@dev | |
components: | |
- emporia_vue | |
esp32: | |
board: esp32dev | |
framework: | |
type: esp-idf | |
version: recommended | |
# Enable Home Assistant API | |
ota: {"password": "**********"} | |
api: | |
encryption: | |
key: "***************************************" | |
services: | |
- service: play_rtttl | |
variables: | |
song_str: string | |
then: | |
- rtttl.play: | |
rtttl: !lambda 'return song_str;' | |
# Enable logging | |
logger: | |
wifi: | |
ssid: !secret wifi_ssid | |
password: !secret wifi_password | |
manual_ip: | |
static_ip: 192.168.20.9 | |
gateway: 192.168.20.1 | |
subnet: 255.255.255.0 | |
dns1: 192.168.20.1 | |
preferences: | |
# the default of 1min is far too short--flash chip is rated | |
# for approx 100k writes. | |
flash_write_interval: "48h" | |
output: | |
- platform: ledc | |
pin: GPIO12 | |
id: buzzer | |
rtttl: | |
output: buzzer | |
on_finished_playback: | |
- logger.log: 'Song ended!' | |
button: | |
- platform: template | |
name: "Two Beeps" | |
on_press: | |
- rtttl.play: "two short:d=4,o=5,b=100:16e6,16e6" | |
light: | |
- platform: status_led | |
name: "D3_LED" | |
pin: 23 | |
restore_mode: ALWAYS_ON | |
i2c: | |
sda: 21 | |
scl: 22 | |
scan: false | |
frequency: 200kHz # recommended range is 50-200kHz | |
id: i2c_a | |
time: | |
- platform: sntp | |
id: my_time | |
timezone: America/New_York | |
# these are called references in YAML. They allow you to reuse | |
# this configuration in each sensor, while only defining it once | |
.defaultfilters: | |
- &moving_avg | |
# we capture a new sample every 0.24 seconds, so the time can | |
# be calculated from the number of samples as n * 0.24. | |
sliding_window_moving_average: | |
# we average over the past 2.88 seconds | |
window_size: 12 | |
# we push a new value every 1.44 seconds | |
send_every: 6 | |
- &invert | |
# invert and filter out any values below 0. | |
lambda: 'return max(-x, 0.0f);' | |
- &pos | |
# filter out any values below 0. | |
lambda: 'return max(x, 0.0f);' | |
- &abs | |
# take the absolute value of the value | |
lambda: 'return abs(x);' | |
sensor: | |
- platform: emporia_vue | |
i2c_id: i2c_a | |
phases: | |
- id: phase_b # Verify that this specific phase/leg is connected to correct input wire color on device listed below | |
input: BLACK # Vue device wire color | |
calibration: 0.022 # 0.022 is used as the default as starting point but may need adjusted to ensure accuracy | |
# To calculate new calibration value use the formula <in-use calibration value> * <accurate voltage> / <reporting voltage> | |
voltage: | |
name: "Phase A Voltage" | |
filters: [*moving_avg, *pos] | |
frequency: | |
name: "Phase A Frequency" | |
filters: [*moving_avg, *pos] | |
- id: phase_a # Verify that this specific phase/leg is connected to correct input wire color on device listed below | |
input: RED # Vue device wire color | |
calibration: 0.022 # 0.022 is used as the default as starting point but may need adjusted to ensure accuracy | |
# To calculate new calibration value use the formula <in-use calibration value> * <accurate voltage> / <reporting voltage> | |
voltage: | |
name: "Phase B Voltage" | |
filters: [*moving_avg, *pos] | |
phase_angle: | |
name: "Phase B Phase Angle" | |
filters: [*moving_avg, *pos] | |
ct_clamps: | |
- phase_id: phase_a | |
input: "A" # Verify the CT going to this device input also matches the phase/leg | |
power: | |
name: "Phase A Power" | |
id: phase_a_power | |
device_class: power | |
filters: [*moving_avg] | |
- phase_id: phase_b | |
input: "B" # Verify the CT going to this device input also matches the phase/leg | |
power: | |
name: "Phase B Power" | |
id: phase_b_power | |
device_class: power | |
filters: [*moving_avg] | |
# Pay close attention to set the phase_id for each breaker by matching it to the phase/leg it connects to in the panel | |
- { phase_id: phase_b, input: "1", power: { name: "Zone 1 AC Power", id: cir1, filters: [ *moving_avg, *pos, multiply: 2 ] } } | |
- { phase_id: phase_b, input: "2", power: { name: "Zone 2 AC Power", id: cir2, filters: [ *moving_avg, *pos, multiply: 2 ] } } | |
- { phase_id: phase_b, input: "3", power: { name: "Dryer Power", id: cir3, filters: [ *moving_avg, *pos, multiply: 2 ] } } | |
- { phase_id: phase_b, input: "4", power: { name: "Kitchen Outlets Power", id: cir4, filters: [ *moving_avg, *pos ] } } | |
- { phase_id: phase_a, input: "5", power: { name: "Dishwasher Power", id: cir5, filters: [ *moving_avg, *pos ] } } | |
- { phase_id: phase_b, input: "6", power: { name: "Office Power", id: cir6, filters: [ *moving_avg, *pos ] } } | |
- { phase_id: phase_b, input: "7", power: { name: "Garage Power", id: cir7, filters: [ *moving_avg, *pos ] } } | |
- { phase_id: phase_a, input: "8", power: { name: "Solar Power A", id: cir8, filters: [ *moving_avg, *pos ] } } | |
- { phase_id: phase_a, input: "9", power: { name: "Loft Power", id: cir9, filters: [ *moving_avg, *pos ] } } | |
- { phase_id: phase_b, input: "10", power: { name: "Basement Power", id: cir10, filters: [ *moving_avg, *pos ] } } | |
- { phase_id: phase_b, input: "11", power: { name: "Refrigerator Power", id: cir11, filters: [ *moving_avg, *pos ] } } | |
- { phase_id: phase_b, input: "12", power: { name: "Zone 1 Furnace/Water SoftenerPower", id: cir12, filters: [ *moving_avg, *pos ] } } | |
- { phase_id: phase_b, input: "13", power: { name: "Solar Power B", id: cir13, filters: [ *moving_avg, *pos ] } } | |
- { phase_id: phase_b, input: "14", power: { name: "Zone 2 Furnace Power", id: cir14, filters: [ *moving_avg, *pos, multiply: 2 ] } } | |
- { phase_id: phase_b, input: "15", power: { name: "Oven Power", id: cir15, filters: [ *moving_avg, *pos, multiply: 2 ] } } | |
- { phase_id: phase_b, input: "16", power: { name: "EVSE Power", id: cir16, filters: [ *moving_avg, *pos, multiply: 2 ] } } | |
- platform: template | |
name: "Grid Power" | |
lambda: return id(phase_a_power).state + id(phase_b_power).state; | |
update_interval: 1s | |
id: total_power | |
unit_of_measurement: "W" | |
# - platform: template | |
# name: "Overhead Power" | |
# lambda: return ( id(phase_a_power).state + id(phase_b_power).state ) - ( id(cir1).state + id(cir2).state + id(cir3).state + id(cir4).state + id(cir5).state + id(cir6).state + id(cir7).state + id(cir8).state + id(cir9).state + id(cir10).state + id(cir11).state + id(cir12).state + id(cir13).state + id(cir14).state + id(cir15).state + id(cir16).state ); | |
# id: overhead_power | |
# update_interval: 1s | |
# unit_of_measurement: "W" | |
- platform: template | |
name: "Solar Power" | |
lambda: return id(cir8).state + id(cir13).state; | |
update_interval: 1s | |
id: solar_power | |
unit_of_measurement: "W" | |
- platform: total_daily_energy | |
name: "Solar Daily Energy" | |
power_id: solar_power | |
accuracy_decimals: 0 | |
# - platform: total_daily_energy | |
# name: "Overhead Daily Energy" | |
# power_id: overhead_power | |
# accuracy_decimals: 0 | |
- platform: total_daily_energy | |
name: "Grid Daily Energy" | |
power_id: total_power | |
accuracy_decimals: 0 | |
- { power_id: cir1, platform: total_daily_energy, accuracy_decimals: 0, name: "Zone 1 AC Daily Energy" } | |
- { power_id: cir2, platform: total_daily_energy, accuracy_decimals: 0, name: "Zone 2 AC Daily Energy" } | |
- { power_id: cir3, platform: total_daily_energy, accuracy_decimals: 0, name: "Dryer Daily Energy" } | |
- { power_id: cir4, platform: total_daily_energy, accuracy_decimals: 0, name: "Kitchen Outlets Daily Energy" } | |
- { power_id: cir5, platform: total_daily_energy, accuracy_decimals: 0, name: "Dishwasher Daily Energy" } | |
- { power_id: cir6, platform: total_daily_energy, accuracy_decimals: 0, name: "Office Daily Energy" } | |
- { power_id: cir7, platform: total_daily_energy, accuracy_decimals: 0, name: "Garage Daily Energy" } | |
- { power_id: cir9, platform: total_daily_energy, accuracy_decimals: 0, name: "Loft Daily Energy" } | |
- { power_id: cir10, platform: total_daily_energy, accuracy_decimals: 0, name: "Basement Daily Energy" } | |
- { power_id: cir11, platform: total_daily_energy, accuracy_decimals: 0, name: "Refrigerator Daily Energy" } | |
- { power_id: cir12, platform: total_daily_energy, accuracy_decimals: 0, name: "Zone 1 Furnace/Water Softener Daily Energy" } | |
- { power_id: cir14, platform: total_daily_energy, accuracy_decimals: 0, name: "Zone 2 Furnace Daily Energy" } | |
- { power_id: cir15, platform: total_daily_energy, accuracy_decimals: 0, name: "Oven Daily Energy" } | |
- { power_id: cir16, platform: total_daily_energy, accuracy_decimals: 0, name: "EVSE Daily Energy" } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment