1616# 2. 570F 4381 0101 43FF FFFF FF
1717# 3 . 570F 4381 0101 64FF FFFF FF
1818
19+ MANUAL_BUTTON_PRESSES_TO_LEVEL = {
20+ 101 : 33 ,
21+ 102 : 66 ,
22+ 103 : 100 ,
23+ }
24+
1925
2026class SwitchbotHumidifier (SwitchbotDevice ):
2127 """Representation of a Switchbot humidifier."""
@@ -29,27 +35,27 @@ def _generate_command(
2935 ) -> str :
3036 """Generate command."""
3137 if level is None :
32- level = self .get_level ()
38+ level = self .get_target_humidity () or 128
3339 if on is None :
3440 on = self .is_on ()
3541 on_hex = "01" if on else "00"
3642 return f"{ HUMIDIFIER_COMMAND } 01{ on_hex } { level :02X} FFFFFFFF"
3743
38- async def turn_on (self ) -> bool :
39- """Turn device on."""
40- result = await self ._send_command (self ._generate_command (on = True ))
44+ async def _async_set_state (self , state : bool ) -> bool :
45+ level = self . get_target_humidity () or 128
46+ result = await self ._send_command (self ._generate_command (on = state , level = level ))
4147 ret = self ._check_command_result (result , 0 , {0x01 })
42- self ._override_state ({"isOn" : True })
48+ self ._override_state ({"isOn" : state , "level" : level })
4349 self ._fire_callbacks ()
4450 return ret
4551
52+ async def turn_on (self ) -> bool :
53+ """Turn device on."""
54+ await self ._async_set_state (True )
55+
4656 async def turn_off (self ) -> bool :
4757 """Turn device off."""
48- result = await self ._send_command (self ._generate_command (on = False ))
49- ret = self ._check_command_result (result , 0 , {0x01 })
50- self ._override_state ({"isOn" : False })
51- self ._fire_callbacks ()
52- return ret
58+ await self ._async_set_state (False )
5359
5460 async def set_level (self , level : int ) -> bool :
5561 """Set level."""
@@ -74,7 +80,7 @@ async def async_set_manual(self) -> bool:
7480
7581 def is_auto (self ) -> bool :
7682 """Return auto state from cache."""
77- return self .get_level () == 128
83+ return self .get_level () in ( 228 , 128 )
7884
7985 def get_level (self ) -> int | None :
8086 """Return level state from cache."""
@@ -87,5 +93,6 @@ def is_on(self) -> bool | None:
8793 def get_target_humidity (self ) -> int | None :
8894 """Return target humidity from cache."""
8995 level = self .get_level ()
90- is_auto = level == 128
91- return None if is_auto else level
96+ if self .is_auto ():
97+ return None
98+ return MANUAL_BUTTON_PRESSES_TO_LEVEL .get (level , level )
0 commit comments