from kasa import Discover from kasa.exceptions import KasaException from . import KasaSmartPowerStrip from .utilities import log as log class KasaPowerStrip: def __init__(self, areaName, ip): self.areaName = areaName self.ip = ip try: self.powerStrip = KasaSmartPowerStrip.SmartPowerStrip(ip) except: self.powerStrip = None def collectData(self): dataDict = {} devSysInfo = self.powerStrip.get_system_info() for c in devSysInfo['system']['get_sysinfo']['children']: try: cid = int(c['id']) + 1 except: continue # aliasName = c['alias'].encode('latin1').decode('UTF-8') gaugeName_Current_ma = f"{self.areaName}_{cid}_current_ma" gaugeName_Current_ma_desc = f"Current(milliampere) of {self.areaName}:{cid}" gaugeName_Voltage_mv = f"{self.areaName}_{cid}_voltage_mv" gaugeName_Voltage_mv_desc = f"Voltage(millivolt) of {self.areaName}:{cid}" gaugeName_Power_mw = f"{self.areaName}_{cid}_power_mw" gaugeName_Power_mw_desc = f"Power(milliwatt) of {self.areaName}:{cid}" gaugeName_TotalWh = f"{self.areaName}_{cid}_total_wh" gaugeName_TotalWh_desc = f"Total watt-hour of {self.areaName}:{cid}" ## Get Data realtimeInfo = self.powerStrip.get_realtime_energy_info(plug_num=cid) realTime_current_ma = realtimeInfo.get("current_ma", 0) realTime_voltage_mv = realtimeInfo.get("voltage_mv", 0) realTime_power_mw = realtimeInfo.get("power_mw", 0) realTime_total_wh = realtimeInfo.get("total_wh", 0) # log(f"Set {gaugeName_Current_ma}: {realTime_current_ma}") # log(f"Set {gaugeName_Voltage_mv}: {realTime_voltage_mv}") # log(f"Set {gaugeName_Power_mw}: {realTime_power_mw}") # log(f"Set {gaugeName_TotalWh}: {realTime_total_wh}") dataDict[cid] = { gaugeName_Current_ma: { "description": gaugeName_Current_ma_desc, "value": realTime_current_ma, }, gaugeName_Voltage_mv: { "description": gaugeName_Voltage_mv_desc, "value": realTime_voltage_mv, }, gaugeName_Power_mw: { "description": gaugeName_Power_mw_desc, "value": realTime_power_mw, }, gaugeName_TotalWh: { "description": gaugeName_TotalWh_desc, "value": realTime_total_wh, } } return dataDict class TplinkT315: def __init__(self, ip, username, password, devName): self.ip = ip self.username = username self.password = password self.devName = devName self.hubDev = None self.t315Dev = None async def connect(self): try: self.hubDev = await Discover.discover_single(self.ip, username=self.username, password=self.password) await self.hubDev.update() except KasaException as e: self.hubDev = None log(f"Hub Error: {e}") return False try: self.t315Dev = self.hubDev.get_plug_by_name(self.devName) await self.t315Dev.update() except KasaException as e: self.t315Dev = None log(f"Device Error: {e}") return False return True async def getTemperature(self): temperatureValue = await self.getProperty("temperature") if temperatureValue is None: log("temperatureValue is None") return None temperatureValue = float(temperatureValue) return temperatureValue async def getHumidity(self): humidityValue = await self.getProperty("humidity") if humidityValue is None: log("humidityValue is None") return None humidityValue = float(humidityValue) return humidityValue async def getProperty(self, propName): if self.t315Dev is None: return None await self.hubDev.update() await self.t315Dev.update() featuresOfTempDev = self.t315Dev.features if propName not in featuresOfTempDev: return None return featuresOfTempDev[propName].value async def disconnect(self): if self.hubDev is None: return await self.hubDev.disconnect()