|
@@ -2,8 +2,8 @@
|
|
|
|
|
|
from typing import List, Tuple
|
|
from typing import List, Tuple
|
|
|
|
|
|
-from loguru import logger
|
|
|
|
import numpy as np
|
|
import numpy as np
|
|
|
|
+from loguru import logger
|
|
|
|
|
|
from app.models.domain.devices import ACATFUFreqSetRequest
|
|
from app.models.domain.devices import ACATFUFreqSetRequest
|
|
from app.schemas.season import Season
|
|
from app.schemas.season import Season
|
|
@@ -13,49 +13,14 @@ from app.utils.helpers import is_off_to_on
|
|
|
|
|
|
class ACATFUFanFreqController:
|
|
class ACATFUFanFreqController:
|
|
"""
|
|
"""
|
|
- Fan freq setting logic for zhonghai.
|
|
|
|
- """
|
|
|
|
-
|
|
|
|
- def __init__(self, current_freq: float, hot_rate: float, cold_rate: float):
|
|
|
|
- self.current_freq = current_freq
|
|
|
|
- self.hot_rate = hot_rate
|
|
|
|
- self.cold_rate = cold_rate
|
|
|
|
-
|
|
|
|
- def get_next_set(self) -> float:
|
|
|
|
- try:
|
|
|
|
- cold_hot_ratio = self.cold_rate / self.hot_rate
|
|
|
|
- except ZeroDivisionError:
|
|
|
|
- cold_hot_ratio = 99
|
|
|
|
-
|
|
|
|
- if cold_hot_ratio < 0.5:
|
|
|
|
- diff = 3
|
|
|
|
- elif cold_hot_ratio < 0.9:
|
|
|
|
- diff = 2
|
|
|
|
- elif cold_hot_ratio < 1.1:
|
|
|
|
- diff = 0
|
|
|
|
- elif cold_hot_ratio < 1.5:
|
|
|
|
- diff = -2
|
|
|
|
- elif cold_hot_ratio >= 1.5:
|
|
|
|
- diff = -3
|
|
|
|
- else: # If cold hot rate is NAN.
|
|
|
|
- diff = 0
|
|
|
|
-
|
|
|
|
- next_freq_set = self.current_freq + diff
|
|
|
|
- next_freq_set = max(30.0, min(45.0, next_freq_set))
|
|
|
|
-
|
|
|
|
- return next_freq_set
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-class ACATFUFanFreqControllerV2:
|
|
|
|
- """
|
|
|
|
Logic writen by Wuxu.
|
|
Logic writen by Wuxu.
|
|
"""
|
|
"""
|
|
|
|
|
|
def __init__(
|
|
def __init__(
|
|
- self,
|
|
|
|
- freq: float,
|
|
|
|
- fresh_air_temperature: float,
|
|
|
|
- season: Season,
|
|
|
|
|
|
+ self,
|
|
|
|
+ freq: float,
|
|
|
|
+ fresh_air_temperature: float,
|
|
|
|
+ season: Season,
|
|
) -> None:
|
|
) -> None:
|
|
self._freq = freq
|
|
self._freq = freq
|
|
self._fresh_air_temperature = fresh_air_temperature
|
|
self._fresh_air_temperature = fresh_air_temperature
|
|
@@ -72,9 +37,7 @@ class ACATFUFanFreqControllerV2:
|
|
|
|
|
|
return next_freq_set
|
|
return next_freq_set
|
|
|
|
|
|
- def get_transition_logic(
|
|
|
|
- self, spaces_params: List[SpaceATFU], on_flag: bool
|
|
|
|
- ) -> float:
|
|
|
|
|
|
+ def get_transition_logic(self, spaces_params: List[SpaceATFU], on_flag: bool) -> float:
|
|
temp_avg, co2_avg = self.get_avg(spaces_params)
|
|
temp_avg, co2_avg = self.get_avg(spaces_params)
|
|
if on_flag:
|
|
if on_flag:
|
|
if self._fresh_air_temperature <= 16.0:
|
|
if self._fresh_air_temperature <= 16.0:
|
|
@@ -210,11 +173,7 @@ class ACATFUFanFreqControllerV2:
|
|
|
|
|
|
@logger.catch()
|
|
@logger.catch()
|
|
async def build_acatfu_freq_set(params: ACATFUFreqSetRequest) -> float:
|
|
async def build_acatfu_freq_set(params: ACATFUFreqSetRequest) -> float:
|
|
- controller = ACATFUFanFreqControllerV2(
|
|
|
|
- params.freq,
|
|
|
|
- params.fresh_air_temperature,
|
|
|
|
- params.season,
|
|
|
|
- )
|
|
|
|
|
|
+ controller = ACATFUFanFreqController(params.freq, params.fresh_air_temperature, params.season)
|
|
on_flag = is_off_to_on(params.running_status_list)
|
|
on_flag = is_off_to_on(params.running_status_list)
|
|
spaces = [SpaceATFU(**sp.dict()) for sp in params.spaces]
|
|
spaces = [SpaceATFU(**sp.dict()) for sp in params.spaces]
|
|
freq_set = controller.get_next_set(spaces, on_flag)
|
|
freq_set = controller.get_next_set(spaces, on_flag)
|