133 lines
4.5 KiB
Python
133 lines
4.5 KiB
Python
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()
|