Question-and-Answer Resource for the Building Energy Modeling Community
Get started with the Help page
Ask Your Question
2

life cycle cost for pvwatts generator and inverter

asked 2020-12-29 21:55:30 -0500

mattkoch's avatar

updated 2020-12-30 09:19:08 -0500

I am trying to add life cycle costs for various PV system components:

GeneratorPVWatts
ElectricLoadCenterInverterPVWatts
ElectricLoadCenterDistribution

such that, for example,

pv_inverter = model.getElectricLoadCenterInverterPVWattsByName(pv_inverter_name)
lcc_construction = OpenStudio::Model::LifeCycleCost.createLifeCycleCost("Construction Cost #{pv_inverter.name}",pv_inverter,construction_cost.to_f,cost_units.to_s,"Replacement",construction_repeat_period.to_i,years_from_start.to_i)

OpenStudio does not complain, but the resulting OSM file has no life cycle cost items.

I noticed that the BCL life cycle cost examples tend to be limited to construction, lighting and some HVAC components, so I suspect, life cycle cost cannot really be added to something like a ElectricLoadCenterInverterPVWatts or, by extension, GeneratorPVWatts, for example.

The "Add Simple PV" measure in BCL also adds cost directly to the IDF file, bypassing all OpenStudio life cycle cost methods, which further makes me believe that the OpenStudio methods for life cycle cost are insufficient?

I'd appreciate any insight. Thank you.

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
2

answered 2020-12-30 09:50:58 -0500

You're correct that the OpenStudio SDK currently (as of v3.1.0) does not support all the LifeCycleCost objects that are needed for a Life Cycle Cost Analysis (LCCA). The ones that are missing are the LifeCycleCostNonrecurringCosts and LifeCycleCostRecurringCosts, which you could open a feature request for on GitHub.

I've done several LCCAs with OpenStudio using the following workflow.

  1. A modified version of the SetLifecycleCostParameters. Note that there can only be one of these objects in an OpenStudio model.

  2. An eppy script that creates an IDF of the LifeCycleCostUsePriceEscalation, LifeCycleCostNonrecurringCosts, and LifeCycleCostRecurringCosts objects. The escalation comes from the EnergyPlus DataSets and the costs are read from a CSV.

  3. The Inject IDF Objects measure to add the objects from (2) to the EnergyPlus IDF prior to simulation by OpenStudio.

You could easily skip (2) and just create the IDF manually. I chose to write a script so the costs could be updated quickly. Here's what (1) looks like.

image description

image description

edit flag offensive delete link more

Comments

1

Thank you kindly Matthew. I was afraid it was so. It seems at almost every turn I get deceived by the promise of OpenStudio, only to discover that something is still missing. Thankfully, in this case at least, there is always an EnergyPlus measure to fill the gap. Any OpenStudio gig one does, one should plan time and a half at least in order to accommodate developing the scripts that will invariably be necessary. Thanks too for pointing out eppy. I have loosely read about it, but have not had time to develop any any sort of facility with it.

mattkoch's avatar mattkoch  ( 2020-12-30 10:32:03 -0500 )edit

Matthew, setting the (one instance of) life cycle cost parameters is straight forward, and I have an OS measure for that. But after looking into the AddSimplePvToShadingSurfacesByType EP measure, which not only adds a PV System directly to the IDF file, but also associated costs, I am confused. It appears as through these costs just "float" in the IDF file, without being associated with any particular PV System component? The only way to tell what the cost are is by their names. Maybe that is obvious, but this is revealing to me.

mattkoch's avatar mattkoch  ( 2020-12-31 15:02:46 -0500 )edit

Specifically, the

createLifeCycleCost (const std::string &name, const ModelObject &modelObject, double cost, const std::string &costUnits, const std::string &category, int repeatPeriodYears=0, int yearsFromStart=0)

method for an OpenStudio seems to call for a modelObject, which I thought would have to be a

ElectricLoadCenterInverterPVWatts

or

GeneratorPVWatts

or some such. Now it seems I can just throw in life cycle costs any way I want and just make sure I identify them by their names? What then is the point of specifying the modelObject above?

mattkoch's avatar mattkoch  ( 2020-12-31 15:06:14 -0500 )edit

@mattkoch it appears that the OpenStudio class LifeCycleCost is a catchall for EnergyPlus classes, so perhaps my answer above wasn't completely correct. I suggest trying to use it instead of the EnergyPlus classes for non/recurring costs and see what happens.

MatthewSteen's avatar MatthewSteen  ( 2021-01-01 16:20:06 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Careers

Question Tools

1 follower

Stats

Asked: 2020-12-29 21:55:30 -0500

Seen: 117 times

Last updated: Dec 30 '20