Add bimonthly period feature for utility_meter component (#39931)

This commit is contained in:
Hareesh M U 2020-09-15 21:22:19 +05:30 committed by GitHub
parent 56ba4907e1
commit c8d5500441
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 2 deletions

View File

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

View File

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

View File

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