12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- from abc import ABC, abstractmethod
- from typing import Optional
- import numpy as np
- from loguru import logger
- from app.schemas.diagnosis import FaultCategory
- from app.schemas.equipment import FCU, VAVBox, VRF
- class DiagnotorBase(ABC):
- def __init__(self):
- self._result = FaultCategory()
- def controller_check(
- self,
- setting_value: float,
- feedback_value: float,
- is_categorical: bool = False,
- tolerance_pct: float = 0.0
- ) -> None:
- if is_categorical:
- if setting_value != feedback_value:
- self._result.controller_err = True
- else:
- if not setting_value * (1 - tolerance_pct) <= feedback_value <= setting_value * (1 + tolerance_pct):
- self._result.controller_err = True
- class ThermalComfortDiagnotor(DiagnotorBase):
- def __init__(self):
- super(ThermalComfortDiagnotor, self).__init__()
- class FCUDiagnotor(DiagnotorBase):
- def __init__(self, fcu: FCU):
- super(FCUDiagnotor, self).__init__()
- self._fcu = fcu
- def low_in_heating(self) -> None:
- if self._fcu.air_valve_speed == 'off':
- if self._fcu.speed_limit == 'off':
- self._result.over_constrained = True
- else:
- self._result.control_logic_err = True
- else:
- if self._fcu.air_valve_speed == self._fcu.recommended_speed:
- self.controller_check(self._fcu.air_valve_speed_set, self._fcu.air_valve_speed)
- if not self._result.controller_err:
- if self._fcu.air_valve_speed_set == 'high':
- pass
- else:
- self._result.control_logic_err = True
- else:
- if self._fcu.speed_limit == self._fcu.air_valve_speed:
- self._result.over_constrained = True
- else:
- self._result.obj_info_err = True
- def low_in_cooling(self) -> None:
- pass
- def high_in_heating(self) -> None:
- pass
- def high_in_cooling(self) -> None:
- pass
- class VAVDiagnotor(DiagnotorBase):
- def __init__(self, vav: VAVBox):
- super(VAVDiagnotor, self).__init__()
- self._vav = vav
- class VRFDiagnotor(DiagnotorBase):
- def __init__(self, vrf: VRF):
- super(VRFDiagnotor, self).__init__()
- self._vrf = vrf
|