From c8d550044121ebda46bed76b3edb1eb92623f58b Mon Sep 17 00:00:00 2001 From: Hareesh M U Date: Tue, 15 Sep 2020 21:22:19 +0530 Subject: [PATCH] Add bimonthly period feature for utility_meter component (#39931) --- homeassistant/components/utility_meter/const.py | 3 ++- .../components/utility_meter/sensor.py | 9 ++++++++- tests/components/utility_meter/test_sensor.py | 17 +++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/utility_meter/const.py b/homeassistant/components/utility_meter/const.py index 5be7dcf9b69..7b55ec4dcd0 100644 --- a/homeassistant/components/utility_meter/const.py +++ b/homeassistant/components/utility_meter/const.py @@ -5,10 +5,11 @@ HOURLY = "hourly" DAILY = "daily" WEEKLY = "weekly" MONTHLY = "monthly" +BIMONTHLY = "bimonthly" QUARTERLY = "quarterly" YEARLY = "yearly" -METER_TYPES = [HOURLY, DAILY, WEEKLY, MONTHLY, QUARTERLY, YEARLY] +METER_TYPES = [HOURLY, DAILY, WEEKLY, MONTHLY, BIMONTHLY, QUARTERLY, YEARLY] DATA_UTILITY = "utility_meter_data" diff --git a/homeassistant/components/utility_meter/sensor.py b/homeassistant/components/utility_meter/sensor.py index 8372d8e6b22..54f93422abd 100644 --- a/homeassistant/components/utility_meter/sensor.py +++ b/homeassistant/components/utility_meter/sensor.py @@ -24,6 +24,7 @@ import homeassistant.util.dt as dt_util from .const import ( ATTR_VALUE, + BIMONTHLY, CONF_METER, CONF_METER_NET_CONSUMPTION, CONF_METER_OFFSET, @@ -204,6 +205,12 @@ class UtilityMeterSensor(RestoreEntity): and now != date(now.year, now.month, 1) + self._period_offset ): return + if ( + self._period == BIMONTHLY + and now + != date(now.year, (((now.month - 1) // 2) * 2 + 1), 1) + self._period_offset + ): + return if ( self._period == QUARTERLY and now @@ -241,7 +248,7 @@ class UtilityMeterSensor(RestoreEntity): minute=self._period_offset.seconds // 60, second=self._period_offset.seconds % 60, ) - elif self._period in [DAILY, WEEKLY, MONTHLY, QUARTERLY, YEARLY]: + elif self._period in [DAILY, WEEKLY, MONTHLY, BIMONTHLY, QUARTERLY, YEARLY]: async_track_time_change( self.hass, self._async_reset_meter, diff --git a/tests/components/utility_meter/test_sensor.py b/tests/components/utility_meter/test_sensor.py index c1613c53a20..af2bbdbf6a2 100644 --- a/tests/components/utility_meter/test_sensor.py +++ b/tests/components/utility_meter/test_sensor.py @@ -288,6 +288,23 @@ async def test_self_reset_monthly(hass, legacy_patchable_time): ) +async def test_self_reset_bimonthly(hass, legacy_patchable_time): + """Test bimonthly reset of meter occurs on even months.""" + await _test_self_reset( + hass, gen_config("bimonthly"), "2017-12-31T23:59:00.000000+00:00" + ) + + +async def test_self_no_reset_bimonthly(hass, legacy_patchable_time): + """Test bimonthly reset of meter does not occur on odd months.""" + await _test_self_reset( + hass, + gen_config("bimonthly"), + "2018-01-01T23:59:00.000000+00:00", + expect_reset=False, + ) + + async def test_self_reset_quarterly(hass, legacy_patchable_time): """Test quarterly reset of meter.""" await _test_self_reset(