On Nov 1st our reporting had a snag for our monthly reports that we send to the State. The program just stopped running and we are not that familiar with our new system to ascertain whats going on. We are pretty sure it has something to do with Day light Savings. It reads
"Data Collection Errors
Warn: Error invoking script.Traceback (most recent call last): File " function:updateData", line 4, in updateData File "< File "module:project.report.lakeFortSmith.monthlyOperaions", line 237, in generateReportindexError: Number of Values(30) doesn't match I hope this makes sense to your guys. Thanks for the help
indexError: Number of Values(30)
Sounds like it was looking for the day 30 inside something but it was (no longer?) there.
maybe skipped an entry on the hour shift?
You'll have to show your code or contact support for more help
year = system.date.getYear(StartDate)
month = system.date.getMonth(StartDate)
startOfMonth = system.date.getDate(year, month, 1)
endOfMonth = system.date.addSeconds(system.date.addMonths(startOfMonth, 1), -1)
daylight_savings = False
# Check for Daylight Savings time change
if system.date.isDaylightTime(startOfMonth) and not system.date.isDaylightTime(endOfMonth):
daylight_savings = True
day_of_time_change = 7 # integer, day of the month when the time change occurs
if daylight_savings:
# Start of month up to day of time change
dst_start = startOfMonth
dst_end = system.date.addSeconds(system.date.getDate(year, month, day_of_time_change), -1)
totalsDataset1 = system.tag.queryTagHistory(
paths=tagPaths,
startDate=dst_start,
endDate=dst_end,
columnNames=colNames,
intervalHours=24,
aggregationModes=aggregationModes,
ignoreBadQuality=1,
noInterpolation=0
)
# Day of the time change has 25 hours
dst_day_start = system.date.getDate(year, month, day_of_time_change)
dst_day_end = system.date.addSeconds(system.date.addDays(dst_day_start, 1), -1)
totalsDataset2 = system.tag.queryTagHistory(
paths=tagPaths,
startDate=dst_day_start,
endDate=dst_day_end,
columnNames=colNames,
intervalHours=25,
aggregationModes=aggregationModes,
ignoreBadQuality=1,
noInterpolation=0
)
# Remainder of the month
st_start = system.date.getDate(year, month, day_of_time_change+1)
st_end = endOfMonth
totalsDataset3 = system.tag.queryTagHistory(
paths=tagPaths,
startDate=st_start,
endDate=st_end,
columnNames=colNames,
intervalHours=24,
aggregationModes=aggregationModes,
ignoreBadQuality=1,
noInterpolation=0
)
totalsDataset = system.dataset.appendDataset(totalsDataset1, totalsDataset2)
totalsDataset = system.dataset.appendDataset(totalsDataset, totalsDataset3)
# If not Daylight Savings time
else:
totalsDataset = system.tag.queryTagHistory( paths = tagPaths,
startDate = startOfMonth,
endDate = endOfMonth,
columnNames = colNames,
intervalHours = 24,
aggregationModes = aggregationModes,#project.tag.history.aggregate.firstValue(),
ignoreBadQuality = 1,
avoidInterpolation = 1)
# data['average'] = system.tag.queryTagHistory( paths=tagPaths,
# startDate = startOfMonth,
# endDate = endOfMonth,
# aggregationMode = "Average",
# columnNames = colNames,
# ignoreBadQuality = 1,
# avoidInterpolation = 1,
# returnSize = 1)
#
# data['maximum'] = system.tag.queryTagHistory( paths = tagPaths,
# startDate = startOfMonth,
# endDate = endOfMonth,
# aggregationMode = "Maximum",
# columnNames = colNames,
# ignoreBadQuality = 1,
# avoidInterpolation = 1,
# returnSize = 1)
#
# data['minimum'] = system.tag.queryTagHistory( paths = tagPaths,
# startDate = startOfMonth,
# endDate = endOfMonth,
# aggregationMode = "Minimum",
# columnNames = colNames,
# ignoreBadQuality = 1,
# avoidInterpolation = 1,
# returnSize = 1)
datasetHeaders = ['t_stamp','turb1','turb2','turb3','turb4','turb5','turb6']
colName = 'Finished Turbidity'
tagPath = '[Lake_Fort_Smith]Readings/Post 4MG/Turbidity/value'
tagHistory = system.tag.queryTagHistory( paths = [tagPath],
startDate = startOfMonth,
endDate = endOfMonth,
intervalHours = 4,
aggregationMode = "Average",#project.tag.history.aggregate.firstValue(),
ignoreBadQuality = 1,
avoidInterpolation = 1)
tagHistoryPDS = system.dataset.toPyDataSet(tagHistory)
datasetRows = []
newRow = []
for idx,row in enumerate(tagHistoryPDS):
time = row[0]
turb = row[1]
if idx%6 in [0]:
newRow = [time,turb]
if idx%6 in [1,2,3,4]:
newRow += [turb]
if idx%6 in [5]:
newRow += [turb]
datasetRows.append(newRow)
turbDataset = system.dataset.toDataSet(datasetHeaders, datasetRows)
#Add Columns to combine datasets for Totals and Finished Turbidity
for col in range(turbDataset.getColumnCount()):
if col == 0: continue
colData = []
colName = "turb%s" % (col)
for row in range(turbDataset.getRowCount()):
colData.append(turbDataset.getValueAt(row,col))
totalsDataset = system.dataset.addColumn( totalsDataset,
colData,
colName,
float)
#MM - 2021-02-11 - Query East Filter seperately and move forward a day
if daylight_savings:
# Start of month up to day of time change
dst_start = startOfMonth
dst_end = system.date.addSeconds(system.date.getDate(year, month, day_of_time_change), -1)
eastFilterDataset1 = system.tag.queryTagHistory(paths = ['[Lake_Fort_Smith]Filter/East/Backwash/Flow Total/value'],
startDate = dst_start,
endDate = dst_end,
columnNames = ['t_stamp','eastBackwashFlow'],
intervalHours = 24,
aggregationModes = ['Range'],
ignoreBadQuality = 1,
avoidInterpolation = 1)
# Day of the time change has 25 hours
dst_day_start = system.date.getDate(year, month, day_of_time_change)
dst_day_end = system.date.addSeconds(system.date.addDays(dst_day_start, 1), -1)
eastFilterDataset2 = system.tag.queryTagHistory(paths = ['[Lake_Fort_Smith]Filter/East/Backwash/Flow Total/value'],
startDate = dst_day_start,
endDate = dst_day_end,
columnNames = ['t_stamp','eastBackwashFlow'],
intervalHours = 25,
aggregationModes = ['Range'],
ignoreBadQuality = 1,
avoidInterpolation = 1)
# Remainder of the month
st_start = system.date.getDate(year, month, day_of_time_change+1)
st_end = endOfMonth
eastFilterDataset3 = system.tag.queryTagHistory(paths = ['[Lake_Fort_Smith]Filter/East/Backwash/Flow Total/value'],
startDate = st_start,
endDate = st_end,
columnNames = ['t_stamp','eastBackwashFlow'],
intervalHours = 24,
aggregationModes = ['Range'],
ignoreBadQuality = 1,
avoidInterpolation = 1)
eastFilterDataset = system.dataset.appendDataset(eastFilterDataset1, eastFilterDataset2)
eastFilterDataset = system.dataset.appendDataset(eastFilterDataset, eastFilterDataset3)
else:
eastFilterDataset = system.tag.queryTagHistory( paths = ['[Lake_Fort_Smith]Filter/East/Backwash/Flow Total/value'],
startDate = system.date.addDays(startOfMonth, -1),
endDate = system.date.addDays(endOfMonth, -1),
columnNames = ['t_stamp','eastBackwashFlow'],
intervalHours = 24,
aggregationModes = ['Range'],
ignoreBadQuality = 1,
avoidInterpolation = 1)
colData = []
for row in range(eastFilterDataset.rowCount):
colData.append(eastFilterDataset.getValueAt(row,1)) #column 0 is t_stamp, get column 1
totalsDataset = system.dataset.addColumn( totalsDataset,
colData,
'eastBackwashFlow',
float)
#MM - 2021-02-11 - Add CL2 Residual (Post 4MG) AM (0-12) & PM (12-24) Minimum
if daylight_savings:
# Start of month up to day of time change
dst_start = startOfMonth
dst_end = system.date.addSeconds(system.date.getDate(year, month, day_of_time_change), -1)
cl2Min1 = system.tag.queryTagHistory(paths = ['[Lake_Fort_Smith]Readings/Post 4MG/CL2 Residual/value'],
startDate = dst_start,
endDate = dst_end,
columnNames = ['t_stamp','cl2Min'],
intervalHours = 12,
aggregationModes = ['Minimum'],
ignoreBadQuality = 1,
avoidInterpolation = 1)
# Day of the time change has 13 hours
dst_day_start = system.date.getDate(year, month, day_of_time_change)
dst_day_end = system.date.addSeconds(system.date.addHours(dst_day_start, 12), -1)
cl2Min2 = system.tag.queryTagHistory(paths = ['[Lake_Fort_Smith]Readings/Post 4MG/CL2 Residual/value'],
startDate = dst_day_start,
endDate = dst_day_end,
columnNames = ['t_stamp','cl2Min'],
intervalHours = 13,
aggregationModes = ['Minimum'],
ignoreBadQuality = 1,
avoidInterpolation = 1)
# Remainder of the month
st_start = system.date.addHours(dst_day_start, 12)
st_end = endOfMonth
cl2Min3 = system.tag.queryTagHistory(paths = ['[Lake_Fort_Smith]Readings/Post 4MG/CL2 Residual/value'],
startDate = st_start,
endDate = st_end,
columnNames = ['t_stamp','cl2Min'],
intervalHours = 12,
aggregationModes = ['Minimum'],
ignoreBadQuality = 1,
avoidInterpolation = 1)
cl2Min = system.dataset.appendDataset(cl2Min1, cl2Min2)
cl2Min = system.dataset.appendDataset(cl2Min, cl2Min3)
else:
cl2Min = system.tag.queryTagHistory(paths = ['[Lake_Fort_Smith]Readings/Post 4MG/CL2 Residual/value'],
startDate = startOfMonth,
endDate = endOfMonth,
columnNames = ['t_stamp','cl2Min'],
intervalHours = 12,
aggregationModes = ['Minimum'],
ignoreBadQuality = 1,
avoidInterpolation = 1)
colDataAM = []
colDataPM = []
for am,pm in zip(*[iter(range(cl2Min.rowCount))]*2):
cl2MinAM = cl2Min.getValueAt(am,1)
colDataAM.append(cl2MinAM)
cl2MinPM = cl2Min.getValueAt(pm,1)
colDataPM.append(cl2MinPM)
totalsDataset = system.dataset.addColumn( totalsDataset,
colDataAM,
'cl2MinAM',
float)
totalsDataset = system.dataset.addColumn( totalsDataset,
colDataPM,
'cl2MinPM',
float)
#MM - 2021-02-09 - Set values for current day and following day to 0
now = system.date.now()
todayStart = system.date.setTime(now, 0, 0, 0)
for row in range(totalsDataset.rowCount):
t_stamp = totalsDataset.getValueAt(row, 't_stamp')
#if t_stamp == todayStart: #if row is today
if system.date.getDayOfMonth(t_stamp) in [system.date.getDayOfMonth(todayStart),system.date.getDayOfMonth(todayStart)+1]:
for col in range(totalsDataset.columnCount - 1): #for all columns minus the first column (t_stamp)
totalsDataset = system.dataset.setValue(totalsDataset, row, col+1, 0) #set value to 0
data["Totals"] = totalsDataset
return data
I just sent the code
PHEW thats a lot of code xD
which is line 237?
According to that snippet, line 237 is this:
cl2Min = system.dataset.appendDataset(cl2Min1, cl2Min2)
That function would fail if you have a different number of columns in the two datasets you're trying to append together.
this is line 237 sorry i didnt include the line markers