Lorawan-stack: CLI требует NS и AS для создания устройств на JS

Созданный на 21 июн. 2019  ·  6Комментарии  ·  Источник: TheThingsNetwork/lorawan-stack

Резюме

CLI требует NS и AS для создания устройств на JS

Действия по воспроизведению

  1. Создайте устройство только с полями 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 для создания / обновления.
  • При создании устройства NS все равно попадает
  • Но NS требует, чтобы был установлен профиль устройства, то есть версии LoRaWAN MAC и PHY.

Что вы хотите увидеть вместо этого?

Я хочу иметь возможность создавать устройства только на JS

Как вы предлагаете это реализовать?

Заставить CLI не вызывать JS / NS / AS. Это похоже на консоль, где мы отключаем функции, когда компонента нет.

Можете ли вы сделать это самостоятельно и отправить запрос на слияние?

Рассмотрим

bug in progress ucli

Все 6 Комментарий

Кроме того, для интерфейса командной строки в настоящее время требуется установка 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 флаги звучат хорошо!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги