Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions greeclimate/device.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ def __init__(self, device_info: DeviceInfo, timeout: int = 120, bind_timeout: in
self.check_version = True
self._properties = {}
self._dirty = []
self._buzzer = True

self._valid_state: asyncio.Event = asyncio.Event()
self._valid_state.clear()
Expand Down Expand Up @@ -331,6 +332,10 @@ async def push_state_update(self):
Props.TEMP_UNIT.value
)

if not self._buzzer:
self._logger.debug("Disabling buzzer for command")
props["Buzzer_ON_OFF"] = 1

try:
await self.send(self.create_command_message(self.device_info, **props))

Expand Down Expand Up @@ -591,3 +596,11 @@ def clean_filter(self) -> Optional[bool]:
def water_full(self) -> Optional[bool]:
prop = self.get_property(Props.WATER_FULL)
return bool(prop) if prop is not None else None

@property
def buzzer(self) -> bool:
return self._buzzer

@buzzer.setter
def buzzer(self, value: bool):
self._buzzer = bool(value)
48 changes: 47 additions & 1 deletion tests/test_device.py
Original file line number Diff line number Diff line change
Expand Up @@ -743,7 +743,53 @@ def test_device_key_set_get():
device.device_key = "fake_key"
assert device.device_key == "fake_key"



@pytest.mark.asyncio
async def test_buzzer_default(cipher, send):
"""Check that buzzer is enabled by default."""
device = await generate_device_mock_async()
assert device.buzzer is True


@pytest.mark.asyncio
async def test_buzzer_disabled(cipher, send):
"""Check that disabling buzzer injects Buzzer_ON_OFF into commands."""
device = await generate_device_mock_async()

device.power = True
device.buzzer = False
await device.push_state_update()
assert send.call_count == 1
assert "Buzzer_ON_OFF" in send.call_args_list[0].args[0]["pack"]["opt"]
assert not device.buzzer

send.reset_mock()

device.power = False
device.buzzer = True
await device.push_state_update()
assert send.call_count == 1
assert "Buzzer_ON_OFF" not in send.call_args_list[0].args[0]["pack"]["opt"]
assert device.buzzer


@pytest.mark.asyncio
async def test_buzzer_disabled_every_command(cipher, send):
"""Check that Buzzer_ON_OFF is sent with every command when disabled."""
device = await generate_device_mock_async()
device.buzzer = False

device.power = True
await device.push_state_update()
assert "Buzzer_ON_OFF" in send.call_args_list[0].args[0]["pack"]["opt"]

send.reset_mock()

device.mode = 1
await device.push_state_update()
assert "Buzzer_ON_OFF" in send.call_args_list[0].args[0]["pack"]["opt"]


@pytest.mark.asyncio
async def has_valid_state_with_valid_properties(cipher, send):
"""Check that the device has a valid state with valid properties."""
Expand Down