openstudio-calibration 0.8.0 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +1 -0
- data/lib/measures/TimeseriesObjectiveFunction/README.md +51 -1
- data/lib/measures/TimeseriesObjectiveFunction/measure.rb +35 -32
- data/lib/measures/TimeseriesObjectiveFunction/measure.xml +24 -18
- data/lib/openstudio/calibration/version.rb +1 -1
- data/openstudio-calibration.gemspec +2 -2
- metadata +7 -8
- data/lib/measures/TimeseriesObjectiveFunction/README.md.erb +0 -42
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be0df7d570194eed01d351ecfdd17e247146dfffbbb83cf08805bbbde18db340
|
4
|
+
data.tar.gz: 4894b51e9cfac730ad5e13e70e9412521ba4ff5090bf50c6cd240162603c193f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f8d4c10fa883f5e9afbb42392cfba46674a485858bcfe827bd9d8e1f9516700d9b29f210eaddbe4de8e3b78f100871a8f8cf1e5c861c05aad94d720f22b9937
|
7
|
+
data.tar.gz: 44ae3592dbf26e616e927395cd009f4b45741a6f777a19036514a22cd16eb5db8eb824cdf110b7ae315eeac4a1edbb384fcdb3476cced9eb29332844ca25cc08
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# OpenStudio Calibration Measures Gem
|
2
2
|
|
3
|
+
## Version 0.9.0
|
4
|
+
* Updating dependencies and licenses for OpenStudio 3.7 (upgrade to standards gem 0.5.0, extension gem 0.7.0)
|
5
|
+
* Fixed [#54]( https://github.com/NREL/openstudio-calibration-gem/issues/54 ), OS API changes break some measures
|
6
|
+
|
3
7
|
## Version 0.8.0
|
4
8
|
* Fixed [#52]( https://github.com/NREL/openstudio-calibration-gem/pull/52 ), Specify date format in AddMonthlyUtilityData
|
5
9
|
* Fixed [#55]( https://github.com/NREL/openstudio-calibration-gem/pull/55 ), Api change
|
data/README.md
CHANGED
@@ -18,6 +18,56 @@ ReportingMeasure
|
|
18
18
|
|
19
19
|
## Arguments
|
20
20
|
|
21
|
+
**verbose_messages** will display all the runner.registerInfo statements for the metered value, simulated value and their difference at EVERY timestep. while this is useful for debugging the usage of the Measure, it has a MAJOR impact on performance and will slow the running of the measure. Turn to False for production runs.
|
22
|
+
|
23
|
+
**csv_name** is the file path, relative to the Measure at runtime, to the CSV data. If this run is taking place on an OS-Server or (OSAF) instance, where the project data is zipped up into an OSA.zip file and posted to the OS-Server Web node (in a directory called **calibration_data**), then relative path to the data would be: '../../../lib/calibration_data/electric_json.json'. Notice the **lib** in the path name for the OSAF use case.
|
24
|
+
|
25
|
+
**csv_time_header** is the Header Value in the CSV file with metered data for the TIMESTAMP, ex: "timestamp"
|
26
|
+
|
27
|
+
**csv_var**, is the column name of the metered data, ex: "Electricity:Facility[J]"
|
28
|
+
|
29
|
+
**convert_data** is used to convert the units in the CSV from 'F to C', 'WH to J', 'CFM to m3/s', 'PSI to Pa' or **None**
|
30
|
+
|
31
|
+
The timestamp of the CSV data should follow a mm/dd/yyyy hh:mm:ss format with NO AM/PM
|
32
|
+
|
33
|
+
**year** (true) Is the Year in the csv data timestamp => mm/dd/yyyy or mm/dd
|
34
|
+
|
35
|
+
**seconds** (true) Is the Seconds in the csv data timestamp => hh:mm:ss or hh:mm
|
36
|
+
|
37
|
+
The model output variables/meters are listed in the eplusout.rdd and .mdd files.
|
38
|
+
|
39
|
+
The Measure argument **find_avail** (true) will print out ALL the available RunPeriods (EnvPeriod), ReportingFrequencies, Variables and key values in the run.log file:
|
40
|
+
|
41
|
+
`[15:11:26.640379 INFO] environment_periods: ["Run Period 1"]`\
|
42
|
+
`[15:11:26.640418 INFO] available timeseries: ["Electricity:Facility", "NaturalGas:Facility", "Surface Inside Face Temperature", "Zone Outdoor Air Drybulb Temperature"]`\
|
43
|
+
`[15:11:26.640424 INFO] `\
|
44
|
+
`[15:11:26.640443 INFO] available EnvPeriod: Run Period 1, available ReportingFrequencies: ["Daily", "Hourly", "Zone Timestep"]`\
|
45
|
+
`[15:11:26.640454 INFO] available ReportingFrequency: Daily, available variable names: ["Electricity:Facility", "NaturalGas:Facility"]`\
|
46
|
+
`[15:11:26.640463 INFO] variable names: Electricity:Facility`\
|
47
|
+
`[15:11:26.640469 INFO] available key value: [""]`\
|
48
|
+
`[15:11:26.640476 INFO] variable names: NaturalGas:Facility`\
|
49
|
+
`[15:11:26.640481 INFO] available key value: [""]`\
|
50
|
+
`[15:11:26.640493 INFO] available ReportingFrequency: Hourly, available variable names: ["Electricity:Facility", "NaturalGas:Facility", "Surface Inside Face Temperature", "Zone Outdoor Air Drybulb Temperature"]`\
|
51
|
+
`[15:11:26.640499 INFO] variable names: Electricity:Facility`\
|
52
|
+
`[15:11:26.640505 INFO] available key value: [""]`\
|
53
|
+
`[15:11:26.640511 INFO] variable names: NaturalGas:Facility`\
|
54
|
+
`[15:11:26.640516 INFO] available key value: [""]`\
|
55
|
+
`[15:11:26.640526 INFO] variable names: Surface Inside Face Temperature`\
|
56
|
+
`[15:11:26.640539 INFO] available key value: ["SUB SURFACE 1", "SUB SURFACE 2", "SURFACE 1"]`\
|
57
|
+
`[15:11:26.640546 INFO] variable names: Zone Outdoor Air Drybulb Temperature`\
|
58
|
+
`[15:11:26.640552 INFO] available key value: ["THERMAL ZONE 1"]`\
|
59
|
+
`[15:11:26.640561 INFO] available ReportingFrequency: Zone Timestep, available variable names: ["Electricity:Facility", "NaturalGas:Facility"]`\
|
60
|
+
`[15:11:26.640567 INFO] variable names: Electricity:Facility`\
|
61
|
+
`[15:11:26.640573 INFO] available key value: [""]`\
|
62
|
+
`[15:11:26.640579 INFO] variable names: NaturalGas:Facility`\
|
63
|
+
`[15:11:26.640585 INFO] available key value: [""]`\
|
64
|
+
|
65
|
+
* The name of the variable/timeseries to be compared is used in the **timeseries_name** measure argument.
|
66
|
+
* Some variables require a further **key_value** to narrow down the results to a specific object like a Surface or Zone. Some Meter based outputs have no key, i.e, Electricity:Facility. For those, use the value **no_key**
|
67
|
+
* RunPeriods/EnvPeriod are set in the **environment_period** measure argument.
|
68
|
+
* ReportingFrequencies ["Daily", "Hourly", "Zone Timestep"] are set in the **reporting_frequency** measure argument.
|
69
|
+
|
70
|
+
|
21
71
|
|
22
72
|
### Path to CSV file for the metered data
|
23
73
|
Path to CSV file including file name.
|
@@ -60,7 +110,7 @@ CSV variable display name. Not yet Implemented
|
|
60
110
|
**Model Dependent:** false
|
61
111
|
|
62
112
|
### Year in csv data timestamp
|
63
|
-
Is the Year in the csv data timestamp => mm
|
113
|
+
Is the Year in the csv data timestamp => mm/dd/yyyy or mm/dd (true/false)
|
64
114
|
**Name:** year,
|
65
115
|
**Type:** Boolean,
|
66
116
|
**Units:** ,
|
@@ -15,17 +15,17 @@ require 'erb'
|
|
15
15
|
class TimeseriesObjectiveFunction < OpenStudio::Measure::ReportingMeasure
|
16
16
|
# human readable name
|
17
17
|
def name
|
18
|
-
'TimeSeries Objective Function'
|
18
|
+
return 'TimeSeries Objective Function'
|
19
19
|
end
|
20
20
|
|
21
21
|
# human readable description
|
22
22
|
def description
|
23
|
-
'Creates Objective Function from Timeseries Data'
|
23
|
+
return 'Creates Objective Function from Timeseries Data'
|
24
24
|
end
|
25
25
|
|
26
26
|
# human readable description of modeling approach
|
27
27
|
def modeler_description
|
28
|
-
"Creates Objective Function from Timeseries Data. The measure applies a Norm at each timestep between the difference of CSV metered data and SQL model data. A timeseries plot can also be created. Possible outputs are 'cvrmse', 'nmbe', 'simdata' = sum of the simulated data, 'csvdata' = sum of metered data, 'diff' = P Norm between the metered and simulated data if Norm is 1 or 2, else its just the Difference."
|
28
|
+
return "Creates Objective Function from Timeseries Data. The measure applies a Norm at each timestep between the difference of CSV metered data and SQL model data. A timeseries plot can also be created. Possible outputs are 'cvrmse', 'nmbe', 'simdata' = sum of the simulated data, 'csvdata' = sum of metered data, 'diff' = P Norm between the metered and simulated data if Norm is 1 or 2, else its just the Difference."
|
29
29
|
end
|
30
30
|
|
31
31
|
# define the arguments that the user will input
|
@@ -71,7 +71,7 @@ class TimeseriesObjectiveFunction < OpenStudio::Measure::ReportingMeasure
|
|
71
71
|
|
72
72
|
years = OpenStudio::Measure::OSArgument.makeBoolArgument('year', true)
|
73
73
|
years.setDisplayName('Year in csv data timestamp')
|
74
|
-
years.setDescription('Is the Year in the csv data timestamp => mm
|
74
|
+
years.setDescription('Is the Year in the csv data timestamp => mm/dd/yyyy or mm/dd (true/false)')
|
75
75
|
years.setDefaultValue(true)
|
76
76
|
args << years
|
77
77
|
|
@@ -82,9 +82,9 @@ class TimeseriesObjectiveFunction < OpenStudio::Measure::ReportingMeasure
|
|
82
82
|
args << seconds
|
83
83
|
|
84
84
|
sql_key = OpenStudio::Measure::OSArgument.makeStringArgument('key_value', true)
|
85
|
-
sql_key.setDisplayName('SQL key value')
|
85
|
+
sql_key.setDisplayName('SQL key value. use no_key if there is no key, i.e. Electricity:Facility')
|
86
86
|
sql_key.setDescription('SQL key value for the SQL query to find the variable in the SQL file')
|
87
|
-
sql_key.setDefaultValue('')
|
87
|
+
sql_key.setDefaultValue('no_key')
|
88
88
|
args << sql_key
|
89
89
|
|
90
90
|
sql_var = OpenStudio::Measure::OSArgument.makeStringArgument('timeseries_name', true)
|
@@ -95,7 +95,7 @@ class TimeseriesObjectiveFunction < OpenStudio::Measure::ReportingMeasure
|
|
95
95
|
|
96
96
|
reportfreq_chs = OpenStudio::StringVector.new
|
97
97
|
reportfreq_chs << 'Detailed'
|
98
|
-
reportfreq_chs << 'Timestep'
|
98
|
+
reportfreq_chs << 'Zone Timestep'
|
99
99
|
reportfreq_chs << 'Hourly'
|
100
100
|
reportfreq_chs << 'Daily'
|
101
101
|
reportfreq_chs << 'Monthly'
|
@@ -145,7 +145,7 @@ class TimeseriesObjectiveFunction < OpenStudio::Measure::ReportingMeasure
|
|
145
145
|
plot_name = OpenStudio::Measure::OSArgument.makeStringArgument('plot_name', true)
|
146
146
|
plot_name.setDisplayName('Plot name')
|
147
147
|
plot_name.setDescription('Name to include in reporting file name.')
|
148
|
-
plot_name.setDefaultValue('')
|
148
|
+
plot_name.setDefaultValue('plot_name')
|
149
149
|
args << plot_name
|
150
150
|
|
151
151
|
verbose_messages = OpenStudio::Measure::OSArgument.makeBoolArgument('verbose_messages', true)
|
@@ -262,6 +262,11 @@ class TimeseriesObjectiveFunction < OpenStudio::Measure::ReportingMeasure
|
|
262
262
|
convert_data = runner.getStringArgumentValue('convert_data', user_arguments)
|
263
263
|
last_zero = runner.getBoolArgumentValue('add_last_zero_for_plots', user_arguments)
|
264
264
|
first_zero = runner.getBoolArgumentValue('add_first_zero_for_plots', user_arguments)
|
265
|
+
|
266
|
+
# remove leading and trailing double quotes
|
267
|
+
# windows users can shift + right click a file to copy as path, which has double quotes
|
268
|
+
csv_name.gsub!('"', '')
|
269
|
+
|
265
270
|
@name = plot_name
|
266
271
|
# Method to translate from OpenStudio's time formatting
|
267
272
|
# to Javascript time formatting
|
@@ -338,11 +343,11 @@ class TimeseriesObjectiveFunction < OpenStudio::Measure::ReportingMeasure
|
|
338
343
|
runner.registerInfo("available EnvPeriod: #{env_s}, available ReportingFrequencies: #{freqs}")
|
339
344
|
freqs.each do |freq|
|
340
345
|
vn = sql.availableVariableNames(env_s, freq.to_s)
|
341
|
-
runner.registerInfo("available variable names: #{vn}")
|
346
|
+
runner.registerInfo(" available ReportingFrequency: #{freq}, available variable names: #{vn}")
|
342
347
|
vn.each do |v|
|
343
348
|
kv = sql.availableKeyValues(env_s, freq.to_s, v)
|
344
|
-
runner.registerInfo("variable names: #{v}")
|
345
|
-
runner.registerInfo("available key value: #{kv}")
|
349
|
+
runner.registerInfo(" variable names: #{v}")
|
350
|
+
runner.registerInfo(" available key value: #{kv}")
|
346
351
|
end
|
347
352
|
end
|
348
353
|
end
|
@@ -350,63 +355,63 @@ class TimeseriesObjectiveFunction < OpenStudio::Measure::ReportingMeasure
|
|
350
355
|
runner.registerInfo("year: #{years}")
|
351
356
|
runner.registerInfo("seconds: #{seconds}")
|
352
357
|
if !years && seconds
|
353
|
-
# mm
|
358
|
+
# mm/dd hh:mm:ss
|
354
359
|
# check day time splits into two valid parts
|
355
360
|
if !csv[1][0].split(' ')[0].nil? && !csv[1][0].split(' ')[1].nil?
|
356
361
|
# check remaining splits are valid
|
357
362
|
if !csv[1][0].split(' ')[0].split('/')[0].nil? && !csv[1][0].split(' ')[0].split('/')[1].nil? && !csv[1][0].split(' ')[1].split(':')[0].nil? && !csv[1][0].split(' ')[1].split(':')[1].nil? && !csv[1][0].split(' ')[1].split(':')[2].nil?
|
358
|
-
runner.registerInfo("CSV Time format is correct: #{csv[1][0]} mm
|
363
|
+
runner.registerInfo("CSV Time format is correct: #{csv[1][0]} mm/dd hh:mm:ss")
|
359
364
|
else
|
360
|
-
runner.registerError("CSV Time format not correct: #{csv[1][0]}. Selected format is mm
|
365
|
+
runner.registerError("CSV Time format not correct: #{csv[1][0]}. Selected format is mm/dd hh:mm:ss")
|
361
366
|
return false
|
362
367
|
end
|
363
368
|
else
|
364
|
-
runner.registerError("CSV Time format not correct: #{csv[1][0]}. Does not split into 'day time'. Selected format is mm
|
369
|
+
runner.registerError("CSV Time format not correct: #{csv[1][0]}. Does not split into 'day time'. Selected format is mm/dd hh:mm:ss")
|
365
370
|
return false
|
366
371
|
end
|
367
372
|
elsif !years && !seconds
|
368
|
-
# mm
|
373
|
+
# mm/dd hh:mm
|
369
374
|
# check day time splits into two valid parts
|
370
375
|
if !csv[1][0].split(' ')[0].nil? && !csv[1][0].split(' ')[1].nil?
|
371
376
|
# check remaining splits are valid
|
372
377
|
if !csv[1][0].split(' ')[0].split('/')[0].nil? && !csv[1][0].split(' ')[0].split('/')[1].nil? && !csv[1][0].split(' ')[1].split(':')[0].nil? && !csv[1][0].split(' ')[1].split(':')[1].nil?
|
373
|
-
runner.registerInfo("CSV Time format is correct: #{csv[1][0]} mm
|
378
|
+
runner.registerInfo("CSV Time format is correct: #{csv[1][0]} mm/dd hh:mm")
|
374
379
|
else
|
375
|
-
runner.registerError("CSV Time format not correct: #{csv[1][0]}. Selected format is mm
|
380
|
+
runner.registerError("CSV Time format not correct: #{csv[1][0]}. Selected format is mm/dd hh:mm")
|
376
381
|
return false
|
377
382
|
end
|
378
383
|
else
|
379
|
-
runner.registerError("CSV Time format not correct: #{csv[1][0]}. Does not split into 'day time'. Selected format is mm
|
384
|
+
runner.registerError("CSV Time format not correct: #{csv[1][0]}. Does not split into 'day time'. Selected format is mm/dd hh:mm")
|
380
385
|
return false
|
381
386
|
end
|
382
387
|
elsif years && !seconds
|
383
|
-
# mm
|
388
|
+
# mm/dd/yyyy hh:mm
|
384
389
|
# check day time splits into two valid parts
|
385
390
|
if !csv[1][0].split(' ')[0].nil? && !csv[1][0].split(' ')[1].nil?
|
386
391
|
# check remaining splits are valid
|
387
392
|
if !csv[1][0].split(' ')[0].split('/')[0].nil? && !csv[1][0].split(' ')[0].split('/')[1].nil? && !csv[1][0].split(' ')[0].split('/')[2].nil? && !csv[1][0].split(' ')[1].split(':')[0].nil? && !csv[1][0].split(' ')[1].split(':')[1].nil?
|
388
|
-
runner.registerInfo("CSV Time format is correct: #{csv[1][0]} mm
|
393
|
+
runner.registerInfo("CSV Time format is correct: #{csv[1][0]} mm/dd/yyyy hh:mm")
|
389
394
|
else
|
390
|
-
runner.registerError("CSV Time format not correct: #{csv[1][0]}. Selected format is mm
|
395
|
+
runner.registerError("CSV Time format not correct: #{csv[1][0]}. Selected format is mm/dd/yyyy hh:mm")
|
391
396
|
return false
|
392
397
|
end
|
393
398
|
else
|
394
|
-
runner.registerError("CSV Time format not correct: #{csv[1][0]}. Does not split into 'day time'. Selected format is mm
|
399
|
+
runner.registerError("CSV Time format not correct: #{csv[1][0]}. Does not split into 'day time'. Selected format is mm/dd/yyyy hh:mm")
|
395
400
|
return false
|
396
401
|
end
|
397
402
|
elsif years && seconds
|
398
|
-
# mm
|
403
|
+
# mm/dd/yyyy hh:mm:ss
|
399
404
|
# check day time splits into two valid parts
|
400
405
|
if !csv[1][0].split(' ')[0].nil? && !csv[1][0].split(' ')[1].nil?
|
401
406
|
# check remaining splits are valid
|
402
407
|
if !csv[1][0].split(' ')[0].split('/')[0].nil? && !csv[1][0].split(' ')[0].split('/')[1].nil? && !csv[1][0].split(' ')[0].split('/')[2].nil? && !csv[1][0].split(' ')[1].split(':')[0].nil? && !csv[1][0].split(' ')[1].split(':')[1].nil? && !csv[1][0].split(' ')[1].split(':')[2].nil?
|
403
|
-
runner.registerInfo("CSV Time format is correct: #{csv[1][0]} mm
|
408
|
+
runner.registerInfo("CSV Time format is correct: #{csv[1][0]} mm/dd/yyyy hh:mm:ss")
|
404
409
|
else
|
405
|
-
runner.registerError("CSV Time format not correct: #{csv[1][0]}. Selected format is mm
|
410
|
+
runner.registerError("CSV Time format not correct: #{csv[1][0]}. Selected format is mm/dd/yyyy hh:mm:ss")
|
406
411
|
return false
|
407
412
|
end
|
408
413
|
else
|
409
|
-
runner.registerError("CSV Time format not correct: #{csv[1][0]}. Does not split into 'day time'. Selected format is mm
|
414
|
+
runner.registerError("CSV Time format not correct: #{csv[1][0]}. Does not split into 'day time'. Selected format is mm/dd/yyyy hh:mm:ss")
|
410
415
|
return false
|
411
416
|
end
|
412
417
|
end
|
@@ -511,9 +516,7 @@ class TimeseriesObjectiveFunction < OpenStudio::Measure::ReportingMeasure
|
|
511
516
|
if year.nil?
|
512
517
|
dat = OpenStudio::Date.new(OpenStudio::MonthOfYear.new(cal[mon]), day)
|
513
518
|
else
|
514
|
-
|
515
|
-
# hack since year is not in the sql file correctly
|
516
|
-
dat = OpenStudio::Date.new(OpenStudio::MonthOfYear.new(cal[mon]), day)
|
519
|
+
dat = OpenStudio::Date.new(OpenStudio::MonthOfYear.new(cal[mon]),day,year)
|
517
520
|
end
|
518
521
|
tim = if sec.nil?
|
519
522
|
OpenStudio::Time.new(0, hou, min, 0)
|
@@ -629,7 +632,7 @@ class TimeseriesObjectiveFunction < OpenStudio::Measure::ReportingMeasure
|
|
629
632
|
|
630
633
|
if algorithm_download
|
631
634
|
require 'csv'
|
632
|
-
CSV.open("
|
635
|
+
CSV.open("timeseries_#{plot_name}.csv", 'wb') do |csv|
|
633
636
|
csv << ['Simulation Time', 'Simulated Value', 'Metered time', 'Metered Value']
|
634
637
|
data.size.times do |i|
|
635
638
|
csv << [data[i]['time'], data[i]['y'], data2[i]['time'], data2[i]['y']]
|
@@ -658,7 +661,7 @@ class TimeseriesObjectiveFunction < OpenStudio::Measure::ReportingMeasure
|
|
658
661
|
Dir.mkdir(directory_name) unless File.exist?(directory_name)
|
659
662
|
FileUtils.cp("timeseries_#{csv_var}.json", directory_name)
|
660
663
|
FileUtils.cp("allseries_#{csv_var}.json", directory_name)
|
661
|
-
FileUtils.cp("
|
664
|
+
FileUtils.cp("timeseries_#{plot_name}.csv", directory_name)
|
662
665
|
end
|
663
666
|
end
|
664
667
|
diff = Math.sqrt(diff) if norm == 2
|
@@ -1,10 +1,10 @@
|
|
1
1
|
<?xml version="1.0"?>
|
2
2
|
<measure>
|
3
|
-
<schema_version>3.
|
3
|
+
<schema_version>3.1</schema_version>
|
4
4
|
<name>timeseries_objective_function</name>
|
5
|
-
<uid>6804217d-4737-45f3-82df-
|
6
|
-
<version_id>
|
7
|
-
<version_modified>
|
5
|
+
<uid>6804217d-4737-45f3-82df-b81393c29ce4</uid>
|
6
|
+
<version_id>aa90f481-25bf-4ba0-a6cd-ceece394f503</version_id>
|
7
|
+
<version_modified>2023-10-11T15:24:04Z</version_modified>
|
8
8
|
<xml_checksum>FFE04372</xml_checksum>
|
9
9
|
<class_name>TimeseriesObjectiveFunction</class_name>
|
10
10
|
<display_name>TimeSeries Objective Function</display_name>
|
@@ -81,7 +81,7 @@
|
|
81
81
|
<argument>
|
82
82
|
<name>year</name>
|
83
83
|
<display_name>Year in csv data timestamp</display_name>
|
84
|
-
<description>Is the Year in the csv data timestamp => mm
|
84
|
+
<description>Is the Year in the csv data timestamp => mm/dd/yyyy or mm/dd (true/false)</description>
|
85
85
|
<type>Boolean</type>
|
86
86
|
<required>true</required>
|
87
87
|
<model_dependent>false</model_dependent>
|
@@ -259,7 +259,7 @@
|
|
259
259
|
<type>String</type>
|
260
260
|
<required>true</required>
|
261
261
|
<model_dependent>false</model_dependent>
|
262
|
-
<default_value
|
262
|
+
<default_value>plot_name</default_value>
|
263
263
|
</argument>
|
264
264
|
<argument>
|
265
265
|
<name>verbose_messages</name>
|
@@ -398,33 +398,33 @@
|
|
398
398
|
</attributes>
|
399
399
|
<files>
|
400
400
|
<file>
|
401
|
-
<filename>
|
402
|
-
<filetype>
|
403
|
-
<usage_type>
|
404
|
-
<checksum>
|
401
|
+
<filename>LICENSE.md</filename>
|
402
|
+
<filetype>md</filetype>
|
403
|
+
<usage_type>license</usage_type>
|
404
|
+
<checksum>BFFB1AA6</checksum>
|
405
405
|
</file>
|
406
406
|
<file>
|
407
407
|
<filename>README.md</filename>
|
408
408
|
<filetype>md</filetype>
|
409
409
|
<usage_type>readme</usage_type>
|
410
|
-
<checksum>
|
410
|
+
<checksum>1A2DB569</checksum>
|
411
411
|
</file>
|
412
412
|
<file>
|
413
|
-
<filename>
|
414
|
-
<filetype>
|
415
|
-
<usage_type>
|
416
|
-
<checksum>
|
413
|
+
<filename>README.md.erb</filename>
|
414
|
+
<filetype>erb</filetype>
|
415
|
+
<usage_type>readmeerb</usage_type>
|
416
|
+
<checksum>703C9964</checksum>
|
417
417
|
</file>
|
418
418
|
<file>
|
419
419
|
<version>
|
420
420
|
<software_program>OpenStudio</software_program>
|
421
|
-
<identifier>
|
422
|
-
<min_compatible>
|
421
|
+
<identifier>3.6.1</identifier>
|
422
|
+
<min_compatible>3.6.1</min_compatible>
|
423
423
|
</version>
|
424
424
|
<filename>measure.rb</filename>
|
425
425
|
<filetype>rb</filetype>
|
426
426
|
<usage_type>script</usage_type>
|
427
|
-
<checksum>
|
427
|
+
<checksum>C6A94521</checksum>
|
428
428
|
</file>
|
429
429
|
<file>
|
430
430
|
<filename>report.html.erb</filename>
|
@@ -432,5 +432,11 @@
|
|
432
432
|
<usage_type>resource</usage_type>
|
433
433
|
<checksum>062A5AA5</checksum>
|
434
434
|
</file>
|
435
|
+
<file>
|
436
|
+
<filename>timeseries_data.csv</filename>
|
437
|
+
<filetype>csv</filetype>
|
438
|
+
<usage_type>test</usage_type>
|
439
|
+
<checksum>3E875A75</checksum>
|
440
|
+
</file>
|
435
441
|
</files>
|
436
442
|
</measure>
|
@@ -30,8 +30,8 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.required_ruby_version = '~> 2.7.0'
|
31
31
|
|
32
32
|
spec.add_dependency 'bundler', '~> 2.1'
|
33
|
-
spec.add_dependency 'openstudio-extension', '~> 0.
|
34
|
-
spec.add_dependency 'openstudio-standards', '~> 0.
|
33
|
+
spec.add_dependency 'openstudio-extension', '~> 0.7.0'
|
34
|
+
spec.add_dependency 'openstudio-standards', '~> 0.5.0'
|
35
35
|
|
36
36
|
spec.add_development_dependency 'rake', '~> 13.0'
|
37
37
|
spec.add_development_dependency 'rspec', '~> 3.9'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openstudio-calibration
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Ball
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-
|
12
|
+
date: 2023-12-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -31,28 +31,28 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 0.
|
34
|
+
version: 0.7.0
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: 0.
|
41
|
+
version: 0.7.0
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: openstudio-standards
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
46
|
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: 0.
|
48
|
+
version: 0.5.0
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: 0.
|
55
|
+
version: 0.5.0
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: rake
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -253,7 +253,6 @@ files:
|
|
253
253
|
- lib/measures/RoofThermalPropertiesPercentChange/measure.xml
|
254
254
|
- lib/measures/TimeseriesObjectiveFunction/LICENSE.md
|
255
255
|
- lib/measures/TimeseriesObjectiveFunction/README.md
|
256
|
-
- lib/measures/TimeseriesObjectiveFunction/README.md.erb
|
257
256
|
- lib/measures/TimeseriesObjectiveFunction/measure.rb
|
258
257
|
- lib/measures/TimeseriesObjectiveFunction/measure.xml
|
259
258
|
- lib/measures/TimeseriesObjectiveFunction/resources/report.html.erb
|
@@ -295,7 +294,7 @@ licenses: []
|
|
295
294
|
metadata:
|
296
295
|
bug_tracker_uri: https://github.com/NREL/openstudio-calibration-gem/issues
|
297
296
|
changelog_uri: https://github.com/NREL/openstudio-calibration-gem/blob/develop/CHANGELOG.md
|
298
|
-
source_code_uri: https://github.com/NREL/openstudio-calibration-gem/tree/v0.
|
297
|
+
source_code_uri: https://github.com/NREL/openstudio-calibration-gem/tree/v0.9.0
|
299
298
|
post_install_message:
|
300
299
|
rdoc_options: []
|
301
300
|
require_paths:
|
@@ -1,42 +0,0 @@
|
|
1
|
-
<%#= README.md.erb is used to auto-generate README.md. %>
|
2
|
-
<%#= To manually maintain README.md throw away README.md.erb and manually edit README.md %>
|
3
|
-
###### (Automatically generated documentation)
|
4
|
-
|
5
|
-
# <%= name %>
|
6
|
-
|
7
|
-
## Description
|
8
|
-
<%= description %>
|
9
|
-
|
10
|
-
## Modeler Description
|
11
|
-
<%= modelerDescription %>
|
12
|
-
|
13
|
-
## Measure Type
|
14
|
-
<%= measureType %>
|
15
|
-
|
16
|
-
## Taxonomy
|
17
|
-
<%= taxonomy %>
|
18
|
-
|
19
|
-
## Arguments
|
20
|
-
|
21
|
-
<% arguments.each do |argument| %>
|
22
|
-
### <%= argument[:display_name] %>
|
23
|
-
<%= argument[:description] %>
|
24
|
-
**Name:** <%= argument[:name] %>,
|
25
|
-
**Type:** <%= argument[:type] %>,
|
26
|
-
**Units:** <%= argument[:units] %>,
|
27
|
-
**Required:** <%= argument[:required] %>,
|
28
|
-
**Model Dependent:** <%= argument[:model_dependent] %>
|
29
|
-
<% end %>
|
30
|
-
|
31
|
-
<% if arguments.size == 0 %>
|
32
|
-
<%= "This measure does not have any user arguments" %>
|
33
|
-
<% end %>
|
34
|
-
|
35
|
-
<% if outputs.size > 0 %>
|
36
|
-
## Outputs
|
37
|
-
<% output_names = [] %>
|
38
|
-
<% outputs.each do |output| %>
|
39
|
-
<% output_names << output[:display_name] %>
|
40
|
-
<% end %>
|
41
|
-
<%= output_names.join(", ") %>
|
42
|
-
<% end %>
|