alfalfa-lib 0.0.0

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 4ed2dabb03d5554d08b9d59d60c6a428a558e003ae35ce9b8e82c3f6bd51f0c9
4
+ data.tar.gz: bc789596938cecc94e6b16f99ac20a3a65b03153a5dee380907f79823b604d80
5
+ SHA512:
6
+ metadata.gz: 7be3f7dadf87b569b097a2ff283bbceed8925abbf786e9ba7829713c7d428938d914034b60cb561d818b3513218e337d3de904d3a4a5d7386b00d55bb611a047
7
+ data.tar.gz: 625097e38f00189cd1c0bc44b7665cd44e4d8b995b5e34d656f4c3b5c493d4fbb1bd7da928cd2dd45bdc8f908f691da209548bf1acea98965382a23e02d2b277
data/lib/alfalfa.rb ADDED
@@ -0,0 +1,13 @@
1
+ require 'alfalfa_mixin'
2
+ require 'energy_plus_mixin'
3
+ require 'input'
4
+ require 'openstudio_mixin'
5
+ require 'output'
6
+ require 'point'
7
+
8
+ # Module which contains all OpenStudio code
9
+ module OpenStudio
10
+ # Module which contains Alfalfa specific functionality
11
+ module Alfalfa
12
+ end
13
+ end
@@ -0,0 +1,99 @@
1
+ require_relative 'utils'
2
+ module OpenStudio
3
+ module Alfalfa
4
+ ##
5
+ # Base mixin for managing alfalfa points
6
+ #
7
+ module AlfalfaMixin
8
+ include OpenStudio::Alfalfa::Utils
9
+ # Create reports of input and outputs for alfalfa
10
+ # Must be executed at the end of the measure to expose points in alfalfa
11
+ def report_inputs_outputs
12
+ @inputs.each do |input|
13
+ next if input.echo.nil?
14
+ next if @outputs.include? input.echo
15
+
16
+ @outputs.append(input.echo)
17
+ end
18
+
19
+ inputs_dict = {}
20
+ outputs_dict = {}
21
+ @inputs.each do |input|
22
+ hash = input.to_dict
23
+ inputs_dict[hash['id']] = hash
24
+ end
25
+ @outputs.each do |output|
26
+ hash = output.to_dict
27
+ outputs_dict[hash['id']] = hash
28
+ end
29
+
30
+ File.open('./report_inputs.json', 'w') do |f|
31
+ JSON.dump(inputs_dict, f)
32
+ end
33
+ File.open('./report_outputs.json', 'w') do |f|
34
+ JSON.dump(outputs_dict, f)
35
+ end
36
+ end
37
+
38
+ # Register an input for inclusion in alfalfa
39
+ #
40
+ # @param [IdfObject, ModelObject, Input] input to register
41
+ # May be:
42
+ # - ExternalInterface:Actuator
43
+ # - ExternalInterface:Variable
44
+ # - ExternalInterface:Schedule
45
+ # - OS:ExternalInterface:Variable
46
+ # - OS:ExternalInterface:Schedule
47
+ # - OS:ExternalInterface:Actuator
48
+ # or:
49
+ # - OpenStudio::Alfalfa::Input
50
+ #
51
+ # @return [Input]
52
+ def register_input(input)
53
+ if input.is_a? OpenStudio::Alfalfa::Input
54
+ @inputs.append(input)
55
+ else
56
+ input = OpenStudio::Alfalfa::Input.new(input)
57
+ register_input(input)
58
+ end
59
+ input
60
+ end
61
+
62
+ # Find an input by it's associated object name
63
+ #
64
+ # @param [String] name Name of input to find
65
+ #
66
+ # @return [Input]
67
+ def get_input_by_name(name)
68
+ @inputs.each do |input|
69
+ next unless input.object.name.get == name
70
+
71
+ return input
72
+ end
73
+ nil
74
+ end
75
+
76
+ # Register an output for inclusion in alfalfa
77
+ #
78
+ # @param output [IdfObject, ModelObject, Output] output to register
79
+ # May be:
80
+ # - Output:Variable
81
+ # - EnergyManagementSystem:OutputVariable
82
+ # - OS:Output:Variable
83
+ # - OS:EnergyManagementSystem:OutputVariable
84
+ # or:
85
+ # - OpenStudio::Alfalfa::Output
86
+ #
87
+ # @return [Output]
88
+ def register_output(output)
89
+ if output.is_a? OpenStudio::Alfalfa::Output
90
+ @outputs.append(output)
91
+ else
92
+ output = OpenStudio::Alfalfa::Output.new(output)
93
+ register_output(output)
94
+ end
95
+ output
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,167 @@
1
+ require_relative 'alfalfa_mixin'
2
+ require_relative 'utils'
3
+ module OpenStudio
4
+ module Alfalfa
5
+ ##
6
+ # EnergyPlusMixin
7
+ #
8
+ # Mixin to include when developing an EnergyPlus Measure
9
+ module EnergyPlusMixin
10
+ include OpenStudio::Alfalfa::AlfalfaMixin
11
+ include OpenStudio::Alfalfa::Utils
12
+
13
+ # Get first node from NodeList
14
+ #
15
+ # @param [String] node NodeList id
16
+ def get_node_from_nodelist(node)
17
+ node_list_object = @workspace.getObjectByTypeAndName('NodeList'.to_IddObjectType, node)
18
+ return node_list_object.get.getField(1).get if node_list_object.is_initialized
19
+
20
+ node
21
+ end
22
+
23
+ # Create Output Variable
24
+ #
25
+ # @param [String] key Key of Output Variable
26
+ # @param [String] var Variable of Output Variable
27
+ #
28
+ # @return [Output]
29
+ def create_output_variable(key, var)
30
+ output_variable_string = "
31
+ Output:Variable,
32
+ #{key},
33
+ #{var},
34
+ Timestep;"
35
+ output_variable_object = OpenStudio::IdfObject.load(output_variable_string).get
36
+ OpenStudio::Alfalfa::Output.new(@workspace.addObject(output_variable_object).get)
37
+ end
38
+
39
+ # Create EMS Output Variable
40
+ #
41
+ # @param [String] name Name of EMS Output Variable to create
42
+ # @param [String] variable EMS name of variable to connect to Output Variable
43
+ # @param [String] unit Unit of output
44
+ #
45
+ # @return [Output]
46
+ def create_ems_output_variable(name, variable, unit = 'C')
47
+ output_variable_string = "
48
+ EnergyManagementSystem:OutputVariable,
49
+ #{name},
50
+ #{variable},
51
+ Averaged,
52
+ SystemTimestep,
53
+ ,
54
+ #{unit};"
55
+ output_variable_object = OpenStudio::IdfObject.load(output_variable_string).get
56
+ OpenStudio::Alfalfa::Output.new(@workspace.addObject(output_variable_object).get)
57
+ end
58
+
59
+ # Create External Interface Variable
60
+ #
61
+ # @param [String] name Name of external variable to create
62
+ # @param [Number] initial_value Initial value of external variable
63
+ #
64
+ # @return [Input]
65
+ def create_external_variable(name, initial_value = 0)
66
+ new_external_variable_string = "
67
+ ExternalInterface:Variable,
68
+ #{create_ems_str(name)}, !- Name,
69
+ #{initial_value}; !- Initial value
70
+ "
71
+ new_external_variable_object = OpenStudio::IdfObject.load(new_external_variable_string).get
72
+ input = OpenStudio::Alfalfa::Input.new(@workspace.addObject(new_external_variable_object).get)
73
+ input.display_name = name
74
+ input
75
+ end
76
+
77
+ # Create enabled input to actuate an EMS variable.
78
+ # This method creates an external variable with the specified name
79
+ # and an EMS program to copy the value to the specified variable if enabled
80
+ # or the default value otherwise
81
+ #
82
+ # @param [String] name Name of input to create
83
+ # @param [String] variable_name EMS name of variable to control
84
+ # @param [String] default Value to have when not enabled. Default to null for actuator control
85
+ #
86
+ # @return [Input]
87
+ def create_enabled_input(name, variable_name, default = 'Null')
88
+ program_name = create_ems_str("#{name}_program")
89
+ alfalfa_input = create_external_variable(name)
90
+ enable_name = create_ems_str("#{name}_Enable")
91
+ alfalfa_input_enable = create_external_variable(enable_name)
92
+ new_program_string = "
93
+ EnergyManagementSystem:Program,
94
+ #{program_name}, !- Name
95
+ IF #{enable_name},
96
+ SET #{variable_name} = #{name},
97
+ ELSE,
98
+ SET #{variable_name} = #{default},
99
+ ENDIF;
100
+ "
101
+ new_program_object = OpenStudio::IdfObject.load(new_program_string).get
102
+ @workspace.addObject(new_program_object)
103
+ register_program(program_name)
104
+ alfalfa_input.enable_variable = alfalfa_input_enable
105
+ alfalfa_input
106
+ end
107
+
108
+ # Create actuator
109
+ #
110
+ # @param name [String] Name of actuator to create
111
+ # @param component [String] Name of component to actuate
112
+ # @param component_type [String] Type of component
113
+ # @param control_type[String] Type of control
114
+ # @param external [Boolean] When true an external interface variable with {name} will be created and returned
115
+ #
116
+ # @return [IdfObject, Input]
117
+ def create_actuator(name, component, component_type, control_type, external = false)
118
+ if external
119
+ actuator_name = create_ems_str("#{name}_actuator")
120
+ actuator_object = create_actuator(actuator_name, component, component_type, control_type)
121
+ input = create_enabled_input(name, actuator_name)
122
+ input.actuator = actuator_object
123
+ echo_name = create_ems_str("#{actuator_name}_echo")
124
+ output = create_ems_output_variable(echo_name, actuator_name)
125
+ input.echo = output
126
+ input
127
+ else
128
+ new_actuator_string = "
129
+ EnergyManagementSystem:Actuator,
130
+ #{name}, !- Name
131
+ #{component}, !- Actuated Component Unique Name
132
+ #{component_type}, !- Actuated Component Type
133
+ #{control_type}; !- Actuated Component Control Type
134
+ "
135
+ new_actuator_object = OpenStudio::IdfObject.load(new_actuator_string).get
136
+ @workspace.addObject(new_actuator_object).get
137
+ end
138
+ end
139
+
140
+ def create_calling_point
141
+ new_calling_manager_string = "
142
+ EnergyManagementSystem:ProgramCallingManager,
143
+ #{create_ems_str(name)}_calling_point, !- Name
144
+ EndOfZoneTimestepBeforeZoneReporting; !- EnergyPlus Model Calling Point
145
+ "
146
+ new_calling_manager_object = OpenStudio::IdfObject.load(new_calling_manager_string).get
147
+ @calling_point_manager = @workspace.addObject(new_calling_manager_object).get
148
+ @program_count = 0
149
+ end
150
+
151
+ def register_program(program_name)
152
+ create_calling_point if @calling_point_manager.nil?
153
+
154
+ @calling_point_manager.setString(2 + @program_count, program_name)
155
+ @program_count += 1
156
+ end
157
+
158
+ def run(workspace, runner, user_arguments)
159
+ super(workspace, runner, user_arguments)
160
+ @workspace = workspace
161
+ @calling_point_manager = nil
162
+ @inputs = []
163
+ @outputs = []
164
+ end
165
+ end
166
+ end
167
+ end
data/lib/input.rb ADDED
@@ -0,0 +1,72 @@
1
+ require 'securerandom'
2
+ require_relative 'utils'
3
+ require_relative 'point'
4
+ module OpenStudio
5
+ module Alfalfa
6
+ ##
7
+ # Input
8
+ #
9
+ # Class which represents an Input point to Alfalfa
10
+ class Input < Point
11
+ include OpenStudio::Alfalfa::Utils
12
+ attr_reader :input_object
13
+
14
+ def initialize(input_object)
15
+ super(input_object)
16
+
17
+ input_type = get_idd_type(input_object)
18
+ name = input_object.name.get
19
+
20
+ case input_type
21
+ when 'ExternalInterface:Actuator'.to_IddObjectType
22
+ @hash['actuator'] = name
23
+ self.actuator = input_object
24
+ when 'ExternalInterface:Variable'.to_IddObjectType
25
+ @hash['variable'] = name
26
+ when 'ExternalInterface:Schedule'.to_IddObjectType
27
+ @hash['schedule'] = name
28
+ when 'OS:ExternalInterface:Variable'.to_IddObjectType
29
+ @hash['variable'] = name
30
+ when 'OS:ExternalInterface:Schedule'.to_IddObjectType
31
+ @hash['schedule'] = name
32
+ when 'OS:ExternalInterface:Actuator'.to_IddObjectType
33
+ @hash['actuator'] = name
34
+ self.actuator = input_object
35
+ else
36
+ raise "#{input_type.valueDescription} is not a valid input type"
37
+ end
38
+ self.display_name = name
39
+ end
40
+
41
+ def actuator=(actuator_object)
42
+ actuator_type = get_idd_type(actuator_object)
43
+
44
+ actuator_types = ['ExternalInterface:Actuator'.to_IddObjectType,
45
+ 'OS:EnergyManagementSystem:Actuator'.to_IddObjectType,
46
+ 'EnergyManagementSystem:Actuator'.to_IddObjectType]
47
+
48
+ unless actuator_types.include? actuator_type
49
+ raise "#{actuator_type.valueDescription} is not a valid actuator type"
50
+ end
51
+
52
+ @hash['actuated_component'] = actuator_object.getString(1).get
53
+ @hash['actuated_component_type'] = actuator_object.getString(2).get
54
+ @hash['actuated_component_control_type'] = actuator_object.getString(3).get
55
+ end
56
+
57
+ def enable_variable=(enable_variable)
58
+ enable_variable = enable_variable.object if enable_variable.instance_of? OpenStudio::Alfalfa::Input
59
+
60
+ enable_variable_type = get_idd_type(enable_variable)
61
+ enable_variable_types = ['ExternalInterface:Variable'.to_IddObjectType,
62
+ 'OS:ExternalInterface:Variable'.to_IddObjectType]
63
+
64
+ unless enable_variable_types.include? enable_variable_type
65
+ raise "#{enable_variable_type.valueDescription} is an invalid enable variable type"
66
+ end
67
+
68
+ @hash['enable_variable'] = enable_variable.name.get
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,117 @@
1
+ require 'alfalfa_mixin'
2
+ module OpenStudio
3
+ module Alfalfa
4
+ ##
5
+ # OpenStudioMixin
6
+ #
7
+ # Mixin to include when developing an Model Measure
8
+ module OpenStudioMixin
9
+ include OpenStudio::Alfalfa::AlfalfaMixin
10
+
11
+ # Create Output Variable
12
+ #
13
+ # @param [String] key Key of Output Variable
14
+ # @param [String] var Variable of Output Variable
15
+ #
16
+ # @return [Output]
17
+ def create_output_variable(key, var)
18
+ output_variable = OpenStudio::Model::OutputVariable.new(create_ems_str("#{key}_#{var}"), @model)
19
+ output_variable.setKeyValue(key)
20
+ output_variable.setVariableName(var)
21
+
22
+ OpenStudio::Alfalfa::Output.new(output_variable)
23
+ end
24
+
25
+ # Create EMS Output Variable
26
+ #
27
+ # @param [String, ModelObject] variable EMS name of variable to connect to Output Variable
28
+ # @param [String] unit Unit of output
29
+ #
30
+ # @return [Output]
31
+ def create_ems_output_variable(variable, unit = 'C')
32
+ output_variable = OpenStudio::Model::EnergyManagementSystemOutputVariable.new(@model, variable)
33
+ output_variable.setUnits(unit)
34
+ Output.new(output_variable)
35
+ end
36
+
37
+ # Create External Interface Variable
38
+ #
39
+ # @param [String] name Name of external variable to create
40
+ # @param [Number] initial_value Initial value of external variable
41
+ #
42
+ # @return [Input]
43
+ def create_external_variable(name, initial_value = 0)
44
+ external_variable = OpenStudio::Model::ExternalInterfaceVariable.new(@model, create_ems_str(name),
45
+ initial_value)
46
+ external_variable.setExportToBCVTB(false)
47
+ Input.new(external_variable)
48
+ end
49
+
50
+ # Create enabled input to actuate an EMS variable.
51
+ # This method creates an external variable with the specified name
52
+ # and an EMS program to copy the value to the specified variable if enabled
53
+ # or the default value otherwise
54
+ #
55
+ # @param [String] name Name of input to create
56
+ # @param [String] variable_name EMS name of variable to control
57
+ # @param [String] default Value to have when not enabled. Default to null for actuator control
58
+ #
59
+ # @return [Input]
60
+ def create_enabled_input(name, variable_name, default = 'Null')
61
+ alfalfa_input = create_external_variable(name)
62
+ enable_name = create_ems_str("#{name}_Enable")
63
+ alfalfa_input_enable = create_external_variable(enable_name)
64
+ new_program = OpenStudio::Model::EnergyManagementSystemProgram.new(@model)
65
+ new_program.setLines(["IF #{enable_name},",
66
+ "SET #{variable_name} = #{name},",
67
+ 'ELSE,',
68
+ "SET #{variable_name} = #{default},",
69
+ 'ENDIF'])
70
+ register_program(new_program)
71
+ alfalfa_input.enable_variable = alfalfa_input_enable
72
+ alfalfa_input
73
+ end
74
+
75
+ # Create actuator
76
+ #
77
+ # @param name [String] Name of actuator to create
78
+ # @param component [ModelObject] component to actuate
79
+ # @param component_type[String] Type of component
80
+ # @param control_type [String] Type of control
81
+ # @param external [Boolean] When true an external interface variable with {name} will be created and returned
82
+ #
83
+ # @return [ModelObject, Input]
84
+ def create_actuator(name, component, component_type, control_type, external = false)
85
+ if external
86
+ actuator_name = create_ems_str("#{name}_actuator")
87
+ actuator_object = create_actuator(actuator_name, component, component_type, control_type)
88
+ input = create_enabled_input(name, actuator_name)
89
+ input.actuator = actuator_object
90
+ output = create_ems_output_variable(actuator_object)
91
+ input.echo = output
92
+ input
93
+ else
94
+ OpenStudio::Model::EnergyManagementSystemActuator.new(component, component_type, control_type)
95
+ end
96
+ end
97
+
98
+ def create_calling_point
99
+ @calling_point_manager = OpenStudio::Model::EnergyManagementSystemProgramCallingManager.new(@model)
100
+ @calling_point_manager.setCallingPoint('EndOfZoneTimestepBeforeZoneReporting')
101
+ end
102
+
103
+ def register_program(program)
104
+ create_calling_point if @calling_point_manager.nil?
105
+ @calling_point_manager.addProgram(program)
106
+ end
107
+
108
+ def run(model, runner, user_arguments)
109
+ super(model, runner, user_arguments)
110
+ @model = model
111
+ @calling_point_manager = nil
112
+ @inputs = []
113
+ @outputs = []
114
+ end
115
+ end
116
+ end
117
+ end
data/lib/output.rb ADDED
@@ -0,0 +1,48 @@
1
+ require 'securerandom'
2
+ require 'openstudio'
3
+ require_relative 'utils'
4
+ require_relative 'point'
5
+ module OpenStudio
6
+ module Alfalfa
7
+ ##
8
+ # Output
9
+ #
10
+ # Class which represents an Output point to Alfalfa
11
+ class Output < Point
12
+ include OpenStudio::Alfalfa::Utils
13
+ def initialize(output_object)
14
+ super(output_object)
15
+ output_type = get_idd_type(@object)
16
+
17
+ case output_type
18
+ when 'Output:Variable'.to_IddObjectType
19
+ @hash['component'] = @object.getString(0).get
20
+ @hash['variable'] = @object.getString(1).get
21
+ when 'EnergyManagementSystem:OutputVariable'.to_IddObjectType
22
+ @hash['component'] = 'EMS'
23
+ self.display_name = @object.name.get
24
+ @hash['variable'] = @object.getString(0).get
25
+ self.units = @object.getString(5).get
26
+ when 'OS:Output:Variable'.to_IddObjectType
27
+ @hash['component'] = @object.keyValue
28
+ @hash['variable'] = @object.variableName
29
+ self.display_name = @object.name.get
30
+ when 'OS:EnergyManagementSystem:OutputVariable'.to_IddObjectType
31
+ @hash['component'] = 'EMS'
32
+ @hash['variable'] = @object.name.get
33
+ self.display_name = @object.name.get
34
+ else
35
+ raise "#{output_type.valueDescription} is not a valid output type"
36
+ end
37
+ end
38
+
39
+ def component
40
+ @hash['component']
41
+ end
42
+
43
+ def variable
44
+ @hash['variable']
45
+ end
46
+ end
47
+ end
48
+ end
data/lib/point.rb ADDED
@@ -0,0 +1,71 @@
1
+ require 'securerandom'
2
+ module OpenStudio
3
+ module Alfalfa
4
+ ##
5
+ # Point
6
+ # Base type for input and output point in alfalfa
7
+ class Point
8
+ attr_reader :echo, :object
9
+
10
+ # @param [IdfObject, ModelObject] object
11
+ def initialize(object)
12
+ @hash = {}
13
+ @hash['id'] = SecureRandom.uuid
14
+ @object = object
15
+ end
16
+
17
+ # Unique identifier of point
18
+ #
19
+ # @return [String]
20
+ def id
21
+ @hash['id']
22
+ end
23
+
24
+ # Display name used by Alfalfa
25
+ #
26
+ # @return [String]
27
+ def display_name
28
+ @hash['display_name']
29
+ end
30
+
31
+ def display_name=(display_name)
32
+ @hash['display_name'] = display_name
33
+ end
34
+
35
+ def echo=(output)
36
+ @echo = output
37
+ @hash['echo_id'] = output.id
38
+ end
39
+
40
+ def units=(units)
41
+ @hash['units'] = units
42
+ end
43
+
44
+ # Units for point
45
+ #
46
+ # @return [String]
47
+ def units
48
+ @hash['units']
49
+ end
50
+
51
+ # Add zone that point is related to
52
+ #
53
+ # @param zone [String]
54
+ def add_zone(zone)
55
+ if @hash.key? 'zone'
56
+ @hash['zone'].append(zone)
57
+ else
58
+ @hash['zone'] = [zone]
59
+ end
60
+ end
61
+
62
+ # Get dictionary of point
63
+ # This is used when compiling reports
64
+ #
65
+ # @return [Hash]
66
+ def to_dict
67
+ @hash
68
+ end
69
+ end
70
+ end
71
+ end
data/lib/utils.rb ADDED
@@ -0,0 +1,36 @@
1
+ require 'openstudio'
2
+ module OpenStudio
3
+ module Alfalfa
4
+ ##
5
+ # This module provides utility functions
6
+ # for alfalfa and openstudio
7
+ module Utils
8
+ # Get Idd Type
9
+ # get the Idd type of objects in either an OSW of IDF context
10
+ #
11
+ # @param [ModelObject, IdfObject] object Object to get type of
12
+ #
13
+ # @return [IddType]
14
+ def get_idd_type(object)
15
+ if object.is_a? OpenStudio::Model::ModelObject
16
+ object.iddObjectType
17
+ elsif object.is_a? OpenStudio::IdfObject
18
+ object.iddObject.type
19
+ else
20
+ raise "cannot get idd_type of #{object.class}"
21
+ end
22
+ end
23
+
24
+ # return string formatted with no spaces or '-' (can be used as EMS var name)
25
+ # strings beginning with numbers will be prepended with '_'
26
+ # @param [String] id String to process into an EMS valid string
27
+ #
28
+ # @return [String]
29
+ def create_ems_str(id)
30
+ id = id.gsub(/[\s-]/, '_')
31
+ id = "_#{id}" if (id =~ /[0-9].*/) == 0
32
+ id
33
+ end
34
+ end
35
+ end
36
+ end
data/lib/version.rb ADDED
@@ -0,0 +1,6 @@
1
+ module OpenStudio
2
+ module Alfalfa
3
+ # Alfalfa Gem Version
4
+ VERSION = '0.0.0'.freeze
5
+ end
6
+ end
metadata ADDED
@@ -0,0 +1,51 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: alfalfa-lib
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Tobias Shapinsky
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-07-25 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Library and measures to create input and output points in Alfalfa
14
+ email:
15
+ - tobias.shapinsky@nrel.gov
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/alfalfa.rb
21
+ - lib/alfalfa_mixin.rb
22
+ - lib/energy_plus_mixin.rb
23
+ - lib/input.rb
24
+ - lib/openstudio_mixin.rb
25
+ - lib/output.rb
26
+ - lib/point.rb
27
+ - lib/utils.rb
28
+ - lib/version.rb
29
+ homepage: https://github.com/NREL/alfalfa
30
+ licenses: []
31
+ metadata: {}
32
+ post_install_message:
33
+ rdoc_options: []
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 2.7.0
41
+ required_rubygems_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ requirements: []
47
+ rubygems_version: 3.1.4
48
+ signing_key:
49
+ specification_version: 4
50
+ summary: Create input and output points in Aflalfa
51
+ test_files: []