diff --git a/homeassistant/components/utility_meter/const.py b/homeassistant/components/utility_meter/const.py index 87721dfbf81..23d39204f9c 100644 --- a/homeassistant/components/utility_meter/const.py +++ b/homeassistant/components/utility_meter/const.py @@ -5,9 +5,10 @@ HOURLY = "hourly" DAILY = "daily" WEEKLY = "weekly" MONTHLY = "monthly" +QUARTERLY = "quarterly" YEARLY = "yearly" -METER_TYPES = [HOURLY, DAILY, WEEKLY, MONTHLY, YEARLY] +METER_TYPES = [HOURLY, DAILY, WEEKLY, MONTHLY, QUARTERLY, YEARLY] DATA_UTILITY = "utility_meter_data" diff --git a/homeassistant/components/utility_meter/sensor.py b/homeassistant/components/utility_meter/sensor.py index 1ad4300b28b..41fe2cbcc0a 100644 --- a/homeassistant/components/utility_meter/sensor.py +++ b/homeassistant/components/utility_meter/sensor.py @@ -25,6 +25,7 @@ from .const import ( DAILY, WEEKLY, MONTHLY, + QUARTERLY, YEARLY, CONF_SOURCE_SENSOR, CONF_METER_TYPE, @@ -184,6 +185,12 @@ class UtilityMeterSensor(RestoreEntity): and now != date(now.year, now.month, 1) + self._period_offset ): return + if ( + self._period == QUARTERLY + and now + != date(now.year, (((now.month - 1) // 3) * 3 + 1), 1) + self._period_offset + ): + return if self._period == YEARLY and now != date(now.year, 1, 1) + self._period_offset: return await self.async_reset_meter(self._tariff_entity) @@ -209,7 +216,7 @@ class UtilityMeterSensor(RestoreEntity): minute=self._period_offset.seconds // 60, second=self._period_offset.seconds % 60, ) - elif self._period in [DAILY, WEEKLY, MONTHLY, YEARLY]: + elif self._period in [DAILY, WEEKLY, MONTHLY, 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 1bdaa01c2e6..7bf10875b77 100644 --- a/tests/components/utility_meter/test_sensor.py +++ b/tests/components/utility_meter/test_sensor.py @@ -240,6 +240,13 @@ async def test_self_reset_monthly(hass): ) +async def test_self_reset_quarterly(hass): + """Test quarterly reset of meter.""" + await _test_self_reset( + hass, gen_config("quarterly"), "2017-03-31T23:59:00.000000+00:00" + ) + + async def test_self_reset_yearly(hass): """Test yearly reset of meter.""" await _test_self_reset(