Parcourir la source

fix a bug, /equip/control will return 0 if there is no target now

chenhaiyang il y a 4 ans
Parent
commit
66fab1744f
2 fichiers modifiés avec 33 ajouts et 23 suppressions
  1. 28 21
      app/controllers/equipment/vav.py
  2. 5 2
      app/services/transfer.py

+ 28 - 21
app/controllers/equipment/vav.py

@@ -34,34 +34,41 @@ class VAVController(EquipmentController):
         buffer_list = []
         strategy = await self.get_strategy()
         for space in self._equipment.spaces:
-            target_list.append(space.temperature_target)
-            realtime_list.append(space.realtime_temperature)
-            if strategy == 'Plan B':
-                for eq in space.equipment:
-                    logger.info(eq)
-                    if isinstance(eq, FCU):
-                        buffer = (4 - eq.air_valve_speed) / 4
-                        buffer_list.append(buffer)
-                        break
+            if not np.isnan(space.temperature_target):
+                target_list.append(space.temperature_target)
+                realtime_list.append(space.realtime_temperature)
+                if strategy == 'Plan B':
+                    for eq in space.equipment:
+                        logger.info(eq)
+                        if isinstance(eq, FCU):
+                            buffer = (4 - eq.air_valve_speed) / 4
+                            buffer_list.append(buffer)
+                            break
         total_target = buffer_list + target_list
         total_realtime = buffer_list + realtime_list
-        target_result = np.array(total_target).sum() / len(target_list)
-        realtime_result = np.array(total_realtime).sum() / len(realtime_list)
-        self._equipment.setting_temperature = target_result
+        if total_target and total_realtime:
+            target_result = np.array(total_target).sum() / len(target_list)
+            realtime_result = np.array(total_realtime).sum() / len(realtime_list)
+            self._equipment.setting_temperature = target_result
+        else:
+            target_result, realtime_result = np.NAN, np.NAN
 
         return target_result, realtime_result
 
     async def get_supply_air_flow_set(self) -> float:
         temperature_set, temperature_realtime = await self.get_temperature()
-        temperature_supply = self._equipment.supply_air_temperature
-        if np.isnan(temperature_supply):
-            temperature_supply = 19.0
-        logger.info(f'supply air flow: {self._equipment.supply_air_flow}')
-        logger.info(f'supply air temperature: {temperature_supply}')
-        logger.info(f'set temperature: {temperature_set}')
-        logger.info(f'realtime temperature: {temperature_realtime}')
-        supply_air_flow_set = self._equipment.supply_air_flow * ((temperature_supply - temperature_realtime)
-                                                                 / (temperature_supply - temperature_set))
+        if np.isnan(temperature_set) or np.isnan(temperature_realtime):
+            supply_air_flow_set = 0.0
+        else:
+            temperature_supply = self._equipment.supply_air_temperature
+            if np.isnan(temperature_supply):
+                temperature_supply = 19.0
+            logger.info(f'supply air flow: {self._equipment.supply_air_flow}')
+            logger.info(f'supply air temperature: {temperature_supply}')
+            logger.info(f'set temperature: {temperature_set}')
+            logger.info(f'realtime temperature: {temperature_realtime}')
+            supply_air_flow_set = self._equipment.supply_air_flow * ((temperature_supply - temperature_realtime)
+                                                                     / (temperature_supply - temperature_set))
         self._equipment.supply_air_flow_set = supply_air_flow_set
 
         return supply_air_flow_set

+ 5 - 2
app/services/transfer.py

@@ -117,8 +117,11 @@ class SpaceInfoService(Service):
         current_targets = await self.get_custom_target()
         temp = arrow.get(self._now_time, TIME_FMT).shift(minutes=15).timestamp // (15 * 60) * (15 * 60)
         next_quarter_minutes = arrow.get(temp).time().strftime('%H%M%S')
-        current_lower_target = current_targets['temperatureMin'].loc[next_quarter_minutes]
-        current_upper_target = current_targets['temperatureMax'].loc[next_quarter_minutes]
+        try:
+            current_lower_target = current_targets['temperatureMin'].loc[next_quarter_minutes]
+            current_upper_target = current_targets['temperatureMax'].loc[next_quarter_minutes]
+        except KeyError:
+            current_lower_target, current_upper_target = np.NAN, np.NAN
 
         return (current_lower_target + current_upper_target) / 2