From 5c56e697dae077179d5d2cb38af2e57308341df1 Mon Sep 17 00:00:00 2001 From: puddly <32534428+puddly@users.noreply.github.com> Date: Mon, 20 Mar 2023 16:57:12 -0400 Subject: [PATCH 1/3] Implement energy scanning using the new zigpy API --- pyproject.toml | 9 +++++---- zigpy_cli/radio.py | 26 +++++++------------------- 2 files changed, 12 insertions(+), 23 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index f1b083b..1f941d3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,10 +17,11 @@ dependencies = [ "click", "coloredlogs", "scapy", - "zigpy>=0.53.0", - "bellows>=0.34.3", - "zigpy-deconz>=0.18.0", - "zigpy-znp>=0.8.0", + "zigpy>=0.54.0", + "bellows>=0.35.0", + "zigpy-deconz>=0.19.0", + "zigpy-znp>=0.9.0", + "zigpy-xbee>=0.17.0", ] [tool.setuptools.packages.find] diff --git a/zigpy_cli/radio.py b/zigpy_cli/radio.py index 558efd3..dc827fa 100644 --- a/zigpy_cli/radio.py +++ b/zigpy_cli/radio.py @@ -15,7 +15,6 @@ import zigpy.zdo.types from zigpy_cli.cli import cli, click_coroutine -from zigpy_cli.common import HEX_OR_DEC_INT from zigpy_cli.const import RADIO_LOGGING_CONFIGS, RADIO_TO_PACKAGE, RADIO_TO_PYPI LOGGER = logging.getLogger(__name__) @@ -55,6 +54,7 @@ async def radio(ctx, radio, port, baudrate=None, database=None): { "device": {"path": port}, "backup_enabled": False, + "startup_energy_scan": False, "database_path": database, } ) @@ -171,20 +171,12 @@ async def permit(app, join_time): @radio.command() @click.pass_obj -@click.option("--nwk", type=HEX_OR_DEC_INT, default=0x0000) @click.option("-n", "--num-scans", type=int, default=-1) @click_coroutine -async def energy_scan(app, nwk, num_scans): +async def energy_scan(app, num_scans): await app.startup() LOGGER.info("Running scan...") - # Temporarily create a zigpy device for scans not using the coordinator itself - if nwk != 0x0000: - app.add_device( - nwk=nwk, - ieee=zigpy.types.EUI64.convert("AA:AA:AA:AA:AA:AA:AA:AA"), - ) - # We compute an average over the last 5 scans channel_energies = collections.defaultdict(lambda: collections.deque([], maxlen=5)) @@ -192,17 +184,11 @@ async def energy_scan(app, nwk, num_scans): if num_scans != -1 and scan > num_scans: break - rsp = await app.get_device(nwk=nwk).zdo.Mgmt_NWK_Update_req( - zigpy.zdo.types.NwkUpdate( - ScanChannels=zigpy.types.Channels.ALL_CHANNELS, - ScanDuration=0x02, - ScanCount=1, - ) + results = await app.energy_scan( + channels=zigpy.types.Channels.ALL_CHANNELS, duration_exp=2, count=1 ) - _, scanned_channels, _, _, energy_values = rsp - - for channel, energy in zip(scanned_channels, energy_values): + for channel, energy in results.items(): energies = channel_energies[channel] energies.append(energy) @@ -210,6 +196,8 @@ async def energy_scan(app, nwk, num_scans): print(f"Channel energy (mean of {len(energies)} / {energies.maxlen}):") print("------------------------------------------------") + print(" ! Different radios compute channel energy differently") + print() print(" + Lower energy is better") print(" + Active Zigbee networks on a channel may still cause congestion") print(" + TX on 26 in North America may be with lower power due to regulations") From 148571d79be1a1cca4ceb9aa17a7363151ed450c Mon Sep 17 00:00:00 2001 From: puddly <32534428+puddly@users.noreply.github.com> Date: Fri, 31 Mar 2023 11:54:28 -0400 Subject: [PATCH 2/3] Disable bellows UART thread --- zigpy_cli/radio.py | 1 + 1 file changed, 1 insertion(+) diff --git a/zigpy_cli/radio.py b/zigpy_cli/radio.py index dc827fa..faaeb35 100644 --- a/zigpy_cli/radio.py +++ b/zigpy_cli/radio.py @@ -56,6 +56,7 @@ async def radio(ctx, radio, port, baudrate=None, database=None): "backup_enabled": False, "startup_energy_scan": False, "database_path": database, + "use_thread": False, } ) From ed5cd0731764a37fe76279a49e3273ce5dbab803 Mon Sep 17 00:00:00 2001 From: puddly <32534428+puddly@users.noreply.github.com> Date: Fri, 31 Mar 2023 14:13:11 -0400 Subject: [PATCH 3/3] Bump minimum package versions --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 1f941d3..858949b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,8 +19,8 @@ dependencies = [ "scapy", "zigpy>=0.54.0", "bellows>=0.35.0", - "zigpy-deconz>=0.19.0", - "zigpy-znp>=0.9.0", + "zigpy-deconz>=0.12.0", + "zigpy-znp>=0.10.0", "zigpy-xbee>=0.17.0", ]