@@ -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 ()
0 commit comments