Skip to content

Commit 82a2755

Browse files
authored
Refactor request() method. (#70)
* Refactor request() method. Sync to zigpy API changes. Use device instance for destination addressing in request method. * Bump zigpy dependency.
1 parent 1ab1279 commit 82a2755

File tree

3 files changed

+16
-12
lines changed

3 files changed

+16
-12
lines changed

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
packages=find_packages(exclude=['*.tests']),
1616
install_requires=[
1717
'pyserial-asyncio',
18-
'zigpy-homeassistant>=0.9.a0',
18+
'zigpy-homeassistant>=0.9.0a3',
1919
],
2020
tests_require=[
2121
'pytest',

tests/test_application.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,6 @@ async def test_permit(app, nwk):
190190
async def _test_request(app, send_success=True, aps_data_error=False,
191191
**kwargs):
192192
seq = 123
193-
nwk = 0x2345
194193

195194
async def req_mock(req_id, dst_addr_ep, profile, cluster, src_ep, data):
196195
if aps_data_error:
@@ -201,12 +200,10 @@ async def req_mock(req_id, dst_addr_ep, profile, cluster, src_ep, data):
201200
app._pending[req_id].result.set_result(1)
202201

203202
app._api.aps_data_request = mock.MagicMock(side_effect=req_mock)
204-
app.get_device = mock.MagicMock(
205-
return_value=zigpy.device.Device(app,
206-
mock.sentinel.ieee,
207-
nwk))
203+
device = zigpy.device.Device(app, mock.sentinel.ieee, 0x1122)
204+
app.get_device = mock.MagicMock(return_value=device)
208205

209-
return await app.request(nwk, 0x0260, 1, 2, 3, seq, b'\x01\x02\x03', **kwargs)
206+
return await app.request(device, 0x0260, 1, 2, 3, seq, b'\x01\x02\x03', **kwargs)
210207

211208

212209
@pytest.mark.asyncio
@@ -216,6 +213,9 @@ async def test_request_send_success(app):
216213
r = await _test_request(app, True)
217214
assert r[0] == 0
218215

216+
r = await _test_request(app, True, use_ieee=True)
217+
assert r[0] == 0
218+
219219

220220
@pytest.mark.asyncio
221221
async def test_request_send_fail(app):

zigpy_deconz/zigbee/application.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,19 @@ async def form_network(self, channel=15, pan_id=None, extended_pan_id=None):
8484
raise Exception("Could not form network.")
8585

8686
@zigpy.util.retryable_request
87-
async def request(self, nwk, profile, cluster, src_ep, dst_ep, sequence, data,
88-
timeout=SEND_CONFIRM_TIMEOUT):
87+
async def request(self, device, profile, cluster, src_ep, dst_ep, sequence, data,
88+
expect_reply=True, use_ieee=False):
8989
req_id = self.get_sequence()
9090
LOGGER.debug("Sending Zigbee request with tsn %s under %s request id, data: %s",
9191
sequence, req_id, binascii.hexlify(data))
9292
dst_addr_ep = t.DeconzAddressEndpoint()
93-
dst_addr_ep.address_mode = t.uint8_t(t.ADDRESS_MODE.NWK.value)
94-
dst_addr_ep.address = t.uint16_t(nwk)
9593
dst_addr_ep.endpoint = t.uint8_t(dst_ep)
94+
if use_ieee:
95+
dst_addr_ep.address_mode = t.uint8_t(t.ADDRESS_MODE.IEEE)
96+
dst_addr_ep.address = device.ieee
97+
else:
98+
dst_addr_ep.address_mode = t.uint8_t(t.ADDRESS_MODE.NWK)
99+
dst_addr_ep.address = device.nwk
96100

97101
with self._pending.new(req_id) as req:
98102
try:
@@ -107,7 +111,7 @@ async def request(self, nwk, profile, cluster, src_ep, dst_ep, sequence, data,
107111
except zigpy_deconz.exception.CommandError as ex:
108112
return ex.status, "Couldn't enqueue send data request: {}".format(ex)
109113

110-
r = await asyncio.wait_for(req.result, timeout)
114+
r = await asyncio.wait_for(req.result, SEND_CONFIRM_TIMEOUT)
111115

112116
if r:
113117
LOGGER.warning("Error while sending %s req id frame: 0x%02x", req_id, r)

0 commit comments

Comments
 (0)