Files
home-assistant/packages/energy/generate_panel_sensors.py
2022-07-22 08:48:20 -07:00

89 lines
2.3 KiB
Python

#!/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 Average Sensor
PANEL_AVERAGE_SENSOR = '''---
# -----------------------------------------------------------------------------
# Panel/Inverter Monitor Sensors
- name: Envoy Inverter Average Power
platform: min_max
type: mean
entity_ids:[% for sn in serial_numbers %]
- sensor.envoy_202221032900_inverter_[[sn]]
[%- endfor %]
'''
# Jinja2 Snippet for Panel Power Share Sensors
PANEL_SHARE_SENSORS = '''---
# -----------------------------------------------------------------------------
# Panel/Inverter Monitor Template Sensors
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='#]',
)
with open('panel_average_sensor.yaml', 'w') as f:
tmpl = env.from_string(PANEL_AVERAGE_SENSOR)
f.write(tmpl.render(serial_numbers=INVERTER_SNS))
with open('panel_template_sensors.yaml', 'w') as f:
tmpl = env.from_string(PANEL_SHARE_SENSORS)
f.write(tmpl.render(serial_numbers=INVERTER_SNS))
if __name__ == '__main__':
main()