eemeter
An open source Python package for implementing and developing standard methods for calculating normalized metered energy consumption and avoided energy use.
https://github.com/openeemeter/eemeter
Category: Energy Systems
Sub Category: Building Energy Monitoring
Keywords
building-energy efficiency energy energy-data energy-efficiency
Keywords from Contributors
weather weather-data weather-station methods dataframe climate-data notebook
Last synced: about 13 hours ago
JSON representation
Repository metadata
An open source python package for implementing and developing standard methods for calculating normalized metered energy consumption and avoided energy use.
- Host: GitHub
- URL: https://github.com/openeemeter/eemeter
- Owner: opendsm
- License: apache-2.0
- Created: 2016-08-19T23:54:36.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2025-04-22T20:41:02.000Z (6 days ago)
- Last Synced: 2025-04-26T00:02:14.509Z (3 days ago)
- Topics: building-energy, efficiency, energy, energy-data, energy-efficiency
- Language: Python
- Homepage: https://opendsm.github.io/opendsm/
- Size: 115 MB
- Stars: 226
- Watchers: 20
- Forks: 70
- Open Issues: 6
- Releases: 13
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
README.md
OpenDSM: Tools for calculating metered energy savings
OpenDSM (formerly OpenEEmeter) — an open-source library used to measure the impacts
of demand-side programs by using historical data to fit models and then create
predictions (counterfactuals) to compare to post-intervention, observed energy usage.
Background - Why use OpenDSM
Energy efficiency programs have traditionally focused on addressing long-term load growth
and reducing customer energy bills rather than serving as reliable grid resources.
However, as utilities work to decarbonize power generation, buildings, and transportation,
demand-side programs (e.g. energy efficiency, load shifting, electrification, and demand
response programs) must evolve into dependable, scalable grid assets. Ultimately,
decarbonizing the power grid will require both supply and demand-side solutions. While
supply-side production is easily quantified, measuring the impacts of demand-side programs
has historically been challenging due to inconsistent and opaque measurement methodologies.
OpenDSM solves these problems with accurate, efficient, and transparent models designed to
measure demand-side program impacts. OpenDSM gives all stakeholders full visibility and
confidence in the results.
OpenDSM builds upon the shoulders of OpenEEmeter and the CalTRACK Methods which themselves
are built upon the foundational work of the Princeton Scorekeeping Method (PRISM 1986)
for the daily and billing models and Lawrence Berkeley National Laboratory's Time-of-Week
and Temperature Model (TOWT 2011) for the hourly energy efficiency and demand response models.
OpenDSM models have been proven to meet or exceed the predictive capablity of the
aforementioned models. These models adhere to a statistical approach, as opposed to an
engineering approach, so that these models can be efficiently run on millions of meters at
a time, while still providing accurate predictions.
Using default settings in OpenDSM will provide accurate and stable model predictions
suitable for savings measurements from demand side interventions. Settings can be modified
and sufficiency requirements can be bypassed for research and development purposes; however,
the outputs of such models are no longer OpenDSM compliant measurements as the modifications
mean that these models are no longer verified and approved by the OpenDSM Working Group.
Installation
OpenDSM is a python package and can be installed with pip.
$ pip install opendsm
Features
-
Models:
- Energy Efficiency Daily Model
- Energy Efficiency Billing (Monthly) Model
- Energy Efficiency Non-Solar Hourly Model
- Energy Efficiency Solar Hourly Model
- Demand Response Hourly Model
-
Flexible sources of temperature data. See EEweather.
-
Data sufficiency checking
-
Model serialization
-
First-class warnings reporting
Documentation
Documenation for this library can be found here.
Additionally, within the repository, the scripts directory contains Jupyter Notebooks, which
function as interactive examples.
Future Development
The OpenDSM project growth goals fall into two categories:
- Community goals - we want help our community thrive and continue to grow.
- Technical goals - we want to keep building the library in new ways that make it
as easy as possible to use.
Community goals
- Improve repository structure, architecture, and API
The first step of being able to contribute to a project is to understand how the repository
is laid out and how OpenDSM is architected. We have made giant steps in this area as of late,
but there is additional organizational work to be done. This will continue to be an ongoing
area of work.
- Improve project documentation and tutorials
A number of users have expressed how hard it is to get started when tutorials are
out of date. We will continue to dedicate time and energy to help create high quality
tutorials that build upon the API documentation and existing tutorials. We hope that the
community will contribute to this effort.
- Make it easier to contribute
As our user base grows, the need and desire for users to contribute back to the library
also grows, and we want to make this as seamless as possible. This means writing and
maintaining contribution guides, and creating checklists to guide users through the
process.
Technical goals
- Revert the billing model logic back to its previously approved state
When OpenEEmeter 4.0 was released, an unintentional change was made to the billing model.
The billing model currently inherits from the daily model so a change to the daily model
currently necessitates a change in the billing model. The previously approved method was
to put the billing usage directly into the daily model weighted by the number of days in
the billing period. During the daily model improvement efforts, the billing model was
mistakenly modified such that it averages usage across the billing period these averaged
days are input directly into the daily model as daily data. A working group is being
assembled to address this.
- Update the Demand Response (DR) model
In the most recent release, the hourly energy efficiency (EE) model has been entirely
changed and updated. Much like the billing model is to the daily model, the DR model is a
subset of the EE hourly model. Many of the improvements seen in the EE hourly model could
be realized in the DR model if it were finalized. It is currently in a functional state
within a branch, but its parameters have not been optimized rendering it unusable for
measurements. In the meantime, the existing DR model is still available.
- Develop and approve adaptive weighting for the hourly model
At present, the hourly model does not down weight or remove any outliers during the
fitting process. While this is still acceptable for measurement purposes, given that the
model still meets all sufficiency requirements; it could be improved. There currently
exists functionality within the settings to turn on adaptive daily weighting that would
serve to down weight days which are significant outliers when fitting the hourly model,
but it has not yet been tested at a population level.
- Reassess existing sufficiency and disqualification criteria
The existing sufficiency and disqualification criteria exist as conservative estimates
from OpenEEmeter and CalTRACK recommendations. There is almost certainly room for these
criteria to be revisited so that more meters would pass and be approved for measurement.
- Determine the sufficiency requirements of PV installation date in the hourly model
The hourly EE model currently has the capability of ingesting a PV installation date and
generating an additional feature that can much better represent a meter who installs a
solar PV system mid-baseline year. However, this feature currently is classified as
experimental and not allowed for official measurement because we have not quantified how
much data is required post-installation to be able to accurately predict the meter's
behavior in the reporting year.
- Improve the daily model
There are two potential areas of improvement of the daily model. First it could be extended
to allow additional sources of information, but this must carefully be considered as the
primary usage of the daily model is to be able to disaggregate heating and cooling usage.
The second area of improvement would be to allow an additional break point within both the
cooling and heating regions such that the model would be able to change slope. This should
likely still be limited such that the model's slope in each region is appropriately
constrained. A new smoothing function would also need to be developed.
- Integrate EEweather
EEweather is commonly used to obtain weather information to be used within OpenDSM. If it
were more tightly coupled, it would streamline the most standard use of OpenDSM. As an
example this could simplify several of the data classes such that the aggregation of
weather data would be done within EEweather instead of within data classes where it is a
more complex procedure
- Integrate GRIDmeter
GRIDmeter is frequently used after DR/EEmeter in order to correct models for external
population-level effects by using non-participant meters. Similarly to EEweather, this
process could be streamlines and made more cohesive by fully integrating it into OpenDSM.
- Organize and revise existing test suite
The existing testing suite is the last remaining vestige of the library prior to the
extensive reorganization and API changes made. It would be well served to update the
testing suite to make it easier for future contributors to know how and where they
should develop their tests for any new features or bugs found.
- Greater weather coverage
The weather station coverage in the EEweather package includes full coverage of US and
Australia, but with some technical work, it could be expanded to include greater, or
even worldwide coverage.
License
This project is licensed under Apache 2.0.
Other resources
- CONTRIBUTING: How to contribute to the project.
- MAINTAINERS: An ordered list of project maintainers.
- CHARTER: Open source project charter.
- CODE OF CONDUCT: Code of conduct for contributors.
Owner metadata
- Name: OpenDSM
- Login: opendsm
- Email: [email protected]
- Kind: organization
- Description: Collaboratively advancing the future of demand-side energy
- Website: https://lfenergy.org/projects/opendsm/
- Location:
- Twitter:
- Company:
- Icon url: https://avatars.githubusercontent.com/u/19336002?v=4
- Repositories: 3
- Last ynced at: 2025-02-04T14:43:20.546Z
- Profile URL: https://github.com/opendsm
GitHub Events
Total
- Create event: 14
- Issues event: 3
- Release event: 2
- Watch event: 2
- Delete event: 14
- Issue comment event: 12
- Push event: 42
- Pull request review event: 4
- Pull request event: 23
- Fork event: 2
Last Year
- Create event: 14
- Issues event: 3
- Release event: 2
- Watch event: 2
- Delete event: 14
- Issue comment event: 12
- Push event: 42
- Pull request review event: 4
- Pull request event: 23
- Fork event: 2
Committers metadata
Last synced: 3 months ago
Total Commits: 2,148
Total Committers: 44
Avg Commits per committer: 48.818
Development Distribution Score (DDS): 0.475
Commits in past year: 338
Committers in past year: 7
Avg Commits per committer in past year: 48.286
Development Distribution Score (DDS) in past year: 0.553
Name | Commits | |
---|---|---|
Phil Ngo | n****l@g****m | 1127 |
Jason Chulock | j****n@r****m | 205 |
Stephen Suffian | s****e@o****o | 118 |
travis-recurve | 1****e | 101 |
Tom Plagge | t****e@g****m | 97 |
Stephen Suffian | s****n@p****e | 71 |
pyup-bot | g****t@p****o | 62 |
hshaban | h****n@g****m | 49 |
Steve | s****e@r****m | 46 |
joydeep-recurve | j****p@r****m | 36 |
Tom Plagge | t****e@o****o | 34 |
toshi09 | t****s@g****m | 26 |
James Fenna | j****s@c****p | 24 |
ArminRecurve | A****n@r****m | 20 |
Marc-Antoine | m****c@M****l | 18 |
Eric Potash | e****c@k****t | 17 |
Michael Keasey | m****l@r****m | 15 |
Peter Olson | p****n@g****m | 12 |
Vikhyati Singh | v****i@o****o | 10 |
Mariano Teehan | m****o@r****m | 8 |
Dave Yeager | d****r@o****o | 6 |
Jeremy Wickersheimer | j****s@g****m | 5 |
Eric Dill | t****e@g****m | 4 |
Phillips | N****s@d****m | 4 |
Reetu Mutti | r****u@o****o | 3 |
Arpan Kotecha | a****a@g****m | 3 |
Joe Glass | j****z@g****m | 3 |
Phil Ngo | 1****e | 3 |
Sennott | T****t@d****m | 2 |
Juan-Pablo Velez | j****z@g****m | 2 |
and 14 more... |
Committer domains:
- openee.io: 6
- recurve.com: 6
- dnvgl.com: 2
- jamess-air.home: 1
- red-bean.com: 1
- takkaria.org: 1
- k2co3.net: 1
- carbon.coop: 1
- pyup.io: 1
- pm.me: 1
Issue and Pull Request metadata
Last synced: 3 months ago
Total issues: 47
Total pull requests: 497
Average time to close issues: 5 months
Average time to close pull requests: about 1 month
Total issue authors: 28
Total pull request authors: 33
Average comments per issue: 2.68
Average comments per pull request: 1.06
Merged pull request: 255
Bot issues: 0
Bot pull requests: 20
Past year issues: 7
Past year pull requests: 58
Past year average time to close issues: N/A
Past year average time to close pull requests: 9 days
Past year issue authors: 5
Past year pull request authors: 8
Past year average comments per issue: 2.29
Past year average comments per pull request: 0.03
Past year merged pull request: 40
Past year bot issues: 0
Past year bot pull requests: 7
Top Issue Authors
- philngo (9)
- khosravym (3)
- yurivict (3)
- jefffriesen (3)
- alihabibikhalaj (2)
- lb- (2)
- stvilla (2)
- Viktoriya-An (2)
- jfenna (2)
- matthewgee (1)
- sb-oeh (1)
- blipscomb9 (1)
- laurenjanicke (1)
- duncan-roe (1)
- jillradiantlabs (1)
Top Pull Request Authors
- pyup-bot (241)
- ssuffian (60)
- philngo (59)
- jason-recurve (31)
- dependabot[bot] (20)
- tplagge (17)
- toshi09 (13)
- hshaban (7)
- travis-recurve (4)
- floer32 (4)
- keasey-recurve (4)
- marcrecurve (3)
- peterbolson (3)
- khosravym (3)
- arpankotecha (3)
Top Issue Labels
- help wanted (1)
- good first issue (1)
Top Pull Request Labels
- dependencies (20)
Package metadata
- Total packages: 1
-
Total downloads:
- pypi: 29,354 last-month
- Total dependent packages: 1
- Total dependent repositories: 5
- Total versions: 169
- Total maintainers: 3
pypi.org: eemeter
Open Energy Efficiency Meter
- Homepage: http://github.com/openeemeter/eemeter
- Documentation: https://eemeter.readthedocs.io/
- Licenses: Apache 2.0
- Latest release: 4.1.1 (published 3 months ago)
- Last Synced: 2025-04-26T00:02:06.750Z (3 days ago)
- Versions: 169
- Dependent Packages: 1
- Dependent Repositories: 5
- Downloads: 29,354 Last month
-
Rankings:
- Downloads: 1.897%
- Dependent packages count: 3.244%
- Average: 4.498%
- Stargazers count: 5.003%
- Forks count: 5.604%
- Dependent repos count: 6.742%
- Maintainers (3)
Dependencies
- python 3.6.6 build
- eemeter_shell latest
- black ==18.6b4 develop
- coverage * develop
- jupyterlab * develop
- nbsphinx * develop
- pytest * develop
- pytest-cov * develop
- pytest-profiling * develop
- pytest-xdist * develop
- snapshottest ==0.6.0 develop
- sphinx * develop
- sphinx-autobuild * develop
- sphinxcontrib-spelling * develop
- tox * develop
- twine * develop
- typing * develop
- click ==7.0
- eeweather >=0.3.12
- matplotlib *
- pandas ==0.25.2
- scipy ==1.4.1
- sqlalchemy *
- statsmodels ==0.11.1
- 148 dependencies
- nbsphinx ==0.4.2
- sphinxcontrib-spelling ==4.2.1
Score: 19.518417662929533