fcu.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. # -*- coding: utf-8 -*-
  2. import numpy as np
  3. from httpx import AsyncClient
  4. from loguru import logger
  5. from app.controllers.equipment.controller import EquipmentController
  6. from app.models.equipment import AirValveSpeed
  7. from app.models.equipment import FCU
  8. from app.models.space import Space
  9. from app.services.platform import DataPlatformService
  10. from app.services.transfer import SpaceInfoService, EquipmentInfoService
  11. class FCUController(EquipmentController):
  12. def __init__(self, equipment: FCU):
  13. super(FCUController, self).__init__()
  14. self._equipment = equipment
  15. async def get_temperature_target(self) -> float:
  16. target = self._equipment.space.temperature_target
  17. if not np.isnan(target) and target > 0:
  18. setting_target = target
  19. else:
  20. setting_target = 25.0
  21. self._equipment.setting_temperature = setting_target
  22. return setting_target
  23. async def get_air_valve_speed(self):
  24. temperature_target = await self.get_temperature_target()
  25. if temperature_target and temperature_target > 0:
  26. self._equipment.air_valve_speed = AirValveSpeed.auto
  27. self._equipment.water_valve_status = True
  28. else:
  29. self._equipment.air_valve_speed = AirValveSpeed.off
  30. self._equipment.water_valve_status = False
  31. async def run(self):
  32. await self.get_temperature_target()
  33. await self.get_air_valve_speed()
  34. self._equipment.running_status = True
  35. def get_results(self):
  36. return self._equipment
  37. @logger.catch()
  38. async def get_fcu_control_result(project_id: str, equipment_id: str) -> FCU:
  39. async with AsyncClient() as client:
  40. duo_duo = EquipmentInfoService(client, project_id)
  41. platform = DataPlatformService(client, project_id)
  42. spaces = await duo_duo.get_space_by_equipment(equipment_id)
  43. for sp in spaces:
  44. transfer = SpaceInfoService(client, project_id, sp.get('id'))
  45. current_target = await transfer.get_current_temperature_target()
  46. realtime_temperature = await platform.get_realtime_temperature(sp.get('id'))
  47. temp_space_params = {
  48. 'id': sp.get('id'),
  49. 'temperature_target': current_target,
  50. 'realtime_temperature': realtime_temperature
  51. }
  52. space = Space(**temp_space_params)
  53. break
  54. fcu_temp_params = {
  55. 'id': equipment_id,
  56. 'space': space
  57. }
  58. fcu = FCU(**fcu_temp_params)
  59. fcu_controller = FCUController(fcu)
  60. await fcu_controller.run()
  61. regulated_fcu = fcu_controller.get_results()
  62. return regulated_fcu