|
@@ -1,87 +0,0 @@
|
|
-# -*- coding: utf-8 -*-
|
|
|
|
-
|
|
|
|
-import numpy as np
|
|
|
|
-from httpx import AsyncClient
|
|
|
|
-from loguru import logger
|
|
|
|
-
|
|
|
|
-from app.controllers.equipment.controller import EquipmentController
|
|
|
|
-from app.schemas.equipment import AirValveSpeed, FCU, Space
|
|
|
|
-from app.services.platform import DataPlatformService
|
|
|
|
-from app.services.transfer import SpaceInfoService, EquipmentInfoService
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-class FCUController(EquipmentController):
|
|
|
|
-
|
|
|
|
- def __init__(self, equipment: FCU):
|
|
|
|
- super(FCUController, self).__init__()
|
|
|
|
- self._equipment = equipment
|
|
|
|
-
|
|
|
|
- async def get_temperature_target(self) -> float:
|
|
|
|
- target = self._equipment.space.temperature_target
|
|
|
|
- if not np.isnan(target):
|
|
|
|
- setting_target = target
|
|
|
|
- else:
|
|
|
|
- setting_target = 25.0
|
|
|
|
- self._equipment.setting_temperature = setting_target
|
|
|
|
-
|
|
|
|
- return setting_target
|
|
|
|
-
|
|
|
|
- async def get_air_valve_speed(self):
|
|
|
|
- temperature_target = await self.get_temperature_target()
|
|
|
|
- if temperature_target > 0:
|
|
|
|
- diff = self._equipment.space.realtime_temperature - temperature_target
|
|
|
|
- if diff >= 2.0:
|
|
|
|
- self._equipment.air_valve_speed = AirValveSpeed.high
|
|
|
|
- elif diff >= 1.0:
|
|
|
|
- self._equipment.air_valve_speed = AirValveSpeed.medium
|
|
|
|
- elif diff >= 0.0:
|
|
|
|
- self._equipment.air_valve_speed = AirValveSpeed.low
|
|
|
|
- else:
|
|
|
|
- self._equipment.air_valve_speed = AirValveSpeed.off
|
|
|
|
- else:
|
|
|
|
- self._equipment.air_valve_speed = AirValveSpeed.off
|
|
|
|
-
|
|
|
|
- async def get_running_status(self):
|
|
|
|
- if self._equipment.air_valve_speed == AirValveSpeed.off:
|
|
|
|
- self._equipment.running_status = False
|
|
|
|
- else:
|
|
|
|
- self._equipment.running_status = True
|
|
|
|
-
|
|
|
|
- async def run(self):
|
|
|
|
- await self.get_temperature_target()
|
|
|
|
- await self.get_air_valve_speed()
|
|
|
|
- await self.get_running_status()
|
|
|
|
-
|
|
|
|
- def get_results(self):
|
|
|
|
- return self._equipment
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-@logger.catch()
|
|
|
|
-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,
|
|
|
|
- 'realtime_temperature': realtime_temperature
|
|
|
|
- }
|
|
|
|
- space = Space(**temp_space_params)
|
|
|
|
- break
|
|
|
|
-
|
|
|
|
- fcu_temp_params = {
|
|
|
|
- 'id': equipment_id,
|
|
|
|
- 'space': space
|
|
|
|
- }
|
|
|
|
- fcu = FCU(**fcu_temp_params)
|
|
|
|
-
|
|
|
|
- fcu_controller = FCUController(fcu)
|
|
|
|
- await fcu_controller.run()
|
|
|
|
- regulated_fcu = fcu_controller.get_results()
|
|
|
|
-
|
|
|
|
- return regulated_fcu
|
|
|