From e4e721bd4f220c5de776934ef87043d30874d715 Mon Sep 17 00:00:00 2001 From: Eduard Carreras Date: Mon, 27 Mar 2017 09:12:40 +0200 Subject: [PATCH 1/2] Add special key to disable dragger --- enerdata/profiles/__init__.py | 2 ++ spec/profiles/dragger_spec.py | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/enerdata/profiles/__init__.py b/enerdata/profiles/__init__.py index 9571d34..16e0251 100644 --- a/enerdata/profiles/__init__.py +++ b/enerdata/profiles/__init__.py @@ -8,6 +8,8 @@ class Dragger(Counter): def drag(self, number, key='default'): + if key == 'disabled': + return number if number == 0 and abs(self[key]) == Decimal('0.5'): # Avoid oscillation between -1 and 1 and dragging 0.5 and -0.5 return number diff --git a/spec/profiles/dragger_spec.py b/spec/profiles/dragger_spec.py index 059e0cc..ee645d3 100644 --- a/spec/profiles/dragger_spec.py +++ b/spec/profiles/dragger_spec.py @@ -34,6 +34,11 @@ expect(aprox).to(be(6)) expect(d['key2']).to(equal(Decimal('-0.5'))) + with it('has a special key "disabled" which returns the number'): + d = Dragger() + aprox = d.drag(1.123456789, key='disabled') + expect(aprox).to(equal(1.123456789)) + with context('Has to use the drag of antecesor drag'): From 3016131b1829157a0f759fef5ca0cb3028e26c42 Mon Sep 17 00:00:00 2001 From: Eduard Carreras Date: Tue, 28 Mar 2017 16:29:36 +0200 Subject: [PATCH 2/2] Support for disabled key in profile --- enerdata/profiles/profile.py | 6 +++--- spec/profiles/profile_spec.py | 38 +++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/enerdata/profiles/profile.py b/enerdata/profiles/profile.py index d452090..6997e06 100644 --- a/enerdata/profiles/profile.py +++ b/enerdata/profiles/profile.py @@ -135,10 +135,10 @@ def profile(self, tariff, measures, drag_method='hour'): dragger = Dragger() for hour, cof in self.coefficient.get_range(start, end): period = tariff.get_period_by_date(hour) - if drag_method == 'hour': - dp = 'hour' - else: + if drag_method == 'period': dp = period.code + else: + dp = drag_method d = hour.date() if hour.hour == 0: d -= timedelta(days=1) diff --git a/spec/profiles/profile_spec.py b/spec/profiles/profile_spec.py index 5b48d09..1284606 100644 --- a/spec/profiles/profile_spec.py +++ b/spec/profiles/profile_spec.py @@ -198,6 +198,44 @@ def get_range_error(): consum = sum([i[1]['aprox'] for i in prof]) expect(consum).to(equal(103 + 22 + 130 + 20)) + with it('the total energy must be the sum of the profiled energy disabling drag'): + c = Coefficients(REEProfile.get(2014, 10)) + profiler = Profiler(c) + measures = [ + EnergyMeasure( + date(2014, 9, 30), + TariffPeriod('P1', 'te'), 307, consumption=145 + ), + EnergyMeasure( + date(2014, 9, 30), + TariffPeriod('P2', 'te'), 108, consumption=10 + ), + EnergyMeasure( + date(2014, 10, 15), + TariffPeriod('P1', 'te'), 410, consumption=103 + ), + EnergyMeasure( + date(2014, 10, 15), + TariffPeriod('P2', 'te'), 130, consumption=22 + ), + EnergyMeasure( + date(2014, 10, 31), + TariffPeriod('P1', 'te'), 540, consumption=130 + ), + EnergyMeasure( + date(2014, 10, 31), + TariffPeriod('P2', 'te'), 150, consumption=20 + ) + ] + t = T20DHA() + t.cof = 'A' + prof = list(profiler.profile(t, measures, drag_method='disabled')) + expect(len(prof)).to(equal((31 * 24) + 1)) + for i in prof: + expect(i[1]['aprox']).to(be_a(float)) + consum = sum([i[1]['aprox'] for i in prof]) + expect(round(consum, 12)).to(equal(103 + 22 + 130 + 20)) + with it('should be the same per period if drag per period is used'): c = Coefficients()