CLIでは、JSでデバイスを作成するためにNSとASが必要です
$ 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
が設定されていないため、NSフィールドであるsupports_join
が設定され、作成/更新の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()}
cc @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バージョンで動作します。
エンドデバイスを作成する場所を決定するときにアドレス構成を確認するのは良い考えではないと思います。それを間違えるのは簡単すぎます(環境変数の構成を忘れた場合)。 特定のサーバータイプでのエンドデバイスの作成をスキップすることは、明示的なフラグに値する特別な使用例であり、特定の構成が省略された場合(おそらく偶然)に暗黙的に決定されるべきではありません。
MACバージョンの削除は、この問題の範囲外のIMOであり、先に進む前に
特定のサーバータイプでのエンドデバイスの作成をスキップすることは、明示的なフラグに値する特別な使用例であり、特定の構成が省略された場合(おそらく偶然)に暗黙的に決定されるべきではありません。
スタンドアロンASとスタンドアロンJSは特別な使用例ではありません。 コンポーネントごとに有効なboolを探してみましょう。次に、コンソールのように、デフォルトでtrue
です。
lorawan_version
- @ johanstokkingに同意します。これは、CLIでABPデバイスを作成するためにのみ必要なので、必要とする理由はありません。
bool
フラグはいいですね!