Skip to content

Commit 1729d05

Browse files
author
niceboy
committed
Fix Aqara Yuba T1
1 parent dd6e12c commit 1729d05

File tree

2 files changed

+48
-35
lines changed

2 files changed

+48
-35
lines changed

custom_components/aqara_gateway/climate.py

Lines changed: 46 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,10 @@ def update(self, data: dict = None):
117117
# with power off all data come with empty values
118118
# https://github.com/AlexxIT/XiaomiGateway3/issues/101#issuecomment-747305596
119119
if self._is_on:
120-
if 'mode' in data: # 0 - heat, 1 - cool, 15 - off
121-
self._hvac_mode = list(
122-
YUBA_STATE_HVAC.keys())[list(YUBA_STATE_HVAC.values()).index(data['mode'])]
123-
if 'fan_mode' in data: # 0 - low, 3 - auto, 15 - off
124-
self._fan_mode = list(
125-
YUBA_STATE_FAN.keys())[list(YUBA_STATE_FAN.values()).index(data['fan_mode'])]
120+
if 'mode' in data:
121+
self._hvac_mode = HVAC_MODES[data['mode']]
122+
if 'fan_mode' in data:
123+
self._fan_mode = FAN_MODES[data['fan_mode']]
126124
if 'target_temperature' in data: # 255 - off
127125
self._target_temp = data['target_temperature']
128126

@@ -186,15 +184,20 @@ class AqaraClimateYuba(AqaraGenericClimate, ClimateEntity):
186184
# pylint: disable=too-many-instance-attributes
187185
"""Initialize the AqaraClimateYuba."""
188186

187+
@property
188+
def fan_modes(self):
189+
""" return fan modes """
190+
return list(YUBA_STATE_FAN.keys())
191+
189192
@property
190193
def hvac_modes(self):
191194
""" return hvac modes """
192-
return [HVACMode.OFF, HVACMode.DRY, HVACMode.HEAT, HVACMode.AUTO]
195+
return list(YUBA_STATE_HVAC.keys()) + [HVACMode.OFF]
193196

194197
@property
195198
def supported_features(self):
196199
""" return supported features """
197-
return ClimateEntityFeature.TARGET_TEMPERATURE | ClimateEntityFeature.FAN_MODE | ClimateEntityFeature.SWING_MODE
200+
return ClimateEntityFeature.TARGET_TEMPERATURE | ClimateEntityFeature.FAN_MODE | ClimateEntityFeature.TURN_OFF | ClimateEntityFeature.TURN_ON | ClimateEntityFeature.SWING_MODE
198201

199202
@property
200203
def swing_mode(self) -> str | None:
@@ -212,24 +215,39 @@ def swing_modes(self) -> list[str] | None:
212215
"""
213216
return [SWING_OFF, SWING_ON]
214217

218+
def turn_on(self) -> None:
219+
"""Turn the entity on."""
220+
self.gateway.send(self.device, {'power': 1})
221+
222+
def turn_off(self) -> None:
223+
"""Turn the entity off."""
224+
self.gateway.send(self.device, {'power': 0})
225+
215226
def set_temperature(self, **kwargs) -> None:
216227
""" set temperature """
217228
if not self._state or kwargs[ATTR_TEMPERATURE] == 0:
218229
self.debug(f"Can't set climate temperature: {self._state}")
219230
return
220-
self.gateway.send(self.device, {self._attr: int(kwargs[ATTR_TEMPERATURE])})
231+
self.gateway.send(self.device, {'target_temperature': 100 * int(kwargs[ATTR_TEMPERATURE])})
232+
self._target_temp = int(kwargs[ATTR_TEMPERATURE])
221233

222234
def set_fan_mode(self, fan_mode: str) -> None:
223235
""" set fan mode """
224236
if not self._state:
225237
return
226-
self.gateway.send(self.device, {self._attr: YUBA_STATE_FAN[fan_mode]})
238+
self.gateway.send(self.device, {'fan_mode': YUBA_STATE_FAN[fan_mode]})
239+
self._fan_mode = fan_mode
227240

228241
def set_hvac_mode(self, hvac_mode: str) -> None:
229242
""" set hvac mode """
230-
if not self._state:
243+
self._hvac_mode = hvac_mode
244+
if hvac_mode == HVACMode.OFF:
245+
self.gateway.send(self.device, {'power': 0})
231246
return
232-
self.gateway.send(self.device, {self._attr: YUBA_STATE_HVAC[hvac_mode]})
247+
if self._is_on == 0:
248+
self.gateway.send(self.device, {'power': 1})
249+
self._is_on = 1
250+
self.gateway.send(self.device, {'mode': YUBA_STATE_HVAC[hvac_mode]})
233251

234252
def set_swing_mode(self, swing_mode: str) -> None:
235253
"""Set new target swing operation."""
@@ -238,35 +256,31 @@ def set_swing_mode(self, swing_mode: str) -> None:
238256
value = 1
239257
if swing_mode == SWING_ON:
240258
value = 0
241-
self.gateway.send(self.device, {self._attr: value})
259+
self.gateway.send(self.device, {'swing_mode': value})
242260

243261
def update(self, data: dict = None):
244262
# pylint: disable=broad-except
245263
""" update climate """
246264
try:
247265
if 'power' in data: # 0 - off, 1 - on
248266
self._is_on = data['power']
249-
250-
if self._is_on:
251-
if 'mode' in data:
252-
self._hvac_mode = HVAC_MODES[data['mode']]
253-
if 'fan_mode' in data:
254-
self._fan_mode = FAN_MODES[data['fan_mode']]
255-
if 'swing_mode' in data:
256-
self._swing_mode = SWING_OFF if data['swing_mode'] == 1 else SWING_ON
257-
if 'target_temperature' in data:
258-
self._target_temp = data['target_temperature']
259-
260-
else:
261-
self._fan_mode = None
262-
self._hvac_mode = None
263-
self._target_temp = 0
264-
267+
if self._is_on == 0:
268+
self._hvac_mode = HVACMode.OFF
269+
if 'mode' in data:
270+
self._hvac_mode = list(YUBA_STATE_HVAC.keys())[
271+
list(YUBA_STATE_HVAC.values()).index(data['mode'])]
272+
if 'fan_mode' in data:
273+
self._fan_mode = list(YUBA_STATE_FAN.keys())[
274+
list(YUBA_STATE_FAN.values()).index(data['fan_mode'])]
265275
if 'current_temperature' in data:
266-
self._current_temp = data['current_temperature']
267-
276+
self._current_temp = data['current_temperature'] / 100
277+
if 'target_temperature' in data:
278+
self._target_temp = data['target_temperature'] / 100
279+
if 'swing_mode' in data:
280+
self._swing_mode = SWING_OFF if data['swing_mode'] == 1 else SWING_ON
281+
self._state = self._is_on
268282

269283
except Exception:
270-
_LOGGER.exception("Can't read climate data: %s", data)
284+
_LOGGER.exception(f"Can't read climate data: {data}")
271285

272286
self.schedule_update_ha_state()

custom_components/aqara_gateway/core/const.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,11 +223,10 @@
223223
}
224224

225225
YUBA_STATE_HVAC = {
226-
HVACMode.OFF: 0,
227-
HVACMode.HEAT: 0,
226+
HVACMode.HEAT_COOL: 5,
228227
HVACMode.DRY: 3,
229228
HVACMode.FAN_ONLY: 4,
230-
HVACMode.AUTO: 5
229+
HVACMode.HEAT: 0
231230
}
232231

233232
YUBA_STATE_FAN = {

0 commit comments

Comments
 (0)