|
@@ -29,15 +29,19 @@ class StepSizeCalculator:
|
|
|
self.weight = weight
|
|
|
|
|
|
def run(
|
|
|
- self,
|
|
|
- realtime_temperature: float,
|
|
|
- comfortable_temperature: float,
|
|
|
- feedback: FeedbackValue
|
|
|
+ self,
|
|
|
+ realtime_temperature: float,
|
|
|
+ comfortable_temperature: float,
|
|
|
+ feedback: FeedbackValue,
|
|
|
) -> float:
|
|
|
if feedback == FeedbackValue.so_hot or feedback == FeedbackValue.a_little_hot:
|
|
|
- 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)
|
|
|
+ )
|
|
|
else:
|
|
|
- base_step_size = 1.8 / (1 + np.exp((realtime_temperature - comfortable_temperature) / 2))
|
|
|
+ base_step_size = 1.8 / (
|
|
|
+ 1 + np.exp((realtime_temperature - comfortable_temperature) / 2)
|
|
|
+ )
|
|
|
return self.weight.get(feedback.value) * base_step_size
|
|
|
|
|
|
|
|
@@ -71,7 +75,9 @@ class NewTemperatureTargetBuilder(NewTargetBuilder):
|
|
|
Calculate a new temperature target value.
|
|
|
"""
|
|
|
|
|
|
- def __init__(self, realtime_temperature: float, actual_target: float, step_size: float):
|
|
|
+ def __init__(
|
|
|
+ self, realtime_temperature: float, actual_target: float, step_size: float
|
|
|
+ ):
|
|
|
self.realtime_temperature = realtime_temperature
|
|
|
self.actual_target = actual_target
|
|
|
self.step_size = step_size
|
|
@@ -98,13 +104,16 @@ class TemporaryTargetInit:
|
|
|
self.default_target = default_target
|
|
|
|
|
|
def build(
|
|
|
- self,
|
|
|
- extent: float,
|
|
|
- season: Season,
|
|
|
- realtime_temperature: float,
|
|
|
+ self,
|
|
|
+ extent: float,
|
|
|
+ season: Season,
|
|
|
+ realtime_temperature: float,
|
|
|
) -> Tuple[float, float]:
|
|
|
if np.isnan(realtime_temperature):
|
|
|
- upper_bound, lower_bound = self.default_target + 1.0, self.default_target - 1.0
|
|
|
+ upper_bound, lower_bound = (
|
|
|
+ self.default_target + 1.0,
|
|
|
+ self.default_target - 1.0,
|
|
|
+ )
|
|
|
else:
|
|
|
actual_target = np.NAN
|
|
|
if season == Season.cooling:
|
|
@@ -114,7 +123,9 @@ class TemporaryTargetInit:
|
|
|
|
|
|
clipper = Clipper()
|
|
|
actual_target = clipper.cut(actual_target)
|
|
|
- upper_bound, lower_bound = actual_target + (extent / 2), actual_target - (extent / 2)
|
|
|
+ upper_bound, lower_bound = actual_target + (extent / 2), actual_target - (
|
|
|
+ extent / 2
|
|
|
+ )
|
|
|
|
|
|
return lower_bound, upper_bound
|
|
|
|
|
@@ -140,8 +151,17 @@ class SimpleGlobalTemperatureTargetBuilder(GlobalTargetBaseBuilder):
|
|
|
def build(self, new_actual_target: float) -> Dict:
|
|
|
result = {}
|
|
|
half_extent = self.current_global_target.extent / 2
|
|
|
- for time_index in self.current_global_target.target_schedule['temperatureMin'].keys():
|
|
|
- result.update({time_index: [new_actual_target - half_extent, new_actual_target + half_extent]})
|
|
|
+ for time_index in self.current_global_target.target_schedule[
|
|
|
+ "temperatureMin"
|
|
|
+ ].keys():
|
|
|
+ result.update(
|
|
|
+ {
|
|
|
+ time_index: [
|
|
|
+ new_actual_target - half_extent,
|
|
|
+ new_actual_target + half_extent,
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ )
|
|
|
|
|
|
return result
|
|
|
|
|
@@ -151,30 +171,46 @@ class ExpSmoothingTemperatureTargetBuilder(GlobalTargetBaseBuilder):
|
|
|
Exponential smooth previous changes and set them as new global target.
|
|
|
"""
|
|
|
|
|
|
- def __init__(self, current_global_target: TemperatureTarget, previous_changes: pd.DataFrame):
|
|
|
+ def __init__(
|
|
|
+ self, current_global_target: TemperatureTarget, previous_changes: pd.DataFrame
|
|
|
+ ):
|
|
|
self.current_global_target = current_global_target
|
|
|
self.previous_changes = previous_changes
|
|
|
|
|
|
def build(self, new_actual_target: float) -> Dict:
|
|
|
- now_time = arrow.get(get_time_str(), TIME_FMT).time().strftime('%H%M%S')
|
|
|
+ now_time = arrow.get(get_time_str(), TIME_FMT).time().strftime("%H%M%S")
|
|
|
half_extent = self.current_global_target.extent / 2
|
|
|
- previous_changes = pd.concat([
|
|
|
- pd.DataFrame({'timestamp': [now_time], 'value': [new_actual_target]}),
|
|
|
- self.previous_changes,
|
|
|
- ])
|
|
|
+ previous_changes = pd.concat(
|
|
|
+ [
|
|
|
+ pd.DataFrame({"timestamp": [now_time], "value": [new_actual_target]}),
|
|
|
+ self.previous_changes,
|
|
|
+ ]
|
|
|
+ )
|
|
|
previous_changes.reset_index(inplace=True)
|
|
|
- previous_changes['weight1'] = previous_changes['index'].apply(lambda x: (1 / (x + 1)) ** 3)
|
|
|
+ previous_changes["weight1"] = previous_changes["index"].apply(
|
|
|
+ lambda x: (1 / (x + 1)) ** 3
|
|
|
+ )
|
|
|
new_targets = {}
|
|
|
- time_index = self.current_global_target.target_schedule['temperatureMin'].keys()
|
|
|
+ time_index = self.current_global_target.target_schedule["temperatureMin"].keys()
|
|
|
for item in time_index:
|
|
|
- previous_changes['delta'] = previous_changes['timestamp'].apply(
|
|
|
- lambda x: abs(arrow.get(str(x), 'HHmmss') - arrow.get(item, 'HHmmss')).seconds // (15 * 60)
|
|
|
+ previous_changes["delta"] = previous_changes["timestamp"].apply(
|
|
|
+ lambda x: abs(
|
|
|
+ arrow.get(str(x), "HHmmss") - arrow.get(item, "HHmmss")
|
|
|
+ ).seconds
|
|
|
+ // (15 * 60)
|
|
|
+ )
|
|
|
+ previous_changes["weight2"] = previous_changes["delta"].apply(
|
|
|
+ lambda x: 0.5 ** x
|
|
|
+ )
|
|
|
+ previous_changes["weight"] = (
|
|
|
+ previous_changes["weight1"] * previous_changes["weight2"]
|
|
|
+ )
|
|
|
+ temp_target = (
|
|
|
+ previous_changes["value"] * previous_changes["weight"]
|
|
|
+ ).sum() / previous_changes["weight"].sum()
|
|
|
+ new_targets.update(
|
|
|
+ {item: [temp_target - half_extent, temp_target + half_extent]}
|
|
|
)
|
|
|
- previous_changes['weight2'] = previous_changes['delta'].apply(lambda x: 0.5 ** x)
|
|
|
- previous_changes['weight'] = previous_changes['weight1'] * previous_changes['weight2']
|
|
|
- temp_target = ((previous_changes['value'] * previous_changes['weight']).sum()
|
|
|
- / previous_changes['weight'].sum())
|
|
|
- new_targets.update({item: [temp_target - half_extent, temp_target + half_extent]})
|
|
|
|
|
|
return new_targets
|
|
|
|
|
@@ -190,8 +226,15 @@ class TemporaryTargetBuilder:
|
|
|
|
|
|
def build(self) -> Dict:
|
|
|
now_str = get_time_str()
|
|
|
- time_index = arrow.get(arrow.get(now_str, TIME_FMT).shift(minutes=15).timestamp()
|
|
|
- // (15 * 60) * (15 * 60)).time().strftime('%H%M%S')
|
|
|
+ time_index = (
|
|
|
+ arrow.get(
|
|
|
+ arrow.get(now_str, TIME_FMT).shift(minutes=15).timestamp()
|
|
|
+ // (15 * 60)
|
|
|
+ * (15 * 60)
|
|
|
+ )
|
|
|
+ .time()
|
|
|
+ .strftime("%H%M%S")
|
|
|
+ )
|
|
|
return {time_index: [self.lower_target, self.upper_target]}
|
|
|
|
|
|
|
|
@@ -218,7 +261,8 @@ class Packer(metaclass=ABCMeta):
|
|
|
|
|
|
class AdjustmentController(metaclass=ABCMeta):
|
|
|
"""
|
|
|
- Fetch some data, assemble target adjustment related functions and classes, send the new target to transfer server,
|
|
|
+ Fetch some data, assemble target adjustment related functions and classes,
|
|
|
+ send the new target to transfer server,
|
|
|
and return a flag which denote whether transfer server need to request room/control.
|
|
|
"""
|
|
|
|
|
@@ -243,21 +287,23 @@ class TemperatureTargetCarrier(Carrier):
|
|
|
duoduo = Duoduo(client, self.project_id)
|
|
|
platform = DataPlatformService(client, self.project_id)
|
|
|
|
|
|
- realtime_temperature = await platform.get_realtime_temperature(self.object_id)
|
|
|
+ realtime_temperature = await platform.get_realtime_temperature(
|
|
|
+ self.object_id
|
|
|
+ )
|
|
|
targets = await transfer.get_custom_target()
|
|
|
- all_day_targets = targets.get('normal_targets')
|
|
|
+ all_day_targets = targets.get("normal_targets")
|
|
|
current_target = await transfer.get_current_temperature_target()
|
|
|
is_customized = await transfer.is_customized()
|
|
|
is_temporary = await transfer.is_temporary()
|
|
|
season = await duoduo.get_season()
|
|
|
|
|
|
self.result = {
|
|
|
- 'realtime_temperature': realtime_temperature,
|
|
|
- 'all_day_targets': all_day_targets,
|
|
|
- 'current_target': current_target,
|
|
|
- 'is_customized': is_customized,
|
|
|
- 'is_temporary': is_temporary,
|
|
|
- 'season': season
|
|
|
+ "realtime_temperature": realtime_temperature,
|
|
|
+ "all_day_targets": all_day_targets,
|
|
|
+ "current_target": current_target,
|
|
|
+ "is_customized": is_customized,
|
|
|
+ "is_temporary": is_temporary,
|
|
|
+ "season": season,
|
|
|
}
|
|
|
|
|
|
async def get_result(self) -> Dict:
|
|
@@ -275,7 +321,7 @@ class TemperatureTargetV2Carrier(TemperatureTargetCarrier):
|
|
|
transfer = SpaceInfoService(client, self.project_id, self.object_id)
|
|
|
previous_changes = await transfer.env_database_get()
|
|
|
|
|
|
- self.result.update({'previous_changes': previous_changes['temperature']})
|
|
|
+ self.result.update({"previous_changes": previous_changes["temperature"]})
|
|
|
|
|
|
async def get_result(self) -> Dict:
|
|
|
await self.fetch_all()
|
|
@@ -292,21 +338,26 @@ class TemperatureTargetPacker:
|
|
|
self.result = data
|
|
|
|
|
|
def get_temperature_target(self):
|
|
|
- all_day_targets = self.result['all_day_targets']
|
|
|
+ all_day_targets = self.result["all_day_targets"]
|
|
|
if len(all_day_targets) > 0:
|
|
|
- extent = all_day_targets['temperatureMax'].iloc[0] - all_day_targets['temperatureMin'].iloc[0]
|
|
|
- temperature_all_day_targets = all_day_targets[['temperatureMin', 'temperatureMax']].copy().to_dict()
|
|
|
+ extent = (
|
|
|
+ all_day_targets["temperatureMax"].iloc[0]
|
|
|
+ - all_day_targets["temperatureMin"].iloc[0]
|
|
|
+ )
|
|
|
+ temperature_all_day_targets = (
|
|
|
+ all_day_targets[["temperatureMin", "temperatureMax"]].copy().to_dict()
|
|
|
+ )
|
|
|
else:
|
|
|
extent = 2.0
|
|
|
temperature_all_day_targets = {}
|
|
|
target_params = {
|
|
|
- 'is_customized': self.result['is_customized'],
|
|
|
- 'is_temporary': self.result['is_temporary'],
|
|
|
- 'target_schedule': temperature_all_day_targets,
|
|
|
- 'extent': extent
|
|
|
+ "is_customized": self.result["is_customized"],
|
|
|
+ "is_temporary": self.result["is_temporary"],
|
|
|
+ "target_schedule": temperature_all_day_targets,
|
|
|
+ "extent": extent,
|
|
|
}
|
|
|
target = TemperatureTarget(**target_params)
|
|
|
- self.result.update({'target': target})
|
|
|
+ self.result.update({"target": target})
|
|
|
|
|
|
def get_result(self) -> Dict:
|
|
|
self.get_temperature_target()
|
|
@@ -325,19 +376,29 @@ class TargetDeliver:
|
|
|
async def send(self, controlled_result: Dict):
|
|
|
async with AsyncClient() as client:
|
|
|
transfer = SpaceInfoService(client, self.project_id, self.space_id)
|
|
|
- if controlled_result['need_switch_off']:
|
|
|
+ if controlled_result["need_switch_off"]:
|
|
|
await transfer.set_temporary_custom()
|
|
|
- if controlled_result['new_temporary_target']:
|
|
|
- await transfer.set_custom_target('temperature', controlled_result['new_temporary_target'], '0')
|
|
|
- if controlled_result['new_global_target']:
|
|
|
- await transfer.set_custom_target('temperature', controlled_result['new_global_target'], '1')
|
|
|
- if controlled_result['new_actual_target'] > 0 and controlled_result['need_run_room_control']:
|
|
|
- await transfer.env_database_set('temperature', controlled_result['new_actual_target'])
|
|
|
+ if controlled_result["new_temporary_target"]:
|
|
|
+ await transfer.set_custom_target(
|
|
|
+ "temperature", controlled_result["new_temporary_target"], "0"
|
|
|
+ )
|
|
|
+ if controlled_result["new_global_target"]:
|
|
|
+ await transfer.set_custom_target(
|
|
|
+ "temperature", controlled_result["new_global_target"], "1"
|
|
|
+ )
|
|
|
+ if (
|
|
|
+ controlled_result["new_actual_target"] > 0
|
|
|
+ and controlled_result["need_run_room_control"]
|
|
|
+ ):
|
|
|
+ await transfer.env_database_set(
|
|
|
+ "temperature", controlled_result["new_actual_target"]
|
|
|
+ )
|
|
|
|
|
|
|
|
|
class WeightFlagDeliver:
|
|
|
"""
|
|
|
- Change a space temporary weight when the space receives a feedback about temperature.
|
|
|
+ Change a space temporary weight when the space receives a feedback about
|
|
|
+ temperature.
|
|
|
"""
|
|
|
|
|
|
def __init__(self, db: Session, feedback: FeedbackValue):
|
|
@@ -345,10 +406,12 @@ class WeightFlagDeliver:
|
|
|
self.feedback = feedback
|
|
|
|
|
|
def is_temperature_feedback(self) -> bool:
|
|
|
- if (self.feedback == FeedbackValue.a_little_hot
|
|
|
- or self.feedback == FeedbackValue.so_hot
|
|
|
- or self.feedback == FeedbackValue.a_little_cold
|
|
|
- or self.feedback == FeedbackValue.so_cold):
|
|
|
+ if (
|
|
|
+ self.feedback == FeedbackValue.a_little_hot
|
|
|
+ or self.feedback == FeedbackValue.so_hot
|
|
|
+ or self.feedback == FeedbackValue.a_little_cold
|
|
|
+ or self.feedback == FeedbackValue.so_cold
|
|
|
+ ):
|
|
|
flag = True
|
|
|
else:
|
|
|
flag = False
|
|
@@ -382,40 +445,46 @@ class TemperatureTargetController:
|
|
|
need_run_room_control = True
|
|
|
elif feedback == FeedbackValue.switch_on:
|
|
|
need_run_room_control = True
|
|
|
- if not self.data['is_customized']:
|
|
|
+ if not self.data["is_customized"]:
|
|
|
new_lower, new_upper = TemporaryTargetInit(1, 24).build(
|
|
|
- self.data['extent'],
|
|
|
- self.data['season'],
|
|
|
- self.data['realtime_temperature']
|
|
|
+ self.data["extent"],
|
|
|
+ self.data["season"],
|
|
|
+ self.data["realtime_temperature"],
|
|
|
)
|
|
|
- new_temporary_target = TemporaryTargetBuilder(new_lower, new_upper).build()
|
|
|
- elif (feedback == FeedbackValue.a_little_hot
|
|
|
- or feedback == FeedbackValue.a_little_cold
|
|
|
- or feedback == FeedbackValue.so_hot
|
|
|
- or feedback == FeedbackValue.so_cold):
|
|
|
+ new_temporary_target = TemporaryTargetBuilder(
|
|
|
+ new_lower, new_upper
|
|
|
+ ).build()
|
|
|
+ elif (
|
|
|
+ feedback == FeedbackValue.a_little_hot
|
|
|
+ or feedback == FeedbackValue.a_little_cold
|
|
|
+ or feedback == FeedbackValue.so_hot
|
|
|
+ or feedback == FeedbackValue.so_cold
|
|
|
+ ):
|
|
|
step_size = StepSizeCalculator(TEMPERATURE_TARGET_WEIGHT).run(
|
|
|
- self.data['realtime_temperature'],
|
|
|
- 25.0,
|
|
|
- feedback
|
|
|
+ self.data["realtime_temperature"], 25.0, feedback
|
|
|
)
|
|
|
new_actual_target = NewTemperatureTargetBuilder(
|
|
|
- self.data['realtime_temperature'],
|
|
|
- self.data['current_target'],
|
|
|
- step_size
|
|
|
+ self.data["realtime_temperature"],
|
|
|
+ self.data["current_target"],
|
|
|
+ step_size,
|
|
|
).build()
|
|
|
need_run_room_control = True
|
|
|
- if new_actual_target != self.data['current_target']:
|
|
|
- new_global_target = SimpleGlobalTemperatureTargetBuilder(self.data['target']).build(new_actual_target)
|
|
|
+ if new_actual_target != self.data["current_target"]:
|
|
|
+ new_global_target = SimpleGlobalTemperatureTargetBuilder(
|
|
|
+ self.data["target"]
|
|
|
+ ).build(new_actual_target)
|
|
|
else:
|
|
|
need_run_room_control = False
|
|
|
|
|
|
- self.result.update({
|
|
|
- 'need_switch_off': need_switch_off,
|
|
|
- 'new_temporary_target': new_temporary_target,
|
|
|
- 'new_global_target': new_global_target,
|
|
|
- 'new_actual_target': new_actual_target,
|
|
|
- 'need_run_room_control': need_run_room_control
|
|
|
- })
|
|
|
+ self.result.update(
|
|
|
+ {
|
|
|
+ "need_switch_off": need_switch_off,
|
|
|
+ "new_temporary_target": new_temporary_target,
|
|
|
+ "new_global_target": new_global_target,
|
|
|
+ "new_actual_target": new_actual_target,
|
|
|
+ "need_run_room_control": need_run_room_control,
|
|
|
+ }
|
|
|
+ )
|
|
|
|
|
|
def get_result(self) -> Dict:
|
|
|
return self.result
|
|
@@ -440,52 +509,61 @@ class TemperatureTargetControllerV2:
|
|
|
need_run_room_control = True
|
|
|
elif feedback == FeedbackValue.switch_on:
|
|
|
need_run_room_control = True
|
|
|
- if not self.data['target'].is_customized:
|
|
|
+ if not self.data["target"].is_customized:
|
|
|
new_lower, new_upper = TemporaryTargetInit(1, 24).build(
|
|
|
- self.data['target'].extent,
|
|
|
- self.data['season'],
|
|
|
- self.data['realtime_temperature']
|
|
|
+ self.data["target"].extent,
|
|
|
+ self.data["season"],
|
|
|
+ self.data["realtime_temperature"],
|
|
|
)
|
|
|
- new_temporary_target = TemporaryTargetBuilder(new_lower, new_upper).build()
|
|
|
- elif (feedback == FeedbackValue.a_little_hot
|
|
|
- or feedback == FeedbackValue.a_little_cold
|
|
|
- or feedback == FeedbackValue.so_hot
|
|
|
- or feedback == FeedbackValue.so_cold):
|
|
|
+ new_temporary_target = TemporaryTargetBuilder(
|
|
|
+ new_lower, new_upper
|
|
|
+ ).build()
|
|
|
+ elif (
|
|
|
+ feedback == FeedbackValue.a_little_hot
|
|
|
+ or feedback == FeedbackValue.a_little_cold
|
|
|
+ or feedback == FeedbackValue.so_hot
|
|
|
+ or feedback == FeedbackValue.so_cold
|
|
|
+ ):
|
|
|
step_size = StepSizeCalculator(TEMPERATURE_TARGET_WEIGHT).run(
|
|
|
- self.data['realtime_temperature'],
|
|
|
- 25.0,
|
|
|
- feedback
|
|
|
+ self.data["realtime_temperature"], 25.0, feedback
|
|
|
)
|
|
|
new_actual_target = NewTemperatureTargetBuilder(
|
|
|
- self.data['realtime_temperature'],
|
|
|
- self.data['current_target'],
|
|
|
- step_size
|
|
|
+ self.data["realtime_temperature"],
|
|
|
+ self.data["current_target"],
|
|
|
+ step_size,
|
|
|
).build()
|
|
|
need_run_room_control = True
|
|
|
- if new_actual_target != self.data['current_target']:
|
|
|
+ if new_actual_target != self.data["current_target"]:
|
|
|
new_global_target = ExpSmoothingTemperatureTargetBuilder(
|
|
|
- self.data['target'],
|
|
|
- self.data['previous_changes']
|
|
|
+ self.data["target"], self.data["previous_changes"]
|
|
|
).build(new_actual_target)
|
|
|
else:
|
|
|
need_run_room_control = False
|
|
|
|
|
|
- self.result.update({
|
|
|
- 'need_switch_off': need_switch_off,
|
|
|
- 'new_temporary_target': new_temporary_target,
|
|
|
- 'new_global_target': new_global_target,
|
|
|
- 'new_actual_target': new_actual_target,
|
|
|
- 'need_run_room_control': need_run_room_control
|
|
|
- })
|
|
|
+ self.result.update(
|
|
|
+ {
|
|
|
+ "need_switch_off": need_switch_off,
|
|
|
+ "new_temporary_target": new_temporary_target,
|
|
|
+ "new_global_target": new_global_target,
|
|
|
+ "new_actual_target": new_actual_target,
|
|
|
+ "need_run_room_control": need_run_room_control,
|
|
|
+ }
|
|
|
+ )
|
|
|
|
|
|
def get_result(self) -> Dict:
|
|
|
return self.result
|
|
|
|
|
|
|
|
|
@logger.catch()
|
|
|
-async def temperature_target_control_v1(project_id: str, space_id: str, feedback: FeedbackValue, db: Session) -> bool:
|
|
|
- temperature_target_raw_data = await TemperatureTargetCarrier(project_id, space_id).get_result()
|
|
|
- temperature_target_data = TemperatureTargetPacker(temperature_target_raw_data).get_result()
|
|
|
+async def temperature_target_control_v1(
|
|
|
+ project_id: str, space_id: str, feedback: FeedbackValue, db: Session
|
|
|
+) -> bool:
|
|
|
+ temperature_target_raw_data = await TemperatureTargetCarrier(
|
|
|
+ project_id, space_id
|
|
|
+ ).get_result()
|
|
|
+ temperature_target_data = TemperatureTargetPacker(
|
|
|
+ temperature_target_raw_data
|
|
|
+ ).get_result()
|
|
|
controller = TemperatureTargetController(temperature_target_data)
|
|
|
controller.run(feedback)
|
|
|
controlled_result = controller.get_result()
|
|
@@ -493,33 +571,47 @@ async def temperature_target_control_v1(project_id: str, space_id: str, feedback
|
|
|
|
|
|
WeightFlagDeliver(db, feedback).save(space_id)
|
|
|
|
|
|
- return controlled_result['need_run_room_control']
|
|
|
+ return controlled_result["need_run_room_control"]
|
|
|
|
|
|
|
|
|
@logger.catch()
|
|
|
-async def temperature_target_control_v2(project_id: str, space_id: str, feedback: FeedbackValue) -> bool:
|
|
|
- temperature_target_raw_data = await TemperatureTargetV2Carrier(project_id, space_id).get_result()
|
|
|
- temperature_target_data = TemperatureTargetPacker(temperature_target_raw_data).get_result()
|
|
|
+async def temperature_target_control_v2(
|
|
|
+ project_id: str, space_id: str, feedback: FeedbackValue
|
|
|
+) -> bool:
|
|
|
+ temperature_target_raw_data = await TemperatureTargetV2Carrier(
|
|
|
+ project_id, space_id
|
|
|
+ ).get_result()
|
|
|
+ temperature_target_data = TemperatureTargetPacker(
|
|
|
+ temperature_target_raw_data
|
|
|
+ ).get_result()
|
|
|
controller = TemperatureTargetControllerV2(temperature_target_data)
|
|
|
controller.run(feedback)
|
|
|
controlled_result = controller.get_result()
|
|
|
await TargetDeliver(project_id, space_id).send(controlled_result)
|
|
|
|
|
|
- return controlled_result['need_run_room_control']
|
|
|
+ return controlled_result["need_run_room_control"]
|
|
|
|
|
|
|
|
|
@logger.catch()
|
|
|
-async def get_target_after_feedback(project_id: str, space_id: str, feedback: FeedbackValue) -> float:
|
|
|
- if project_id == 'Pj1101050030':
|
|
|
- temperature_target_raw_data = await TemperatureTargetCarrier(project_id, space_id).get_result()
|
|
|
+async def get_target_after_feedback(
|
|
|
+ project_id: str, space_id: str, feedback: FeedbackValue
|
|
|
+) -> float:
|
|
|
+ if project_id == "Pj1101050030":
|
|
|
+ temperature_target_raw_data = await TemperatureTargetCarrier(
|
|
|
+ project_id, space_id
|
|
|
+ ).get_result()
|
|
|
else:
|
|
|
- temperature_target_raw_data = await TemperatureTargetV2Carrier(project_id, space_id).get_result()
|
|
|
- temperature_target_data = TemperatureTargetPacker(temperature_target_raw_data).get_result()
|
|
|
- if project_id == 'Pj1101050030':
|
|
|
+ temperature_target_raw_data = await TemperatureTargetV2Carrier(
|
|
|
+ project_id, space_id
|
|
|
+ ).get_result()
|
|
|
+ temperature_target_data = TemperatureTargetPacker(
|
|
|
+ temperature_target_raw_data
|
|
|
+ ).get_result()
|
|
|
+ if project_id == "Pj1101050030":
|
|
|
controller = TemperatureTargetController(temperature_target_data)
|
|
|
else:
|
|
|
controller = TemperatureTargetControllerV2(temperature_target_data)
|
|
|
controller.run(feedback)
|
|
|
controlled_result = controller.get_result()
|
|
|
|
|
|
- return controlled_result.get('new_actual_target')
|
|
|
+ return controlled_result.get("new_actual_target")
|