fcu.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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.transfer import SpaceInfoService, EquipmentInfoService
  10. class FCUController(EquipmentController):
  11. def __init__(self, equipment: FCU):
  12. super(FCUController, self).__init__()
  13. self._equipment = equipment
  14. async def get_temperature_target(self) -> float:
  15. target = self._equipment.space.temperature_target
  16. if target is not np.NAN and target > 0:
  17. setting_target = target
  18. else:
  19. setting_target = 25.0
  20. self._equipment.setting_temperature = setting_target
  21. return setting_target
  22. async def get_air_valve_speed(self):
  23. temperature_target = await self.get_temperature_target()
  24. if temperature_target and temperature_target > 0:
  25. self._equipment.air_valve_speed = AirValveSpeed.auto
  26. else:
  27. self._equipment.air_valve_speed = AirValveSpeed.off
  28. async def run(self):
  29. await self.get_temperature_target()
  30. await self.get_air_valve_speed()
  31. self._equipment.running_status = True
  32. def get_results(self):
  33. return self._equipment
  34. @logger.catch()
  35. async def get_fcu_control_result(project_id: str, equipment_id: str) -> FCU:
  36. async with AsyncClient() as client:
  37. duo_duo = EquipmentInfoService(client, project_id)
  38. spaces = await duo_duo.get_space_by_equipment(equipment_id)
  39. for sp in spaces:
  40. transfer = SpaceInfoService(client, project_id, sp.get('id'))
  41. current_target = await transfer.get_current_temperature_target()
  42. temp_space_params = {
  43. 'id': sp.get('id'),
  44. 'temperature_target': current_target
  45. }
  46. space = Space(**temp_space_params)
  47. break
  48. fcu_temp_params = {
  49. 'id': equipment_id,
  50. 'space': space
  51. }
  52. fcu = FCU(**fcu_temp_params)
  53. fcu_controller = FCUController(fcu)
  54. await fcu_controller.run()
  55. regulated_fcu = fcu_controller.get_results()
  56. return regulated_fcu