equipment.py 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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_v1, get_vav_control_v2
  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. ):
  22. if equip_type.value == EquipmentName.FCU:
  23. output = await get_fcu_control_result(project_id, equip_id)
  24. elif equip_type.value == EquipmentName.VAV:
  25. vav = await get_vav_control_v1(project_id, equip_id)
  26. output = {
  27. 'SupplyAirFlowSet': vav.supply_air_flow_set,
  28. 'VirtualRealtimeTemperature': vav.virtual_realtime_temperature,
  29. 'TargetTemperatureSet': vav.virtual_target_temperature
  30. }
  31. else:
  32. output = {}
  33. response = {
  34. 'projectId': project_id,
  35. 'equipId': equip_id,
  36. 'time': get_time_str(),
  37. 'output': output
  38. }
  39. return response
  40. @router.post('/control', response_model=EquipmentControlResponse)
  41. async def get_equipment_command(equipment_control_info: EquipmentControlRequest):
  42. if equipment_control_info.equipType == EquipmentName.FCU:
  43. output = await get_fcu_control_result(equipment_control_info.projectId, equipment_control_info.equipId)
  44. elif equipment_control_info.equipType == EquipmentName.VAV:
  45. vav = await get_vav_control_v1(equipment_control_info.projectId, equipment_control_info.equipId)
  46. output = {
  47. 'SupplyAirFlowSet': vav.supply_air_flow_set,
  48. 'VirtualRealtimeTemperature': vav.virtual_realtime_temperature if not np.isnan(
  49. vav.virtual_realtime_temperature) else None,
  50. 'TargetTemperatureSet': vav.virtual_target_temperature if not np.isnan(
  51. vav.virtual_target_temperature) else None
  52. }
  53. else:
  54. output = {}
  55. response = {
  56. 'projectId': equipment_control_info.projectId,
  57. 'equipId': equipment_control_info.equipId,
  58. 'time': get_time_str(),
  59. 'output': output
  60. }
  61. logger.info(response)
  62. return response
  63. @router.post('/control/atva/v2', response_model=EquipmentControlResponse)
  64. async def get_fcu_command(equipment_control_info: EquipmentControlRequest, db: Session = Depends(get_db)):
  65. vav = await get_vav_control_v2(db, equipment_control_info.projectId, equipment_control_info.equipId)
  66. output = {
  67. 'SupplyAirFlowSet': vav.supply_air_flow_set,
  68. 'VirtualRealtimeTemperature': vav.virtual_realtime_temperature if not np.isnan(
  69. vav.virtual_realtime_temperature) else None,
  70. 'TargetTemperatureSet': vav.virtual_target_temperature if not np.isnan(vav.virtual_target_temperature) else None
  71. }
  72. response = {
  73. 'projectId': equipment_control_info.projectId,
  74. 'equipId': equipment_control_info.equipId,
  75. 'time': get_time_str(),
  76. 'output': output
  77. }
  78. logger.info(response)
  79. return response