Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Don't create certain start.ca sensors for unlimited plans #98525

Merged
merged 1 commit into from Aug 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
20 changes: 11 additions & 9 deletions homeassistant/components/startca/sensor.py
Expand Up @@ -157,6 +157,13 @@ async def async_setup_platform(

name = config[CONF_NAME]
monitored_variables = config[CONF_MONITORED_VARIABLES]
if bandwidthcap <= 0:
monitored_variables = list(
filter(
lambda itm: itm not in {"limit", "usage", "used_remaining"},
monitored_variables,
)
)
entities = [
StartcaSensor(ts_data, name, description)
for description in SENSOR_TYPES
Expand Down Expand Up @@ -193,11 +200,9 @@ def __init__(self, loop, websession, api_key, bandwidth_cap):
self.api_key = api_key
self.bandwidth_cap = bandwidth_cap
# Set unlimited users to infinite, otherwise the cap.
self.data = (
{"limit": self.bandwidth_cap}
if self.bandwidth_cap > 0
else {"limit": float("inf")}
)
self.data = {}
if self.bandwidth_cap > 0:
self.data["limit"] = self.bandwidth_cap

@staticmethod
def bytes_to_gb(value):
Expand Down Expand Up @@ -232,11 +237,9 @@ async def async_update(self):
total_dl = self.bytes_to_gb(xml_data["usage"]["total"]["download"])
total_ul = self.bytes_to_gb(xml_data["usage"]["total"]["upload"])

limit = self.data["limit"]
if self.bandwidth_cap > 0:
self.data["usage"] = 100 * used_dl / self.bandwidth_cap
else:
self.data["usage"] = 0
self.data["used_remaining"] = self.data["limit"] - used_dl
self.data["usage_gb"] = used_dl
self.data["used_download"] = used_dl
self.data["used_upload"] = used_ul
Expand All @@ -246,6 +249,5 @@ async def async_update(self):
self.data["grace_total"] = grace_dl + grace_ul
self.data["total_download"] = total_dl
self.data["total_upload"] = total_ul
self.data["used_remaining"] = limit - used_dl

return True
15 changes: 4 additions & 11 deletions tests/components/startca/test_sensor.py
Expand Up @@ -157,18 +157,15 @@ async def test_unlimited_setup(
await async_setup_component(hass, "sensor", {"sensor": config})
await hass.async_block_till_done()

state = hass.states.get("sensor.start_ca_usage_ratio")
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == PERCENTAGE
assert state.state == "0"
# These sensors should not be created for unlimited setups
assert hass.states.get("sensor.start_ca_usage_ratio") is None
assert hass.states.get("sensor.start_ca_data_limit") is None
assert hass.states.get("sensor.start_ca_remaining") is None

state = hass.states.get("sensor.start_ca_usage")
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfInformation.GIGABYTES
assert state.state == "0.0"

state = hass.states.get("sensor.start_ca_data_limit")
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfInformation.GIGABYTES
assert state.state == "inf"

state = hass.states.get("sensor.start_ca_used_download")
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfInformation.GIGABYTES
assert state.state == "0.0"
Expand Down Expand Up @@ -201,10 +198,6 @@ async def test_unlimited_setup(
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfInformation.GIGABYTES
assert state.state == "6.48"

state = hass.states.get("sensor.start_ca_remaining")
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfInformation.GIGABYTES
assert state.state == "inf"


async def test_bad_return_code(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
Expand Down