# -*- coding: utf-8 -*- from enum import Enum from fastapi import APIRouter, Query from loguru import logger from app.controllers.equipment.fcu.basic import get_fcu_control_result from app.controllers.equipment.fcu.q_learning import get_fcu_q_learning_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 class EquipmentName(str, Enum): FCU = 'ACATFC' VAV = 'ACATVA' router = APIRouter() @router.get('/control', response_model=EquipmentControlResponse) async def get_equipment_command_test( project_id: str = Query(..., max_length=50, regex='^Pj', alias='projectId'), equip_id: str = Query(..., max_length=50, regex='^Eq', alias='equipId'), equip_type: EquipmentName = Query(..., alias='equipType'), ): if equip_type.value == EquipmentName.FCU: if project_id == 'Pj1101050030': fcu = await get_fcu_control_result(project_id, equip_id) output = { 'EquipSwitchSet': 1 if fcu.running_status else 0, 'WorkModeSet': 3, 'FanGearSet': fcu.air_valve_speed.value, 'IndoorAirTempSet': fcu.setting_temperature } else: output = await get_fcu_q_learning_control_result(project_id, equip_id) elif equip_type.value == EquipmentName.VAV: vav = await get_vav_control_result(project_id, equip_id) output = { 'SupplyAirFlowSet': vav.supply_air_flow_set } else: output = {} response = { 'projectId': project_id, 'equipId': equip_id, 'time': get_time_str(), 'output': output } return response @router.post('/control', response_model=EquipmentControlResponse) async def get_equipment_command(equipment_control_info: EquipmentControlRequest): if equipment_control_info.equipType == EquipmentName.FCU: if equipment_control_info.projectId == 'Pj1101050030': output = await get_fcu_control_result(equipment_control_info.projectId, equipment_control_info.equipId) else: output = await get_fcu_q_learning_control_result( equipment_control_info.projectId, equipment_control_info.equipId ) 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