equipment.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. # -*- coding: utf-8 -*-
  2. from enum import Enum
  3. import numpy as np
  4. from fastapi import APIRouter, Depends, Query
  5. from loguru import logger
  6. from sqlalchemy.orm import Session
  7. from app.api.dependencies.db import get_db
  8. from app.controllers.equipment.fcu.basic import get_fcu_control_result
  9. from app.controllers.equipment.vav import get_vav_control_v2
  10. from app.models.domain.equipment import EquipmentControlResponse, EquipmentControlRequest, EquipmentInstructionsResponse
  11. from app.schemas.equipment import PAU
  12. from app.utils.date import get_time_str
  13. class EquipmentName(str, Enum):
  14. FCU = 'ACATFC'
  15. VAV = 'ACATVA'
  16. router = APIRouter()
  17. @router.get('/control', response_model=EquipmentControlResponse)
  18. async def get_equipment_command_test(
  19. project_id: str = Query(..., max_length=50, regex='^Pj', alias='projectId'),
  20. equip_id: str = Query(..., max_length=50, regex='^Eq', alias='equipId'),
  21. equip_type: EquipmentName = Query(..., alias='equipType'),
  22. db: Session = Depends(get_db)
  23. ):
  24. if equip_type.value == EquipmentName.FCU:
  25. output = await get_fcu_control_result(project_id, equip_id)
  26. elif equip_type.value == EquipmentName.VAV:
  27. vav = await get_vav_control_v2(db, project_id, equip_id)
  28. output = {
  29. 'SupplyAirFlowSet': vav.supply_air_flow_set,
  30. 'VirtualRealtimeTemperature': vav.virtual_realtime_temperature if not np.isnan(
  31. vav.virtual_realtime_temperature) else None,
  32. 'TargetTemperatureSet': vav.virtual_target_temperature if not np.isnan(
  33. vav.virtual_target_temperature) else None
  34. }
  35. else:
  36. output = {}
  37. response = {
  38. 'projectId': project_id,
  39. 'equipId': equip_id,
  40. 'time': get_time_str(),
  41. 'output': output
  42. }
  43. return response
  44. @router.post('/control', response_model=EquipmentControlResponse)
  45. async def get_equipment_command(equipment_control_info: EquipmentControlRequest, db: Session = Depends(get_db)):
  46. if equipment_control_info.equipType == EquipmentName.FCU:
  47. output = await get_fcu_control_result(equipment_control_info.projectId, equipment_control_info.equipId)
  48. elif equipment_control_info.equipType == EquipmentName.VAV:
  49. vav = await get_vav_control_v2(db, equipment_control_info.projectId, equipment_control_info.equipId)
  50. output = {
  51. 'SupplyAirFlowSet': vav.supply_air_flow_set,
  52. 'VirtualRealtimeTemperature': vav.virtual_realtime_temperature if not np.isnan(
  53. vav.virtual_realtime_temperature) else None,
  54. 'TargetTemperatureSet': vav.virtual_target_temperature if not np.isnan(
  55. vav.virtual_target_temperature) else None
  56. }
  57. else:
  58. output = {}
  59. response = {
  60. 'projectId': equipment_control_info.projectId,
  61. 'equipId': equipment_control_info.equipId,
  62. 'time': get_time_str(),
  63. 'output': output
  64. }
  65. logger.info(response)
  66. return response
  67. @router.post('/control/atva/v2', response_model=EquipmentControlResponse)
  68. async def get_fcu_command(equipment_control_info: EquipmentControlRequest, db: Session = Depends(get_db)):
  69. vav = await get_vav_control_v2(db, equipment_control_info.projectId, equipment_control_info.equipId)
  70. output = {
  71. 'SupplyAirFlowSet': vav.supply_air_flow_set,
  72. 'VirtualRealtimeTemperature': vav.virtual_realtime_temperature if not np.isnan(
  73. vav.virtual_realtime_temperature) else None,
  74. 'TargetTemperatureSet': vav.virtual_target_temperature if not np.isnan(vav.virtual_target_temperature) else None
  75. }
  76. response = {
  77. 'projectId': equipment_control_info.projectId,
  78. 'equipId': equipment_control_info.equipId,
  79. 'time': get_time_str(),
  80. 'output': output
  81. }
  82. logger.info(response)
  83. return response
  84. @router.get('/instructions/acatah', response_model=EquipmentInstructionsResponse)
  85. async def get_acatah_instructions(
  86. project_id: str = Query(..., max_length=50, regex='^Pj', alias='projectId'),
  87. equip_id: str = Query(..., max_length=50, regex='^Eq', alias='equipId')
  88. ):
  89. pass
  90. @router.get('/instructions/acvtsf', response_model=EquipmentInstructionsResponse)
  91. async def get_acvtsf_instructions(
  92. project_id: str = Query(..., max_length=50, regex='^Pj', alias='projectId'),
  93. equip_id: str = Query(..., max_length=50, regex='^Eq', alias='equipId')
  94. ):
  95. pass
  96. @router.get('/instructions/acatfu', response_model=PAU)
  97. async def get_acatfu_instructions(
  98. project_id: str = Query(..., max_length=50, regex='^Pj', alias='projectId'),
  99. equip_id: str = Query(..., max_length=50, regex='^Eq', alias='equipId')
  100. ):
  101. pass