openstudio-recommendation-engine 0.1.4 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -27,7 +27,7 @@ module OpenStudio
|
|
27
27
|
|
28
28
|
def check_measures
|
29
29
|
measure_checks = Dir.glob("#{@path_to_measures}/**/recommendation.rb")
|
30
|
-
|
30
|
+
|
31
31
|
applicable_measures = []
|
32
32
|
debug_outputs = []
|
33
33
|
|
@@ -40,27 +40,103 @@ module OpenStudio
|
|
40
40
|
measure = Object.const_get(measure_class_name).new
|
41
41
|
|
42
42
|
if @model
|
43
|
-
|
44
|
-
if
|
45
|
-
applicable_measures <<
|
43
|
+
results_hash, debug_hash = measure.check_applicability(@model)
|
44
|
+
if results_hash
|
45
|
+
applicable_measures << results_hash
|
46
46
|
else
|
47
47
|
puts "measure #{measure_class_name} not applicable"
|
48
48
|
end
|
49
|
-
debug_outputs <<
|
49
|
+
debug_outputs << debug_hash
|
50
50
|
else
|
51
51
|
raise "No model passed into the recommendation engine"
|
52
52
|
end
|
53
53
|
|
54
54
|
end
|
55
|
-
|
56
|
-
#convert the output to JSON
|
57
|
-
applicable_measures_json = JSON.pretty_generate(applicable_measures)
|
58
|
-
debug_output_json = JSON.pretty_generate(debug_outputs)
|
59
55
|
|
60
|
-
return [
|
56
|
+
return [applicable_measures,debug_outputs]
|
61
57
|
|
62
58
|
end
|
63
59
|
|
60
|
+
# measures_hash looks like
|
61
|
+
# {
|
62
|
+
# "measure": {
|
63
|
+
# "uid": "123-fake-daylight-uid",
|
64
|
+
# "name": "AddEconomizer",
|
65
|
+
# "spaces": [
|
66
|
+
# "427_office_1_North Perimeter Space",
|
67
|
+
# "427_office_1_South Perimeter Space",
|
68
|
+
# "427_office_1_West Perimeter Space",
|
69
|
+
# "427_office_1_East Perimeter Space"
|
70
|
+
# ]
|
71
|
+
# "arguments": {
|
72
|
+
# "cost_per_thing":50,
|
73
|
+
# "input_2":true,
|
74
|
+
# }
|
75
|
+
# },
|
76
|
+
# "measure": {
|
77
|
+
# "uid": "123-fake-daylight-uid",
|
78
|
+
# "name": "AddDaylightControls",
|
79
|
+
# "spaces": [
|
80
|
+
# "427_office_1_North Perimeter Space",
|
81
|
+
# "427_office_1_South Perimeter Space",
|
82
|
+
# "427_office_1_West Perimeter Space",
|
83
|
+
# "427_office_1_East Perimeter Space"
|
84
|
+
# ]
|
85
|
+
# }
|
86
|
+
# }
|
87
|
+
|
88
|
+
def apply_measures(model, measures_hash)
|
89
|
+
|
90
|
+
messages = {}
|
91
|
+
|
92
|
+
#loop through each measure in the measures_hash
|
93
|
+
measures_hash.each do |m|
|
94
|
+
puts JSON.pretty_generate(m)
|
95
|
+
measure_name = m['measure']['name']
|
96
|
+
puts measure_name
|
97
|
+
messages[measure_name] = []
|
98
|
+
puts File.expand_path(measure_name)
|
99
|
+
require "#{@path_to_measures}/#{measure_name}/measure"
|
100
|
+
|
101
|
+
|
102
|
+
#make os argument vector and assign values from measures_json
|
103
|
+
measure = Object.const_get(measure_name).new
|
104
|
+
|
105
|
+
arguments = measure.arguments(model)
|
106
|
+
runner = OpenStudio::Ruleset::OSRunner.new
|
107
|
+
|
108
|
+
argument_map = OpenStudio::Ruleset::OSArgumentMap.new
|
109
|
+
arguments.each do |arg|
|
110
|
+
argument_map[arg.name] = arg.clone
|
111
|
+
end
|
112
|
+
|
113
|
+
if m['measure']['arguments']
|
114
|
+
m['measure']['arguments'].each do |arg_name, arg_val|
|
115
|
+
v = argument_map[arg_name]
|
116
|
+
raise "Could not find argument map in measure" if not v
|
117
|
+
value_set = v.setValue(arg_val)
|
118
|
+
raise "Could not set argument #{arg_name} of value #{arg_val} on model" unless value_set
|
119
|
+
argument_map[arg_name] = v.clone
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
#run the measure
|
124
|
+
measure.run(model, runner, argument_map)
|
125
|
+
|
126
|
+
#log the messages from when running the measure
|
127
|
+
result = runner.result
|
128
|
+
messages[measure_name] << result.initialCondition.get.logMessage if result.initialCondition.is_initialized
|
129
|
+
messages[measure_name] << result.finalCondition.get.logMessage if result.finalCondition.is_initialized
|
130
|
+
result.warnings.each { |w| messages[measure_name] << w.logMessage}
|
131
|
+
result.errors.each { |w| messages[measure_name] << w.logMessage}
|
132
|
+
result.info.each { |w| messages[measure_name] << w.logMessage}
|
133
|
+
|
134
|
+
end #next measure
|
135
|
+
|
136
|
+
return model,messages
|
137
|
+
|
138
|
+
end #apply_measures
|
139
|
+
|
64
140
|
end
|
65
141
|
end
|
66
142
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openstudio-recommendation-engine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 5
|
10
|
+
version: 0.1.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Nicholas Long
|