From 91e4efd531459df925f0ee16d341a93f3f0d9665 Mon Sep 17 00:00:00 2001 From: "J.P. Krauss" Date: Fri, 22 Jul 2022 08:42:12 -0700 Subject: [PATCH] Update Energy Package --- packages/energy/energy.yaml | 49 +--- packages/energy/generate_panel_sensors.py | 79 +++++++ packages/energy/panel_sensors.yaml | 268 ++++++++++++++++++++++ 3 files changed, 349 insertions(+), 47 deletions(-) create mode 100644 packages/energy/generate_panel_sensors.py create mode 100644 packages/energy/panel_sensors.yaml diff --git a/packages/energy/energy.yaml b/packages/energy/energy.yaml index dd899bb..a28bdde 100644 --- a/packages/energy/energy.yaml +++ b/packages/energy/energy.yaml @@ -9,50 +9,5 @@ sensor: unit_prefix: k unit_time: h -# ----------------------------------------------------------------------------- -# Panel/Inverter Monitor Sensors -sensor: - - name: Envoy Inverter Average Power - platform: min_max - type: mean - entity_ids: - - sensor.envoy_202221032900_inverter_202147113780 - - sensor.envoy_202221032900_inverter_202147116830 - - sensor.envoy_202221032900_inverter_202147117162 - - sensor.envoy_202221032900_inverter_202147117631 - - sensor.envoy_202221032900_inverter_202147122858 - - sensor.envoy_202221032900_inverter_202147123517 - - sensor.envoy_202221032900_inverter_202147125027 - - sensor.envoy_202221032900_inverter_202147125590 - - sensor.envoy_202221032900_inverter_202147125734 - - sensor.envoy_202221032900_inverter_202147125902 - - sensor.envoy_202221032900_inverter_202147126079 - - sensor.envoy_202221032900_inverter_202147126357 - - sensor.envoy_202221032900_inverter_202147126997 - - sensor.envoy_202221032900_inverter_202147128369 - - sensor.envoy_202221032900_inverter_202147129445 - - sensor.envoy_202221032900_inverter_202147130152 - - sensor.envoy_202221032900_inverter_202147130290 - -template: - sensor: - - name: Envoy 202221032900 Inverter 202147113780 Power Share - unit_of_measurement: "%" - - availability: "{{ states('sensor.envoy_inverter_average_power')|float > 5 }}" - state: > - {% if states('sensor.envoy_inverter_average_power')|float == 0 %} - undefined - {% else %} - {{ (100 * - states('sensor.envoy_202221032900_inverter_202147113780')|float - / states('sensor.envoy_inverter_average_power')|float - ) | round(1) - }} - {% endif %} - -homeassistant: - customize: - sensor.envoy_total_energy: - device_class: energy - friendly_name: Envoy Total Energy Production +# Include Sensors for Panels/Inverters (generated by generate_panel_sensors.py) +!include "panel_sensors.yaml" diff --git a/packages/energy/generate_panel_sensors.py b/packages/energy/generate_panel_sensors.py new file mode 100644 index 0000000..0d05223 --- /dev/null +++ b/packages/energy/generate_panel_sensors.py @@ -0,0 +1,79 @@ +#!/usr/bin/python3 +# --- +# Script to generate Power Share and Panel OK sensors for the solar panels +# by serial number. + +import sys + +import jinja2 as j2 + +# Serial Numbers for Panel Inverters +INVERTER_SNS = [ + 202147113780, + 202147116830, + 202147117162, + 202147117631, + 202147122858, + 202147123517, + 202147125027, + 202147125590, + 202147125734, + 202147125902, + 202147126079, + 202147126357, + 202147126997, + 202147128369, + 202147129445, + 202147130152, + 202147130290, +] + +# Jinja2 Snippet for Panel Sensors +POWER_SHARE_SENSORS = '''--- +# ----------------------------------------------------------------------------- +# Panel/Inverter Monitor Sensors +sensor: + - name: Envoy Inverter Average Power + platform: min_max + type: mean + entity_ids: +[% for sn in serial_numbers %] - sensor.envoy_202221032900_inverter_[[sn]] +[% endfor %] + +# Panel/Inverter Power Share Sensors +template: + sensor: +[% for sn in serial_numbers %] - name: Envoy 202221032900 Inverter [[sn]] Power Share + unit_of_measurement: "%" + availability: "{{ states('sensor.envoy_inverter_average_power')|float > 5 }}" + state: > + {% if states('sensor.envoy_inverter_average_power')|float == 0 %} + undefined + {% else %} + {{ (100 * + states('sensor.envoy_202221032900_inverter_[[sn]]')|float + / states('sensor.envoy_inverter_average_power')|float + ) | round(1) + }} + {% endif %} + +[% endfor %] +''' + +def main(): + """Generate Power Share Sensor Section for the YAML File.""" + env = j2.Environment( + block_start_string='[%', + block_end_string='%]', + variable_start_string='[[', + variable_end_string=']]', + comment_start_string='[#', + comment_end_string='#]', + ) + + tmpl = env.from_string(POWER_SHARE_SENSORS) + + sys.stdout.write(tmpl.render(serial_numbers=INVERTER_SNS)) + +if __name__ == '__main__': + main() diff --git a/packages/energy/panel_sensors.yaml b/packages/energy/panel_sensors.yaml new file mode 100644 index 0000000..ae93a6b --- /dev/null +++ b/packages/energy/panel_sensors.yaml @@ -0,0 +1,268 @@ +--- +# ----------------------------------------------------------------------------- +# Panel/Inverter Monitor Sensors +sensor: + - name: Envoy Inverter Average Power + platform: min_max + type: mean + entity_ids: + - sensor.envoy_202221032900_inverter_202147113780 + - sensor.envoy_202221032900_inverter_202147116830 + - sensor.envoy_202221032900_inverter_202147117162 + - sensor.envoy_202221032900_inverter_202147117631 + - sensor.envoy_202221032900_inverter_202147122858 + - sensor.envoy_202221032900_inverter_202147123517 + - sensor.envoy_202221032900_inverter_202147125027 + - sensor.envoy_202221032900_inverter_202147125590 + - sensor.envoy_202221032900_inverter_202147125734 + - sensor.envoy_202221032900_inverter_202147125902 + - sensor.envoy_202221032900_inverter_202147126079 + - sensor.envoy_202221032900_inverter_202147126357 + - sensor.envoy_202221032900_inverter_202147126997 + - sensor.envoy_202221032900_inverter_202147128369 + - sensor.envoy_202221032900_inverter_202147129445 + - sensor.envoy_202221032900_inverter_202147130152 + - sensor.envoy_202221032900_inverter_202147130290 + + +# Panel/Inverter Power Share Sensors +template: + sensor: + - name: Envoy 202221032900 Inverter 202147113780 Power Share + unit_of_measurement: "%" + availability: "{{ states('sensor.envoy_inverter_average_power')|float > 5 }}" + state: > + {% if states('sensor.envoy_inverter_average_power')|float == 0 %} + undefined + {% else %} + {{ (100 * + states('sensor.envoy_202221032900_inverter_202147113780')|float + / states('sensor.envoy_inverter_average_power')|float + ) | round(1) + }} + {% endif %} + + - name: Envoy 202221032900 Inverter 202147116830 Power Share + unit_of_measurement: "%" + availability: "{{ states('sensor.envoy_inverter_average_power')|float > 5 }}" + state: > + {% if states('sensor.envoy_inverter_average_power')|float == 0 %} + undefined + {% else %} + {{ (100 * + states('sensor.envoy_202221032900_inverter_202147116830')|float + / states('sensor.envoy_inverter_average_power')|float + ) | round(1) + }} + {% endif %} + + - name: Envoy 202221032900 Inverter 202147117162 Power Share + unit_of_measurement: "%" + availability: "{{ states('sensor.envoy_inverter_average_power')|float > 5 }}" + state: > + {% if states('sensor.envoy_inverter_average_power')|float == 0 %} + undefined + {% else %} + {{ (100 * + states('sensor.envoy_202221032900_inverter_202147117162')|float + / states('sensor.envoy_inverter_average_power')|float + ) | round(1) + }} + {% endif %} + + - name: Envoy 202221032900 Inverter 202147117631 Power Share + unit_of_measurement: "%" + availability: "{{ states('sensor.envoy_inverter_average_power')|float > 5 }}" + state: > + {% if states('sensor.envoy_inverter_average_power')|float == 0 %} + undefined + {% else %} + {{ (100 * + states('sensor.envoy_202221032900_inverter_202147117631')|float + / states('sensor.envoy_inverter_average_power')|float + ) | round(1) + }} + {% endif %} + + - name: Envoy 202221032900 Inverter 202147122858 Power Share + unit_of_measurement: "%" + availability: "{{ states('sensor.envoy_inverter_average_power')|float > 5 }}" + state: > + {% if states('sensor.envoy_inverter_average_power')|float == 0 %} + undefined + {% else %} + {{ (100 * + states('sensor.envoy_202221032900_inverter_202147122858')|float + / states('sensor.envoy_inverter_average_power')|float + ) | round(1) + }} + {% endif %} + + - name: Envoy 202221032900 Inverter 202147123517 Power Share + unit_of_measurement: "%" + availability: "{{ states('sensor.envoy_inverter_average_power')|float > 5 }}" + state: > + {% if states('sensor.envoy_inverter_average_power')|float == 0 %} + undefined + {% else %} + {{ (100 * + states('sensor.envoy_202221032900_inverter_202147123517')|float + / states('sensor.envoy_inverter_average_power')|float + ) | round(1) + }} + {% endif %} + + - name: Envoy 202221032900 Inverter 202147125027 Power Share + unit_of_measurement: "%" + availability: "{{ states('sensor.envoy_inverter_average_power')|float > 5 }}" + state: > + {% if states('sensor.envoy_inverter_average_power')|float == 0 %} + undefined + {% else %} + {{ (100 * + states('sensor.envoy_202221032900_inverter_202147125027')|float + / states('sensor.envoy_inverter_average_power')|float + ) | round(1) + }} + {% endif %} + + - name: Envoy 202221032900 Inverter 202147125590 Power Share + unit_of_measurement: "%" + availability: "{{ states('sensor.envoy_inverter_average_power')|float > 5 }}" + state: > + {% if states('sensor.envoy_inverter_average_power')|float == 0 %} + undefined + {% else %} + {{ (100 * + states('sensor.envoy_202221032900_inverter_202147125590')|float + / states('sensor.envoy_inverter_average_power')|float + ) | round(1) + }} + {% endif %} + + - name: Envoy 202221032900 Inverter 202147125734 Power Share + unit_of_measurement: "%" + availability: "{{ states('sensor.envoy_inverter_average_power')|float > 5 }}" + state: > + {% if states('sensor.envoy_inverter_average_power')|float == 0 %} + undefined + {% else %} + {{ (100 * + states('sensor.envoy_202221032900_inverter_202147125734')|float + / states('sensor.envoy_inverter_average_power')|float + ) | round(1) + }} + {% endif %} + + - name: Envoy 202221032900 Inverter 202147125902 Power Share + unit_of_measurement: "%" + availability: "{{ states('sensor.envoy_inverter_average_power')|float > 5 }}" + state: > + {% if states('sensor.envoy_inverter_average_power')|float == 0 %} + undefined + {% else %} + {{ (100 * + states('sensor.envoy_202221032900_inverter_202147125902')|float + / states('sensor.envoy_inverter_average_power')|float + ) | round(1) + }} + {% endif %} + + - name: Envoy 202221032900 Inverter 202147126079 Power Share + unit_of_measurement: "%" + availability: "{{ states('sensor.envoy_inverter_average_power')|float > 5 }}" + state: > + {% if states('sensor.envoy_inverter_average_power')|float == 0 %} + undefined + {% else %} + {{ (100 * + states('sensor.envoy_202221032900_inverter_202147126079')|float + / states('sensor.envoy_inverter_average_power')|float + ) | round(1) + }} + {% endif %} + + - name: Envoy 202221032900 Inverter 202147126357 Power Share + unit_of_measurement: "%" + availability: "{{ states('sensor.envoy_inverter_average_power')|float > 5 }}" + state: > + {% if states('sensor.envoy_inverter_average_power')|float == 0 %} + undefined + {% else %} + {{ (100 * + states('sensor.envoy_202221032900_inverter_202147126357')|float + / states('sensor.envoy_inverter_average_power')|float + ) | round(1) + }} + {% endif %} + + - name: Envoy 202221032900 Inverter 202147126997 Power Share + unit_of_measurement: "%" + availability: "{{ states('sensor.envoy_inverter_average_power')|float > 5 }}" + state: > + {% if states('sensor.envoy_inverter_average_power')|float == 0 %} + undefined + {% else %} + {{ (100 * + states('sensor.envoy_202221032900_inverter_202147126997')|float + / states('sensor.envoy_inverter_average_power')|float + ) | round(1) + }} + {% endif %} + + - name: Envoy 202221032900 Inverter 202147128369 Power Share + unit_of_measurement: "%" + availability: "{{ states('sensor.envoy_inverter_average_power')|float > 5 }}" + state: > + {% if states('sensor.envoy_inverter_average_power')|float == 0 %} + undefined + {% else %} + {{ (100 * + states('sensor.envoy_202221032900_inverter_202147128369')|float + / states('sensor.envoy_inverter_average_power')|float + ) | round(1) + }} + {% endif %} + + - name: Envoy 202221032900 Inverter 202147129445 Power Share + unit_of_measurement: "%" + availability: "{{ states('sensor.envoy_inverter_average_power')|float > 5 }}" + state: > + {% if states('sensor.envoy_inverter_average_power')|float == 0 %} + undefined + {% else %} + {{ (100 * + states('sensor.envoy_202221032900_inverter_202147129445')|float + / states('sensor.envoy_inverter_average_power')|float + ) | round(1) + }} + {% endif %} + + - name: Envoy 202221032900 Inverter 202147130152 Power Share + unit_of_measurement: "%" + availability: "{{ states('sensor.envoy_inverter_average_power')|float > 5 }}" + state: > + {% if states('sensor.envoy_inverter_average_power')|float == 0 %} + undefined + {% else %} + {{ (100 * + states('sensor.envoy_202221032900_inverter_202147130152')|float + / states('sensor.envoy_inverter_average_power')|float + ) | round(1) + }} + {% endif %} + + - name: Envoy 202221032900 Inverter 202147130290 Power Share + unit_of_measurement: "%" + availability: "{{ states('sensor.envoy_inverter_average_power')|float > 5 }}" + state: > + {% if states('sensor.envoy_inverter_average_power')|float == 0 %} + undefined + {% else %} + {{ (100 * + states('sensor.envoy_202221032900_inverter_202147130290')|float + / states('sensor.envoy_inverter_average_power')|float + ) | round(1) + }} + {% endif %} +