1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- # -*- coding: utf-8 -*-
- from app.api.errors.iot import MissingIOTDataError
- from app.controllers.equipment.controller import EquipmentController
- from app.models.domain.devices import ACATVIModeRequest
- from app.schemas.season import Season
- class VRFModeController(EquipmentController):
- def __init__(self, season: Season, space_temperature: list):
- super().__init__()
- self._season = season
- self._space_temperature = space_temperature
- self._new_mode = "hold"
- def run(self) -> None:
- try:
- if self._season == Season.cooling:
- cold_space_count, hot_space_count = 0, 0
- for item in self._space_temperature:
- if item < 22.0:
- cold_space_count += 1
- if item > 26.0:
- hot_space_count += 1
- if (
- cold_space_count / len(self._space_temperature) > 0.6
- and hot_space_count < 1
- ):
- new_mode = "ventilation"
- else:
- new_mode = "cooling"
- elif self._season == Season.transition:
- new_mode = "ventilation"
- else:
- cold_space_count, hot_space_count = 0, 0
- for item in self._space_temperature:
- if item < 22.0:
- cold_space_count += 1
- if item > 25.0:
- hot_space_count += 1
- if (
- hot_space_count / len(self._space_temperature) > 0.6
- and cold_space_count < 1
- ):
- new_mode = "ventilation"
- else:
- new_mode = "heating"
- except ZeroDivisionError:
- raise MissingIOTDataError
- self._new_mode = new_mode
- def get_results(self) -> str:
- return self._new_mode
- async def build_acatvi_mode(params: ACATVIModeRequest) -> str:
- controller = VRFModeController(params.season, params.space_temperature_list)
- controller.run()
- new_mode = controller.get_results()
- return new_mode
|