Browse Source

amend VRF control logic

highing666 3 years ago
parent
commit
11aea30090
3 changed files with 82 additions and 23 deletions
  1. 30 23
      app/controllers/equipment/vrf/basic.py
  2. 50 0
      app/models/domain/devices.py
  3. 2 0
      app/schemas/equipment.py

+ 30 - 23
app/controllers/equipment/vrf/basic.py

@@ -16,11 +16,17 @@ class VRFController(EquipmentController):
         self.target = target
         self.realtime = realtime
 
-    def get_switch_set(self, speed: str) -> bool:
-        if speed == 'off':
-            switch_set = False
+    def get_switch_set(self) -> str:
+        if np.isnan(self.target):
+            if self.device.running_status == 'on':
+                switch_set = 'off'
+            else:
+                switch_set = 'hold'
         else:
-            switch_set = True
+            if self.device.running_status == 'off':
+                switch_set = 'on'
+            else:
+                switch_set = 'hold'
 
         self.device.equip_switch_set = switch_set
 
@@ -37,37 +43,38 @@ class VRFController(EquipmentController):
         return mode_set
 
     def get_temperature_set(self) -> float:
-        self.device.temperature_set = self.target + 1
+        if self.realtime > 24.0:
+            diff = self.device.return_air_temp - self.realtime
+            if diff > 0:
+                self.device.temperature_set = self.target + diff
+            else:
+                self.device.temperature_set = self.target
+        elif self.realtime < 22.0:
+            self.device.temperature_set = self.device.return_air_temp + 1
+        else:
+            self.device.temperature_set = self.device.current_temperature_set
 
-        return self.target
+        return self.device.temperature_set
 
     def get_speed_set(self) -> str:
-        if self.realtime > self.device.return_air_temp:
-            diff = self.realtime - self.target
-        else:
-            diff = self.device.return_air_temp - (self.target + 1)
-        if diff < 0:
-            speed = 'off'
-        elif diff < 0.5:
-            speed = 'LL'
-        elif diff < 1.0:
-            speed = 'L'
-        elif diff < 1.5:
+        if self.realtime > 24.0:
             speed = 'M'
-        elif diff < 2.0:
-            speed = 'H'
-        elif diff > 2.0:
+        elif self.realtime < 22.0:
+            speed = 'LL'
+        elif self.device.return_air_temp - self.target > 3.0:
             speed = 'HH'
+        elif self.device.return_air_temp - self.target > 1.0:
+            speed = 'M'
         else:
-            speed = 'off'
+            speed = self.device.speed
 
         self.device.speed_set = speed
 
         return speed
 
     async def run(self):
-        speed = self.get_speed_set()
-        self.get_switch_set(speed)
+        self.get_speed_set()
+        self.get_switch_set()
         self.get_mode_set()
         self.get_temperature_set()
 

+ 50 - 0
app/models/domain/devices.py

@@ -24,6 +24,9 @@ class DevicesEarlyStartTime(BaseModel):
 
 class ACATVIInstructionsRequest(BaseModel):
     return_air_temperature: float
+    running_status: str
+    current_speed: str
+    current_temperature_set: float
     space_temperature_target: float
     space_realtime_temperature: float
 
@@ -74,3 +77,50 @@ class ACATVAInstructionsResponse(BaseModel):
     supply_air_flow_set: float = Field(None, alias='SupplyAirFlowSet')
     virtual_temperature_target_set: float = Field(None, alias='TargetTemperatureSet')
     virtual_realtime_temperature: float = Field(None, alias='VirtualRealtimeTemperature')
+
+
+class ACATAHFreqSetRequest(BaseModel):
+    system_supply_static_press: float
+    system_supply_static_press_set: float
+    current_freq_set: float
+    supply_air_temperature_set: float
+    spaces_hot_rate: float
+
+
+class ACATAHFreqSetResponse(BaseModel):
+    freq_set: float
+
+
+class SwitchSet(str, Enum):
+    on = 'on'
+    off = 'off'
+    hold = 'hold'
+
+
+class SwitchSetRequestBase(BaseModel):
+    running_status: bool
+    in_cloud_status: bool
+    on_time: str
+    off_time: str
+    is_workday: bool
+
+
+class SwitchSetResponseBase(BaseModel):
+    switch_set: SwitchSet
+
+
+class ACATAHSwitchSetRequest(SwitchSetRequestBase):
+    break_start_time: str
+    break_end_time: str
+
+
+class ACATAHSwitchSetResponse(SwitchSetResponseBase):
+    pass
+
+
+class ACVTSFSwitchSetRequest(SwitchSetRequestBase):
+    pass
+
+
+class ACVTSFSwitchSetResponse(SwitchSetResponseBase):
+    pass

+ 2 - 0
app/schemas/equipment.py

@@ -67,7 +67,9 @@ class PAU(BaseEquipment):
 
 
 class VRF(BaseEquipment):
+    speed: Optional[str]
     speed_set: Optional[str]
+    current_temperature_set: Optional[float]
     temperature_set: Optional[float]
     mode_set: Optional[str]
     return_air_temp: Optional[float]