equipment.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. # -*- coding: utf-8 -*-
  2. from enum import Enum
  3. from fastapi import APIRouter, Depends, Query
  4. from loguru import logger
  5. from sqlalchemy.orm import Session
  6. from app.api.dependencies.db import get_db
  7. from app.controllers.equipment.fcu.basic import get_fcu_control_result
  8. from app.controllers.equipment.fcu.q_learning import get_fcu_q_learning_control_result
  9. from app.controllers.equipment.vav import get_vav_control_result
  10. from app.models.domain.equipment import EquipmentControlResponse, EquipmentControlRequest
  11. from app.utils.date import get_time_str
  12. class EquipmentName(str, Enum):
  13. FCU = 'ACATFC'
  14. VAV = 'ACATVA'
  15. router = APIRouter()
  16. @router.get('/control', response_model=EquipmentControlResponse)
  17. async def get_equipment_command_test(
  18. project_id: str = Query(..., max_length=50, regex='^Pj', alias='projectId'),
  19. equip_id: str = Query(..., max_length=50, regex='^Eq', alias='equipId'),
  20. equip_type: EquipmentName = Query(..., alias='equipType'),
  21. db: Session = Depends(get_db)
  22. ):
  23. if equip_type.value == EquipmentName.FCU:
  24. if project_id == 'Pj1101050030':
  25. output = await get_fcu_control_result(project_id, equip_id)
  26. else:
  27. output = await get_fcu_q_learning_control_result(project_id, equip_id)
  28. elif equip_type.value == EquipmentName.VAV:
  29. vav = await get_vav_control_result(db, project_id, equip_id)
  30. output = {
  31. 'SupplyAirFlowSet': vav.supply_air_flow_set,
  32. 'VirtualRealtimeTemperature': vav.virtual_realtime_temperature,
  33. 'TargetTemperatureSet': vav.virtual_target_temperature
  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. if equipment_control_info.projectId == 'Pj1101050030':
  48. output = await get_fcu_control_result(equipment_control_info.projectId, equipment_control_info.equipId)
  49. else:
  50. output = await get_fcu_q_learning_control_result(
  51. equipment_control_info.projectId,
  52. equipment_control_info.equipId
  53. )
  54. elif equipment_control_info.equipType == EquipmentName.VAV:
  55. vav = await get_vav_control_result(db, equipment_control_info.projectId, equipment_control_info.equipId)
  56. output = {
  57. 'SupplyAirFlowSet': vav.supply_air_flow_set,
  58. 'VirtualRealtimeTemperature': vav.virtual_realtime_temperature,
  59. 'TargetTemperatureSet': vav.virtual_target_temperature
  60. }
  61. else:
  62. output = {}
  63. response = {
  64. 'projectId': equipment_control_info.projectId,
  65. 'equipId': equipment_control_info.equipId,
  66. 'time': get_time_str(),
  67. 'output': output
  68. }
  69. logger.info(response)
  70. return response