|
1 | 1 | from __future__ import annotations
|
2 | 2 |
|
3 | 3 | import json
|
| 4 | +import asyncio |
4 | 5 | import logging
|
5 | 6 | import importlib
|
6 | 7 | import itertools
|
7 | 8 | import collections
|
8 | 9 | import importlib.util
|
9 | 10 |
|
10 | 11 | import click
|
| 12 | +import zigpy.zdo |
11 | 13 | import zigpy.state
|
12 | 14 | import zigpy.types
|
13 | 15 | import zigpy.zdo.types
|
@@ -142,6 +144,24 @@ async def form(app):
|
142 | 144 | await app.form_network()
|
143 | 145 |
|
144 | 146 |
|
| 147 | +@radio.command() |
| 148 | +@click.pass_obj |
| 149 | +@click_coroutine |
| 150 | +async def reset(app): |
| 151 | + await app.connect() |
| 152 | + await app.reset_network_info() |
| 153 | + |
| 154 | + |
| 155 | +@radio.command() |
| 156 | +@click.pass_obj |
| 157 | +@click.option("-t", "--join-time", type=int, default=250) |
| 158 | +@click_coroutine |
| 159 | +async def permit(app, join_time): |
| 160 | + await app.startup(auto_form=True) |
| 161 | + await app.permit(join_time) |
| 162 | + await asyncio.sleep(join_time) |
| 163 | + |
| 164 | + |
145 | 165 | @radio.command()
|
146 | 166 | @click.pass_obj
|
147 | 167 | @click.option("--nwk", type=HEX_OR_DEC_INT, default=0x0000)
|
@@ -209,3 +229,32 @@ async def energy_scan(app, nwk, num_scans):
|
209 | 229 | )
|
210 | 230 |
|
211 | 231 | print()
|
| 232 | + |
| 233 | + |
| 234 | +@radio.command() |
| 235 | +@click.pass_obj |
| 236 | +@click.option("-c", "--channel", type=int) |
| 237 | +@click_coroutine |
| 238 | +async def change_channel(app, channel): |
| 239 | + await app.startup() |
| 240 | + |
| 241 | + await zigpy.zdo.broadcast( |
| 242 | + app=app, |
| 243 | + command=zigpy.zdo.types.ZDOCmd.Mgmt_NWK_Update_req, |
| 244 | + grpid=None, |
| 245 | + radius=0, |
| 246 | + broadcast_address=zigpy.types.BroadcastAddress.ALL_DEVICES, |
| 247 | + NwkUpdate=zigpy.zdo.types.NwkUpdate( |
| 248 | + ScanChannels=zigpy.types.Channels.from_channel_list([channel]), |
| 249 | + ScanDuration=zigpy.zdo.types.NwkUpdate.CHANNEL_CHANGE_REQ, |
| 250 | + nwkUpdateId=app.state.network_info.nwk_update_id + 1, |
| 251 | + ), |
| 252 | + ) |
| 253 | + |
| 254 | + await app.get_device(nwk=0x0000).zdo.Mgmt_NWK_Update_req( |
| 255 | + zigpy.zdo.types.NwkUpdate( |
| 256 | + ScanChannels=zigpy.types.Channels.from_channel_list([channel]), |
| 257 | + ScanDuration=zigpy.zdo.types.NwkUpdate.CHANNEL_CHANGE_REQ, |
| 258 | + nwkUpdateId=app.state.network_info.nwk_update_id + 1, |
| 259 | + ), |
| 260 | + ) |
0 commit comments