浏览代码

fixed some bugs

chenhaiyang 4 年之前
父节点
当前提交
bde4610914

+ 22 - 7
app/api/routers/equipment.py

@@ -2,17 +2,18 @@
 
 from enum import Enum
 
-from fastapi import APIRouter, HTTPException, Query
+from fastapi import APIRouter, Query
 from loguru import logger
 
-from app.controllers.equipment.vav import VAVController
+from app.controllers.equipment.fcu import get_fcu_control_result
+from app.controllers.equipment.vav import get_vav_control_result
 from app.models.equipment import EquipmentControlInResponse
 from app.utils.date import get_time_str
 
 
 class EquipmentName(str, Enum):
-    FCU = 'ATFC'
-    VAV = 'ATVA'
+    FCU = 'ACATFC'
+    VAV = 'ACATVA'
 
 
 router = APIRouter()
@@ -25,12 +26,26 @@ async def get_equipment_command(
         equipType: EquipmentName = Query(...),
         method: int = Query(3),
 ):
+    if equipType.value == EquipmentName.FCU:
+        fcu = await get_fcu_control_result(projectId, equipId)
+        output = {
+            'RunStatus': 1 if fcu.running_status else 0,
+            'WorkModeSet': 1,
+            'FanGearSet': fcu.air_valve_speed.value,
+            'IndoorAirTempSet': fcu.setting_temperature
+        }
+    elif equipType.value == EquipmentName.VAV:
+        vav = await get_vav_control_result(projectId, equipId)
+        output = {
+            'SupplyAirFlowSet': vav.supply_air_flow_set
+        }
+    else:
+        output = {}
+
     response = {
         'projectId': projectId,
         'equipId': equipId,
-        'method': method,
-        'flag': 1,
         'time': get_time_str(),
-        'output': {}
+        'output': output
     }
     return response

+ 8 - 2
app/controllers/equipment/fcu.py

@@ -9,6 +9,7 @@ from app.models.equipment import AirValveSpeed
 from app.models.equipment import FCU
 from app.models.space import Space
 from app.services.transfer import SpaceInfoService, EquipmentInfoService
+from app.services.platform import DataPlatformService
 
 
 class FCUController(EquipmentController):
@@ -19,7 +20,7 @@ class FCUController(EquipmentController):
 
     async def get_temperature_target(self) -> float:
         target = self._equipment.space.temperature_target
-        if target is not np.NAN and target > 0:
+        if not np.isnan(target) and target > 0:
             setting_target = target
         else:
             setting_target = 25.0
@@ -31,8 +32,10 @@ class FCUController(EquipmentController):
         temperature_target = await self.get_temperature_target()
         if temperature_target and temperature_target > 0:
             self._equipment.air_valve_speed = AirValveSpeed.auto
+            self._equipment.water_valve_status = True
         else:
             self._equipment.air_valve_speed = AirValveSpeed.off
+            self._equipment.water_valve_status = False
 
     async def run(self):
         await self.get_temperature_target()
@@ -47,13 +50,16 @@ class FCUController(EquipmentController):
 async def get_fcu_control_result(project_id: str, equipment_id: str) -> FCU:
     async with AsyncClient() as client:
         duo_duo = EquipmentInfoService(client, project_id)
+        platform = DataPlatformService(client, project_id)
         spaces = await duo_duo.get_space_by_equipment(equipment_id)
         for sp in spaces:
             transfer = SpaceInfoService(client, project_id, sp.get('id'))
             current_target = await transfer.get_current_temperature_target()
+            realtime_temperature = await platform.get_realtime_temperature(sp.get('id'))
             temp_space_params = {
                 'id': sp.get('id'),
-                'temperature_target': current_target
+                'temperature_target': current_target,
+                'realtime_temperature': realtime_temperature
             }
             space = Space(**temp_space_params)
             break

+ 9 - 6
app/controllers/equipment/vav.py

@@ -32,13 +32,14 @@ class VAVController(EquipmentController):
     async def get_temperature(self) -> Tuple[float, float]:
         target_list, realtime_list = [], []
         buffer_list = []
-        strategy = self.get_strategy()
+        strategy = await self.get_strategy()
+        logger.info(strategy)
         for space in self._equipment.spaces:
-            if strategy == 'Plan A':
-                target_list.append(space.temperature_target)
-                realtime_list.append(space.realtime_temperature)
-            elif strategy == 'Plan B':
+            target_list.append(space.temperature_target)
+            realtime_list.append(space.realtime_temperature)
+            if strategy == 'Plan B':
                 for eq in space.equipment:
+                    logger.info(eq)
                     if isinstance(eq, FCU):
                         buffer = (4 - eq.air_valve_speed) / 4
                         buffer_list.append(buffer)
@@ -52,8 +53,10 @@ class VAVController(EquipmentController):
         return target_result, realtime_result
 
     async def get_supply_air_flow_set(self) -> float:
-        temperature_set, temperature_realtime = self.get_temperature()
+        temperature_set, temperature_realtime = await self.get_temperature()
         temperature_supply = self._equipment.supply_air_temperature
+        if np.isnan(temperature_supply):
+            temperature_supply = 19.0
         supply_air_flow_set = self._equipment.supply_air_flow * ((temperature_supply - temperature_set)
                                                                  / (temperature_supply - temperature_realtime))
         self._equipment.supply_air_flow_set = supply_air_flow_set

+ 1 - 3
app/models/equipment.py

@@ -13,7 +13,7 @@ class AirValveSpeed(int, Enum):
     low = 1
     medium = 2
     high = 3
-    auto = -1
+    auto = 4
 
 
 class BaseEquipment(BaseModel):
@@ -39,7 +39,5 @@ class EquipmentControlInResponse(BaseModel):
     result: str = 'success'
     projectId: str
     equipId: str
-    method: int
-    flag: int
     time: str
     output: dict

+ 2 - 2
app/models/space.py

@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 
-from typing import List
+from typing import List, Optional
 
 from pydantic import BaseModel
 
@@ -8,7 +8,7 @@ from pydantic import BaseModel
 class Space(BaseModel):
     id: str
     realtime_temperature: float
-    equipment: List[str]
+    equipment: Optional[List]
     temperature_target: float
 
 

+ 1 - 1
app/services/transfer.py

@@ -192,7 +192,7 @@ class EquipmentInfoService(Service):
         url = self._base_url.join('duoduo-service/object-service/object/space/findForServe')
         params = {
             'projectId': self._project_id,
-            'spaceId': equipment_id
+            'objectId': equipment_id
         }
         raw_info = await self._post(url, params)