Add quarter-hour period feature for utility_meter component (#41999)

* add support for quarter-hourly intervals to utility meter (15 minutes)

* add tests

* add test for every quarter

* Update homeassistant/components/utility_meter/sensor.py

Co-authored-by: springstan <46536646+springstan@users.noreply.github.com>

Co-authored-by: springstan <46536646+springstan@users.noreply.github.com>
This commit is contained in:
Thomas Delaet 2020-11-14 11:53:59 +01:00 committed by GitHub
parent bf955f3eb8
commit 293f8eaaf3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 50 additions and 2 deletions

View File

@ -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"

View File

@ -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,

View File

@ -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(