diff --git a/homeassistant/components/utility_meter/const.py b/homeassistant/components/utility_meter/const.py index 7b55ec4dcd0..39fd952327b 100644 --- a/homeassistant/components/utility_meter/const.py +++ b/homeassistant/components/utility_meter/const.py @@ -1,6 +1,7 @@ """Constants for the utility meter component.""" DOMAIN = "utility_meter" +QUARTER_HOURLY = "quarter-hourly" HOURLY = "hourly" DAILY = "daily" WEEKLY = "weekly" @@ -9,7 +10,16 @@ BIMONTHLY = "bimonthly" QUARTERLY = "quarterly" YEARLY = "yearly" -METER_TYPES = [HOURLY, DAILY, WEEKLY, MONTHLY, BIMONTHLY, QUARTERLY, YEARLY] +METER_TYPES = [ + QUARTER_HOURLY, + 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 e365e77071c..9a4ed9e7782 100644 --- a/homeassistant/components/utility_meter/sensor.py +++ b/homeassistant/components/utility_meter/sensor.py @@ -36,6 +36,7 @@ from .const import ( DATA_UTILITY, HOURLY, MONTHLY, + QUARTER_HOURLY, QUARTERLY, SERVICE_CALIBRATE_METER, SIGNAL_RESET_METER, @@ -241,7 +242,16 @@ class UtilityMeterSensor(RestoreEntity): """Handle entity which will be added.""" await super().async_added_to_hass() - if self._period == HOURLY: + if self._period == QUARTER_HOURLY: + for quarter in range(4): + async_track_time_change( + self.hass, + self._async_reset_meter, + minute=(quarter * 15) + + self._period_offset.seconds % (15 * 60) // 60, + second=self._period_offset.seconds % 60, + ) + elif self._period == HOURLY: 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 6a2de3a1cd0..2856a63b4f5 100644 --- a/tests/components/utility_meter/test_sensor.py +++ b/tests/components/utility_meter/test_sensor.py @@ -264,6 +264,34 @@ async def _test_self_reset(hass, config, start_time, expect_reset=True): assert state.state == "5" +async def test_self_reset_quarter_hourly(hass, legacy_patchable_time): + """Test quarter-hourly reset of meter.""" + await _test_self_reset( + hass, gen_config("quarter-hourly"), "2017-12-31T23:59:00.000000+00:00" + ) + + +async def test_self_reset_quarter_hourly_first_quarter(hass, legacy_patchable_time): + """Test quarter-hourly reset of meter.""" + await _test_self_reset( + hass, gen_config("quarter-hourly"), "2017-12-31T23:14:00.000000+00:00" + ) + + +async def test_self_reset_quarter_hourly_second_quarter(hass, legacy_patchable_time): + """Test quarter-hourly reset of meter.""" + await _test_self_reset( + hass, gen_config("quarter-hourly"), "2017-12-31T23:29:00.000000+00:00" + ) + + +async def test_self_reset_quarter_hourly_third_quarter(hass, legacy_patchable_time): + """Test quarter-hourly reset of meter.""" + await _test_self_reset( + hass, gen_config("quarter-hourly"), "2017-12-31T23:44:00.000000+00:00" + ) + + async def test_self_reset_hourly(hass, legacy_patchable_time): """Test hourly reset of meter.""" await _test_self_reset(