basic.py 2.5 KB

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