|
@@ -9,7 +9,7 @@ from loguru import logger
|
|
|
from app.controllers.equipment.controller import EquipmentController
|
|
|
from app.schemas.equipment import AirValveSpeed, FCU
|
|
|
from app.schemas.space import Space
|
|
|
-from app.services.platform import DataPlatformService
|
|
|
+from app.services.platform import DataPlatformService, InfoCode
|
|
|
from app.services.transfer import SpaceInfoService, Duoduo, Season
|
|
|
from app.utils.math import round_half_up
|
|
|
|
|
@@ -97,12 +97,23 @@ class FCUControllerV2(EquipmentController):
|
|
|
self.season = season
|
|
|
|
|
|
def get_mode(self) -> int:
|
|
|
- if self.season == Season.heating:
|
|
|
- mode = 2
|
|
|
- elif self.season == Season.cooling:
|
|
|
- mode = 1
|
|
|
+ if not np.isnan(self.equipment.water_out_temperature):
|
|
|
+ if self.equipment.water_out_temperature > self.equipment.space.temperature_target:
|
|
|
+ mode = 2
|
|
|
+ else:
|
|
|
+ mode = 1
|
|
|
+ elif not np.isnan(self.equipment.supply_air_temperature):
|
|
|
+ if self.equipment.supply_air_temperature > self.equipment.space.temperature_target:
|
|
|
+ mode = 2
|
|
|
+ else:
|
|
|
+ mode = 1
|
|
|
else:
|
|
|
- mode = 0
|
|
|
+ if self.season == Season.heating:
|
|
|
+ mode = 2
|
|
|
+ elif self.season == Season.cooling:
|
|
|
+ mode = 1
|
|
|
+ else:
|
|
|
+ mode = 0
|
|
|
self.equipment.work_mode = mode
|
|
|
|
|
|
return mode
|
|
@@ -111,17 +122,24 @@ class FCUControllerV2(EquipmentController):
|
|
|
target = self.equipment.space.temperature_target
|
|
|
if target > 0:
|
|
|
if self.equipment.space.realtime_temperature > 0:
|
|
|
- if self.season == Season.heating:
|
|
|
+ mode = self.get_mode()
|
|
|
+ if mode == 2:
|
|
|
diff = target - self.equipment.space.realtime_temperature
|
|
|
- if diff < 0:
|
|
|
- speed = AirValveSpeed.off
|
|
|
- elif diff < 0.5:
|
|
|
- speed = AirValveSpeed.low
|
|
|
- elif diff < 1.5:
|
|
|
- speed = AirValveSpeed.medium
|
|
|
- else:
|
|
|
- speed = AirValveSpeed.high
|
|
|
- self.equipment.air_valve_speed = speed
|
|
|
+ elif mode == 1:
|
|
|
+ diff = self.equipment.space.realtime_temperature - target
|
|
|
+ else:
|
|
|
+ diff = 0
|
|
|
+
|
|
|
+ if diff < 0:
|
|
|
+ speed = AirValveSpeed.off
|
|
|
+ elif diff < 0.5:
|
|
|
+ speed = AirValveSpeed.low
|
|
|
+ elif diff < 1.5:
|
|
|
+ speed = AirValveSpeed.medium
|
|
|
+ else:
|
|
|
+ speed = AirValveSpeed.high
|
|
|
+
|
|
|
+ self.equipment.air_valve_speed = speed
|
|
|
else:
|
|
|
self.equipment.air_valve_speed = AirValveSpeed.medium
|
|
|
else:
|
|
@@ -155,6 +173,8 @@ async def get_fcu_control_result(project_id: str, equipment_id: str) -> Dict:
|
|
|
duo_duo = Duoduo(client, project_id)
|
|
|
platform = DataPlatformService(client, project_id)
|
|
|
spaces = await duo_duo.get_space_by_equipment(equipment_id)
|
|
|
+ supply_air_temperature = await platform.get_realtime_data(InfoCode.supply_temperature, equipment_id)
|
|
|
+ water_out_temperature = await platform.get_realtime_data(InfoCode.water_out_temperature, equipment_id)
|
|
|
for sp in spaces:
|
|
|
transfer = SpaceInfoService(client, project_id, sp.get('id'))
|
|
|
current_target = await transfer.get_current_temperature_target()
|
|
@@ -170,7 +190,9 @@ async def get_fcu_control_result(project_id: str, equipment_id: str) -> Dict:
|
|
|
|
|
|
fcu_temp_params = {
|
|
|
'id': equipment_id,
|
|
|
- 'space': space
|
|
|
+ 'space': space,
|
|
|
+ 'supply_air_temperature': supply_air_temperature,
|
|
|
+ 'water_out_temperature': water_out_temperature
|
|
|
}
|
|
|
fcu = FCU(**fcu_temp_params)
|
|
|
|