Lorawan-stack: CLI nécessite NS et AS pour créer des appareils en JS

Créé le 21 juin 2019  ·  6Commentaires  ·  Source: TheThingsNetwork/lorawan-stack

Résumé

CLI nécessite NS et AS pour créer des appareils en JS

Étapes pour reproduire

  1. Créez un appareil avec uniquement des champs JS, c'est- $ 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 dire

Que voyez-vous maintenant?

  • Étant donné que abp n'est pas défini, supports_join est défini, ce qui est un champ NS, déclenchant un appel NS pour créer/mettre à jour
  • Lors de la création de l'appareil, NS est quand même touché
  • Mais NS nécessite la définition d'un profil d'appareil, c'est-à-dire les versions LoRaWAN MAC et PHY

Que veux-tu voir à la place ?

Je veux pouvoir créer des appareils en JS uniquement

Comment proposez-vous de mettre cela en œuvre ?

Forcez CLI à ne pas appeler JS/NS/AS. Ceci est similaire à la console, où nous désactivons la fonctionnalité lorsque le composant n'est pas là.

Pouvez-vous le faire vous-même et soumettre une Pull Request ?

Examinera

bug in progress ucli

Tous les 6 commentaires

De plus, la CLI nécessite actuellement que lorawan_version soit défini en toutes circonstances, alors qu'il n'est nécessaire que lors de la création de périphériques ABP pour valider les clés de session. Suggérer ;

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

Je pense que ce pourrait être une idée d'ajouter ( --skip-is ,) --skip-ns , --skip-as et --skip-js pour permettre aux utilisateurs avancés d'ignorer les créations/mises à jour sur le (IS/)NS/AS/JS. Le --skip-is peut être un peu délicat, je pense que nous ne devrions pas autoriser celui-ci pour les créations.

Pour autant que je sache, la version MAC est très utile, également pour les appareils OTAA. Si ce n'est pas maintenant, il pourrait toujours être utile de l'avoir dans le futur, donc je pense qu'il serait sage de le garder où il est.

Je pense que ce pourrait être une idée d'ajouter ( --skip-is ,) --skip-ns , --skip-as et --skip-js pour permettre aux utilisateurs avancés d'ignorer les créations/mises à jour sur le (IS/)NS/AS/JS. Le --skip-is peut être un peu délicat, je pense que nous ne devrions pas autoriser celui-ci pour les créations.

Que diriez-vous de les sauter lorsque le ..._grpc_address concerné est vide ?

Pour autant que je sache, la version MAC est très utile, également pour les appareils OTAA. Si ce n'est pas maintenant, il pourrait toujours être utile de l'avoir dans le futur, donc je pense qu'il serait sage de le garder où il est.

Il n'est pas connu lors du provisionnement des appareils sur le JS, par exemple lors du provisionnement des éléments sécurisés bien avant que le micrologiciel de l'appareil final ne soit choisi. JS ne se soucie pas non plus de la version MAC, il fonctionne avec la version MAC sélectionnée de NS dans le flux de jointure.

Je ne pense pas que ce soit une bonne idée de regarder la configuration de l'adresse au moment de décider où créer des périphériques finaux, il est tout simplement trop facile de faire des erreurs avec cela (en oubliant de configurer une var env). Ignorer la création de périphérique final sur des types de serveurs spécifiques est un cas d'utilisation spécial qui mérite des indicateurs explicites et ne doit pas être implicitement décidé lorsque certaines configurations sont omises (peut-être par accident).


La suppression de la version MAC est hors de portée de l'OMI pour ce problème et devrait être discutée avec @rvolosatovs avant d'aller de l'avant avec cela.

Ignorer la création de périphérique final sur des types de serveurs spécifiques est un cas d'utilisation spécial qui mérite des indicateurs explicites et ne doit pas être implicitement décidé lorsque certaines configurations sont omises (peut-être par accident).

L'AS autonome et le JS autonome ne sont pas des cas d'utilisation particuliers. Allons-y pour les bools activés par composant puis, comme Console, par défaut true .

En ce qui concerne le lorawan_version - Je suis d'accord avec @johanstokking , nous n'en avons besoin que dans la CLI pour créer des périphériques ABP, donc aucune raison de l'exiger.
bool drapeaux

Cette page vous a été utile?
0 / 5 - 0 notes