8000 Only query emeter on update if feature is supported · python-kasa/python-kasa@ea9e997 · GitHub
[go: up one dir, main page]

Skip to content

Commit ea9e997

Browse files
committed
Only query emeter on update if feature is supported
1 parent a926ff5 commit ea9e997

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed

kasa/smartdevice.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -281,8 +281,11 @@ async def _query_helper(
281281
@requires_update
282282
def has_emeter(self) -> bool:
283283
"""Return True if device has an energy meter."""
284-
sys_info = self.sys_info
285-
features = sys_info["feature"].split(":")
284+
return SmartDevice._has_emeter(self.sys_info)
285+
286+
@staticmethod
287+
def _has_emeter(sys_info: Dict[str, Any]) -> bool:
288+
features = sys_info.get("feature", "").split(":")
286289
return "ENE" in features
287290

288291
async def get_sys_info(self) -> Dict[str, Any]:
@@ -294,13 +297,19 @@ async def update(self):
294297
295298
Needed for methods that are decorated with `requires_update`.
296299
"""
297-
req = {}
298-
req.update(self._create_request("system", "get_sysinfo"))
300+
update_response = {}
301+
update_response.update(
302+
await self.protocol.query(
303+
self.host, self._create_request("system", "get_sysinfo")
304+
)
305+
)
306+
307+
if SmartDevice._has_emeter(update_response):
308+
update_response.update(
309+
await self.protocol.query(self.host, self._create_emeter_request())
310+
)
299311

300-
# Check for emeter if we were never updated, or if the device has emeter
301-
if self._last_update is None or self.has_emeter:
302-
req.update(self._create_emeter_request())
303-
self._last_update = await self.protocol.query(self.host, req)
312+
self._last_update = update_response
304313
# TODO: keep accessible for tests
305314
self._sys_info = self._last_update["system"]["get_sysinfo"]
306315

kasa/tests/test_readme_examples.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ def test_bulb_examples(mocker):
1818
def test_smartdevice_examples(mocker):
1919
"""Use HS110 for emeter examples."""
2020
p = get_device_for_file("HS110(EU)_1.0_real.json")
21+
has_emeter = p.has_emeter
2122
mocker.patch("kasa.smartdevice.SmartDevice", return_value=p)
2223
mocker.patch("kasa.smartdevice.SmartDevice.update")
24+
mocker.patch("kasa.smartdevice.SmartDevice._has_emeter", return_value=has_emeter)
2325
res = xdoctest.doctest_module("kasa.smartdevice", "all")
2426
assert not res["failed"]
2527

0 commit comments

Comments
 (0)
0