Browse Source

add a fcu control logic writen by wenyan

chenhaiyang 4 years ago
parent
commit
4e3cc424a7
2 changed files with 63 additions and 3 deletions
  1. 2 2
      app/api/routers/equipment.py
  2. 61 1
      app/controllers/equipment/fcu/basic.py

+ 2 - 2
app/api/routers/equipment.py

@@ -30,7 +30,7 @@ async def get_equipment_command_test(
         db: Session = Depends(get_db)
 ):
     if equip_type.value == EquipmentName.FCU:
-        if project_id == 'Pj1101050030':
+        if project_id in ['Pj1101050030', 'Pj1101080259']:
             output = await get_fcu_control_result(project_id, equip_id)
         else:
             output = await get_fcu_q_learning_control_result(project_id, equip_id)
@@ -56,7 +56,7 @@ async def get_equipment_command_test(
 @router.post('/control', response_model=EquipmentControlResponse)
 async def get_equipment_command(equipment_control_info: EquipmentControlRequest, db: Session = Depends(get_db)):
     if equipment_control_info.equipType == EquipmentName.FCU:
-        if equipment_control_info.projectId == 'Pj1101050030':
+        if equipment_control_info.projectId in ['Pj1101050030', 'Pj1101080259']:
             output = await get_fcu_control_result(equipment_control_info.projectId, equipment_control_info.equipId)
         else:
             output = await get_fcu_q_learning_control_result(

+ 61 - 1
app/controllers/equipment/fcu/basic.py

@@ -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,