basic.py 2.5 KB

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