diff --git a/emscore/thermostat_control.py b/emscore/thermostat_control.py new file mode 100644 index 0000000..470bc1b --- /dev/null +++ b/emscore/thermostat_control.py @@ -0,0 +1,52 @@ +__author__ = 'Olivier Van Cutsem' + +from building_data_management.category_management.category_config import * +from ems_config import * +from ems_main import EnergyManagementSystem + + +## Various strategies + +class EMS_Thermostat(EnergyManagementSystem): + + def __init__(self, in_q, out_q, gui_q): + """ + Initialize ClusteringManagementSystem object. + Read messages from the BMS interface bubble messages through a Queue + + """ + super(EMS_Thermostat, self).__init__(in_q, out_q, gui_q) + + def update(self): + """ + TODO + """ + commands_set = [] + + ## HVAC commands + hvac_list = self.building_data.get_entity_list([EMS_CATEGORY_ENTITY_LOAD, + EMS_CATEGORY_ENTITY_LOAD_THERM]) + + for (hvac_id, hvac_obj) in hvac_list: + room_id = self.get_thermal_load_room(hvac_id) # Get the id of the room where the HVAC is active + room_th_constr = self.building_data.room(room_id).get_comfort_constraint(EMS_COMFORT_temperature) # Get the id of the room where the HVAC is active + room_temperature = self.building_data.room(room_id).get_comfort_value(EMS_COMFORT_temperature) + + print("Room temp: {0}".format(room_temperature)) + print("Room temp constraints: {0} - {1}".format(room_th_constr.get_min(self.current_time), room_th_constr.get_max(self.current_time))) + + if room_temperature < room_th_constr.get_min(self.current_time): ## Switch it on ? + commands_set.append(self.hvac_set_point(hvac_id, 100)) + elif room_temperature > room_th_constr.get_max(self.current_time): ## Switch it off ? + commands_set.append(self.hvac_set_point(hvac_id, 0)) + + print("[{1}s] EMS core decides to send: {0}".format(commands_set, self.current_time)) + + return commands_set + + def get_thermal_load_room(self, th_l_id): + for r_id in self.building_data.room_ids_list: + if th_l_id in self.building_data.room(r_id).get_comfort_loads(EMS_COMFORT_temperature): + return r_id + + return None