Skip to main content

Calculate bills from timeseries consumption data and different tariff structures

Project description

#Tariff calculation for time series consumption data.

Installation

pip install ts-tariffs

Usage and features

ts-tariffs can deal with any combination of typical electricity charges:

  • Connection charges
  • Single rate charges
  • Time of use charges
  • Demand charges, including those which are split into time of use
  • Block charges

Examples

Creating Tariffs

Tariff objects can be instantiated as follows:

from ts_tariffs.tariffs import SingleRateTariff

my_tariff = SingleRateTariff(
    name='my_tariff',
    charge_type="SingleRateTariff",
    rate=0.07,
    consumption_unit='kWh',
    rate_unit='dollars / kWh',
    adjustment_factor=1.05
)

Or can be easily instantiated using a dict:

my_tariff_dict = {
      "name": "my_tariff",
      "charge_type": "SingleRateTariff",
      "rate": 0.07,
      "consumption_unit": "kWh",
      "rate_unit": "dollars / kWh",
      "adjustment_factor": 1.005
}

my_tariff = SingleRateTariff(**my_tariff_dict)

Consumption data

Consumtion data should be stored in a MeterData object using a pd.Series with a datetime index.

For example, assuming you have a pd.DataFrame object df with a datetime index at 30min frequency, and a consumption column called 'energy', you would create a MeterData object as follows:

from ts_tariffs.meters import MeterData

my_meter_data = MeterData(
    'energy',
    df['Consumption (kWh)'], 
    timedelta(hours=0.5),
    units='kWh'
)

Calculating charges and billing

You can apply tariffs to meter data by calling the Tariff.apply() method. This returns an AppliedCharge object.

applied_charge = my_tariff.apply(my_meter_data)

You can construct a Bill with one or many AppliedCharge objects:

charges = [
    my_tariff_1.apply(my_meter_data),
    my_tariff_2.apply(my_meter_data),
    my_tariff_3.apply(my_meter_data),
]
my_bill = Bill(
    name='my_bill',
    charges=charges
)

Many Tariff objects can be stored together in a TariffRegime object. dict

This makes it convenient to store tariff data in a :

tariff_data = {
  "charges": [
    {
      "name": "retail_tou",
      "charge_type": "TouTariff",
      "consumption_unit": "kWh",
      "rate_unit": "dollars / kWh",
      "adjustment_factor": 1.005,
      "tou": {
        "time_bins": [
          7,
          21,
          24
        ],
        "bin_rates": [
          0.06,
          0.10,
          0.06
        ],
        "bin_labels": [
          "off-peak",
          "peak",
          "off-peak"
        ]
      },
    },
    {
      "name": "lrecs",
      "charge_type": "SingleRateTariff",
      "rate": 0.007,
      "consumption_unit": "kWh",
      "rate_unit": "dollars / kWh",
      "adjustment_factor": 1.005
    },
    {
      "name": "srecs",
      "charge_type": "SingleRateTariff",
      "rate": 0.0114,
      "consumption_unit": "kWh",
      "rate_unit": "dollars / kWh",
      "adjustment_factor": 1.005
    },
    {
      "name": "connection_tariff",
      "charge_type": "ConnectionTariff",
      "rate": 315.0,
      "consumption_unit": "day",
      "frequency_applied": "day",
      "rate_unit": "dollars / day",
      "adjustment_factor": 1.0
    },
    {
      "name": "tuos_energy",
      "charge_type": "SingleRateTariff",
      "rate": 0.011,
      "consumption_unit": "kWh",
      "rate_unit": "dollars / kWh",
      "adjustment_factor": 1.005

    },
    {
      "name": "ICC11B_energy",
      "charge_type": "SingleRateTariff",
      "rate": 0.0021,
      "consumption_unit": "kWh",
      "rate_unit": "dollars / kWh",
      "adjustment_factor": 1.0
    },
    {
      "name": "ICC11B_demand",
      "charge_type": "DemandTariff",
      "consumption_unit": "kVA",
      "rate": 0.850,
      "frequency_applied": "month",
      "rate_unit": "dollars / kVA / month",
      "adjustment_factor": 1.0
    },
    {
      "name": "ICC11B_location",
      "charge_type": "DemandTariff",
      "consumption_unit": "kW",
      "rate": 1.190,
      "frequency_applied": "month",
      "rate_unit": "dollars / kW / month",
      "adjustment_factor": 1.0
    },
    {
      "name": "duos_capacity",
      "charge_type": "CapacityTariff",
      "consumption_unit": "kVA",
      "capacity": 10000.0,
      "rate": 0.400,
      "frequency_applied": "month",
      "rate_unit": "dollars / kVA / month",
      "adjustment_factor": 1.0
    },
    {
      "name": "aemo_market_energy_fee",
      "charge_type": "SingleRateTariff",
      "rate": 0.00055,
      "consumption_unit": "kWh",
      "rate_unit": "dollars / kWh",
      "adjustment_factor": 1.005
    },
    {
      "name": "aemo_market_daily_fee",
      "charge_type": "ConnectionTariff",
      "rate": 0.003700,
      "consumption_unit": "day",
      "frequency_applied": "day",
      "rate_unit": "dollars / day",
      "adjustment_factor": 1.0
    },
    {
      "name": "aemo_market_ancillary_fee",
      "charge_type": "SingleRateTariff",
      "rate": 0.00121,
      "consumption_unit": "kWh",
      "rate_unit": "dollars / kWh",
      "adjustment_factor": 1.005
    },
    {
      "name": "metering_charge",
      "charge_type": "ConnectionTariff",
      "rate": 100.0,
      "consumption_unit": "month",
      "frequency_applied": "month",
      "rate_unit": "dollars / month",
      "adjustment_factor": 1.0
    },
  ]
}

Under development

  • units handling

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ts_tariffs-3.0.1.tar.gz (19.9 kB view hashes)

Uploaded Source

Built Distribution

ts_tariffs-3.0.1-py3-none-any.whl (22.6 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page