equipment.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. # -*- coding: utf-8 -*-
  2. from enum import Enum
  3. from fastapi import APIRouter, Query
  4. from loguru import logger
  5. from app.controllers.equipment.fcu.basic import get_fcu_control_result
  6. from app.controllers.equipment.fcu.q_learning import get_fcu_q_learning_control_result
  7. from app.controllers.equipment.vav import get_vav_control_result
  8. from app.models.domain.equipment import EquipmentControlResponse, EquipmentControlRequest
  9. from app.utils.date import get_time_str
  10. from app.utils.math import round_half_up
  11. class EquipmentName(str, Enum):
  12. FCU = 'ACATFC'
  13. VAV = 'ACATVA'
  14. router = APIRouter()
  15. @router.get('/control', response_model=EquipmentControlResponse)
  16. async def get_equipment_command_test(
  17. project_id: str = Query(..., max_length=50, regex='^Pj', alias='projectId'),
  18. equip_id: str = Query(..., max_length=50, regex='^Eq', alias='equipId'),
  19. equip_type: EquipmentName = Query(..., alias='equipType'),
  20. ):
  21. if equip_type.value == EquipmentName.FCU:
  22. if project_id == 'Pj1101050030':
  23. fcu = await get_fcu_control_result(project_id, equip_id)
  24. output = {
  25. 'EquipSwitchSet': 1 if fcu.running_status else 0,
  26. 'WorkModeSet': 3,
  27. 'FanGearSet': fcu.air_valve_speed.value,
  28. 'IndoorAirTempSet': fcu.setting_temperature
  29. }
  30. else:
  31. output = await get_fcu_q_learning_control_result(project_id, equip_id)
  32. elif equip_type.value == EquipmentName.VAV:
  33. vav = await get_vav_control_result(project_id, equip_id)
  34. output = {
  35. 'SupplyAirFlowSet': vav.supply_air_flow_set
  36. }
  37. else:
  38. output = {}
  39. response = {
  40. 'projectId': project_id,
  41. 'equipId': equip_id,
  42. 'time': get_time_str(),
  43. 'output': output
  44. }
  45. return response
  46. @router.post('/control', response_model=EquipmentControlResponse)
  47. async def get_equipment_command(equipment_control_info: EquipmentControlRequest):
  48. if equipment_control_info.equipType == EquipmentName.FCU:
  49. if equipment_control_info.projectId == 'Pj1101050030':
  50. fcu = await get_fcu_control_result(equipment_control_info.projectId, equipment_control_info.equipId)
  51. output = {
  52. 'EquipSwitchSet': 1 if fcu.running_status else 0,
  53. 'WorkModeSet': 3,
  54. 'IndoorAirTempSet': int(round_half_up(fcu.setting_temperature, 1) * 10)
  55. }
  56. if fcu.air_valve_speed.value != 0.0:
  57. output.update({'FanGearSet': fcu.air_valve_speed.value})
  58. else:
  59. output = await get_fcu_q_learning_control_result(
  60. equipment_control_info.projectId,
  61. equipment_control_info.equipId
  62. )
  63. elif equipment_control_info.equipType == EquipmentName.VAV:
  64. vav = await get_vav_control_result(equipment_control_info.projectId, equipment_control_info.equipId)
  65. output = {
  66. 'SupplyAirFlowSet': vav.supply_air_flow_set
  67. }
  68. else:
  69. output = {}
  70. response = {
  71. 'projectId': equipment_control_info.projectId,
  72. 'equipId': equipment_control_info.equipId,
  73. 'time': get_time_str(),
  74. 'output': output
  75. }
  76. logger.info(response)
  77. return response