Browse Source

add supply temperature for FCU's mode judging

highing666 4 years ago
parent
commit
daacb05f48
2 changed files with 41 additions and 17 deletions
  1. 39 17
      app/controllers/equipment/fcu/basic.py
  2. 2 0
      app/schemas/equipment.py

+ 39 - 17
app/controllers/equipment/fcu/basic.py

@@ -9,7 +9,7 @@ from loguru import logger
 from app.controllers.equipment.controller import EquipmentController
 from app.schemas.equipment import AirValveSpeed, FCU
 from app.schemas.space import Space
-from app.services.platform import DataPlatformService
+from app.services.platform import DataPlatformService, InfoCode
 from app.services.transfer import SpaceInfoService, Duoduo, Season
 from app.utils.math import round_half_up
 
@@ -97,12 +97,23 @@ class FCUControllerV2(EquipmentController):
         self.season = season
 
     def get_mode(self) -> int:
-        if self.season == Season.heating:
-            mode = 2
-        elif self.season == Season.cooling:
-            mode = 1
+        if not np.isnan(self.equipment.water_out_temperature):
+            if self.equipment.water_out_temperature > self.equipment.space.temperature_target:
+                mode = 2
+            else:
+                mode = 1
+        elif not np.isnan(self.equipment.supply_air_temperature):
+            if self.equipment.supply_air_temperature > self.equipment.space.temperature_target:
+                mode = 2
+            else:
+                mode = 1
         else:
-            mode = 0
+            if self.season == Season.heating:
+                mode = 2
+            elif self.season == Season.cooling:
+                mode = 1
+            else:
+                mode = 0
         self.equipment.work_mode = mode
 
         return mode
@@ -111,17 +122,24 @@ class FCUControllerV2(EquipmentController):
         target = self.equipment.space.temperature_target
         if target > 0:
             if self.equipment.space.realtime_temperature > 0:
-                if self.season == Season.heating:
+                mode = self.get_mode()
+                if mode == 2:
                     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
+                elif mode == 1:
+                    diff = self.equipment.space.realtime_temperature - target
+                else:
+                    diff = 0
+
+                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.medium
         else:
@@ -155,6 +173,8 @@ async def get_fcu_control_result(project_id: str, equipment_id: str) -> Dict:
         duo_duo = Duoduo(client, project_id)
         platform = DataPlatformService(client, project_id)
         spaces = await duo_duo.get_space_by_equipment(equipment_id)
+        supply_air_temperature = await platform.get_realtime_data(InfoCode.supply_temperature, equipment_id)
+        water_out_temperature = await platform.get_realtime_data(InfoCode.water_out_temperature, equipment_id)
         for sp in spaces:
             transfer = SpaceInfoService(client, project_id, sp.get('id'))
             current_target = await transfer.get_current_temperature_target()
@@ -170,7 +190,9 @@ async def get_fcu_control_result(project_id: str, equipment_id: str) -> Dict:
 
         fcu_temp_params = {
             'id': equipment_id,
-            'space': space
+            'space': space,
+            'supply_air_temperature': supply_air_temperature,
+            'water_out_temperature': water_out_temperature
         }
         fcu = FCU(**fcu_temp_params)
 

+ 2 - 0
app/schemas/equipment.py

@@ -29,6 +29,8 @@ class FCU(BaseEquipment):
     air_valve_speed: Optional[AirValveSpeed] = AirValveSpeed.off
     space: Optional[Space]
     setting_temperature: Optional[float] = 0.0
+    supply_air_temperature: Optional[float] = 0.0
+    water_out_temperature: Optional[float] = 0.0
 
 
 class VAVBox(BaseEquipment):