ok, so in the end this is where I ended up:
average_power:
device_class: power
friendly_name: Average Power
unit_of_measurement: W
value_template: >-
{% set x = states.sensor
| selectattr('attributes.device_class', 'eq', 'power')
| selectattr('attributes.unit_of_measurement', 'eq', 'W')
| rejectattr('entity_id', 'eq', 'sensor.average_power')
| rejectattr('entity_id', 'eq', 'sensor.total_power')
| map(attribute='state') | map('float') | list %}
{% set y = states.sensor
| selectattr('attributes.device_class', 'eq', 'power')
| selectattr('attributes.unit_of_measurement', 'eq', 'kW')
| rejectattr('entity_id', 'eq', 'sensor.average_power')
| rejectattr('entity_id', 'eq', 'sensor.total_power')
| map(attribute='state') | map('float') | map('multiply', 1000) | list %}
{% if ((x | count) + (y | count)) > 0 %}
{{ ((x | sum) + (y | sum)) / ((x | count) + (y | count)) }}
{% else %}
0
{% endif %}
total_power:
device_class: power
friendly_name: Total Power
unit_of_measurement: W
value_template: >-
{% set x = states.sensor
| selectattr('attributes.device_class', 'eq', 'power')
| selectattr('attributes.unit_of_measurement', 'eq', 'W')
| rejectattr('entity_id', 'eq', 'sensor.average_power')
| rejectattr('entity_id', 'eq', 'sensor.total_power')
| map(attribute='state') | map('float') | list %}
{% set y = states.sensor
| selectattr('attributes.device_class', 'eq', 'power')
| selectattr('attributes.unit_of_measurement', 'eq', 'kW')
| rejectattr('entity_id', 'eq', 'sensor.average_power')
| rejectattr('entity_id', 'eq', 'sensor.total_power')
| map(attribute='state') | map('float') | map('multiply', 1000) | list %}
{{ ((x | sum) + (y | sum)) }}
They seem to work fine, but now I get this error in the logs:
2020-10-12 09:45:45 WARNING (MainThread) [homeassistant.components.template.template_entity] Template loop detected while processing event: <Event state_changed[L]: entity_id=sensor.total_power, old_state=<state sensor.total_power=513.9200000000001; unit_of_measurement=W, friendly_name=Total Power, device_class=power @ 2020-10-12T09:43:45.185308+11:00>, new_state=<state sensor.total_power=499.35; unit_of_measurement=W, friendly_name=Total Power, device_class=power @ 2020-10-12T09:44:45.145237+11:00>>, skipping template render for Template[{% set x = states.sensor
| selectattr('attributes.device_class', 'eq', 'power')
| selectattr('attributes.unit_of_measurement', 'eq', 'W')
| rejectattr('entity_id', 'eq', 'sensor.average_power')
| rejectattr('entity_id', 'eq', 'sensor.total_power')
| map(attribute='state') | map('float') | list %}
{% set y = states.sensor
| selectattr('attributes.device_class', 'eq', 'power')
| selectattr('attributes.unit_of_measurement', 'eq', 'kW')
| rejectattr('entity_id', 'eq', 'sensor.average_power')
| rejectattr('entity_id', 'eq', 'sensor.total_power')
| map(attribute='state') | map('float') | map('multiply', 1000) | list %}
{{ ((x | sum) + (y | sum)) }}]
any thoughts on how to quieten the loop detection here or is there an actually problem (I can no see it)?
Thanks