|
@@ -1,5 +1,6 @@
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
+from operator import attrgetter
|
|
|
from typing import Dict, List, Tuple
|
|
|
|
|
|
import numpy as np
|
|
@@ -135,17 +136,34 @@ class VAVControllerV2(VAVController):
|
|
|
self.equipment.virtual_realtime_temperature = np.NAN
|
|
|
|
|
|
async def rectify(self) -> Tuple[float, float]:
|
|
|
+ bad_spaces = list()
|
|
|
for sp in self.equipment.spaces:
|
|
|
- if sp.realtime_temperature < min(23.0, sp.temperature_target):
|
|
|
- if self.season == Season.heating:
|
|
|
- self.equipment.virtual_target_temperature = min(23.0, sp.temperature_target) + 0.5
|
|
|
- self.equipment.virtual_realtime_temperature = sp.realtime_temperature
|
|
|
- break
|
|
|
- elif sp.realtime_temperature > max(27.0, sp.temperature_target):
|
|
|
- if self.season == Season.cooling:
|
|
|
- self.equipment.virtual_target_temperature = max(27.0, sp.temperature_target)
|
|
|
- self.equipment.virtual_realtime_temperature = sp.realtime_temperature
|
|
|
- break
|
|
|
+ if (sp.realtime_temperature > max(27.0, sp.temperature_target) or
|
|
|
+ sp.realtime_temperature < min(21.0, sp.temperature_target)):
|
|
|
+ bad_spaces.append(sp)
|
|
|
+
|
|
|
+ if bad_spaces:
|
|
|
+ virtual_diff = self.equipment.virtual_target_temperature - self.equipment.virtual_realtime_temperature
|
|
|
+ if self.season == Season.cooling:
|
|
|
+ bad_spaces = sorted(bad_spaces, key=attrgetter('diff'))
|
|
|
+ worst = bad_spaces[0]
|
|
|
+ if worst.diff <= 0:
|
|
|
+ if worst.diff < virtual_diff:
|
|
|
+ self.equipment.virtual_target_temperature = worst.temperature_target
|
|
|
+ self.equipment.virtual_realtime_temperature = worst.realtime_temperature
|
|
|
+ else:
|
|
|
+ self.equipment.virtual_target_temperature = min(21.0, worst.temperature_target) + 0.5
|
|
|
+ self.equipment.virtual_realtime_temperature = worst.realtime_temperature
|
|
|
+ elif self.season == Season.heating:
|
|
|
+ bad_spaces = sorted(bad_spaces, key=attrgetter('diff'), reverse=True)
|
|
|
+ worst = bad_spaces[0]
|
|
|
+ if worst.diff >= 0:
|
|
|
+ if worst.diff > virtual_diff:
|
|
|
+ self.equipment.virtual_target_temperature = worst.temperature_target
|
|
|
+ self.equipment.virtual_realtime_temperature = worst.realtime_temperature
|
|
|
+ else:
|
|
|
+ self.equipment.virtual_target_temperature = max(27.0, worst.temperature_target) - 0.5
|
|
|
+ self.equipment.virtual_realtime_temperature = worst.realtime_temperature
|
|
|
|
|
|
return self.equipment.virtual_target_temperature, self.equipment.virtual_realtime_temperature
|
|
|
|
|
@@ -161,11 +179,6 @@ async def fetch_vav_control_params(project_id: str, equipment_id: str) -> Dict:
|
|
|
duo_duo = Duoduo(client, project_id)
|
|
|
platform = DataPlatformService(client, project_id)
|
|
|
|
|
|
- _AHU_LIST = [
|
|
|
- 'Eq1101050030846e0a94670842109f7c8d8db0d44cf5',
|
|
|
- 'Eq1101050030b6b2f1db3d6944afa71e213e0d45d565'
|
|
|
- ]
|
|
|
-
|
|
|
season = await duo_duo.get_season()
|
|
|
served_spaces = await duo_duo.get_space_by_equipment(equipment_id)
|
|
|
space_objects = []
|
|
@@ -192,7 +205,8 @@ async def fetch_vav_control_params(project_id: str, equipment_id: str) -> Dict:
|
|
|
'id': sp_id,
|
|
|
'realtime_temperature': realtime_temperature,
|
|
|
'equipment': equipment_objects,
|
|
|
- 'temperature_target': current_target
|
|
|
+ 'temperature_target': current_target,
|
|
|
+ 'diff': current_target - realtime_temperature
|
|
|
}
|
|
|
space = Space(**temp_space_params)
|
|
|
space_objects.append(space)
|