basic.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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:
  16. switch_set = 'off'
  17. else:
  18. switch_set = 'hold'
  19. else:
  20. if not self.device.running_status:
  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. if np.isnan(self.device.current_temperature_set):
  44. self.device.temperature_set = 25.0
  45. else:
  46. self.device.temperature_set = self.device.current_temperature_set
  47. return self.device.temperature_set
  48. def get_speed_set(self) -> str:
  49. if self.realtime >= 24.0:
  50. speed = 'M'
  51. elif self.realtime <= 22.0:
  52. speed = 'LL'
  53. elif self.device.return_air_temp - self.target >= 3.0:
  54. speed = 'HH'
  55. elif self.device.return_air_temp - self.target >= 1.0:
  56. speed = 'M'
  57. else:
  58. if self.device.speed == 'missing':
  59. speed = 'M'
  60. else:
  61. speed = self.device.speed
  62. self.device.speed_set = speed
  63. return speed
  64. async def run(self):
  65. self.get_speed_set()
  66. self.get_switch_set()
  67. self.get_mode_set()
  68. self.get_temperature_set()
  69. need_send = False
  70. if self.get_switch_set() != 'hold':
  71. need_send = True
  72. if self.device.temperature_set != self.device.current_temperature_set:
  73. need_send = True
  74. if self.device.speed_set != self.device.speed:
  75. need_send = True
  76. return need_send
  77. def get_results(self):
  78. return self.device
  79. @logger.catch()
  80. async def build_acatvi_instructions(params: ACATVIInstructionsRequest) -> Dict:
  81. target = np.NAN if params.space_temperature_target == -1.0 else params.space_temperature_target
  82. realtime = np.NAN if params.space_realtime_temperature == -1.0 else params.space_realtime_temperature
  83. return_air_temp = np.NAN if params.return_air_temperature == -1.0 else params.return_air_temperature
  84. if params.running_status == 'missing':
  85. return {'need_send': False}
  86. elif params.running_status == 'on':
  87. running_status = True
  88. else:
  89. running_status = False
  90. vrf = VRF(
  91. return_air_temp=return_air_temp,
  92. current_temperature_set=np.NAN if params.current_temperature_set == -1.0 else params.current_temperature_set,
  93. speed=params.current_speed,
  94. running_status=running_status
  95. )
  96. controller = VRFController(vrf, target, realtime)
  97. need_send = await controller.run()
  98. regulated_vrf = controller.get_results()
  99. instructions = {
  100. 'switch_set': regulated_vrf.equip_switch_set,
  101. 'need_send': need_send
  102. }
  103. if regulated_vrf.equip_switch_set != 'off':
  104. instructions.update({'speed_set': regulated_vrf.speed_set})
  105. instructions.update({'temperature_set': regulated_vrf.temperature_set})
  106. instructions.update({'mode_set': regulated_vrf.mode_set})
  107. return instructions