2026-04-24 FE Backup

This commit is contained in:
2026-04-24 12:37:16 +00:00
parent ace79b82f7
commit 0ba11a23b8
3705 changed files with 1240402 additions and 0 deletions

View File

@@ -0,0 +1,170 @@
import time
from datetime import datetime
Logger = system.util.getLogger("reports.MBR.totalpower")
def getTagPaths(location=None):
"""
Get all the relvant tagpaths needed for the historian query
"""
baseTagPaths = reports.MBR.common.util.getBaseTagPaths(reports.MBR.common.static.getPQMBase(), location)
return baseTagPaths
def getRealPowerPaths(location=None):
paths = []
for path in reports.MBR.common.util.getBaseTagPaths(reports.MBR.common.static.getPQMBase(), location):
paths.append(path+"/Real Power")
return paths
def getPDURealPowerPaths(location=None):
paths = []
for path in reports.MBR.common.util.getBaseTagPaths(reports.MBR.common.static.getPDUBase(), location):
paths.append(path+"/PQM/Real Power")
return paths
def getRawDataTotalLoad(startDate, endDate, location, customArgs= {}):
logger = Logger.createSubLogger("getRawDataTotalLoad")
logger.debug("BEGIN")
startDur = time.time()
tagpaths = getRealPowerPaths(location)
hist = reports.MBR.common.util.getHistory(tagpaths, startDate, endDate, customArgs={})
logger.debug("completed in %s"%(time.time()-startDur))
return hist
def getRawDataCriticalLoad(startDate, endDate, location, customArgs= {}):
logger = Logger.createSubLogger("getRawDataTotalLoad")
logger.debug("BEGIN")
startDur = time.time()
tagpaths = getPDURealPowerPaths(location)
hist = reports.MBR.common.util.getHistory(tagpaths, startDate, endDate, customArgs={})
logger.debug("completed in %s"%(time.time()-startDur))
return hist
def generateSumCol(hist):
return reports.MBR.common.util.generateSumCol(hist, sumColName="SumRealPwr")
# allHeaders = system.dataset.getColumnHeaders(hist)
#
# sumCol = []
# for row in hist:
# try:
# sumCol.append(sum([row[h] for h in allHeaders[1:] if row[h] is not None]))
# except:
# sumCol.append(0)
#
# return system.dataset.toPyDataSet(system.dataset.addColumn(hist, sumCol, "SumRealPwr", float))
def calculateValues(data, interval=15):
"""
Calculate the Average, Min Average, Max Average
Args:
data: historian data, expected in minute intervals
interval: grouping by minutes, None if daily
Returns:
dictionary containing calculated data
"""
data = system.dataset.toPyDataSet(data)
res = {"MinAvg":-1,"MaxAvg":-1,"ResultData":None}
dailyGroup= {}
resultData = []
allAvgs = []
rawSum = []
timeUnitStr = ""
GroupDict= {} # represents {"datetime":{"col1":[], "col2":[]...}}
histDsCols = ["SumRealPwr"]
resultData = []
# Construct / Group
for i,row in enumerate(data):
if i%interval == 0:
timeUnitStr = system.date.format(row["t_stamp"],"yyyy-MM-dd HH:mm")
GroupDict.setdefault(timeUnitStr, {})
GroupDict[timeUnitStr]={col:[] for col in histDsCols}
# GroupDict[quarterHrStr].append(row["SumRealPwr"])
for col in histDsCols:
colVal = row[col] if row[col] is not None else 0
rawSum.append(colVal)
GroupDict[timeUnitStr][col].append(row[col] if row[col] is not None else 0)
sortedDateKeys = sorted(GroupDict.keys(), key=lambda x: datetime.strptime(x, '%Y-%m-%d %H:%M'))
# Create
for dt_str in sortedDateKeys:
colAvgs= [sum(GroupDict[dt_str][col])/len(GroupDict[dt_str][col]) for col in histDsCols]
allAvgs.append(colAvgs[0])
oneRow = [system.date.parse(dt_str, "yyyy-MM-dd HH:mm")]+ colAvgs
resultData.append(oneRow)
res["MinAvg"] = min(allAvgs) if len(allAvgs)> 0 else 0
res["MaxAvg"] = max(allAvgs) if len(allAvgs)> 0 else 0
res["RawMin"] = min(rawSum) if len(rawSum)> 0 else 0
res["RawMax"] = max(rawSum) if len(rawSum)> 0 else 0
res["ResultData"] = resultData
res["ResultDS"] = system.dataset.toDataSet(["Date", "Average"], resultData)
res["RawDS"] = data
return res
def generatePUE(mergedData):
"""
Calculate the PUE based on the time column.
Since there's only 3 columns, date/time, Average, AverageCritical
"""
headers = system.dataset.getColumnHeaders(mergedData)
axisHeader = headers[0]
newHeaders= [axisHeader, "PUE"]
allRows= []
singleVals = []
for row in system.dataset.toPyDataSet(mergedData):
try:
rowPUE = row["Average"]/row["AverageCritical"]
except:
rowPUE = -1
allRows.append([row[axisHeader], rowPUE])
singleVals.append(rowPUE)
return {"ResultDS":system.dataset.toDataSet(newHeaders, allRows),
"Min":min(singleVals),
"Max":max(singleVals)}
def getInputData(startDate, endDate, location=None, calcInterval=60):
"""
"""
final = {"TotalLoad":{}, "CriticalLoad":{}, "MergedDS":{}}
rawDataTotal = generateSumCol(getRawDataTotalLoad(startDate, endDate, location))
totalLoadDict = calculateValues(rawDataTotal, calcInterval)
final["TotalLoad"] = totalLoadDict
rawDataCritical = generateSumCol(getRawDataCriticalLoad(startDate, endDate, location))
totalCriticalDict = calculateValues(rawDataCritical, calcInterval)
final["CriticalLoad"] = totalCriticalDict
return final
def MergeTotalCritical(ds1,ds2):
# extract the rows of average from ds2
newCol =[]
for row in system.dataset.toPyDataSet(ds2):
newCol.append(row["Average"])
return system.dataset.addColumn(ds1, newCol, "AverageCritical", float)
def DoAll(startDate, endDate, location=None, interval= 60):
"""
Single call point for Report data fetch
"""
final = getInputData(startDate,endDate,location, interval)
try:
final["MergedDS"] = MergeTotalCritical(final["TotalLoad"]["ResultDS"],final["CriticalLoad"]["ResultDS"])
final["PUE"] = generatePUE(final["MergedDS"])
except:
final["MergedDS"] = final["TotalLoad"]["ResultDS"]
return final
def doAllInterval(startDate, endDate, location=None, intervalMins=15):
final = getInputData(startDate,endDate,location, intervalMins)
try:
final["MergedDS"] = MergeTotalCritical(final["TotalLoad"]["ResultDS"],final["CriticalLoad"]["ResultDS"])
final["PUE"] = generatePUE(final["MergedDS"])
except:
final["MergedDS"] = final["TotalLoad"]["ResultDS"]
return final