diff --git a/kasa/smartstrip.py b/kasa/smartstrip.py index 222c73e45..866e57b79 100755 --- a/kasa/smartstrip.py +++ b/kasa/smartstrip.py @@ -6,6 +6,7 @@ from kasa.smartdevice import ( DeviceType, + EmeterStatus, SmartDevice, SmartDeviceException, requires_update, @@ -154,6 +155,35 @@ async def set_alias(self, alias: str) -> None: """ return await super().set_alias(alias) + @requires_update + async def get_emeter_realtime(self) -> EmeterStatus: + """Retrieve current energy readings.""" + if not self.has_emeter: + raise SmartDeviceException("Device has no emeter") + + plug_emeter = False + for plug in self.children: + if plug.has_emeter: + plug_emeter = True + + if not plug_emeter: + return EmeterStatus(await self._query_helper(self.emeter_type, "get_realtime")) + + emeter_rt: DefaultDict[int, float] = defaultdict(lambda: 0.0) + count = 0 + for plug in self.children: + if not plug.has_emeter: + continue + count += 1 + plug_emeter_rt = await plug.get_emeter_realtime() + for field, value in plug_emeter_rt.items(): + emeter_rt[field] += value + + # Voltage is averaged + emeter_rt['voltage_mv'] /= count + + return EmeterStatus(emeter_rt) + @requires_update async def get_emeter_daily( self, year: int = None, month: int = None, kwh: bool = True @@ -247,12 +277,6 @@ def led(self) -> bool: """ return False - @property # type: ignore - @requires_update - def has_emeter(self) -> bool: - """Children have no emeter to my knowledge.""" - return False - @property # type: ignore @requires_update def device_id(self) -> str: