equipment.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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.fcu.q_learning import get_fcu_q_learning_control_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
  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. ):
  23. if equip_type.value == EquipmentName.FCU:
  24. if project_id in ['Pj1101050030', 'Pj1101080259']:
  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_v1(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):
  46. if equipment_control_info.equipType == EquipmentName.FCU:
  47. if equipment_control_info.projectId in ['Pj1101050030', 'Pj1101080259']:
  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_v1(equipment_control_info.projectId, equipment_control_info.equipId)
  56. output = {
  57. 'SupplyAirFlowSet': vav.supply_air_flow_set,
  58. 'VirtualRealtimeTemperature': vav.virtual_realtime_temperature if not np.isnan(
  59. vav.virtual_realtime_temperature) else None,
  60. 'TargetTemperatureSet': vav.virtual_target_temperature if not np.isnan(
  61. vav.virtual_target_temperature) else None
  62. }
  63. else:
  64. output = {}
  65. response = {
  66. 'projectId': equipment_control_info.projectId,
  67. 'equipId': equipment_control_info.equipId,
  68. 'time': get_time_str(),
  69. 'output': output
  70. }
  71. logger.info(response)
  72. return response
  73. @router.post('/control/atva/v2', response_model=EquipmentControlResponse)
  74. async def get_fcu_command(equipment_control_info: EquipmentControlRequest, db: Session = Depends(get_db)):
  75. vav = await get_vav_control_v2(db, equipment_control_info.projectId, equipment_control_info.equipId)
  76. output = {
  77. 'SupplyAirFlowSet': vav.supply_air_flow_set,
  78. 'VirtualRealtimeTemperature': vav.virtual_realtime_temperature if not np.isnan(
  79. vav.virtual_realtime_temperature) else None,
  80. 'TargetTemperatureSet': vav.virtual_target_temperature if not np.isnan(vav.virtual_target_temperature) else None
  81. }
  82. response = {
  83. 'projectId': equipment_control_info.projectId,
  84. 'equipId': equipment_control_info.equipId,
  85. 'time': get_time_str(),
  86. 'output': output
  87. }
  88. logger.info(response)
  89. return response