basic.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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) -> str:
  14. if np.isnan(self.target):
  15. if self.device.running_status == 'on':
  16. switch_set = 'off'
  17. else:
  18. switch_set = 'hold'
  19. else:
  20. if self.device.running_status == 'off':
  21. switch_set = 'on'
  22. else:
  23. switch_set = 'hold'
  24. self.device.equip_switch_set = switch_set
  25. return switch_set
  26. def get_mode_set(self) -> str:
  27. if self.target > self.realtime:
  28. mode_set = 'cooling'
  29. else:
  30. mode_set = 'cooling'
  31. self.device.mode_set = mode_set
  32. return mode_set
  33. def get_temperature_set(self) -> float:
  34. if self.realtime > 24.0:
  35. diff = self.device.return_air_temp - self.realtime
  36. if diff > 0:
  37. self.device.temperature_set = self.target + diff
  38. else:
  39. self.device.temperature_set = self.target
  40. elif self.realtime < 22.0:
  41. self.device.temperature_set = self.device.return_air_temp + 1
  42. else:
  43. self.device.temperature_set = self.device.current_temperature_set
  44. return self.device.temperature_set
  45. def get_speed_set(self) -> str:
  46. if self.realtime > 24.0:
  47. speed = 'M'
  48. elif self.realtime < 22.0:
  49. speed = 'LL'
  50. elif self.device.return_air_temp - self.target > 3.0:
  51. speed = 'HH'
  52. elif self.device.return_air_temp - self.target > 1.0:
  53. speed = 'M'
  54. else:
  55. speed = self.device.speed
  56. self.device.speed_set = speed
  57. return speed
  58. async def run(self):
  59. self.get_speed_set()
  60. self.get_switch_set()
  61. self.get_mode_set()
  62. self.get_temperature_set()
  63. def get_results(self):
  64. return self.device
  65. @logger.catch()
  66. async def build_acatvi_instructions(params: ACATVIInstructionsRequest) -> Dict:
  67. target = np.NAN if params.space_temperature_target == -1.0 else params.space_temperature_target
  68. realtime = np.NAN if params.space_realtime_temperature == -1.0 else params.space_realtime_temperature
  69. return_air_temp = np.NAN if params.return_air_temperature == -1.0 else params.return_air_temperature
  70. vrf = VRF(return_air_temp=return_air_temp)
  71. controller = VRFController(vrf, target, realtime)
  72. await controller.run()
  73. regulated_vrf = controller.get_results()
  74. instructions = {'switch_set': 'on' if regulated_vrf.equip_switch_set else 'off'}
  75. if regulated_vrf.equip_switch_set:
  76. instructions.update({'speed_set': regulated_vrf.speed_set})
  77. instructions.update({'temperature_set': regulated_vrf.temperature_set})
  78. instructions.update({'mode_set': regulated_vrf.mode_set})
  79. return instructions