@@ -33,7 +33,9 @@ class XAqaraS2(XEntity, ClimateEntity):
33
33
_attr_hvac_mode = None
34
34
_attr_hvac_modes = [HVACMode .OFF , HVACMode .COOL , HVACMode .HEAT ]
35
35
_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
+ )
37
39
_attr_temperature_unit = UnitOfTemperature .CELSIUS
38
40
# support only KTWKQ03ES for now
39
41
_attr_max_temp = 30
@@ -42,6 +44,9 @@ class XAqaraS2(XEntity, ClimateEntity):
42
44
_enabled = None
43
45
_mode = None
44
46
47
+ def on_init (self ):
48
+ self .listen_attrs |= {"power" , "current_temp" , "hvac_mode" , "target_temp" }
49
+
45
50
def set_state (self , data : dict ):
46
51
self ._enabled = data .get ("power" )
47
52
self ._attr_current_temperature = data .get ("current_temp" )
@@ -109,22 +114,35 @@ async def async_set_hvac_mode(self, hvac_mode: str) -> None:
109
114
return
110
115
self .device .write (payload )
111
116
112
- class ScdvbHAVC (XEntity , ClimateEntity ):
117
+
118
+ class XScdvbHAVC (XEntity , ClimateEntity ):
113
119
_attr_fan_mode = None
114
120
_attr_fan_modes = [FAN_LOW , FAN_MEDIUM , FAN_HIGH , FAN_AUTO ]
115
121
_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
+ ]
117
130
_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
+ )
119
134
_attr_temperature_unit = UnitOfTemperature .CELSIUS
120
135
_attr_max_temp = 32
121
136
_attr_min_temp = 16
122
137
_attr_target_temperature_step = 1
123
138
124
139
_enabled = None
125
140
_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 ):
128
146
if "climate" in data :
129
147
self ._enabled = data ["climate" ]
130
148
if "hvac_mode" in data :
@@ -140,30 +158,29 @@ def async_set_state(self, data: dict):
140
158
return
141
159
142
160
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 )
145
161
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 })
150
165
151
166
async def async_set_fan_mode (self , fan_mode : str ) -> None :
152
167
if not self ._enabled :
153
- await self .device_send ({"climate" : True })
168
+ self .device . write ({"climate" : True })
154
169
self ._attr_hvac_mode = self ._mode
155
- await self .device_send ({"fan_mode" : fan_mode })
170
+ self .device . write ({"fan_mode" : fan_mode })
156
171
157
172
async def async_set_hvac_mode (self , hvac_mode : str ) -> None :
158
173
if hvac_mode == HVACMode .OFF :
159
- await self .device_send ({"climate" : False })
174
+ self .device . write ({"climate" : False })
160
175
else :
161
176
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
164
179
if hvac_mode == HVACMode .AUTO :
165
180
hvac_mode = self ._mode
166
- await self .device_send ({"hvac_mode" : hvac_mode })
181
+ self .device .write ({"hvac_mode" : hvac_mode })
182
+
167
183
168
184
XEntity .NEW ["climate.model.lumi.airrtc.tcpecn02" ] = XAqaraS2
169
185
XEntity .NEW ["climate.model.lumi.airrtc.agl001" ] = XAqaraE1
186
+ XEntity .NEW ["climate.model.14050" ] = XScdvbHAVC
0 commit comments