basic.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. from typing import Dict
  2. import numpy as np
  3. from loguru import logger
  4. from app.controllers.equipment.controller import EquipmentController
  5. from app.models.domain.devices import ACATVIInstructionsRequest
  6. from app.schemas.equipment import VRF
  7. class VRFController(EquipmentController):
  8. def __init__(self, device: VRF, target: float, realtime: float):
  9. super(VRFController, self).__init__()
  10. self.device = device
  11. self.target = target
  12. self.realtime = realtime
  13. def get_switch_set(self, speed: str) -> bool:
  14. if speed == 'off':
  15. switch_set = False
  16. else:
  17. switch_set = True
  18. self.device.equip_switch_set = switch_set
  19. return switch_set
  20. def get_mode_set(self) -> str:
  21. if self.target > self.realtime:
  22. mode_set = 'cooling'
  23. else:
  24. mode_set = 'cooling'
  25. self.device.mode_set = mode_set
  26. return mode_set
  27. def get_temperature_set(self) -> float:
  28. self.device.temperature_set = self.target + 1
  29. return self.target
  30. def get_speed_set(self) -> str:
  31. if self.realtime > self.device.return_air_temp:
  32. diff = self.realtime - self.target
  33. else:
  34. diff = self.device.return_air_temp - (self.target + 1)
  35. if diff < 0:
  36. speed = 'off'
  37. elif diff < 0.5:
  38. speed = 'LL'
  39. elif diff < 1.0:
  40. speed = 'L'
  41. elif diff < 1.5:
  42. speed = 'M'
  43. elif diff < 2.0:
  44. speed = 'H'
  45. elif diff > 2.0:
  46. speed = 'HH'
  47. else:
  48. speed = 'off'
  49. self.device.speed_set = speed
  50. return speed
  51. async def run(self):
  52. speed = self.get_speed_set()
  53. self.get_switch_set(speed)
  54. self.get_mode_set()
  55. self.get_temperature_set()
  56. def get_results(self):
  57. return self.device
  58. @logger.catch()
  59. async def build_acatvi_instructions(params: ACATVIInstructionsRequest) -> Dict:
  60. target = np.NAN if params.space_temperature_target == -1.0 else params.space_temperature_target
  61. realtime = np.NAN if params.space_realtime_temperature == -1.0 else params.space_realtime_temperature
  62. return_air_temp = np.NAN if params.return_air_temperature == -1.0 else params.return_air_temperature
  63. vrf = VRF(return_air_temp=return_air_temp)
  64. controller = VRFController(vrf, target, realtime)
  65. await controller.run()
  66. regulated_vrf = controller.get_results()
  67. instructions = {'switch_set': 'on' if regulated_vrf.equip_switch_set else 'off'}
  68. if regulated_vrf.equip_switch_set:
  69. instructions.update({'speed_set': regulated_vrf.speed_set})
  70. instructions.update({'temperature_set': regulated_vrf.temperature_set})
  71. instructions.update({'mode_set': regulated_vrf.mode_set})
  72. return instructions