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. Это похоже на консоль, где мы отключаем функции, когда компонента нет.
Рассмотрим
Кроме того, для интерфейса командной строки в настоящее время требуется установка 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, он работает с версией MAC, выбранной из NS в потоке соединения.
Я не думаю, что при принятии решения о том, где создавать конечные устройства, стоит смотреть на конфигурацию адреса, с этим слишком легко допустить ошибку (если забыть настроить env var). Пропуск создания конечного устройства на определенных типах серверов - это особый вариант использования, который требует явных флагов и не должен решаться неявно, если определенная конфигурация опущена (возможно, случайно).
Удаление версии для MAC выходит за рамки этой проблемы, и это следует обсудить с @rvolosatovs, прежде чем двигаться дальше.
Пропуск создания конечного устройства на определенных типах серверов - это особый вариант использования, который требует явных флагов и не должен решаться неявно, если определенная конфигурация опущена (возможно, случайно).
Автономная AS и автономный JS не являются особыми случаями использования. Давайте перейдем к включенным bools для каждого компонента, тогда, как и в консоли, по умолчанию true
.
Что касается lorawan_version
- я согласен с @johanstokking , он нам нужен только в CLI для создания устройств ABP, поэтому нет причин требовать его.
bool
флаги звучат хорошо!