basic.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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. need_send = False
  64. if self.get_switch_set() != 'hold':
  65. need_send = True
  66. if self.device.temperature_set != self.device.current_temperature_set:
  67. need_send = True
  68. if self.device.speed_set != self.device.speed:
  69. need_send = True
  70. return need_send
  71. def get_results(self):
  72. return self.device
  73. @logger.catch()
  74. async def build_acatvi_instructions(params: ACATVIInstructionsRequest) -> Dict:
  75. target = np.NAN if params.space_temperature_target == -1.0 else params.space_temperature_target
  76. realtime = np.NAN if params.space_realtime_temperature == -1.0 else params.space_realtime_temperature
  77. return_air_temp = np.NAN if params.return_air_temperature == -1.0 else params.return_air_temperature
  78. vrf = VRF(return_air_temp=return_air_temp)
  79. controller = VRFController(vrf, target, realtime)
  80. need_send = await controller.run()
  81. regulated_vrf = controller.get_results()
  82. instructions = {
  83. 'switch_set': regulated_vrf.equip_switch_set,
  84. 'need_send': need_send
  85. }
  86. if regulated_vrf.equip_switch_set != 'off':
  87. instructions.update({'speed_set': regulated_vrf.speed_set})
  88. instructions.update({'temperature_set': regulated_vrf.temperature_set})
  89. instructions.update({'mode_set': regulated_vrf.mode_set})
  90. return instructions