|
@@ -88,6 +88,61 @@ class FCUController(EquipmentController):
|
|
|
return self._equipment
|
|
|
|
|
|
|
|
|
+class FCUControllerV2(EquipmentController):
|
|
|
+ """Writen by Wenyan"""
|
|
|
+
|
|
|
+ def __init__(self, equipment: FCU, season: Season):
|
|
|
+ super(FCUControllerV2, self).__init__()
|
|
|
+ self.equipment = equipment
|
|
|
+ self.season = season
|
|
|
+
|
|
|
+ def get_mode(self) -> int:
|
|
|
+ if self.season == Season.heating:
|
|
|
+ mode = 2
|
|
|
+ elif self.season == Season.cooling:
|
|
|
+ mode = 1
|
|
|
+ else:
|
|
|
+ mode = 0
|
|
|
+ self.equipment.work_mode = mode
|
|
|
+
|
|
|
+ return mode
|
|
|
+
|
|
|
+ def build_air_valve_speed(self):
|
|
|
+ target = self.equipment.space.temperature_target
|
|
|
+ if target > 0:
|
|
|
+ if self.season == Season.heating:
|
|
|
+ diff = target - self.equipment.space.realtime_temperature
|
|
|
+ if diff < 0:
|
|
|
+ speed = AirValveSpeed.off
|
|
|
+ elif diff < 0.5:
|
|
|
+ speed = AirValveSpeed.low
|
|
|
+ elif diff < 1.5:
|
|
|
+ speed = AirValveSpeed.medium
|
|
|
+ else:
|
|
|
+ speed = AirValveSpeed.high
|
|
|
+ self.equipment.air_valve_speed = speed
|
|
|
+ else:
|
|
|
+ self.equipment.air_valve_speed = AirValveSpeed.off
|
|
|
+
|
|
|
+ def build_running_status(self):
|
|
|
+ if self.equipment.air_valve_speed == AirValveSpeed.off:
|
|
|
+ self.equipment.running_status = False
|
|
|
+ else:
|
|
|
+ self.equipment.running_status = True
|
|
|
+
|
|
|
+ def build_temperature_set(self):
|
|
|
+ self.equipment.setting_temperature = self.equipment.space.temperature_target
|
|
|
+
|
|
|
+ async def run(self):
|
|
|
+ self.build_air_valve_speed()
|
|
|
+ self.build_running_status()
|
|
|
+ self.get_mode()
|
|
|
+ self.build_temperature_set()
|
|
|
+
|
|
|
+ def get_results(self):
|
|
|
+ return self.equipment
|
|
|
+
|
|
|
+
|
|
|
@logger.catch()
|
|
|
async def get_fcu_control_result(project_id: str, equipment_id: str) -> Dict:
|
|
|
async with AsyncClient() as client:
|
|
@@ -113,10 +168,15 @@ async def get_fcu_control_result(project_id: str, equipment_id: str) -> Dict:
|
|
|
}
|
|
|
fcu = FCU(**fcu_temp_params)
|
|
|
|
|
|
- fcu_controller = FCUController(fcu, season)
|
|
|
+ if project_id == 'Pj1101050030':
|
|
|
+ fcu_controller = FCUController(fcu, season)
|
|
|
+ else:
|
|
|
+ fcu_controller = FCUControllerV2(fcu, season)
|
|
|
await fcu_controller.run()
|
|
|
regulated_fcu = fcu_controller.get_results()
|
|
|
|
|
|
+ logger.debug(fcu)
|
|
|
+
|
|
|
output = {
|
|
|
'onOff': 1 if regulated_fcu.running_status else 0,
|
|
|
'mode': regulated_fcu.work_mode,
|