|
12 | 12 | import zigpy.profiles
|
13 | 13 | import zigpy.zcl.foundation
|
14 | 14 |
|
15 |
| -from zigpy.zdo.types import ZDOCmd |
| 15 | +from zigpy.zdo.types import ZDOCmd, ZDOHeader, CLUSTERS as ZDO_CLUSTERS |
16 | 16 |
|
17 |
| -from zigpy.types import ExtendedPanId |
| 17 | +from zigpy.types import ExtendedPanId, deserialize as list_deserialize |
18 | 18 | from zigpy.zcl.clusters.security import IasZone
|
19 | 19 |
|
20 | 20 | import zigpy_znp.config as conf
|
|
35 | 35 | ZDOCmd.Node_Desc_req: (
|
36 | 36 | ZDOCmd.Node_Desc_rsp,
|
37 | 37 | (
|
38 |
| - lambda addr, ep: c.ZDOCommands.NodeDescReq.Req( |
39 |
| - DstAddr=addr, NWKAddrOfInterest=addr |
| 38 | + lambda addr, NWKAddrOfInterest: c.ZDOCommands.NodeDescReq.Req( |
| 39 | + DstAddr=addr, NWKAddrOfInterest=NWKAddrOfInterest |
40 | 40 | )
|
41 | 41 | ),
|
42 | 42 | (
|
|
49 | 49 | ZDOCmd.Active_EP_req: (
|
50 | 50 | ZDOCmd.Active_EP_rsp,
|
51 | 51 | (
|
52 |
| - lambda addr, ep: c.ZDOCommands.ActiveEpReq.Req( |
53 |
| - DstAddr=addr, NWKAddrOfInterest=addr |
| 52 | + lambda addr, NWKAddrOfInterest: c.ZDOCommands.ActiveEpReq.Req( |
| 53 | + DstAddr=addr, NWKAddrOfInterest=NWKAddrOfInterest |
54 | 54 | )
|
55 | 55 | ),
|
56 | 56 | (
|
|
63 | 63 | ZDOCmd.Simple_Desc_req: (
|
64 | 64 | ZDOCmd.Simple_Desc_rsp,
|
65 | 65 | (
|
66 |
| - lambda addr, ep: c.ZDOCommands.SimpleDescReq.Req( |
67 |
| - DstAddr=addr, NWKAddrOfInterest=addr, Endpoint=ep |
| 66 | + lambda addr, NWKAddrOfInterest, EndPoint: c.ZDOCommands.SimpleDescReq.Req( |
| 67 | + DstAddr=addr, NWKAddrOfInterest=NWKAddrOfInterest, Endpoint=EndPoint |
68 | 68 | )
|
69 | 69 | ),
|
70 | 70 | (
|
@@ -474,8 +474,15 @@ async def _send_zdo_request(
|
474 | 474 |
|
475 | 475 | assert dst_ep == ZDO_ENDPOINT
|
476 | 476 |
|
| 477 | + # Deserialize the ZDO request |
| 478 | + zdo_hdr, data = ZDOHeader.deserialize(cluster, data) |
| 479 | + field_names, field_types = ZDO_CLUSTERS[cluster] |
| 480 | + zdo_args, _ = list_deserialize(data, field_types) |
| 481 | + zdo_kwargs = dict(zip(field_names, zdo_args)) |
| 482 | + |
| 483 | + # Call the converter with the ZDO request's kwargs |
477 | 484 | rsp_cluster, req_factory, callback_factory, converter = ZDO_CONVERTERS[cluster]
|
478 |
| - request = req_factory(dst_addr.address, ep=src_ep) |
| 485 | + request = req_factory(dst_addr.address, **zdo_kwargs) |
479 | 486 | callback = callback_factory(dst_addr.address)
|
480 | 487 |
|
481 | 488 | LOGGER.debug(
|
|
0 commit comments