Browse Source

modify missing data logic

highing666 2 years ago
parent
commit
894329acdc

+ 10 - 8
app/controllers/equipment/pau/freq_set.py

@@ -3,8 +3,8 @@
 from typing import List, Tuple
 
 import numpy as np
-from loguru import logger
 
+from app.api.errors.iot import MissingIOTDataError
 from app.models.domain.devices import ACATFUFreqSetRequest
 from app.schemas.season import Season
 from app.schemas.space import SpaceATFU
@@ -27,13 +27,16 @@ class ACATFUFanFreqController:
         self._season = season
 
     def get_next_set(self, spaces_params: List[SpaceATFU], on_flag: bool) -> float:
-        if self._season == Season.transition:
-            next_freq_set = self.get_transition_logic(spaces_params, on_flag)
-        else:
-            next_freq_set = self.get_cooling_logic(spaces_params, on_flag)
+        try:
+            if self._season == Season.transition:
+                next_freq_set = self.get_transition_logic(spaces_params, on_flag)
+            else:
+                next_freq_set = self.get_cooling_logic(spaces_params, on_flag)
 
-        next_freq_set = max(20.0, next_freq_set)
-        next_freq_set = min(50.0, next_freq_set)
+            next_freq_set = max(20.0, next_freq_set)
+            next_freq_set = min(50.0, next_freq_set)
+        except TypeError:
+            raise MissingIOTDataError
 
         return next_freq_set
 
@@ -171,7 +174,6 @@ class ACATFUFanFreqController:
         return ratio
 
 
-@logger.catch()
 async def build_acatfu_freq_set(params: ACATFUFreqSetRequest) -> float:
     controller = ACATFUFanFreqController(params.freq, params.fresh_air_temperature, params.season)
     on_flag = is_off_to_on(params.running_status_list)

+ 16 - 17
app/controllers/equipment/pau/supply_air_temperature_set.py

@@ -1,8 +1,4 @@
-from typing import Tuple
-
-from httpx import AsyncClient
-from loguru import logger
-
+from app.api.errors.iot import MissingIOTDataError
 from app.models.domain.devices import ACATFUSupplyAirTempSetRequest
 from app.schemas.season import Season
 
@@ -13,11 +9,11 @@ class ACATFUSupplyAirTemperatureController:
     """
 
     def __init__(
-        self,
-        current_supply_air_temp_set: float,
-        hot_rate: float,
-        cold_rate: float,
-        season: Season,
+            self,
+            current_supply_air_temp_set: float,
+            hot_rate: float,
+            cold_rate: float,
+            season: Season,
     ):
         self.current_air_temp_set = current_supply_air_temp_set
         self.hot_rate = hot_rate
@@ -53,21 +49,24 @@ class ACATFUSupplyAirTemperatureController:
 
             if self.season == Season.cooling or self.season == Season.transition:
                 diff = 0
-            next_temperature_set = self.current_air_temp_set + diff
+            try:
+                next_temperature_set = self.current_air_temp_set + diff
+            except TypeError:
+                raise MissingIOTDataError
 
         next_temperature_set = max(8.0, min(20.0, next_temperature_set))
 
         return next_temperature_set
 
 
-@logger.catch()
 def build_acatfu_supply_air_temperature(params: ACATFUSupplyAirTempSetRequest) -> float:
     is_just_booted = False
-    if params.running_status_list[-1] == 1.0:
-        for item in params.running_status_list[::-1]:
-            if item == 0.0:
-                is_just_booted = True
-                break
+    if len(params.running_status_list) > 0:
+        if params.running_status_list[-1] == 1.0:
+            for item in params.running_status_list[::-1]:
+                if item == 0.0:
+                    is_just_booted = True
+                    break
 
     controller = ACATFUSupplyAirTemperatureController(
         params.supply_air_temperature_set,

+ 1 - 4
app/controllers/equipment/vrf/basic.py

@@ -83,10 +83,7 @@ class VRFController(EquipmentController):
 
             # feedback
             if self.feedback.value != "null" and self.device.current_temperature_set:
-                if (
-                        self.feedback == FeedbackValue.a_little_cold
-                        or self.feedback == FeedbackValue.so_cold
-                ):
+                if self.feedback == FeedbackValue.a_little_cold or self.feedback == FeedbackValue.so_cold:
                     if self.feedback == FeedbackValue.so_cold:
                         if self.device.speed == "LL":
                             new_temperature_set = self.device.current_temperature_set + 2.0

+ 32 - 32
app/controllers/equipment/vrf/mode.py

@@ -1,8 +1,6 @@
 # -*- coding: utf-8 -*-
 
-from loguru import logger
-
-
+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
@@ -16,36 +14,39 @@ class VRFModeController(EquipmentController):
         self._new_mode = "hold"
 
     def run(self) -> None:
-        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
-            ):
+        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:
-                new_mode = "heating"
+                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
 
@@ -53,7 +54,6 @@ class VRFModeController(EquipmentController):
         return self._new_mode
 
 
-@logger.catch()
 async def build_acatvi_mode(params: ACATVIModeRequest) -> str:
     controller = VRFModeController(params.season, params.space_temperature_list)
     controller.run()

+ 1 - 1
app/models/domain/devices.py

@@ -27,7 +27,7 @@ class ACATVIInstructionsRequest(BaseModel):
     device_id: str
     return_air_temperature: Optional[float]
     running_status: Optional[bool]
-    work_mode: Optional[VRFMode]
+    work_mode: VRFMode
     current_speed: Optional[str]
     current_temperature_set: Optional[float]
     space_temperature_target: Optional[float]

+ 1 - 1
app/schemas/space.py

@@ -31,4 +31,4 @@ class SpaceATAH(Space):
 
 
 class SpaceATFU(SpaceBase):
-    realtime_co2: float
+    realtime_co2: Optional[float]

+ 1 - 1
docker-compose.yml

@@ -2,7 +2,7 @@ version: "3"
 
 services:
   app:
-      image: registry.persagy.com/sagacloud/saga_algo_api:0.4.7
+      image: registry.persagy.com/sagacloud/saga_algo_api:0.4.10
       container_name: saga_algo_api
       ports:
         - "8002:8002"