equipment.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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 (
  11. EquipmentControlResponse,
  12. EquipmentControlRequest,
  13. )
  14. from app.schemas.equipment import PAU
  15. from app.utils.date import get_time_str
  16. class EquipmentName(str, Enum):
  17. FCU = "ACATFC"
  18. VAV = "ACATVA"
  19. router = APIRouter()
  20. @router.get("/control", response_model=EquipmentControlResponse)
  21. async def get_equipment_command_test(
  22. project_id: str = Query(..., max_length=50, regex="^Pj", alias="projectId"),
  23. equip_id: str = Query(..., max_length=50, regex="^Eq", alias="equipId"),
  24. equip_type: EquipmentName = Query(..., alias="equipType"),
  25. db: Session = Depends(get_db),
  26. ):
  27. if equip_type.value == EquipmentName.FCU:
  28. output = await get_fcu_control_result(project_id, equip_id)
  29. elif equip_type.value == EquipmentName.VAV:
  30. vav = await get_vav_control_v2(db, project_id, equip_id)
  31. output = {
  32. "SupplyAirFlowSet": vav.supply_air_flow_set,
  33. "VirtualRealtimeTemperature": vav.virtual_realtime_temperature
  34. if not np.isnan(vav.virtual_realtime_temperature)
  35. else None,
  36. "TargetTemperatureSet": vav.virtual_target_temperature
  37. if not np.isnan(vav.virtual_target_temperature)
  38. else None,
  39. }
  40. else:
  41. output = {}
  42. response = {
  43. "projectId": project_id,
  44. "equipId": equip_id,
  45. "time": get_time_str(),
  46. "output": output,
  47. }
  48. return response
  49. @router.post("/control", response_model=EquipmentControlResponse)
  50. async def get_equipment_command(
  51. equipment_control_info: EquipmentControlRequest, db: Session = Depends(get_db)
  52. ):
  53. if equipment_control_info.equipType == EquipmentName.FCU:
  54. output = await get_fcu_control_result(
  55. equipment_control_info.projectId, equipment_control_info.equipId
  56. )
  57. elif equipment_control_info.equipType == EquipmentName.VAV:
  58. vav = await get_vav_control_v2(
  59. db, equipment_control_info.projectId, equipment_control_info.equipId
  60. )
  61. output = {
  62. "SupplyAirFlowSet": vav.supply_air_flow_set,
  63. "VirtualRealtimeTemperature": vav.virtual_realtime_temperature
  64. if not np.isnan(vav.virtual_realtime_temperature)
  65. else None,
  66. "TargetTemperatureSet": vav.virtual_target_temperature
  67. if not np.isnan(vav.virtual_target_temperature)
  68. else None,
  69. }
  70. else:
  71. output = {}
  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
  80. @router.post("/control/atva/v2", response_model=EquipmentControlResponse)
  81. async def get_fcu_command(
  82. equipment_control_info: EquipmentControlRequest, db: Session = Depends(get_db)
  83. ):
  84. vav = await get_vav_control_v2(
  85. db, equipment_control_info.projectId, equipment_control_info.equipId
  86. )
  87. output = {
  88. "SupplyAirFlowSet": vav.supply_air_flow_set,
  89. "VirtualRealtimeTemperature": vav.virtual_realtime_temperature
  90. if not np.isnan(vav.virtual_realtime_temperature)
  91. else None,
  92. "TargetTemperatureSet": vav.virtual_target_temperature
  93. if not np.isnan(vav.virtual_target_temperature)
  94. else None,
  95. }
  96. response = {
  97. "projectId": equipment_control_info.projectId,
  98. "equipId": equipment_control_info.equipId,
  99. "time": get_time_str(),
  100. "output": output,
  101. }
  102. logger.info(response)
  103. return response