Added window width parameter into natural ventilation widgets
This commit is contained in:
parent
5d6f248e67
commit
1bd2d37fa4
1 changed files with 52 additions and 6 deletions
|
|
@ -278,7 +278,45 @@ class ModelWidgets(View):
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def _build_window_width(self, node):
|
||||||
|
window_width = widgets.FloatSlider(value=node.window_width, min=0, max=2, step=0.1)
|
||||||
|
|
||||||
|
def window_width_change(change):
|
||||||
|
node.window_width = change['new']
|
||||||
|
|
||||||
|
window_width.observe(window_width_change, names=['value'])
|
||||||
|
|
||||||
|
return widgets.HBox([widgets.Label('Width of window (m)', layout=widgets.Layout(min_width='228px')), window_width])
|
||||||
|
|
||||||
def _build_window(self, node) -> WidgetGroup:
|
def _build_window(self, node) -> WidgetGroup:
|
||||||
|
window_type_widgets = {
|
||||||
|
'SlidingWindow': widgets.Box([]), # No widgets for SlidingWindow default value
|
||||||
|
'HingedWindow': self._build_window_width(node._states['HingedWindow'])
|
||||||
|
}
|
||||||
|
|
||||||
|
for name, widget in window_type_widgets.items():
|
||||||
|
widget.layout.visible = False
|
||||||
|
|
||||||
|
window_type_w = widgets.ToggleButtons(
|
||||||
|
options=[('Sliding/Side-Hung', 'SlidingWindow'), ('Top-or Bottom-Hung', 'HingedWindow')],
|
||||||
|
button_style='info',
|
||||||
|
style={'button_width':'120px'},
|
||||||
|
)
|
||||||
|
|
||||||
|
def toggle_window_type(value):
|
||||||
|
for name, widget in window_type_widgets.items():
|
||||||
|
widget.layout.visible = False
|
||||||
|
widget.layout.display = 'none'
|
||||||
|
|
||||||
|
node.dcs_select(value)
|
||||||
|
|
||||||
|
widget = window_type_widgets[value]
|
||||||
|
widget.layout.visible = True
|
||||||
|
widget.layout.display = 'flex'
|
||||||
|
|
||||||
|
window_type_w.observe(lambda event: toggle_window_type(event['new']), 'value')
|
||||||
|
toggle_window_type(window_type_w.value)
|
||||||
|
|
||||||
period = widgets.IntSlider(value=node.active.period, min=0, max=240)
|
period = widgets.IntSlider(value=node.active.period, min=0, max=240)
|
||||||
interval = widgets.IntSlider(value=node.active.duration, min=0, max=240)
|
interval = widgets.IntSlider(value=node.active.duration, min=0, max=240)
|
||||||
inside_temp = widgets.IntSlider(value=node.inside_temp.values[0]-273.15, min=15., max=25.)
|
inside_temp = widgets.IntSlider(value=node.inside_temp.values[0]-273.15, min=15., max=25.)
|
||||||
|
|
@ -305,7 +343,7 @@ class ModelWidgets(View):
|
||||||
outsidetemp_w = widgets.ToggleButtons(
|
outsidetemp_w = widgets.ToggleButtons(
|
||||||
options=outsidetemp_widgets.keys(),
|
options=outsidetemp_widgets.keys(),
|
||||||
button_style='info',
|
button_style='info',
|
||||||
style={'button_width':'100px'}
|
style={'button_width':'120px'}
|
||||||
# tooltips=[],
|
# tooltips=[],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -342,7 +380,7 @@ class ModelWidgets(View):
|
||||||
)
|
)
|
||||||
for sub_group in outsidetemp_widgets.values():
|
for sub_group in outsidetemp_widgets.values():
|
||||||
result.add_pairs(sub_group.pairs())
|
result.add_pairs(sub_group.pairs())
|
||||||
return result
|
return widgets.VBox([widgets.VBox([widgets.HBox([widgets.Label('Window type:', layout=widgets.Layout(min_width='228px')), window_type_w]), widgets.HBox(list(window_type_widgets.values()))]), result.build()])
|
||||||
|
|
||||||
def _build_q_air_mech(self, node):
|
def _build_q_air_mech(self, node):
|
||||||
q_air_mech = widgets.IntSlider(value=node.q_air_mech, min=0, max=1000, step=5)
|
q_air_mech = widgets.IntSlider(value=node.q_air_mech, min=0, max=1000, step=5)
|
||||||
|
|
@ -465,14 +503,14 @@ class ModelWidgets(View):
|
||||||
],
|
],
|
||||||
) -> widgets.Widget:
|
) -> widgets.Widget:
|
||||||
ventilation_widgets = {
|
ventilation_widgets = {
|
||||||
'Natural': self._build_window(node._states['Natural']).build(),
|
'SlidingWindow': self._build_window(node),
|
||||||
'HVACMechanical': self._build_mechanical(node),
|
'HVACMechanical': self._build_mechanical(node),
|
||||||
}
|
}
|
||||||
for name, widget in ventilation_widgets.items():
|
for name, widget in ventilation_widgets.items():
|
||||||
widget.layout.visible = False
|
widget.layout.visible = False
|
||||||
|
|
||||||
ventilation_w = widgets.Dropdown(
|
ventilation_w = widgets.Dropdown(
|
||||||
options=[('Natural', 'Natural'), ('Mechanical', 'HVACMechanical'), ('No ventilation', 'No ventilation')],
|
options=[('Natural', 'SlidingWindow'), ('Mechanical', 'HVACMechanical'), ('No ventilation', 'No ventilation')],
|
||||||
button_style='info',
|
button_style='info',
|
||||||
style={'button_width':'100px'}
|
style={'button_width':'100px'}
|
||||||
# tooltips=[],
|
# tooltips=[],
|
||||||
|
|
@ -569,13 +607,21 @@ class CARAStateBuilder(state.StateBuilder):
|
||||||
def build_type__VentilationBase(self, _: dataclasses.Field):
|
def build_type__VentilationBase(self, _: dataclasses.Field):
|
||||||
s: state.DataclassStateNamed = state.DataclassStateNamed(
|
s: state.DataclassStateNamed = state.DataclassStateNamed(
|
||||||
states={
|
states={
|
||||||
'Natural': self.build_generic(models.WindowOpening),
|
'SlidingWindow': self.build_generic(models.SlidingWindow),
|
||||||
|
'HingedWindow': self.build_generic(models.HingedWindow),
|
||||||
'HVACMechanical': self.build_generic(models.HVACMechanical),
|
'HVACMechanical': self.build_generic(models.HVACMechanical),
|
||||||
'AirChange': self.build_generic(models.AirChange),
|
'AirChange': self.build_generic(models.AirChange),
|
||||||
'No ventilation': self.build_generic(models.AirChange),
|
'No ventilation': self.build_generic(models.AirChange),
|
||||||
},
|
},
|
||||||
state_builder=self,
|
state_builder=self,
|
||||||
)
|
)
|
||||||
|
# Initialise the HingedWindow state
|
||||||
|
s._states['HingedWindow'].dcs_update_from(
|
||||||
|
models.HingedWindow(active=models.PeriodicInterval(period=120, duration=15),
|
||||||
|
inside_temp=models.PiecewiseConstant((0., 24.), (293.15,)),
|
||||||
|
outside_temp=models.PiecewiseConstant((0., 24.), (283.15,)),
|
||||||
|
window_height=1.6, opening_length=0.6, window_width=.5)
|
||||||
|
)
|
||||||
# Initialise the HVAC state
|
# Initialise the HVAC state
|
||||||
s._states['HVACMechanical'].dcs_update_from(
|
s._states['HVACMechanical'].dcs_update_from(
|
||||||
models.HVACMechanical(models.PeriodicInterval(period=24*60, duration=24*60), 500.)
|
models.HVACMechanical(models.PeriodicInterval(period=24*60, duration=24*60), 500.)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue