# -*- coding: utf-8 -*- from enum import Enum from fastapi import APIRouter, Query from loguru import logger from app.controllers.equipment.fcu import get_fcu_control_result from app.controllers.equipment.vav import get_vav_control_result from app.models.domain.equipment import EquipmentControlResponse, EquipmentControlRequest from app.utils.date import get_time_str from app.utils.math import round_half_up class EquipmentName(str, Enum): FCU = 'ACATFC' VAV = 'ACATVA' router = APIRouter() @router.get('/control', response_model=EquipmentControlResponse, tags=['equipment']) async def get_equipment_command( projectId: str = Query(..., max_length=50, regex='^Pj'), equipId: str = Query(..., max_length=50, regex='^Eq'), equipType: EquipmentName = Query(...), method: int = Query(3), ): if equipType.value == EquipmentName.FCU: fcu = await get_fcu_control_result(projectId, equipId) output = { 'RunStatus': 1 if fcu.running_status else 0, 'WorkModeSet': 3, 'FanGearSet': fcu.air_valve_speed.value, 'IndoorAirTempSet': fcu.setting_temperature } elif equipType.value == EquipmentName.VAV: vav = await get_vav_control_result(projectId, equipId) output = { 'SupplyAirFlowSet': vav.supply_air_flow_set } else: output = {} response = { 'projectId': projectId, 'equipId': equipId, 'time': get_time_str(), 'output': output } return response @router.post('/control', response_model=EquipmentControlResponse, tags=['equipment']) async def get_equipment_command_v2(equipment_control_info: EquipmentControlRequest): if equipment_control_info.equipType == EquipmentName.FCU: fcu = await get_fcu_control_result(equipment_control_info.projectId, equipment_control_info.equipId) output = { 'RunStatus': 1 if fcu.running_status else 0, 'WorkModeSet': 3, 'FanGearSet': fcu.air_valve_speed.value, 'IndoorAirTempSet': int(round_half_up(fcu.setting_temperature, 1) * 10) } elif equipment_control_info.equipType == EquipmentName.VAV: vav = await get_vav_control_result(equipment_control_info.projectId, equipment_control_info.equipId) output = { 'SupplyAirFlowSet': vav.supply_air_flow_set } else: output = {} response = { 'projectId': equipment_control_info.projectId, 'equipId': equipment_control_info.equipId, 'time': get_time_str(), 'output': output } logger.info(response) return response