def test_zha_security_controller(): util.zha_security(controller=True)
def join(ctx, channels, pan_id, extended_pan_id): """Join an existing ZigBee network as an end device""" def cb(fut, frame_name, response): if frame_name == 'stackStatusHandler': fut.set_result(response) s = yield from util.setup(ctx.obj['device'], ctx.obj['baudrate']) channel = None if len(channels) != 1: if pan_id or extended_pan_id: raise click.BadOptionUsage( "Specify exactly one channel to join a specific network") else: channel = t.uint8_t(channels[0]) if not (pan_id or extended_pan_id): scan_type = t.EzspNetworkScanType.ACTIVE_SCAN channel_mask = util.channel_mask(channels) click.echo("PAN not provided, scanning channels %s..." % (' '.join(map(str, channels)), )) v = yield from s.startScan(scan_type, channel_mask, 3) networks = [n[0] for n in v if n[0].allowingJoin] if len(networks) == 0: click.echo("No joinable networks found") return 1 if len(networks) > 1: click.echo("Multiple joinable networks found. Refusing to pick.") return 1 network = networks[0] pan_id = network.panId extended_pan_id = network.extendedPanId channel = network.channel click.echo("Found network %s %s on channel %s" % ( pan_id, extended_pan_id, channel, )) if pan_id is None: pan_id = t.uint16_t(0) else: pan_id = t.uint16_t(pan_id) if isinstance(extended_pan_id, str): extended_pan_id = util.parse_epan(extended_pan_id) if extended_pan_id is None: extended_pan_id = t.fixed_list(8, t.uint8_t)([t.uint8_t(0)] * 8) v = yield from util.network_init(s) if v[0] == t.EmberStatus.SUCCESS: LOGGER.debug("Network was up, leaving...") v = yield from s.leaveNetwork() util.check(v[0], "Failure leaving network: %s" % (v[0], )) yield from asyncio.sleep(1) # TODO initial_security_state = zutil.zha_security() v = yield from s.setInitialSecurityState(initial_security_state) util.check(v[0], "Setting security state failed: %s" % (v[0], )) parameters = t.EmberNetworkParameters() parameters.extendedPanId = extended_pan_id parameters.panId = pan_id parameters.radioTxPower = t.uint8_t(8) parameters.radioChannel = t.uint8_t(channel) parameters.joinMethod = t.EmberJoinMethod.USE_MAC_ASSOCIATION parameters.nwkManagerId = t.EmberNodeId(0) parameters.nwkUpdateId = t.uint8_t(0) parameters.channels = t.uint32_t(0) click.echo(parameters) fut = asyncio.Future() cbid = s.add_callback(functools.partial(cb, fut)) v = yield from s.joinNetwork(t.EmberNodeType.END_DEVICE, parameters) util.check(v[0], "Joining network failed: %s" % (v[0], )) v = yield from fut click.echo(v) s.remove_callback(cbid) s.close()
def test_zha_security_end_device(): util.zha_security(controller=False)