diff --git a/_data/emp-vue2-1.yaml b/_data/emp-vue2-1.yaml new file mode 100644 index 0000000..46d1fab --- /dev/null +++ b/_data/emp-vue2-1.yaml @@ -0,0 +1,217 @@ +substitutions: + device_name: emp-vue2-1 + dn: emp-vue2-1 + friendly_name: Emporia Vue2 1 + +<<: !include .wifi-oss.yaml + +esphome: + name: ${device_name} + friendly_name: ${friendly_name} + +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 +api: + # encryption: + # Encryption key is generated by the new device wizard. + # key: "" + + services: + - service: play_rtttl + variables: + song_str: string + then: + - rtttl.play: + rtttl: !lambda 'return song_str;' + +ota: + # Create a secure password for pushing OTA updates. + # password: "" + +# Enable logging +logger: + +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 + - platform: gpio + pin: GPIO27 + id: buzzer_gnd + +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 + entity_category: config + +i2c: + sda: 21 + scl: 22 + scan: false + frequency: 200kHz # recommended range is 50-200kHz + id: i2c_a + +time: + - platform: sntp + id: my_time + +# 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_a # 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 * / + voltage: + name: "Phase A Voltage" + filters: [*moving_avg, *pos] + frequency: + name: "Phase A Frequency" + filters: [*moving_avg, *pos] + - id: phase_b # 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 * / + 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 + filters: [*moving_avg, *pos] + - 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 + filters: [*moving_avg, *pos] + # 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_a, input: "1", power: { name: "Circuit 1 Power", id: cir1, filters: [ *moving_avg, *pos ] } } + - { phase_id: phase_b, input: "2", power: { name: "Circuit 2 Power", id: cir2, filters: [ *moving_avg, *pos ] } } + - { phase_id: phase_a, input: "3", power: { name: "Circuit 3 Power", id: cir3, filters: [ *moving_avg, *pos ] } } + - { phase_id: phase_a, input: "4", power: { name: "Circuit 4 Power", id: cir4, filters: [ *moving_avg, *pos ] } } + - { phase_id: phase_a, input: "5", power: { name: "Circuit 5 Power", id: cir5, filters: [ *moving_avg, *pos, multiply: 2 ] } } + - { phase_id: phase_a, input: "6", power: { name: "Circuit 6 Power", id: cir6, filters: [ *moving_avg, *pos, multiply: 2 ] } } + - { phase_id: phase_a, input: "7", power: { name: "Circuit 7 Power", id: cir7, filters: [ *moving_avg, *pos, multiply: 2 ] } } + - { phase_id: phase_b, input: "8", power: { name: "Circuit 8 Power", id: cir8, filters: [ *moving_avg, *pos ] } } + - { phase_id: phase_b, input: "9", power: { name: "Circuit 9 Power", id: cir9, filters: [ *moving_avg, *pos ] } } + - { phase_id: phase_b, input: "10", power: { name: "Circuit 10 Power", id: cir10, filters: [ *moving_avg, *pos ] } } + - { phase_id: phase_a, input: "11", power: { name: "Circuit 11 Power", id: cir11, filters: [ *moving_avg, *pos, multiply: 2 ] } } + - { phase_id: phase_a, input: "12", power: { name: "Circuit 12 Power", id: cir12, filters: [ *moving_avg, *pos, multiply: 2 ] } } + - { phase_id: phase_a, input: "13", power: { name: "Circuit 13 Power", id: cir13, filters: [ *moving_avg, *pos ] } } + - { phase_id: phase_a, input: "14", power: { name: "Circuit 14 Power", id: cir14, filters: [ *moving_avg, *pos ] } } + - { phase_id: phase_b, input: "15", power: { name: "Circuit 15 Power", id: cir15, filters: [ *moving_avg, *pos ] } } + - { phase_id: phase_a, input: "16", power: { name: "Circuit 16 Power", id: cir16, filters: [ *moving_avg, *pos ] } } + - platform: template + name: "Total Power" + lambda: return id(phase_a_power).state + id(phase_b_power).state; + update_interval: 2.88s + id: total_power + device_class: power + state_class: measurement + unit_of_measurement: "W" + - platform: total_daily_energy + name: "Total Daily Energy" + power_id: total_power + accuracy_decimals: 0 + - platform: template + name: "Balance Power" + lambda: !lambda |- + return max(0.0f, id(total_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); + update_interval: 2.88s + id: balance_power + device_class: power + state_class: measurement + unit_of_measurement: "W" + - platform: total_daily_energy + name: "Balance Daily Energy" + power_id: balance_power + accuracy_decimals: 0 + - { power_id: cir1, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 1 Daily Energy" } + - { power_id: cir2, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 2 Daily Energy" } + - { power_id: cir3, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 3 Daily Energy" } + - { power_id: cir4, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 4 Daily Energy" } + - { power_id: cir5, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 5 Daily Energy" } + - { power_id: cir6, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 6 Daily Energy" } + - { power_id: cir7, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 7 Daily Energy" } + - { power_id: cir8, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 8 Daily Energy" } + - { power_id: cir9, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 9 Daily Energy" } + - { power_id: cir10, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 10 Daily Energy" } + - { power_id: cir11, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 11 Daily Energy" } + - { power_id: cir12, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 12 Daily Energy" } + - { power_id: cir13, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 13 Daily Energy" } + - { power_id: cir14, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 14 Daily Energy" } + - { power_id: cir15, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 15 Daily Energy" } + - { power_id: cir16, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 16 Daily Energy" } diff --git a/_data/emp-vue2-2.yaml b/_data/emp-vue2-2.yaml new file mode 100644 index 0000000..7b32f8d --- /dev/null +++ b/_data/emp-vue2-2.yaml @@ -0,0 +1,217 @@ +substitutions: + device_name: emp-vue2-2 + dn: emp-vue2-2 + friendly_name: Emporia Vue2 2 + +<<: !include .wifi-oss.yaml + +esphome: + name: ${device_name} + friendly_name: ${friendly_name} + +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 +api: + # encryption: + # Encryption key is generated by the new device wizard. + # key: "" + + services: + - service: play_rtttl + variables: + song_str: string + then: + - rtttl.play: + rtttl: !lambda 'return song_str;' + +ota: + # Create a secure password for pushing OTA updates. + # password: "" + +# Enable logging +logger: + +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 + - platform: gpio + pin: GPIO27 + id: buzzer_gnd + +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 + entity_category: config + +i2c: + sda: 21 + scl: 22 + scan: false + frequency: 200kHz # recommended range is 50-200kHz + id: i2c_a + +time: + - platform: sntp + id: my_time + +# 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_a # 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 * / + voltage: + name: "Phase A Voltage" + filters: [*moving_avg, *pos] + frequency: + name: "Phase A Frequency" + filters: [*moving_avg, *pos] + - id: phase_b # 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 * / + 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 + filters: [*moving_avg, *pos] + - 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 + filters: [*moving_avg, *pos] + # 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_a, input: "1", power: { name: "Circuit 1 Power", id: cir1, filters: [ *moving_avg, *pos ] } } + - { phase_id: phase_b, input: "2", power: { name: "Circuit 2 Power", id: cir2, filters: [ *moving_avg, *pos ] } } + - { phase_id: phase_a, input: "3", power: { name: "Circuit 3 Power", id: cir3, filters: [ *moving_avg, *pos ] } } + - { phase_id: phase_a, input: "4", power: { name: "Circuit 4 Power", id: cir4, filters: [ *moving_avg, *pos ] } } + - { phase_id: phase_a, input: "5", power: { name: "Circuit 5 Power", id: cir5, filters: [ *moving_avg, *pos, multiply: 2 ] } } + - { phase_id: phase_a, input: "6", power: { name: "Circuit 6 Power", id: cir6, filters: [ *moving_avg, *pos, multiply: 2 ] } } + - { phase_id: phase_a, input: "7", power: { name: "Circuit 7 Power", id: cir7, filters: [ *moving_avg, *pos, multiply: 2 ] } } + - { phase_id: phase_b, input: "8", power: { name: "Circuit 8 Power", id: cir8, filters: [ *moving_avg, *pos ] } } + - { phase_id: phase_b, input: "9", power: { name: "Circuit 9 Power", id: cir9, filters: [ *moving_avg, *pos ] } } + - { phase_id: phase_b, input: "10", power: { name: "Circuit 10 Power", id: cir10, filters: [ *moving_avg, *pos ] } } + - { phase_id: phase_a, input: "11", power: { name: "Circuit 11 Power", id: cir11, filters: [ *moving_avg, *pos, multiply: 2 ] } } + - { phase_id: phase_a, input: "12", power: { name: "Circuit 12 Power", id: cir12, filters: [ *moving_avg, *pos, multiply: 2 ] } } + - { phase_id: phase_a, input: "13", power: { name: "Circuit 13 Power", id: cir13, filters: [ *moving_avg, *pos ] } } + - { phase_id: phase_a, input: "14", power: { name: "Circuit 14 Power", id: cir14, filters: [ *moving_avg, *pos ] } } + - { phase_id: phase_b, input: "15", power: { name: "Circuit 15 Power", id: cir15, filters: [ *moving_avg, *pos ] } } + - { phase_id: phase_a, input: "16", power: { name: "Circuit 16 Power", id: cir16, filters: [ *moving_avg, *pos ] } } + - platform: template + name: "Total Power" + lambda: return id(phase_a_power).state + id(phase_b_power).state; + update_interval: 2.88s + id: total_power + device_class: power + state_class: measurement + unit_of_measurement: "W" + - platform: total_daily_energy + name: "Total Daily Energy" + power_id: total_power + accuracy_decimals: 0 + - platform: template + name: "Balance Power" + lambda: !lambda |- + return max(0.0f, id(total_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); + update_interval: 2.88s + id: balance_power + device_class: power + state_class: measurement + unit_of_measurement: "W" + - platform: total_daily_energy + name: "Balance Daily Energy" + power_id: balance_power + accuracy_decimals: 0 + - { power_id: cir1, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 1 Daily Energy" } + - { power_id: cir2, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 2 Daily Energy" } + - { power_id: cir3, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 3 Daily Energy" } + - { power_id: cir4, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 4 Daily Energy" } + - { power_id: cir5, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 5 Daily Energy" } + - { power_id: cir6, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 6 Daily Energy" } + - { power_id: cir7, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 7 Daily Energy" } + - { power_id: cir8, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 8 Daily Energy" } + - { power_id: cir9, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 9 Daily Energy" } + - { power_id: cir10, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 10 Daily Energy" } + - { power_id: cir11, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 11 Daily Energy" } + - { power_id: cir12, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 12 Daily Energy" } + - { power_id: cir13, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 13 Daily Energy" } + - { power_id: cir14, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 14 Daily Energy" } + - { power_id: cir15, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 15 Daily Energy" } + - { power_id: cir16, platform: total_daily_energy, accuracy_decimals: 0, name: "Circuit 16 Daily Energy" } diff --git a/_data/emp-vue2-3.yaml b/_data/emp-vue2-3.yaml new file mode 100644 index 0000000..d670cc3 --- /dev/null +++ b/_data/emp-vue2-3.yaml @@ -0,0 +1,265 @@ +substitutions: + device_name: emp-vue2-3 + dn: emp-vue2-3 + friendly_name: Emporia Vue2 3 + cir01name: Bed4 + cir01phase: phase_a + cir01mult: "1" + cir02name: Bed2,3 + cir02phase: phase_b + cir02mult: "1" + cir03name: Kit-Lights + cir03phase: phase_a + cir03mult: "1" + cir04name: Family-Rm + cir04phase: phase_b + cir04mult: "1" + cir05name: 3rd-Floor + cir05phase: phase_a + cir05mult: "1" + cir06name: MBR-Server + cir06phase: phase_b + cir06mult: "1" + cir07name: Fire + cir07phase: phase_b + cir07mult: "1" + cir08name: MBR-Bath + cir08phase: phase_a + cir08mult: "1" + cir09name: Gar-Lights + cir09phase: phase_b + cir09mult: "1" + cir10name: Sec-Bath-Lights + cir10phase: phase_a + cir10mult: "1" + cir11name: Current-Monitor + cir11phase: phase_b + cir11mult: "1" + cir12name: Current-Monitor + cir12phase: phase_a + cir12mult: "1" + cir13name: None + cir13phase: phase_b + cir13mult: "1" + cir14name: None + cir14phase: phase_a + cir14mult: "1" + cir15name: None + cir15phase: phase_b + cir15mult: "1" + cir16name: None + cir16phase: phase_a + cir16mult: "1" + +<<: !include .wifi-oss.yaml + +esphome: + name: ${device_name} + friendly_name: ${friendly_name} + +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 +api: + # encryption: + # Encryption key is generated by the new device wizard. + # key: "" + + services: + - service: play_rtttl + variables: + song_str: string + then: + - rtttl.play: + rtttl: !lambda 'return song_str;' + +ota: + # Create a secure password for pushing OTA updates. + # password: "" + +# Enable logging +logger: + +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 + - platform: gpio + pin: GPIO27 + id: buzzer_gnd + +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 + entity_category: config + +i2c: + sda: 21 + scl: 22 + scan: false + frequency: 200kHz # recommended range is 50-200kHz + id: i2c_a + +time: + - platform: sntp + id: my_time + +# 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_a # 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 * / + voltage: + name: "Phase A Voltage" + filters: [*moving_avg, *pos] + frequency: + name: "Phase A Frequency" + filters: [*moving_avg, *pos] + - id: phase_b # 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 * / + 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 + filters: [*moving_avg, *pos] + - 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 + filters: [*moving_avg, *pos] + # 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: "${cir01phase}", input: "1", power: { name: "${cir01name} Power", id: cir01, filters: [ *moving_avg, *pos, multiply: "${cir01mult}" ] } } + - { phase_id: "${cir02phase}", input: "2", power: { name: "${cir02name} Power", id: cir02, filters: [ *moving_avg, *pos, multiply: "${cir02mult}" ] } } + - { phase_id: "${cir03phase}", input: "3", power: { name: "${cir03name} Power", id: cir03, filters: [ *moving_avg, *pos, multiply: "${cir03mult}" ] } } + - { phase_id: "${cir04phase}", input: "4", power: { name: "${cir04name} Power", id: cir04, filters: [ *moving_avg, *pos, multiply: "${cir04mult}" ] } } + - { phase_id: "${cir05phase}", input: "5", power: { name: "${cir05name} Power", id: cir05, filters: [ *moving_avg, *pos, multiply: "${cir05mult}" ] } } + - { phase_id: "${cir06phase}", input: "6", power: { name: "${cir06name} Power", id: cir06, filters: [ *moving_avg, *pos, multiply: "${cir06mult}" ] } } + - { phase_id: "${cir07phase}", input: "7", power: { name: "${cir07name} Power", id: cir07, filters: [ *moving_avg, *pos, multiply: "${cir07mult}" ] } } + - { phase_id: "${cir08phase}", input: "8", power: { name: "${cir08name} Power", id: cir08, filters: [ *moving_avg, *pos, multiply: "${cir08mult}" ] } } + - { phase_id: "${cir09phase}", input: "9", power: { name: "${cir09name} Power", id: cir09, filters: [ *moving_avg, *pos, multiply: "${cir09mult}" ] } } + - { phase_id: "${cir10phase}", input: "10", power: { name: "${cir10name} Power", id: cir10, filters: [ *moving_avg, *pos, multiply: "${cir10mult}" ] } } + - { phase_id: "${cir11phase}", input: "11", power: { name: "${cir11name} Power", id: cir11, filters: [ *moving_avg, *pos, multiply: "${cir11mult}" ] } } + - { phase_id: "${cir12phase}", input: "12", power: { name: "${cir12name} Power", id: cir12, filters: [ *moving_avg, *pos, multiply: "${cir12mult}" ] } } + - { phase_id: "${cir13phase}", input: "13", power: { name: "${cir13name} Power", id: cir13, filters: [ *moving_avg, *pos, multiply: "${cir13mult}" ] } } + - { phase_id: "${cir14phase}", input: "14", power: { name: "${cir14name} Power", id: cir14, filters: [ *moving_avg, *pos, multiply: "${cir14mult}" ] } } + - { phase_id: "${cir15phase}", input: "15", power: { name: "${cir15name} Power", id: cir15, filters: [ *moving_avg, *pos, multiply: "${cir15mult}" ] } } + - { phase_id: "${cir16phase}", input: "16", power: { name: "${cir16name} Power", id: cir16, filters: [ *moving_avg, *pos, multiply: "${cir16mult}" ] } } + - platform: template + name: "Total Power" + lambda: return id(phase_a_power).state + id(phase_b_power).state; + update_interval: 2.88s + id: total_power + device_class: power + state_class: measurement + unit_of_measurement: "W" + - platform: total_daily_energy + name: "Total Daily Energy" + power_id: total_power + accuracy_decimals: 0 + - platform: template + name: "Balance Power" + lambda: !lambda |- + return max(0.0f, id(total_power).state - + id(cir01).state - + id(cir02).state - + id(cir03).state - + id(cir04).state - + id(cir05).state - + id(cir06).state - + id(cir07).state - + id(cir08).state - + id(cir09).state - + id(cir10).state - + id(cir11).state - + id(cir12).state - + id(cir13).state - + id(cir14).state - + id(cir15).state - + id(cir16).state); + update_interval: 2.88s + id: balance_power + device_class: power + state_class: measurement + unit_of_measurement: "W" + - platform: total_daily_energy + name: "Balance Daily Energy" + power_id: balance_power + accuracy_decimals: 0 + - { power_id: cir01, platform: total_daily_energy, accuracy_decimals: 0, name: "${cir01name} Daily Energy" } + - { power_id: cir02, platform: total_daily_energy, accuracy_decimals: 0, name: "${cir02name} Daily Energy" } + - { power_id: cir03, platform: total_daily_energy, accuracy_decimals: 0, name: "${cir03name} Daily Energy" } + - { power_id: cir04, platform: total_daily_energy, accuracy_decimals: 0, name: "${cir04name} Daily Energy" } + - { power_id: cir05, platform: total_daily_energy, accuracy_decimals: 0, name: "${cir05name} Daily Energy" } + - { power_id: cir06, platform: total_daily_energy, accuracy_decimals: 0, name: "${cir06name} Daily Energy" } + - { power_id: cir07, platform: total_daily_energy, accuracy_decimals: 0, name: "${cir07name} Daily Energy" } + - { power_id: cir08, platform: total_daily_energy, accuracy_decimals: 0, name: "${cir08name} Daily Energy" } + - { power_id: cir09, platform: total_daily_energy, accuracy_decimals: 0, name: "${cir09name} Daily Energy" } + - { power_id: cir10, platform: total_daily_energy, accuracy_decimals: 0, name: "${cir10name} Daily Energy" } + - { power_id: cir11, platform: total_daily_energy, accuracy_decimals: 0, name: "${cir11name} Daily Energy" } + - { power_id: cir12, platform: total_daily_energy, accuracy_decimals: 0, name: "${cir12name} Daily Energy" } + - { power_id: cir13, platform: total_daily_energy, accuracy_decimals: 0, name: "${cir13name} Daily Energy" } + - { power_id: cir14, platform: total_daily_energy, accuracy_decimals: 0, name: "${cir14name} Daily Energy" } + - { power_id: cir15, platform: total_daily_energy, accuracy_decimals: 0, name: "${cir15name} Daily Energy" } + - { power_id: cir16, platform: total_daily_energy, accuracy_decimals: 0, name: "${cir16name} Daily Energy" } diff --git a/_data/prj_3.yaml b/_data/prj_3.yaml index 93f75b9..3145af9 100644 --- a/_data/prj_3.yaml +++ b/_data/prj_3.yaml @@ -186,9 +186,11 @@ climate: min_temperature: 60 °F max_temperature: 160 °F temperature_step: 1 - default_mode: auto - default_target_temperature_low: 78 °F - default_target_temperature_high: 160 °F + default_preset: Default + preset: + - name: Default + default_target_temperature_low: 78°F + default_target_temperature_high: 160 °F min_cooling_off_time: 60s min_cooling_run_time: 60s min_heating_off_time: 60s diff --git a/_data/rack_2.yaml b/_data/rack_2.yaml index bd1e0f1..ab3566b 100644 --- a/_data/rack_2.yaml +++ b/_data/rack_2.yaml @@ -189,9 +189,11 @@ climate: min_temperature: 60 °F max_temperature: 100 °F temperature_step: 1 - default_mode: auto - default_target_temperature_low: 75 °F - default_target_temperature_high: 100 °F + default_preset: Default + preset: + - name: Default + default_target_temperature_low: 75 °F + default_target_temperature_high: 100 °F min_cooling_off_time: 60s min_cooling_run_time: 60s min_heating_off_time: 60s diff --git a/_data/rack_3.yaml b/_data/rack_3.yaml index d933e5a..9fab2a9 100644 --- a/_data/rack_3.yaml +++ b/_data/rack_3.yaml @@ -181,9 +181,11 @@ climate: min_temperature: 60 °F max_temperature: 100 °F temperature_step: 1 - default_mode: auto - default_target_temperature_low: 75 °F - default_target_temperature_high: 100 °F + default_preset: Default + preset: + - name: Default + default_target_temperature_low: 75 °F + default_target_temperature_high: 100 °F min_cooling_off_time: 60s min_cooling_run_time: 60s min_heating_off_time: 60s