equipment.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. # -*- coding: utf-8 -*-
  2. from enum import Enum
  3. from fastapi import APIRouter, Query
  4. from loguru import logger
  5. from app.controllers.equipment.fcu.basic import get_fcu_control_result
  6. from app.controllers.equipment.vav import get_vav_control_result
  7. from app.models.domain.equipment import EquipmentControlResponse, EquipmentControlRequest
  8. from app.utils.date import get_time_str
  9. from app.utils.math import round_half_up
  10. class EquipmentName(str, Enum):
  11. FCU = 'ACATFC'
  12. VAV = 'ACATVA'
  13. router = APIRouter()
  14. @router.get('/control', response_model=EquipmentControlResponse)
  15. async def get_equipment_command(
  16. project_id: str = Query(..., max_length=50, regex='^Pj', alias='projectId'),
  17. equip_id: str = Query(..., max_length=50, regex='^Eq', alias='equipId'),
  18. equip_type: EquipmentName = Query(..., alias='equipType'),
  19. ):
  20. if equip_type.value == EquipmentName.FCU:
  21. fcu = await get_fcu_control_result(project_id, equip_id)
  22. output = {
  23. 'EquipSwitchSet': 1 if fcu.running_status else 0,
  24. 'WorkModeSet': 3,
  25. 'FanGearSet': fcu.air_valve_speed.value,
  26. 'IndoorAirTempSet': fcu.setting_temperature
  27. }
  28. elif equip_type.value == EquipmentName.VAV:
  29. vav = await get_vav_control_result(project_id, equip_id)
  30. output = {
  31. 'SupplyAirFlowSet': vav.supply_air_flow_set
  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_v2(equipment_control_info: EquipmentControlRequest):
  44. if equipment_control_info.equipType == EquipmentName.FCU:
  45. fcu = await get_fcu_control_result(equipment_control_info.projectId, equipment_control_info.equipId)
  46. output = {
  47. 'EquipSwitchSet': 1 if fcu.running_status else 0,
  48. 'WorkModeSet': 3,
  49. 'IndoorAirTempSet': int(round_half_up(fcu.setting_temperature, 1) * 10)
  50. }
  51. if fcu.air_valve_speed.value != 0.0:
  52. output.update({'FanGearSet': fcu.air_valve_speed.value})
  53. elif equipment_control_info.equipType == EquipmentName.VAV:
  54. vav = await get_vav_control_result(equipment_control_info.projectId, equipment_control_info.equipId)
  55. output = {
  56. 'SupplyAirFlowSet': vav.supply_air_flow_set
  57. }
  58. else:
  59. output = {}
  60. response = {
  61. 'projectId': equipment_control_info.projectId,
  62. 'equipId': equipment_control_info.equipId,
  63. 'time': get_time_str(),
  64. 'output': output
  65. }
  66. logger.info(response)
  67. return response