123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- from typing import List, Optional
- from httpx import AsyncClient
- from loguru import logger
- from app.controllers.equipment.ahu.water_valve_opening import count_vav_box_weight
- from app.models.domain.devices import ThermalMode
- from app.schemas.equipment import VAVBox
- class ACATAHSupplyAirTemperatureController:
- """
- Supply air temperature setting logic version 2 by WuXu.
- """
- def __init__(self, vav_boxes_list: List[VAVBox], current: float, return_air: float, thermal_mode: ThermalMode):
- super(ACATAHSupplyAirTemperatureController, self).__init__()
- self.vav_boxes_list = vav_boxes_list
- self.current = current
- self.return_air = return_air
- self.thermal_mode = thermal_mode
- def calculate_by_cold_vav(self, cold_ratio: float) -> float:
- if self.thermal_mode == ThermalMode.cooling:
- if cold_ratio < 0.3:
- new = self.current - 1.0
- elif cold_ratio < 0.45:
- new = self.current - 0.5
- elif cold_ratio <= 0.55:
- new = self.current
- elif cold_ratio <= 0.7:
- new = self.current + 1.0
- elif cold_ratio <= 1.0:
- new = self.return_air
- else:
- new = self.current
- elif self.thermal_mode == ThermalMode.heating:
- if cold_ratio < 0.3:
- new = self.return_air
- elif cold_ratio < 0.45:
- new = self.current - 1
- elif cold_ratio <= 0.55:
- new = self.current
- elif cold_ratio <= 0.7:
- new = self.current + 0.5
- elif cold_ratio <= 1.0:
- new = self.current + 1
- else:
- new = self.current
- else:
- new = self.current
- return new
- def get_cold_ratio(self):
- cold, total = 0, 0
- for box in self.vav_boxes_list:
- temp = count_vav_box_weight(box.virtual_realtime_temperature, box.virtual_target_temperature)
- cold += temp if temp < 0 else 0
- total += abs(temp)
- return abs(cold / total)
|