Energy - calculating cost savings from solar

Hi

I’m fairly new to HA. I have configured everything I need via the GUI so far and it’s working well. Now I think I need to go into custom code land and I’ve been struggling with how to get this to work. Hoping someone can point me in the right direction please

I have a Solaredge accumulation sensor showing my total generated kwh: sensor.solaredge_kwh

I want to create a new accumulation sensor that calculates my “to date” £ savings based on:
□ Sensor.octopus_energy_yesterday_export_kwh (e.g. 20kwh)
□ Sensor.octopus_energy_yesterday_export_rate (e.g. £0.15)
□ Sensor.octopus_energy_yesterday_import_rate (e.g. £0.18)

So, to calculate the £ “savings” for yesterday I need to apply this logic:
□ Get total kwh produced (yesterday’s total from sensor.solaredge_kwh) (e.g. 30kwh)

  • Minus total exported yesterday (e.g. 20kwh)
  • Equals total consumed from solar yesterday (e.g. 10 kwh)
  • Solar “savings” for yesterday equals: Yesterday’s consumption from grid (10kwh) * Yesterday’s import rate (£0.18) = £1.80
  • Yesterday’s export to grid (20kwh) * Yesterday’s export rate (£0.15) = £3.00
  • Total benefit yesterday = £4.80

Is this possible (easy?!) to do in a HA dashboard panel please? Or do I need to create multiple different custom sensors

Thanks for your help

Example:

        state: >
          {% set total_generated_kwh = states('sensor.solaredge_kwh') | float %}
          {% set exported_kwh = states('sensor.octopus_energy_yesterday_export_kwh') | float %}
          {% set export_rate = states('sensor.octopus_energy_yesterday_export_rate') | float %}
          {% set import_rate = states('sensor.octopus_energy_yesterday_import_rate') | float %}

          {% set consumed_from_grid = total_generated_kwh - exported_kwh %}
          {% set savings = (consumed_from_grid * import_rate) - (exported_kwh * export_rate) %}

          {{ savings | round(2) }}
1 Like

Amazing! Thank you so much. Is it possible to just get yesterday’s total from the sensor.solaredge_kwh sensor? This seems to be an accumulating sensor so it has the lifetime generation.

This should then give me the total savings for yesterday, then I need to somehow save this / write it to a file so I can display the all-time savings since creating the template. Is that doable at all? Thanks again!

Example:

utility_meter:

  daily_energy_kwh:
    source: sensor.solaredge_kwh sensor
    cycle: daily
    unique_id: daily_energy_kwh

Restart HA, wait until the next day

state: "{{ state_attr('sensor.daily_energy_kwh', 'last_period')}}"

Thank you, where abouts do I put that? I can’t seem to get it working. Plus I have an error about my unit of measurement expecting a numerical value but not a string :frowning:

state: >
          {% set yesterday_generated_kwh = state: "{{ state_attr('sensor.daily_energy_kwh', 'last_period')}}" | float %}
          {% set exported_kwh = states('sensor.octopus_energy_electricity_export_previous_accumulative_consumption') | float %}
          {% set export_rate = states('sensor.octopus_energy_electricity_export_current_rate') | float %}
          {% set import_rate = states('sensor.octopus_energy_electricity_previous_rate') | float %}

          {% set consumed_from_grid = yesterday_generated_kwh - exported_kwh %}
          {% set savings = (consumed_from_grid * import_rate) - (exported_kwh * export_rate) %}

          {{ savings | round(2) }}

I’ve created this now all via configuration.yaml. Remains to be seen if it works (Need to wait until tomorrow). Question is, where can I find my utility meter in the GUI? It’s not listed under Helpers

utility_meter:
  daily_energy_generated_kwh:
    source: sensor.solaredge_ac_energy_kwh
    cycle: daily
    unique_id: daily_energy_kwh

  #daily_energy_exported_kwh:
  #  source: sensor.octopus_energy_electricity_x_export_previous_accumulative_consumption
  #  cycle: daily
  #  unique_id: daily_energy_exported_kwh

template:
  - trigger:
      - platform: time_pattern
        # This will update every day at 7am
        hours: 7
        minutes: 0
    sensor:
      # abc
      - name: "daily_savings"
        state: >
          {% set energy_generated_yesterday = state_attr('sensor.daily_energy_generated_kwh', 'last_period') | float %}
          {% set energy_exported_yesterday = state_attr('octopus_energy_electricity_x_export_previous_accumulative_consumption', 'last_period') | float %}
          {% set export_rate = states('sensor.octopus_energy_electricity_x_export_current_rate') | float %}
          {% set import_rate_yesterday = states('sensor.octopus_energy_electricity_x_previous_rate') | float %}
          {% set consumed_from_solar_yesterday = energy_generated_yesterday - energy_exported_yesterday %}
          {% set savings = (consumed_from_solar_yesterday * import_rate) + (energy_exported_yesterday * export_rate) %}
          {{ savings | round(2) }}