equipment.py 4.7 KB

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