CLI 需要 NS 和 AS 在 JS 中创建设备
$ ttn-lw-cli dev create test-app test-dev --join-eui 0102030405060708 --dev-eui 01020304050607ff --root-keys.app-key.key 01020304050607080102030405060708 --resets-join-nonces=true --net-id=000001 --network-server-address 000001
abp
未设置, supports_join
被设置,这是一个NS字段,触发创建/更新的NS命中我希望只能在 JS 中创建设备
强制 CLI 不调用 JS/NS/AS。 这类似于控制台,当组件不存在时,我们禁用该功能。
会审核
此外,CLI 当前要求在所有情况下都设置lorawan_version
,而仅在创建 ABP 设备以验证会话密钥时才需要。 建议;
diff --git a/cmd/ttn-lw-cli/commands/end_devices.go b/cmd/ttn-lw-cli/commands/end_devices.go
index 2fd69e78..b20c9297 100644
--- a/cmd/ttn-lw-cli/commands/end_devices.go
+++ b/cmd/ttn-lw-cli/commands/end_devices.go
@@ -294,19 +294,6 @@ var (
paths = append(paths, ttnpb.FlattenPaths(decodedPaths, endDeviceFlattenPaths)...)
}
- var macVersion ttnpb.MACVersion
- s, err := setEndDeviceFlags.GetString("lorawan_version")
- if err != nil {
- return err
- }
-
- if err := macVersion.UnmarshalText([]byte(s)); err != nil {
- return err
- }
- if err := macVersion.Validate(); err != nil {
- return errInvalidMACVerson
- }
-
setDefaults, _ := cmd.Flags().GetBool("defaults")
if setDefaults {
device.NetworkServerAddress = getHost(config.NetworkServerGRPCAddress)
@@ -344,6 +331,17 @@ var (
"session.keys.app_s_key.key",
"session.dev_addr",
)
+ var macVersion ttnpb.MACVersion
+ s, err := setEndDeviceFlags.GetString("lorawan_version")
+ if err != nil {
+ return err
+ }
+ if err := macVersion.UnmarshalText([]byte(s)); err != nil {
+ return err
+ }
+ if err := macVersion.Validate(); err != nil {
+ return errInvalidMACVerson
+ }
if macVersion.Compare(ttnpb.MAC_V1_1) >= 0 {
device.Session.SessionKeys.SNwkSIntKey = &ttnpb.KeyEnvelope{Key: generateKey()}
device.Session.SessionKeys.NwkSEncKey = &ttnpb.KeyEnvelope{Key: generateKey()}
抄送@rvolosatovs
我认为添加 ( --skip-is
,) --skip-ns
、 --skip-as
和--skip-js
标志可能是一个想法,以允许高级用户跳过创建/更新(IS/)NS/AS/JS。 --skip-is
可能有点棘手,我认为我们不应该允许它用于创建。
据我所知,MAC 版本非常有用,也适用于 OTAA 设备。 如果不是现在,将来拥有它仍然很有价值,所以我认为将它保留在原处是明智的。
我认为添加 (
--skip-is
,)--skip-ns
、--skip-as
和--skip-js
标志可能是一个想法,以允许高级用户跳过创建/更新(IS/)NS/AS/JS。--skip-is
可能有点棘手,我认为我们不应该允许它用于创建。
当有关..._grpc_address
为空时跳过它们怎么样?
据我所知,MAC 版本非常有用,也适用于 OTAA 设备。 如果不是现在,将来拥有它仍然很有价值,所以我认为将它保留在原处是明智的。
不知道何时在 JS 上配置设备,例如在选择终端设备固件之前很久就配置安全元素。 JS 也不关心 MAC 版本,它在连接流中与从 NS 中选择的 MAC 版本一起使用。
我认为在决定在哪里创建终端设备时查看地址配置不是一个好主意,很容易犯错误(当忘记配置 env var 时)。 跳过特定服务器类型上的终端设备创建是一种特殊用例,值得明确标记,并且不应在省略某些配置时隐式决定(可能是偶然的)。
删除 MAC 版本超出了 IMO 的范围,应该在继续之前与
跳过特定服务器类型上的终端设备创建是一种特殊用例,值得明确标记,并且不应在省略某些配置时隐式决定(可能是偶然的)。
独立 AS 和独立 JS 不是特殊用例。 让我们为每个组件启用布尔值,然后像控制台一样,默认情况下true
。
关于lorawan_version
- 我同意@johanstokking ,我们只需要在 CLI 中使用它来创建 ABP 设备,所以没有理由要求它。
bool
旗帜听起来不错!