|
@@ -14,6 +14,7 @@ from app.models.domain.devices import ACATVIInstructionsRequest
|
|
|
from app.models.domain.feedback import FeedbackValue
|
|
|
from app.schemas.device.device import DeviceCreate
|
|
|
from app.schemas.equipment import VRF
|
|
|
+from app.schemas.season import Season
|
|
|
from app.schemas.device.status_timestamp import (
|
|
|
BlowyFeedbackTimeCreate,
|
|
|
BlowyFeedbackTimeUpdate,
|
|
@@ -32,9 +33,15 @@ class VRFController(EquipmentController):
|
|
|
|
|
|
def get_switch_set(self) -> str:
|
|
|
if np.isnan(self.target):
|
|
|
- switch_set = "off"
|
|
|
+ if self.device.running_status:
|
|
|
+ switch_set = "off"
|
|
|
+ else:
|
|
|
+ switch_set = "hold"
|
|
|
else:
|
|
|
- switch_set = "on"
|
|
|
+ if self.device.running_status:
|
|
|
+ switch_set = "hold"
|
|
|
+ else:
|
|
|
+ switch_set = "on"
|
|
|
|
|
|
self.device.equip_switch_set = switch_set
|
|
|
|
|
@@ -127,47 +134,118 @@ class VRFController1(VRFController):
|
|
|
feedback: FeedbackValue,
|
|
|
blow_feedback_time: datetime,
|
|
|
high_speed_time: datetime,
|
|
|
+ season: Season,
|
|
|
):
|
|
|
super(VRFController1, self).__init__(device, target, realtime)
|
|
|
self.feedback = feedback
|
|
|
self.blow_feedback_time = blow_feedback_time
|
|
|
self.high_speed_time = high_speed_time
|
|
|
+ self.season = season
|
|
|
|
|
|
def get_temperature_set(self) -> float:
|
|
|
- new_temperature_set = self.device.current_temperature_set
|
|
|
+ if self.season == Season.transition:
|
|
|
+ new_temperature_set = np.NAN
|
|
|
+ elif self.season == Season.cooling:
|
|
|
+ new_temperature_set = np.NAN
|
|
|
+ if np.isnan(self.target):
|
|
|
+ return new_temperature_set
|
|
|
+
|
|
|
+ # Default temperature set.
|
|
|
+ if not self.device.running_status:
|
|
|
+ new_temperature_set = self.target
|
|
|
|
|
|
- # 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
|
|
|
|
|
|
- # 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
|
|
|
|
|
|
- # 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:
|
|
|
+ # 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.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
|
|
|
+ if 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
|
|
|
+ )
|
|
|
+ else:
|
|
|
+ new_temperature_set = self.device.current_temperature_set + 1.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"
|
|
|
+ ):
|
|
|
+ if 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
|
|
|
+ )
|
|
|
+ else:
|
|
|
+ new_temperature_set = self.device.current_temperature_set - 1.0
|
|
|
+
|
|
|
+ if not np.isnan(new_temperature_set):
|
|
|
+ new_temperature_set = max(24.0, min(28.0, new_temperature_set))
|
|
|
+ else:
|
|
|
+ new_temperature_set = np.NAN
|
|
|
+ if np.isnan(self.target):
|
|
|
+ return new_temperature_set
|
|
|
+
|
|
|
+ if not self.device.running_status:
|
|
|
+ new_temperature_set = self.target
|
|
|
+
|
|
|
+ if self.realtime >= 27.0:
|
|
|
+ new_temperature_set = 18.0
|
|
|
+
|
|
|
+ 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.so_cold:
|
|
|
+ if self.device.speed == "M":
|
|
|
+ new_temperature_set = (
|
|
|
+ self.device.current_temperature_set + 1.0
|
|
|
+ )
|
|
|
+ else:
|
|
|
+ new_temperature_set = (
|
|
|
+ self.device.current_temperature_set + 2.0
|
|
|
+ )
|
|
|
+ else:
|
|
|
+ new_temperature_set = self.device.current_temperature_set + 1.0
|
|
|
+ elif (
|
|
|
+ self.feedback == FeedbackValue.a_little_hot
|
|
|
+ or self.feedback == FeedbackValue.so_hot
|
|
|
+ ):
|
|
|
+ if self.feedback == FeedbackValue.so_hot:
|
|
|
+ if self.device.speed == "M":
|
|
|
+ new_temperature_set = (
|
|
|
+ self.device.current_temperature_set - 1.0
|
|
|
+ )
|
|
|
+ else:
|
|
|
+ new_temperature_set = (
|
|
|
+ self.device.current_temperature_set - 2.0
|
|
|
+ )
|
|
|
+
|
|
|
+ else:
|
|
|
+ new_temperature_set = self.device.current_temperature_set - 1.0
|
|
|
+
|
|
|
+ if not np.isnan(new_temperature_set):
|
|
|
+ new_temperature_set = max(18.0, min(24.0, new_temperature_set))
|
|
|
|
|
|
new_temperature_set = round_half_up(new_temperature_set)
|
|
|
self.device.temperature_set = new_temperature_set
|
|
@@ -175,36 +253,94 @@ class VRFController1(VRFController):
|
|
|
return new_temperature_set
|
|
|
|
|
|
def get_speed_set(self) -> str:
|
|
|
- new_speed = self.device.speed
|
|
|
+ if self.season == Season.transition:
|
|
|
+ if np.isnan(self.target):
|
|
|
+ new_speed = "hold"
|
|
|
+ else:
|
|
|
+ if self.device.running_status:
|
|
|
+ new_speed = "hold"
|
|
|
+ if 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"
|
|
|
+ else:
|
|
|
+ new_speed = "M"
|
|
|
+ elif self.season == Season.cooling:
|
|
|
+ new_speed = "hold"
|
|
|
+ if np.isnan(self.target):
|
|
|
+ return new_speed
|
|
|
|
|
|
- # Default speed set:
|
|
|
- if not self.device.running_status:
|
|
|
- new_speed = "M"
|
|
|
+ # Default speed set:
|
|
|
+ if not self.device.running_status:
|
|
|
+ new_speed = "M"
|
|
|
|
|
|
- # Lower limit.
|
|
|
- if self.realtime <= 22.0:
|
|
|
- new_speed = "LL"
|
|
|
+ # 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:
|
|
|
+ # Feedback.
|
|
|
+ if self.feedback == FeedbackValue.so_cold:
|
|
|
+ if self.device.return_air_temp and self.device.current_temperature_set:
|
|
|
+ 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"
|
|
|
- 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":
|
|
|
+ else:
|
|
|
+ new_speed = "LL"
|
|
|
+ else:
|
|
|
+ new_speed = "hold"
|
|
|
+ if np.isnan(self.target):
|
|
|
+ return new_speed
|
|
|
+
|
|
|
+ # Default speed set:
|
|
|
+ if not self.device.running_status:
|
|
|
new_speed = "M"
|
|
|
- elif self.device.speed == "M":
|
|
|
- new_speed = "LL"
|
|
|
- else:
|
|
|
+
|
|
|
+ # Lower limit.
|
|
|
+ if self.realtime >= 28.0:
|
|
|
new_speed = "LL"
|
|
|
|
|
|
+ # Feedback.
|
|
|
+ if self.feedback == FeedbackValue.so_hot:
|
|
|
+ if self.device.return_air_temp and self.device.current_temperature_set:
|
|
|
+ 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_cold:
|
|
|
+ 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"
|
|
|
+
|
|
|
a_now = arrow.utcnow()
|
|
|
|
|
|
# Restriction.
|
|
@@ -221,6 +357,11 @@ class VRFController1(VRFController):
|
|
|
|
|
|
return new_speed
|
|
|
|
|
|
+ async def run(self):
|
|
|
+ self.get_switch_set()
|
|
|
+ self.get_speed_set()
|
|
|
+ self.get_temperature_set()
|
|
|
+
|
|
|
|
|
|
async def query_status_time(db: Session, device_id: str) -> Tuple[datetime, datetime]:
|
|
|
feedback_time_in_db = blowy_feedback_time.get_time_by_device(db, device_id)
|
|
@@ -296,6 +437,7 @@ async def build_acatvi_instructions(
|
|
|
params.feedback,
|
|
|
act_blowy_feedback_time,
|
|
|
act_high_speed_time,
|
|
|
+ params.season,
|
|
|
)
|
|
|
await controller.run()
|
|
|
regulated_vrf = controller.get_results()
|
|
@@ -340,11 +482,10 @@ async def build_acatvi_instructions(
|
|
|
),
|
|
|
)
|
|
|
|
|
|
- instructions = {
|
|
|
- "switch_set": regulated_vrf.equip_switch_set,
|
|
|
- "speed_set": regulated_vrf.speed_set,
|
|
|
- "temperature_set": regulated_vrf.temperature_set,
|
|
|
- "mode_set": regulated_vrf.mode_set,
|
|
|
- }
|
|
|
+ instructions = dict()
|
|
|
+ instructions.update({"switch_set": regulated_vrf.equip_switch_set})
|
|
|
+ instructions.update({"speed_set": regulated_vrf.speed_set})
|
|
|
+ if regulated_vrf.temperature_set and not np.isnan(regulated_vrf.temperature_set):
|
|
|
+ instructions.update({"temperature_set": regulated_vrf.temperature_set})
|
|
|
|
|
|
return instructions
|