Browse Source

modify VRF logic

highing666 3 years ago
parent
commit
7d8c765020
1 changed files with 103 additions and 83 deletions
  1. 103 83
      app/controllers/equipment/vrf/basic.py

+ 103 - 83
app/controllers/equipment/vrf/basic.py

@@ -132,30 +132,61 @@ class VRFController1(VRFController):
         target: float,
         realtime: float,
         feedback: FeedbackValue,
-        blow_feedback_time: datetime,
-        high_speed_time: datetime,
-        season: Season,
+        on_time: str,
+        off_time: str,
     ):
         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
+        self.on_time = on_time
+        self.off_time = off_time
+
+    def get_switch_set(self) -> str:
+        if self.feedback.value == FeedbackValue.switch_off:
+            if self.device.running_status:
+                switch_set = "off"
+            else:
+                switch_set = "hold"
+        elif self.feedback.value == FeedbackValue.switch_on:
+            if not self.device.running_status:
+                switch_set = "on"
+            else:
+                switch_set = "hold"
+        else:
+            utc = arrow.utcnow()
+            now = utc.to("Asia/Shanghai")
+            ago = now.shift(seconds=-290).format("HHmmSS")
+            later = now.shift(seconds=290).format("HHmmSS")
+
+            if ago <= self.on_time <= later:
+                if not self.device.running_status:
+                    switch_set = "on"
+                else:
+                    switch_set = "hold"
+            elif ago <= self.off_time <= later:
+                if self.device.running_status:
+                    switch_set = "off"
+                else:
+                    switch_set = "hold"
+            else:
+                switch_set = "hold"
+        
+        self.device.equip_switch_set = switch_set
+
+        return switch_set
 
     def get_temperature_set(self) -> float:
-        if self.season == Season.transition:
+        if self.device.work_mode == 4.0 or self.device.work_mode == 8.0:
+            # if self.season == Season.transition:
             new_temperature_set = np.NAN
-        elif self.season == Season.cooling:
+        elif self.device.work_mode == 1.0 or self.device.work_mode == 6.0:
+            # elif self.season == Season.cooling:
             new_temperature_set = np.NAN
             if np.isnan(self.target):
                 return new_temperature_set
 
-            if self.device.work_mode == 4.0 or self.device.work_mode == 8.0:
-                return new_temperature_set
-
             # Default temperature set.
             if not self.device.running_status:
-                new_temperature_set = self.target
+                new_temperature_set = 26.0
 
             # lower limit.
             if self.realtime <= 22.0:
@@ -203,16 +234,13 @@ class VRFController1(VRFController):
 
             if not np.isnan(new_temperature_set):
                 new_temperature_set = max(24.0, min(28.0, new_temperature_set))
-        else:
+        elif self.device.work_mode == 2.0 or self.device.work_mode == 7.0:
             new_temperature_set = np.NAN
             if np.isnan(self.target):
                 return new_temperature_set
 
-            if self.device.work_mode == 4.0 or self.device.work_mode == 8.0:
-                return new_temperature_set
-
             if not self.device.running_status:
-                new_temperature_set = self.target
+                new_temperature_set = 20.0
 
             if self.realtime >= 27.0:
                 new_temperature_set = 18.0
@@ -246,12 +274,13 @@ class VRFController1(VRFController):
                             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))
+        else:
+            new_temperature_set = np.NAN
 
         new_temperature_set = round_half_up(new_temperature_set)
         self.device.temperature_set = new_temperature_set
@@ -259,7 +288,8 @@ class VRFController1(VRFController):
         return new_temperature_set
 
     def get_speed_set(self) -> str:
-        if self.season == Season.transition:
+        if self.device.work_mode == 4.0 or self.device.work_mode == 8.0:
+            # if self.season == Season.transition:
             if np.isnan(self.target):
                 new_speed = "hold"
             else:
@@ -274,7 +304,8 @@ class VRFController1(VRFController):
                             new_speed = "LL"
                 else:
                     new_speed = "M"
-        elif self.season == Season.cooling:
+        elif self.device.work_mode == 1.0 or self.device.work_mode == 6.0:
+            # elif self.season == Season.cooling:
             new_speed = "hold"
             if np.isnan(self.target):
                 return new_speed
@@ -310,7 +341,7 @@ class VRFController1(VRFController):
                     new_speed = "LL"
                 else:
                     new_speed = "LL"
-        else:
+        elif self.device.work_mode == 2.0 or self.device.work_mode == 7.0:
             new_speed = "hold"
             if np.isnan(self.target):
                 return new_speed
@@ -346,13 +377,15 @@ class VRFController1(VRFController):
                     new_speed = "LL"
                 else:
                     new_speed = "LL"
+        else:
+            new_speed = "hold"
 
-        a_now = arrow.utcnow()
+        # a_now = arrow.utcnow()
 
         # Restriction.
-        if a_now.date() == arrow.get(self.blow_feedback_time).date():
-            if new_speed == "HH":
-                new_speed = "M"
+        # if a_now.date() == arrow.get(self.blow_feedback_time).date():
+        #     if new_speed == "HH":
+        #         new_speed = "M"
 
         # Recovery.
         # logger.debug(self.high_speed_time)
@@ -373,10 +406,10 @@ class VRFController1(VRFController):
             if not self.device.running_status:
                 new_speed = "HH"
             else:
-                if self.realtime > 26.0:
-                    new_speed = "HH"
-                elif self.realtime < 22.0:
-                    new_speed = "LL"
+                # if self.realtime > 26.0:
+                #     new_speed = "HH"
+                # elif self.realtime < 22.0:
+                #     new_speed = "LL"
 
                 if (
                     self.feedback == FeedbackValue.a_little_cold
@@ -403,10 +436,7 @@ class VRFController1(VRFController):
 
     async def run(self):
         self.get_switch_set()
-        if self.device.work_mode == 4.0 or self.device.work_mode == 8.0:
-            self.ventilation_mode()
-        else:
-            self.get_speed_set()
+        self.get_speed_set()
         self.get_temperature_set()
 
 
@@ -474,61 +504,51 @@ async def build_acatvi_instructions(
         work_mode=params.work_mode,
     )
 
-    act_blowy_feedback_time, act_high_speed_time = await query_status_time(
-        db, params.device_id
-    )
-
     controller = VRFController1(
-        vrf,
-        target,
-        realtime,
-        params.feedback,
-        act_blowy_feedback_time,
-        act_high_speed_time,
-        params.season,
+        vrf, target, realtime, params.feedback, params.on_time, params.off_time
     )
     await controller.run()
     regulated_vrf = controller.get_results()
 
-    if params.feedback == FeedbackValue.noisy_or_blowy:
-        blowy_feedback_time_in_db = blowy_feedback_time.get_time_by_device(
-            db=db, device_id=params.device_id
-        )
-        if blowy_feedback_time_in_db:
-            blowy_feedback_time.update(
-                db=db,
-                db_obj=blowy_feedback_time_in_db,
-                obj_in=BlowyFeedbackTimeUpdate(
-                    timestamp=datetime.utcnow(), device_id=params.device_id
-                ),
-            )
-        else:
-            blowy_feedback_time.create(
-                db=db,
-                obj_in=BlowyFeedbackTimeCreate(
-                    timestamp=datetime.utcnow(), device_id=params.device_id
-                ),
-            )
-
-    if regulated_vrf.speed_set == "HH":
-        high_speed_time_in_db = high_speed_time.get_time_by_device(
-            db=db, device_id=params.device_id
-        )
-        if high_speed_time_in_db:
-            high_speed_time.update(
-                db=db,
-                db_obj=high_speed_time_in_db,
-                obj_in=HighSpeedTimeUpdate(
-                    timestamp=datetime.utcnow(), device_id=params.device_id
-                ),
-            )
-        else:
-            high_speed_time.create(
-                db=db,
-                obj_in=HighSpeedTimeCreate(
-                    timestamp=datetime.utcnow(), device_id=params.device_id
-                ),
-            )
+    # if params.feedback == FeedbackValue.noisy_or_blowy:
+    #     blowy_feedback_time_in_db = blowy_feedback_time.get_time_by_device(
+    #         db=db, device_id=params.device_id
+    #     )
+    #     if blowy_feedback_time_in_db:
+    #         blowy_feedback_time.update(
+    #             db=db,
+    #             db_obj=blowy_feedback_time_in_db,
+    #             obj_in=BlowyFeedbackTimeUpdate(
+    #                 timestamp=datetime.utcnow(), device_id=params.device_id
+    #             ),
+    #         )
+    #     else:
+    #         blowy_feedback_time.create(
+    #             db=db,
+    #             obj_in=BlowyFeedbackTimeCreate(
+    #                 timestamp=datetime.utcnow(), device_id=params.device_id
+    #             ),
+    #         )
+
+    # if regulated_vrf.speed_set == "HH":
+    #     high_speed_time_in_db = high_speed_time.get_time_by_device(
+    #         db=db, device_id=params.device_id
+    #     )
+    #     if high_speed_time_in_db:
+    #         high_speed_time.update(
+    #             db=db,
+    #             db_obj=high_speed_time_in_db,
+    #             obj_in=HighSpeedTimeUpdate(
+    #                 timestamp=datetime.utcnow(), device_id=params.device_id
+    #             ),
+    #         )
+    #     else:
+    #         high_speed_time.create(
+    #             db=db,
+    #             obj_in=HighSpeedTimeCreate(
+    #                 timestamp=datetime.utcnow(), device_id=params.device_id
+    #             ),
+    #         )
 
     instructions = dict()
     instructions.update({"switch_set": regulated_vrf.equip_switch_set})