|
@@ -8,8 +8,8 @@ import numpy as np
|
|
from httpx import AsyncClient
|
|
from httpx import AsyncClient
|
|
from loguru import logger
|
|
from loguru import logger
|
|
|
|
|
|
|
|
+from app.models.domain.feedback import FeedbackValue
|
|
from app.resources.params import TEMPERATURE_TARGET_WEIGHT
|
|
from app.resources.params import TEMPERATURE_TARGET_WEIGHT
|
|
-from app.schemas.feedback import Feedback
|
|
|
|
from app.schemas.target import TemperatureTarget
|
|
from app.schemas.target import TemperatureTarget
|
|
from app.services.platform import DataPlatformService
|
|
from app.services.platform import DataPlatformService
|
|
from app.services.transfer import SpaceInfoService, Season
|
|
from app.services.transfer import SpaceInfoService, Season
|
|
@@ -28,7 +28,7 @@ class StepSizeCalculator:
|
|
self,
|
|
self,
|
|
realtime_temperature: float,
|
|
realtime_temperature: float,
|
|
comfortable_temperature: float,
|
|
comfortable_temperature: float,
|
|
- feedback: Feedback
|
|
|
|
|
|
+ feedback: FeedbackValue
|
|
) -> float:
|
|
) -> float:
|
|
base_step_size = 1.8 / (1 + np.exp((comfortable_temperature - realtime_temperature) / 2))
|
|
base_step_size = 1.8 / (1 + np.exp((comfortable_temperature - realtime_temperature) / 2))
|
|
return self.weight.get(feedback.value) * base_step_size
|
|
return self.weight.get(feedback.value) * base_step_size
|
|
@@ -174,13 +174,11 @@ class TemperatureAdjustmentController(AdjustmentController):
|
|
self,
|
|
self,
|
|
project_id: str,
|
|
project_id: str,
|
|
space_id: str,
|
|
space_id: str,
|
|
- wechat_time: Optional[str] = None,
|
|
|
|
- raw_feedback: Optional[Dict] = None
|
|
|
|
|
|
+ feedback: Optional[FeedbackValue] = None
|
|
):
|
|
):
|
|
self.project_id = project_id
|
|
self.project_id = project_id
|
|
self.space_id = space_id
|
|
self.space_id = space_id
|
|
- self.wechat_time = wechat_time
|
|
|
|
- self.raw_feedback = raw_feedback
|
|
|
|
|
|
+ self.feedback = feedback
|
|
|
|
|
|
@logger.catch()
|
|
@logger.catch()
|
|
async def run(self) -> bool:
|
|
async def run(self) -> bool:
|
|
@@ -194,23 +192,13 @@ class TemperatureAdjustmentController(AdjustmentController):
|
|
all_day_targets = await transfer.get_custom_target()
|
|
all_day_targets = await transfer.get_custom_target()
|
|
current_target = await transfer.get_current_temperature_target()
|
|
current_target = await transfer.get_current_temperature_target()
|
|
logger.debug(f'current target: {current_target}')
|
|
logger.debug(f'current target: {current_target}')
|
|
- if self.wechat_time:
|
|
|
|
- self.raw_feedback = await transfer.get_feedback(self.wechat_time)
|
|
|
|
- logger.debug(f'raw feedback: {self.raw_feedback}')
|
|
|
|
is_customized = await transfer.is_customized()
|
|
is_customized = await transfer.is_customized()
|
|
logger.debug(f'is customized? {is_customized}')
|
|
logger.debug(f'is customized? {is_customized}')
|
|
is_temporary = await transfer.is_temporary()
|
|
is_temporary = await transfer.is_temporary()
|
|
logger.debug(f'is temporary? {is_temporary}')
|
|
logger.debug(f'is temporary? {is_temporary}')
|
|
season = await transfer.get_season()
|
|
season = await transfer.get_season()
|
|
|
|
|
|
- # Arrange data.
|
|
|
|
- feedback = Feedback('nice')
|
|
|
|
- for k, v in self.raw_feedback.items():
|
|
|
|
- if v > 0:
|
|
|
|
- feedback = Feedback(k)
|
|
|
|
- break
|
|
|
|
- logger.debug(feedback)
|
|
|
|
-
|
|
|
|
|
|
+ # Arrange data
|
|
if len(all_day_targets) > 0:
|
|
if len(all_day_targets) > 0:
|
|
extent = all_day_targets['temperatureMax'].iloc[0] - all_day_targets['temperatureMin'].iloc[0]
|
|
extent = all_day_targets['temperatureMax'].iloc[0] - all_day_targets['temperatureMin'].iloc[0]
|
|
else:
|
|
else:
|
|
@@ -230,19 +218,19 @@ class TemperatureAdjustmentController(AdjustmentController):
|
|
new_temporary_target = {}
|
|
new_temporary_target = {}
|
|
new_global_target = {}
|
|
new_global_target = {}
|
|
new_actual_target = 0
|
|
new_actual_target = 0
|
|
- if feedback == Feedback.switch_off:
|
|
|
|
|
|
+ if self.feedback == FeedbackValue.switch_off:
|
|
need_switch_off = True
|
|
need_switch_off = True
|
|
need_run_room_control = True
|
|
need_run_room_control = True
|
|
- elif feedback == Feedback.switch_on:
|
|
|
|
|
|
+ elif self.feedback == FeedbackValue.switch_on:
|
|
need_run_room_control = True
|
|
need_run_room_control = True
|
|
if not is_customized:
|
|
if not is_customized:
|
|
new_lower, new_upper = TemporaryTargetInit(1, 24).build(extent, season, realtime_temperature)
|
|
new_lower, new_upper = TemporaryTargetInit(1, 24).build(extent, season, realtime_temperature)
|
|
new_temporary_target = TemporaryTargetBuilder(new_lower, new_upper)
|
|
new_temporary_target = TemporaryTargetBuilder(new_lower, new_upper)
|
|
- elif (feedback == Feedback.a_little_hot
|
|
|
|
- or feedback == Feedback.a_little_cold
|
|
|
|
- or feedback == Feedback.so_hot
|
|
|
|
- or feedback == Feedback.so_cold):
|
|
|
|
- step_size = StepSizeCalculator(TEMPERATURE_TARGET_WEIGHT).run(realtime_temperature, 25.0, feedback)
|
|
|
|
|
|
+ elif (self.feedback == FeedbackValue.a_little_hot
|
|
|
|
+ or self.feedback == FeedbackValue.a_little_cold
|
|
|
|
+ or self.feedback == FeedbackValue.so_hot
|
|
|
|
+ or self.feedback == FeedbackValue.so_cold):
|
|
|
|
+ step_size = StepSizeCalculator(TEMPERATURE_TARGET_WEIGHT).run(realtime_temperature, 25.0, self.feedback)
|
|
logger.debug(f'step size: {step_size}')
|
|
logger.debug(f'step size: {step_size}')
|
|
new_actual_target = NewTemperatureTargetBuilder(realtime_temperature, current_target, step_size).build()
|
|
new_actual_target = NewTemperatureTargetBuilder(realtime_temperature, current_target, step_size).build()
|
|
if new_actual_target != current_target:
|
|
if new_actual_target != current_target:
|