@@ -24,33 +24,68 @@ async def update(self, interface: int | None = None) -> None:
2424 """Update state of device."""
2525 await self .get_device_data (retry = self ._retry_count , interface = interface )
2626
27+ def _generate_command (
28+ self , on : bool | None = None , level : int | None = None
29+ ) -> str :
30+ """Generate command."""
31+ if level is None :
32+ level = self .get_level ()
33+ if on is None :
34+ on = self .is_on ()
35+ on_hex = "01" if on else "00"
36+ return f"{ HUMIDIFIER_COMMAND } 01{ on_hex } { level :02X} FFFFFFFF"
37+
2738 async def turn_on (self ) -> bool :
2839 """Turn device on."""
29- result = await self ._send_command (HUMIDIFIER_ON_KEY )
40+ result = await self ._send_command (self . _generate_command ( on = True ) )
3041 ret = self ._check_command_result (result , 0 , {0x01 })
31- self ._override_adv_data = {"isOn" : True }
42+ self ._override_state ( {"isOn" : True })
3243 self ._fire_callbacks ()
3344 return ret
3445
3546 async def turn_off (self ) -> bool :
3647 """Turn device off."""
37- result = await self ._send_command (HUMIDIFIER_OFF_KEY )
48+ result = await self ._send_command (self . _generate_command ( on = False ) )
3849 ret = self ._check_command_result (result , 0 , {0x01 })
39- self ._override_adv_data = {"isOn" : False }
50+ self ._override_state ( {"isOn" : False })
4051 self ._fire_callbacks ()
4152 return ret
4253
4354 async def set_level (self , level : int ) -> bool :
4455 """Set level."""
4556 assert 1 <= level <= 100 , "Level must be between 1 and 100"
46- result = await self ._send_command (
47- f"{ HUMIDIFIER_COMMAND } 0101{ level :02X} FFFFFFFF"
48- )
57+ await self ._set_level (level )
58+
59+ async def _set_level (self , level : int ) -> bool :
60+ """Set level."""
61+ result = await self ._send_command (self ._generate_command (level = level ))
4962 ret = self ._check_command_result (result , 0 , {0x01 })
50- self ._override_adv_data = { "isOn" : False , " level" : level }
63+ self ._override_state ({ " level" : level })
5164 self ._fire_callbacks ()
5265 return ret
5366
67+ async def async_set_auto (self ) -> bool :
68+ """Set auto mode."""
69+ await self ._set_level (128 )
70+
71+ async def async_set_manual (self ) -> bool :
72+ """Set manual mode."""
73+ await self ._set_level (50 )
74+
75+ def is_auto (self ) -> bool :
76+ """Return auto state from cache."""
77+ return self .get_level () == 128
78+
79+ def get_level (self ) -> int | None :
80+ """Return level state from cache."""
81+ return self ._get_adv_value ("level" )
82+
5483 def is_on (self ) -> bool | None :
5584 """Return switch state from cache."""
5685 return self ._get_adv_value ("isOn" )
86+
87+ def get_target_humidity (self ) -> int | None :
88+ """Return target humidity from cache."""
89+ level = self .get_level ()
90+ is_auto = level == 128
91+ return None if is_auto else level
0 commit comments