from enum import Enum from typing import Dict, List, Optional from pydantic import BaseModel, Field from app.controllers.equipment.switch import SwitchSet from app.models.domain.feedback import FeedbackValue from app.schemas.season import Season class ThermalMode(str, Enum): cooling = "cooling" heating = "heating" hold = "hold" class Speed(str, Enum): off = "off" low = "low" medium = "medium" high = "high" hold = "hold" class DevicesInstructionsBaseResponse(BaseModel): project_id: str = Field(None, alias="projectId") device_id: str = Field(None, alias="equipId") output: Dict class DevicesEarlyStartTime(BaseModel): project_id: str = Field(None, alias="projectId") space_id: str = Field(None, alias="spaceId") minutes: float class ACATVIInstructionsRequest(BaseModel): device_id: str return_air_temperature: Optional[float] running_status: Optional[bool] work_mode: Optional[float] current_speed: Optional[str] current_temperature_set: Optional[float] space_temperature_target: Optional[float] space_realtime_temperature: Optional[float] feedback: FeedbackValue on_time: Optional[str] off_time: Optional[str] class ACATVIInstructionsTemporaryResponse(BaseModel): output: Dict class ACATVIInstructionsResponse(BaseModel): switch_set: Optional[str] speed_set: Optional[str] temperature_set: Optional[float] class ACATVIModeRequest(BaseModel): season: Season space_temperature_list: List[float] class ACATVIModeResponse(BaseModel): mode: str class ACATFCInstructionsRequestBase(BaseModel): device_id: str season: str space_temperature_target: Optional[float] space_realtime_temperature: Optional[float] running_status: Optional[bool] speed: Optional[Speed] feedback: FeedbackValue class ACATFC2InstructionsRequest(ACATFCInstructionsRequestBase): pass class ACATFC4InstructionsRequest(ACATFCInstructionsRequestBase): pass class ACATFCInstructionsResponseBase(BaseModel): speed_set: str switch_set: str class ACATFC2InstructionsResponse(ACATFCInstructionsResponseBase): water_valve_set: str class ACATFC4InstructionsResponse(ACATFCInstructionsResponseBase): chill_water_valve_set: str hot_water_valve_set: str class ACATFCInstructionsResponse(BaseModel): switch_set: int = Field(None, alias="onOff") speed_set: int = Field(None, alias="speed") temperature_set: float = Field(None, alias="temperature") mode_set: int = Field(None, alias="mode") water_valve_switch_set: int = Field(None, alias="water") class ACATFCEarlyStartPredictionRequest(BaseModel): season: Season space_id: Optional[str] device_id: str space_realtime_temperature: Optional[float] outdoor_realtime_temperature: Optional[float] class ACATFCEarlyStartPredictionResponse(BaseModel): minutes: float class Space(BaseModel): realtime_temperature: Optional[float] class ACATVASpace(Space): space_temperature_target: Optional[float] vav_default_weight: Optional[float] vav_temporary_weight: Optional[float] vav_temporary_update_time: Optional[str] class ACATAHSpace(Space): space_temperature_target: Optional[float] ahu_default_weight: Optional[float] ahu_temporary_weight: Optional[float] ahu_temporary_update_time: Optional[str] class ACATFUSpace(Space): space_realtime_co2: Optional[float] class ACATVAInstructionsRequestBase(BaseModel): device_id: str spaces: List[ACATVASpace] class ACATVAInstructionsRequest(ACATVAInstructionsRequestBase): season: str supply_air_temperature: Optional[float] acatah_supply_air_temperature: Optional[float] supply_air_flow: Optional[float] supply_air_flow_lower_limit: Optional[float] supply_air_flow_upper_limit: Optional[float] class ACATVAInstructionsRequestV2(ACATVAInstructionsRequestBase): season: str return_air_temperature: Optional[float] class ACATVAInstructionsResponse(BaseModel): supply_air_flow_set: float = Field(None, alias="SupplyAirFlowSet") virtual_temperature_target_set: float = Field(None, alias="TargetTemperatureSet") virtual_realtime_temperature: float = Field( None, alias="VirtualRealtimeTemperature" ) class ACATVAInstructionsResponseV2(BaseModel): temperature_target_set: float virtual_target_temperature: float virtual_realtime_temperature: float class ACATAHFreqSetRequest(BaseModel): device_id: str system_supply_static_press: Optional[float] system_supply_static_press_set: Optional[float] current_freq_set: Optional[float] supply_air_temperature_set_list: List[float] spaces_hot_rate: Optional[float] class ACATAHFreqSetResponse(BaseModel): freq_set: float class ACATAHInstructionsRequest(BaseModel): device_id: str season: Season spaces: List[ACATAHSpace] running_status: Optional[bool] return_air_temperature: Optional[float] return_air_temperature_set: Optional[float] supply_air_temperature: Optional[float] supply_air_temperature_set: Optional[float] freq: Optional[float] freq_set: Optional[float] fan_freq_upper_limit_set: Optional[float] fan_freq_lower_limit_set: Optional[float] class ACATAHInstructionsResponse(BaseModel): switch_set: str return_air_temp_set: Optional[float] supply_air_temp_set: Optional[float] freq_set: Optional[float] class SwitchSetRequestBase(BaseModel): device_id: str running_status: Optional[bool] in_cloud_status: Optional[bool] on_time: Optional[str] off_time: Optional[str] is_workday: Optional[bool] class SwitchSetResponseBase(BaseModel): switch_set: SwitchSet class ACVTSFSwitchSetRequest(SwitchSetRequestBase): pass class ACVTSFSwitchSetResponse(SwitchSetResponseBase): pass class ACATFUSwitchSetRequest(SwitchSetRequestBase): break_start_time: Optional[str] break_end_time: Optional[str] class ACATFUSwitchSetResponse(SwitchSetResponseBase): pass class ACATAHSwitchSetRequest(SwitchSetRequestBase): break_start_time: Optional[str] break_end_time: Optional[str] class ACATAHSwitchSetResponse(SwitchSetResponseBase): pass class VAV(BaseModel): id: str virtual_realtime_temperature: Optional[float] virtual_temperature_target: Optional[float] supply_air_flow_lower_limit: Optional[float] supply_air_flow_upper_limit: Optional[float] supply_air_flow_set: Optional[float] valve_opening: Optional[float] class ACATAHRequestBase(BaseModel): device_id: str season: str vav_list: List[VAV] class ACATAHThermalModeSetRequest(ACATAHRequestBase): pass class ACATAHThermalModeSetResponse(BaseModel): thermal_mode_set: ThermalMode class ACATAHSupplyAirTempSetRequest(ACATAHRequestBase): supply_air_temperature_set: Optional[float] return_air_temperature: Optional[float] chill_water_valve_opening_set_list: List[float] hot_water_valve_opening_set_list: List[float] equip_switch_set_list: List[float] is_clear_day: Optional[bool] class ACATAHSupplyAirTempSetResponse(BaseModel): supply_air_temperature_set: float class ACATFUSupplyAirTempSetRequest(BaseModel): device_id: str season: Season supply_air_temperature_set: Optional[float] hot_ratio: Optional[float] cold_ratio: Optional[float] running_status_list: List[float] class ACATFUSupplyAirTempSetResponse(BaseModel): supply_air_temperature_set: float class ACATFUFreqSetRequest(BaseModel): device_id: str freq: Optional[float] fresh_air_temperature: Optional[float] spaces: List[ACATFUSpace] season: Season running_status_list: List[float] class ACATFUFreqSetResponse(BaseModel): freq_set: float