Refine location
This commit is contained in:
132
dockerfiles/dataExporter/code/awinlib/tapo.py
Normal file
132
dockerfiles/dataExporter/code/awinlib/tapo.py
Normal file
@@ -0,0 +1,132 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user