basic.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. # -*- coding: utf-8 -*-
  2. from typing import List, Optional
  3. import numpy as np
  4. from httpx import AsyncClient
  5. from loguru import logger
  6. from app.models.domain.devices import ACATAHFreqSetRequest
  7. from app.schemas.equipment import AHU
  8. from app.schemas.system import ACAT
  9. from app.services.platform import DataPlatformService, InfoCode
  10. from app.services.transfer import Duoduo
  11. class AHUController:
  12. def __init__(self, equipment: Optional[AHU] = None, system: Optional[ACAT] = None):
  13. super(AHUController, self).__init__()
  14. self._equipment = equipment
  15. self._system = system
  16. async def build_freq_set(
  17. self, supply_air_temperature_set_duration: List, hot_rate: float
  18. ) -> float:
  19. extent = 5
  20. if (
  21. np.isnan(self._equipment.fan_freq_set)
  22. or np.isnan(self._system.supply_static_press)
  23. or np.isnan(self._system.supply_static_press_set)
  24. ):
  25. temp_freq_set = 80.0
  26. else:
  27. pre_fan_freq_set = self._equipment.fan_freq_set
  28. if (
  29. self._system.supply_static_press
  30. < self._system.supply_static_press_set - extent
  31. ):
  32. temp_freq_set = pre_fan_freq_set + 2
  33. elif (
  34. self._system.supply_static_press
  35. > self._system.supply_static_press_set + extent
  36. ):
  37. temp_freq_set = pre_fan_freq_set - 2
  38. else:
  39. temp_freq_set = pre_fan_freq_set
  40. temperature_value_list = np.array(supply_air_temperature_set_duration)
  41. freq_upper_limit = 90.0
  42. if (
  43. temperature_value_list.size > 0
  44. and np.all(temperature_value_list == temperature_value_list[0])
  45. and temperature_value_list[0] <= 18.0
  46. and hot_rate >= 0.5
  47. ):
  48. freq_upper_limit = 100.0
  49. freq_set = min(temp_freq_set, freq_upper_limit)
  50. self._equipment.fan_freq_set = freq_set
  51. return freq_set
  52. @logger.catch()
  53. async def get_freq_controlled(project_id: str, equipment_id: str) -> None:
  54. async with AsyncClient() as client:
  55. platform = DataPlatformService(client, project_id)
  56. review_service = Duoduo(client, project_id)
  57. fan_freq_set = await platform.get_realtime_fan_freq_set(equipment_id)
  58. # system = await equip_service.get_system_by_equipment(equipment_id)
  59. system = ["Sy1101050030eab54ad66b084a1cb1b919950b263280"]
  60. press = await platform.get_realtime_supply_static_press(system[0])
  61. press_set = await platform.get_realtime_supply_static_press_set(system[0])
  62. count = await review_service.get_fill_count()
  63. try:
  64. hot_rate = count.get("hotNum") / (
  65. count.get("hotNum") + count.get("coldNum") + count.get("normalNum")
  66. )
  67. except (ZeroDivisionError, KeyError):
  68. hot_rate = 0.0
  69. raw_supply_air_temperature_set = await platform.get_duration(
  70. InfoCode.supply_air_temperature_set, equipment_id, 30 * 60
  71. )
  72. supply_air_temperature_set = [
  73. item["value"] for item in raw_supply_air_temperature_set
  74. ]
  75. equip_params = {"id": equipment_id, "fan_freq_set": fan_freq_set}
  76. ahu = AHU(**equip_params)
  77. system_params = {
  78. "id": system[0],
  79. "supply_static_press": press,
  80. "supply_static_press_set": press_set,
  81. }
  82. acat_system = ACAT(**system_params)
  83. ahu_controller = AHUController(ahu, acat_system)
  84. new_freq_set = await ahu_controller.build_freq_set(
  85. supply_air_temperature_set, hot_rate
  86. )
  87. logger.debug(f"{equipment_id} freq set: {new_freq_set}")
  88. async with AsyncClient() as client:
  89. platform = DataPlatformService(client, project_id)
  90. await platform.set_code_value(equipment_id, InfoCode.fan_freq_set, new_freq_set)
  91. @logger.catch()
  92. async def build_acatah_freq_set(params: ACATAHFreqSetRequest) -> float:
  93. acat_system = ACAT(
  94. supply_static_press=params.system_supply_static_press,
  95. supply_static_press_set=params.system_supply_static_press_set,
  96. )
  97. ahu = AHU(fan_freq_set=params.current_freq_set)
  98. ahu_controller = AHUController(ahu, acat_system)
  99. new_freq_set = await ahu_controller.build_freq_set(
  100. params.supply_air_temperature_set_list, params.spaces_hot_rate
  101. )
  102. return new_freq_set