Skip to content

Commit

Permalink
Support for separate tariff pricing for plunge pricing events.
Browse files Browse the repository at this point in the history
  • Loading branch information
Mark Hale committed Apr 6, 2024
1 parent ba5b9e3 commit c7b8112
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 4 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ using
import_tariff_breaks: [0.10, 0.20, 0.30]
import_tariff_pricing: ["average", "average", "maximum", "maximum"]
plunge_pricing_tariff_breaks: [0.0, 0.10, 0.30]
plunge_pricing_tariff_pricing: ["average", "maximum", "maximum", "maximum"]

5. Optionally, create an `input_text` helper called `powerwall_tariff_update_status` if you want to see status messages.

Expand Down Expand Up @@ -57,6 +58,8 @@ So, by default, anything below £0.10 is mapped to Super Off-Peak, between £0.1

`import_tariff_pricing`: determines how to calculate the price of each import pricing level from the actual prices assigned to a level.

`plunge_pricing_tariff_pricing`: similar to above, but applied if there are any plunge (negative) prices.

`export_tariff_pricing`: determines how to calculate the price of each export pricing level from the actual prices assigned to a level.

`import_standing_charge`: sensor name or value.
Expand Down
5 changes: 3 additions & 2 deletions src/apps/powerwall/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,13 +133,14 @@ def _update_schedules_for_day(day_date):
# backwards compatibility
if import_breaks is None:
import_breaks = get_breaks("tariff_breaks")
import_plunge_pricing_breaks = get_breaks("plunge_pricing_tariff_breaks", required=False)
plunge_pricing_breaks = get_breaks("plunge_pricing_tariff_breaks", required=False)
import_pricing = get_pricing("import_tariff_pricing", required=False)
# backwards compatibility
if import_pricing is None:
import_pricing = get_pricing("tariff_pricing")
plunge_pricing_pricing = get_pricing("plunge_pricing_tariff_pricing", required=False)

import_schedules = tariff.get_schedules(import_breaks, import_plunge_pricing_breaks, import_pricing, import_rates)
import_schedules = tariff.get_schedules(import_breaks, import_pricing, plunge_pricing_breaks, plunge_pricing_pricing, import_rates)
if import_schedules is None:
return None, None

Expand Down
9 changes: 7 additions & 2 deletions src/modules/powerwall_tariff.py
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,7 @@ def populate_schedules(schedules, day_rates):
schedule.add(rate)


def get_schedules(breaks_config, plunge_pricing_breaks_config, tariff_pricing_config, day_rates, pricing_key=PRICE_KEY):
def get_schedules(breaks_config, tariff_pricing_config, plunge_pricing_breaks_config, plunge_pricing_tariff_pricing_config, day_rates, pricing_key=PRICE_KEY):
if not day_rates:
return None

Expand All @@ -361,11 +361,16 @@ def get_schedules(breaks_config, plunge_pricing_breaks_config, tariff_pricing_co
else:
configured_breaks = breaks_config

if plunge_pricing and plunge_pricing_tariff_pricing_config:
configured_pricing = plunge_pricing_tariff_pricing_config
else:
configured_pricing = tariff_pricing_config

assigner_funcs = get_tariff_assigners(configured_breaks, day_rates)

schedules = []
for i, charge_name in enumerate(CHARGE_NAMES):
pricing_func = create_pricing(tariff_pricing_config[i])
pricing_func = create_pricing(configured_pricing[i])
schedules.append(Schedule(charge_name, assigner_funcs[i], pricing_func, pricing_key))

populate_schedules(schedules, day_rates)
Expand Down

0 comments on commit c7b8112

Please sign in to comment.