Time of use pricing

More Insight into Electricity Cost Calculations
For those of you interested, I have been analyzing the database of US electric rates to learn all the possible cost calculation variants. To build a robust calculator, and one that can do comparisons, it’s important to build a single set of data structures that support all the possible calculations rather than doing 10 different variants of data structures for each flavor of calculation. That said, the sheer number of rate plans makes it hard to divine all the possible flavors of calculation and screen out non-existent combinations. I have finally spend some time unpacking/unrolling the pricing rate structure in the OpenEI database.

Here’s a glossary of the cost equation parameters.

  • rate - the $ cost per “unit” for electricity. Every time-of-use period and tier within a time-of-use period has a rate and a unit (almost). Residential rates in the database ranges from 0 to 0.81045 (81 cents).

  • unit - the measure that is priced. In most rates the unit is kWh, though my forensic analysis reveals units of “kWh Daily”, “kWh/kW”, “kWh” NA, and no units whatsoever. The “kWh Daily” has special meaning - it means that tiering thresholds are based on total daily usage, not per billing period like most.

  • adj - adjustments - a rate typically subtracted or added to the pricing ‘rate’. Adjustments range from -0.4624 to 0.342713

  • sell - sell is the rate that the utility pays you back for energy you produce. Rates with adjustments are applied to the “from grid” hourly data. Sell pricing is applied to “to grid” hourly data. Just to be clear, each hour can only have either a “from grid” or “to grid” net, not both. So the price used in the hourly calculation is different based on the sign of net energy usage. Sell rates range from 0 to 0.17244

  • ToU - Time-of-use period - this value isn’t directly in the database, but implicit in it’s structure. The database has a list of ToU periods, each with their own entries, which can be a simple rate or a set of tiers. Every rate in the database has at least one ToU. simple non-time-varying rates are just a single ToU. The number of ToU periods ranges from 1 to 9.

  • tier - tier level - this value isn’t directly in the database, but implicit in it’s structure. Tiers are implied if a pricing table in a specific ToU entry has more than one row. A tier will have pricing info (“rate”, “unit”, possibly also “adj” and “sell”). Tiers will also have a “max” that defines up to what energy usage, per day or per billing period based on the unit, that price is applicable. Above that max, pricing moves to the next tier. Rate tiers range from 1 (basic rate, no max) to 5.

  • max - is the usage threshold to move to the next rate tier for calculation. ‘max’ is compared against the running total for the day or billing period for that specific ToU period.

Of the 832 rate plans I’m working with in the OpenEI database, the distribution of combinations of parameters available are below. I’m suspect of a few of them.

  • 1 max without any tiers
  • 3 rate & adj without any unit
  • 13 rate without any unit

Given that I’m going to need to reorganize the pricing tables to make them more editable, my plan is fill in all the parameters in the database and just apply the single “most complex” calculation. That means that I need to:

  • Convert all cases of non-tiered pricing to a single tier with a very large max
  • Fill in every row without an adjustment value with an adjustment of 0
  • Fill in every row without a sell price with a sell price of (rate - adj), because no sell price means that the sell price is really the same as the buy price.

Once I do that I can use a single calculation for all rates.