Skip to content

Commit e212d4a

Browse files
committed
Code update after #1555
1 parent da87daa commit e212d4a

File tree

2 files changed

+45
-19
lines changed

2 files changed

+45
-19
lines changed

custom_components/xiaomi_gateway3/climate.py

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ class XAqaraS2(XEntity, ClimateEntity):
3333
_attr_hvac_mode = None
3434
_attr_hvac_modes = [HVACMode.OFF, HVACMode.COOL, HVACMode.HEAT]
3535
_attr_precision = PRECISION_WHOLE
36-
_attr_supported_features = ClimateEntityFeature.TARGET_TEMPERATURE | ClimateEntityFeature.FAN_MODE
36+
_attr_supported_features = (
37+
ClimateEntityFeature.TARGET_TEMPERATURE | ClimateEntityFeature.FAN_MODE
38+
)
3739
_attr_temperature_unit = UnitOfTemperature.CELSIUS
3840
# support only KTWKQ03ES for now
3941
_attr_max_temp = 30
@@ -42,6 +44,9 @@ class XAqaraS2(XEntity, ClimateEntity):
4244
_enabled = None
4345
_mode = None
4446

47+
def on_init(self):
48+
self.listen_attrs |= {"power", "current_temp", "hvac_mode", "target_temp"}
49+
4550
def set_state(self, data: dict):
4651
self._enabled = data.get("power")
4752
self._attr_current_temperature = data.get("current_temp")
@@ -109,22 +114,35 @@ async def async_set_hvac_mode(self, hvac_mode: str) -> None:
109114
return
110115
self.device.write(payload)
111116

112-
class ScdvbHAVC(XEntity, ClimateEntity):
117+
118+
class XScdvbHAVC(XEntity, ClimateEntity):
113119
_attr_fan_mode = None
114120
_attr_fan_modes = [FAN_LOW, FAN_MEDIUM, FAN_HIGH, FAN_AUTO]
115121
_attr_hvac_mode = None
116-
_attr_hvac_modes = [HVACMode.OFF, HVACMode.COOL, HVACMode.HEAT, HVACMode.AUTO, HVACMode.DRY, HVACMode.FAN_ONLY]
122+
_attr_hvac_modes = [
123+
HVACMode.OFF,
124+
HVACMode.COOL,
125+
HVACMode.HEAT,
126+
HVACMode.AUTO,
127+
HVACMode.DRY,
128+
HVACMode.FAN_ONLY,
129+
]
117130
_attr_precision = PRECISION_WHOLE
118-
_attr_supported_features = ClimateEntityFeature.TARGET_TEMPERATURE | ClimateEntityFeature.FAN_MODE
131+
_attr_supported_features = (
132+
ClimateEntityFeature.TARGET_TEMPERATURE | ClimateEntityFeature.FAN_MODE
133+
)
119134
_attr_temperature_unit = UnitOfTemperature.CELSIUS
120135
_attr_max_temp = 32
121136
_attr_min_temp = 16
122137
_attr_target_temperature_step = 1
123138

124139
_enabled = None
125140
_mode = None
126-
@callback
127-
def async_set_state(self, data: dict):
141+
142+
def on_init(self):
143+
self.listen_attrs |= {"current_temp", "fan_mode", "hvac_mode", "target_temp"}
144+
145+
def set_state(self, data: dict):
128146
if "climate" in data:
129147
self._enabled = data["climate"]
130148
if "hvac_mode" in data:
@@ -140,30 +158,29 @@ def async_set_state(self, data: dict):
140158
return
141159

142160
self._attr_hvac_mode = self._mode if self._enabled else HVACMode.OFF
143-
async def async_update(self):
144-
await self.device_read(self.subscribed_attrs)
145161

146-
async def async_set_temperature(self, **kwargs) -> None:
147-
if kwargs[ATTR_TEMPERATURE] == 0:
148-
return
149-
await self.device_send({"target_temp": kwargs[ATTR_TEMPERATURE]})
162+
async def async_set_temperature(self, temperature: int, **kwargs) -> None:
163+
if temperature:
164+
self.device.write({"target_temp": temperature})
150165

151166
async def async_set_fan_mode(self, fan_mode: str) -> None:
152167
if not self._enabled:
153-
await self.device_send({"climate": True})
168+
self.device.write({"climate": True})
154169
self._attr_hvac_mode = self._mode
155-
await self.device_send({"fan_mode": fan_mode})
170+
self.device.write({"fan_mode": fan_mode})
156171

157172
async def async_set_hvac_mode(self, hvac_mode: str) -> None:
158173
if hvac_mode == HVACMode.OFF:
159-
await self.device_send({"climate": False})
174+
self.device.write({"climate": False})
160175
else:
161176
if not self._enabled:
162-
await self.device_send({"climate": True})
163-
# better support HomeKit
177+
self.device.write({"climate": True})
178+
# better support HomeKit
164179
if hvac_mode == HVACMode.AUTO:
165180
hvac_mode = self._mode
166-
await self.device_send({"hvac_mode": hvac_mode})
181+
self.device.write({"hvac_mode": hvac_mode})
182+
167183

168184
XEntity.NEW["climate.model.lumi.airrtc.tcpecn02"] = XAqaraS2
169185
XEntity.NEW["climate.model.lumi.airrtc.agl001"] = XAqaraE1
186+
XEntity.NEW["climate.model.14050"] = XScdvbHAVC

custom_components/xiaomi_gateway3/core/devices.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -574,8 +574,8 @@
574574
# https://github.com/AlexxIT/XiaomiGateway3/issues/101
575575
"lumi.airrtc.tcpecn02": ["Aqara", "Thermostat S2 CN", "KTWKQ03ES"],
576576
"spec": [
577-
# BoolConv("power", mi="3.1.85", xiaomi="power_status"),
578577
ClimateConv("climate", "climate", mi="14.2.85"),
578+
BoolConv("power", mi="3.1.85"),
579579
BaseConv("current_temp", mi="3.2.85"),
580580
MapConv("hvac_mode", mi="14.8.85", map={0: "heat", 1: "cool", 15: "off"}),
581581
MapConv("fan_mode", mi="14.10.85", map={0: "low", 1: "medium", 2: "high", 3: "auto"}),
@@ -3004,6 +3004,15 @@
30043004
BoolConv("natural_wind", "switch", mi="3.p.7"),
30053005
MapConv("fan_level", "select", mi="3.p.2", map={1: "1", 2: "2", 3: "3", 4: "4", 5: "5", 6: "6"}),
30063006
]
3007+
}, {
3008+
14050: ["Scdvb", "Air Conditioner", "scdvb.aircondition.acm"],
3009+
"spec": [
3010+
BaseConv("climate", "climate", mi="2.p.1"),
3011+
MapConv("hvac_mode", mi="2.p.2", map={0: "cool", 1: "heat", 2: "fan_only", 3: "dry"}),
3012+
MapConv("fan_mode", mi="3.p.1", map={0: "auto", 1: "low", 2: "medium", 3: "high"}),
3013+
BaseConv("current_temp", mi="4.p.1"),
3014+
BaseConv("target_temp", mi="2.p.3"),
3015+
],
30073016
}, {
30083017
"default": "mesh", # default Mesh device
30093018
"spec": [

0 commit comments

Comments
 (0)