2026-04-24 FE Backup
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
from datetime import datetime
|
||||
def getBaseTagPaths(collection, location=None):
|
||||
if location is not None:
|
||||
return collection[location]
|
||||
else:
|
||||
# return [x for v in collection.values() for x in v]
|
||||
return [value for key, values in collection.items() if key in ["Common","DH1","DH2","DH3","DH4","DH5"] for value in values]
|
||||
|
||||
|
||||
def getHistory(paths, startDate, endDate, customArgs={}):
|
||||
"""
|
||||
Generic get history
|
||||
Args:
|
||||
paths: [] of strings/tagpaths
|
||||
startDate: date start of range
|
||||
endDate: date end of range
|
||||
customArgs: dictionary of custom values if needed
|
||||
returns:
|
||||
PyDataSet
|
||||
"""
|
||||
intervalMin = customArgs.get("intervalMinutes",1)
|
||||
noInterpol = customArgs.get("noInterpolation",True)
|
||||
ignoreBad = customArgs.get("ignoreBadQuality",True)
|
||||
aggMode = customArgs.get("aggregationMode","LastValue")
|
||||
|
||||
histDS = system.tag.queryTagHistory(paths, startDate, endDate, aggregationMode = aggMode, intervalMinutes= intervalMin,noInterpolation= noInterpol, ignoreBadQuality= ignoreBad )
|
||||
# print "common.util.getHist", histDS.getRowCount(), paths
|
||||
return system.dataset.toPyDataSet(histDS)
|
||||
|
||||
|
||||
def 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]) if len(allHeaders)>1 else 0)
|
||||
except:
|
||||
sumCol.append(0)
|
||||
|
||||
return system.dataset.toPyDataSet(system.dataset.addColumn(hist, sumCol, sumColName, float))
|
||||
|
||||
def averageIntervalData(histDS, interval=15):
|
||||
"""
|
||||
Average values over time based on minute per minute data.
|
||||
First column should be t_stamp
|
||||
"""
|
||||
timeUnitStr = ""
|
||||
GroupDict= {} # represents {"datetime":{"col1":[], "col2":[]...}}
|
||||
histDsCols = system.dataset.getColumnHeaders(histDS)[1:]
|
||||
resultData = []
|
||||
for i,row in enumerate(histDS):
|
||||
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:
|
||||
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'))
|
||||
for dt_str in sortedDateKeys:
|
||||
oneRow = [system.date.parse(dt_str, "yyyy-MM-dd HH:mm")]+ [sum(GroupDict[dt_str][col])/len(GroupDict[dt_str][col]) for col in histDsCols]
|
||||
resultData.append(oneRow)
|
||||
|
||||
return system.dataset.toPyDataSet(system.dataset.toDataSet(["t_stamp"]+histDsCols, resultData))
|
||||
|
||||
|
||||
def mergeHistorianData(ds1, ds2):
|
||||
"""
|
||||
Expects 2 sets of historian data, sanity check . t_stamp should be column index 0, so we only need one
|
||||
"""
|
||||
if len(ds1) != len(ds2):
|
||||
raise Exception("Mismatch on both datasets")
|
||||
else:
|
||||
ds1Header = system.dataset.getColumnHeaders(ds1)
|
||||
ds2Header = system.dataset.getColumnHeaders(ds2)[1:]
|
||||
|
||||
newHeader = ds1Header+ds2Header
|
||||
|
||||
allRows = []
|
||||
for i,row in enumerate(ds1):
|
||||
newRow = [c for c in row] + ([c for c in ds2[i]][1:])
|
||||
allRows.append(newRow)
|
||||
# print len(newHeader), len(allRows[0])
|
||||
return system.dataset.toPyDataSet(system.dataset.toDataSet(newHeader, allRows))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user