|
@@ -5,6 +5,7 @@ from loguru import logger
|
|
|
|
|
|
from app.controllers.equipment.controller import EquipmentController
|
|
|
from app.models.domain.devices import ACATVIInstructionsRequest
|
|
|
+from app.models.domain.feedback import FeedbackValue
|
|
|
from app.schemas.equipment import VRF
|
|
|
from app.utils.math import round_half_up
|
|
|
|
|
@@ -82,59 +83,132 @@ class VRFController(EquipmentController):
|
|
|
return speed
|
|
|
|
|
|
async def run(self):
|
|
|
- need_send = False
|
|
|
if self.get_switch_set() == 'on':
|
|
|
self.get_speed_set()
|
|
|
self.get_mode_set()
|
|
|
self.get_temperature_set()
|
|
|
|
|
|
- if self.device.temperature_set != self.device.current_temperature_set:
|
|
|
- need_send = True
|
|
|
- if self.device.speed_set != self.device.speed:
|
|
|
- need_send = True
|
|
|
- if self.device.equip_switch_set == 'on' and not self.device.running_status:
|
|
|
- need_send = True
|
|
|
+ if self.device.temperature_set == self.device.current_temperature_set:
|
|
|
+ self.device.temperature_set = 0.0
|
|
|
|
|
|
- if self.device.equip_switch_set == 'off' and self.device.running_status:
|
|
|
- need_send = True
|
|
|
+ if self.device.speed_set == self.device.speed:
|
|
|
+ self.device.speed_set = 'hold'
|
|
|
+ self.device.equip_switch_set = 'hold'
|
|
|
|
|
|
- return need_send
|
|
|
+ if not self.device.running_status:
|
|
|
+ self.device.equip_switch_set = 'on'
|
|
|
+ self.get_speed_set()
|
|
|
+ else:
|
|
|
+ if not self.device.running_status:
|
|
|
+ self.device.equip_switch_set = 'hold'
|
|
|
|
|
|
def get_results(self):
|
|
|
return self.device
|
|
|
|
|
|
|
|
|
+class VRFController1(VRFController):
|
|
|
+
|
|
|
+ def __init__(self, device: VRF, target: float, realtime: float, feedback: FeedbackValue):
|
|
|
+ super(VRFController1, self).__init__(device, target, realtime)
|
|
|
+ self.feedback = feedback
|
|
|
+
|
|
|
+ def get_temperature_set(self) -> float:
|
|
|
+ new_temperature_set = self.device.current_temperature_set
|
|
|
+
|
|
|
+ # Default temperature set.
|
|
|
+ if not self.device.running_status:
|
|
|
+ new_temperature_set = self.target
|
|
|
+
|
|
|
+ # lower limit.
|
|
|
+ if self.realtime <= 22.0:
|
|
|
+ new_temperature_set = 28.0
|
|
|
+
|
|
|
+ # recovery
|
|
|
+ # if self.device.temperature_set == 28.0 and self.realtime > 25.0:
|
|
|
+ # new_temperature_set = self.target
|
|
|
+
|
|
|
+ # feedback
|
|
|
+ if self.feedback == FeedbackValue.a_little_cold or self.feedback == FeedbackValue.so_cold:
|
|
|
+ if self.feedback == FeedbackValue.so_cold and self.device.speed == 'LL':
|
|
|
+ new_temperature_set = self.device.current_temperature_set + 2.0
|
|
|
+ else:
|
|
|
+ new_temperature_set = self.device.current_temperature_set + 1.0
|
|
|
+ if self.device.return_air_temp <= self.device.current_temperature_set:
|
|
|
+ if self.feedback == FeedbackValue.so_cold:
|
|
|
+ new_temperature_set = self.device.current_temperature_set + 2.0
|
|
|
+ elif self.feedback == FeedbackValue.a_little_hot or self.feedback == FeedbackValue.so_hot:
|
|
|
+ if self.feedback == FeedbackValue.so_hot and self.device.speed == 'HH':
|
|
|
+ new_temperature_set = self.device.current_temperature_set - 2.0
|
|
|
+ else:
|
|
|
+ new_temperature_set = self.device.current_temperature_set - 1.0
|
|
|
+
|
|
|
+ new_temperature_set = round_half_up(new_temperature_set)
|
|
|
+ self.device.temperature_set = new_temperature_set
|
|
|
+
|
|
|
+ return new_temperature_set
|
|
|
+
|
|
|
+ def get_speed_set(self) -> str:
|
|
|
+ new_speed = self.device.speed
|
|
|
+
|
|
|
+ # Default speed set:
|
|
|
+ if not self.device.running_status:
|
|
|
+ new_speed = 'M'
|
|
|
+
|
|
|
+ # Lower limit.
|
|
|
+ if self.realtime <= 22.0:
|
|
|
+ new_speed = 'LL'
|
|
|
+
|
|
|
+ # Feedback.
|
|
|
+ if self.feedback == FeedbackValue.so_cold:
|
|
|
+ if self.device.return_air_temp > self.device.current_temperature_set:
|
|
|
+ if self.device.speed == 'HH':
|
|
|
+ new_speed = 'M'
|
|
|
+ elif self.device.speed == 'M':
|
|
|
+ new_speed = 'LL'
|
|
|
+ elif self.feedback == FeedbackValue.so_hot:
|
|
|
+ if self.device.speed == 'LL':
|
|
|
+ new_speed = 'M'
|
|
|
+ elif self.device.speed == 'M':
|
|
|
+ new_speed = 'HH'
|
|
|
+ elif self.feedback == FeedbackValue.noisy_or_blowy:
|
|
|
+ if self.device.speed == 'HH':
|
|
|
+ new_speed = 'M'
|
|
|
+ elif self.device.speed == 'M':
|
|
|
+ new_speed = 'LL'
|
|
|
+ else:
|
|
|
+ new_speed = 'LL'
|
|
|
+
|
|
|
+ self.device.speed_set = new_speed
|
|
|
+
|
|
|
+ return new_speed
|
|
|
+
|
|
|
+
|
|
|
@logger.catch()
|
|
|
async def build_acatvi_instructions(params: ACATVIInstructionsRequest) -> Dict:
|
|
|
target = np.NAN if params.space_temperature_target == -1.0 else params.space_temperature_target
|
|
|
realtime = np.NAN if params.space_realtime_temperature == -1.0 else params.space_realtime_temperature
|
|
|
return_air_temp = np.NAN if params.return_air_temperature == -1.0 else params.return_air_temperature
|
|
|
-
|
|
|
- if params.running_status == 'missing':
|
|
|
- return {'need_send': False}
|
|
|
- elif params.running_status == 'on':
|
|
|
- running_status = True
|
|
|
- else:
|
|
|
- running_status = False
|
|
|
+ running_status = False if params.running_status == 'off' else True
|
|
|
+ current_temperature_set = np.NAN if params.current_temperature_set == -1.0 else round_half_up(
|
|
|
+ params.current_temperature_set
|
|
|
+ )
|
|
|
|
|
|
vrf = VRF(
|
|
|
return_air_temp=return_air_temp,
|
|
|
- current_temperature_set=np.NAN if params.current_temperature_set == -1.0 else params.current_temperature_set,
|
|
|
+ current_temperature_set=current_temperature_set,
|
|
|
speed=params.current_speed,
|
|
|
running_status=running_status
|
|
|
)
|
|
|
|
|
|
- controller = VRFController(vrf, target, realtime)
|
|
|
- need_send = await controller.run()
|
|
|
+ controller = VRFController1(vrf, target, realtime, params.feedback)
|
|
|
+ await controller.run()
|
|
|
regulated_vrf = controller.get_results()
|
|
|
|
|
|
instructions = {
|
|
|
'switch_set': regulated_vrf.equip_switch_set,
|
|
|
- 'need_send': need_send
|
|
|
+ 'speed_set': regulated_vrf.speed_set,
|
|
|
+ 'temperature_set': regulated_vrf.temperature_set,
|
|
|
+ 'mode_set': regulated_vrf.mode_set
|
|
|
}
|
|
|
- if regulated_vrf.equip_switch_set == 'on':
|
|
|
- instructions.update({'speed_set': regulated_vrf.speed_set})
|
|
|
- instructions.update({'temperature_set': regulated_vrf.temperature_set})
|
|
|
- instructions.update({'mode_set': regulated_vrf.mode_set})
|
|
|
|
|
|
return instructions
|