Como testar uma rede Thread com visualização

1. Introdução

5abd22afa2f2ee9a.png

O que é Thread, OpenThread, OTNS e Silk?

O Thread é um protocolo de rede mesh sem fio de baixo consumo e baseado em IP que permite comunicações seguras entre dispositivos e entre nuvens. As redes Thread podem se adaptar às mudanças de topologia para evitar um ponto único de falha.

O OpenThread lançado pelo Google é uma implementação de código aberto do Thread. Apesar do pequeno tamanho de código e do consumo de memória, o OpenThread oferece suporte a todos os recursos definidos na especificação de linha de execução (link em inglês).

O simulador de rede OpenThread (OTNS, na sigla em inglês) pode ser usado para simular redes Thread executando nós do OpenThread simulados em plataformas posix. O OTNS oferece uma interface da Web fácil de usar (OTNS-Web) para visualizar e operar redes Thread simuladas.

O Silk é uma plataforma de testes totalmente automatizada para validar funções, recursos e desempenho do sistema do OpenThread com dispositivos reais.

O que você vai aprender

  • Framework de verificação de funcionalidade do OpenThread: Silk
  • Criar OpenThread para dispositivos reais com o recurso OTNS ativado
  • Usar a interface OTNS-Web para monitorar o status da rede Thread formada pela execução de casos de teste Silk

O foco deste codelab é o uso da Seda com OTNS. Outros recursos da Seda e do OTNS não são abordados.

O que é necessário

Hardware:

  • 6 placas de desenvolvimento nórdicas nRF52840 de semicondutores
  • Seis cabos USB para micro USB para conectar as placas
  • hub USB

Software:

Pré-requisitos:

2. Pré-requisitos

Concluir os codelabs básicos anteriores

Como verificar os pré-requisitos do pacote

Vamos garantir que todos os pré-requisitos sejam atendidos.

  1. Execute which otns para verificar se o executável otns é pesquisável em $PATH.
  2. Execute which wpantund para garantir que o wpantund esteja disponível.
  3. Verifique se o conjunto de ferramentas GNU ARM, o J-Link e os pacotes nrfjprog estão disponíveis.

Observação:consulte as documentações vinculadas para receber orientações de configuração. O pré-requisito no 1 é de Simular redes Thread usando OTNS e os outros são de Criar uma rede Thread com placas nRF52840 e OpenThread.

3. Configuração da seda

Para clonar o Silk e configurar o ambiente, execute os seguintes comandos no diretório de origem:

$ git clone https://github.com/openthread/silk.git
$ cd silk
$ ./bootstrap.sh
$ sudo make install-cluster

Definir o arquivo de configuração de hardware

Para permitir que o Silk reúna os recursos de hardware de teste disponíveis conectados à sua máquina, defina um arquivo hwconfig.ini no seguinte formato:

[DEFAULT]
ClusterID: 0
LayoutCenter: 300, 300
LayoutRadius: 100

[Dev-8A7D]
HwModel: Nrf52840
HwRev: 1.0
InterfaceSerialNumber: E1A5012E8A7D
USBInterfaceNumber: 1
DutSerial: 683536778

Uma ferramenta chamada usbinfo é instalada como parte do Silk e pode ser usada para descobrir o número de série da interface e o número da interface USB. DutSerial é o número SN impresso no chip ou mostrado por usbinfo para produtos J-Link.

Os campos LayoutCenter e LayoutRadius na seção [DEFAULT] definem a forma do layout quando os dispositivos são visualizados na interface da Web. Defini-los com os valores apresentados aqui pode ser um bom ponto de partida.

Depois disso, ele define uma seção para cada dispositivo de teste e fornece as informações de hardware necessárias.

4. Compilar o OpenThread com o OTNS ativado

Criando imagem e piscando

Por padrão, os dispositivos OpenThread não emitem mensagens relacionadas ao OTNS. Para permitir que as placas de desenvolvimento emitam mensagens de status para registrar interfaces essenciais para a visualização do OTNS, execute o seguinte comando no diretório de origem do OpenThread para criar uma imagem FTD e convertê-la para o formato hexadecimal.

$ git clone https://github.com/openthread/ot-nrf528xx.git --recursive
$ cd ot-nrf528xx
$ ./script/bootstrap
$ ./script/build nrf52840 USB_trans -DOT_COMMISSIONER=ON -DOT_JOINER=ON -DOT_OTNS=ON
$ cd ./build/bin
$ arm-none-eabi-objcopy -O ihex ot-ncp-ftd ot-ncp-ftd.hex

Para atualizar as placas, siga as instruções na etapa 4 do codelab Criar uma rede Thread para usar o nrfjprog. Depois disso, conecte todas as placas à máquina host pela porta USB nRF. O mesmo conjunto de cabos USB para micro USB pode ser desconectado das portas J-Link e conectado às portas USB nRF das placas de desenvolvimento nRF52840. Com apenas esses seis cabos, é possível realizar o teste. Para evitar transtornos, use 12 cabos e conecte-os às duas portas.

5. Servidor OTNS em execução no modo real

A execução do OTNS com parâmetros padrão permite que o usuário simule uma rede Thread. Para usá-lo como uma ferramenta de visualização para uma rede física real, execute-o com:

otns -raw -real -ot-cli otns-silk-proxy

Esses argumentos informam ao OTNS que ele deve esperar mensagens gRPC e UDP que descrevam como a rede Thread deve ser visualizada, em vez de executar vários processos ot-cli para simular a rede. Seu navegador abrirá automaticamente a página de visualização com uma tela vazia.

4dd5b41bf7e71334.png

6. Como executar casos de teste do Silk com suporte a OTNS

O Silk é uma plataforma de testes totalmente automatizada para validar funções, recursos e desempenho do sistema do OpenThread com dispositivos reais. As instruções no arquivo README do projeto (em inglês) mostram como usá-lo.

O arquivo silk_run_test.py localizado em silk/unit_tests oferece uma vantagem. O Silk oferece suporte a OTNS ao executar um caso de teste. Como o serviço de modo real do OTNS já está em execução localmente, basta modificar o arquivo silk_run_test.py com os locais desejados para um arquivo de registro de saída, scripts de teste de entrada e arquivo hwconfig.ini. O argumento -s localhost instrui o Silk a enviar mensagens OTNS para localhost.

Por exemplo, é possível executar o teste chamado ot_test_form_network.py usando as seguintes modificações no arquivo silk_run_test.py. /opt/openthread_test/ é o caminho padrão que o Silk usa para a saída de registros e o arquivo de configuração, mas é possível usar qualquer caminho.

silk_run_test.py

import datetime
import os

from silk.tests import silk_run

RESULT_LOG_PATH = '/opt/openthread_test/results/' + 'silk_run_' + \
                  datetime.datetime.today().strftime('%m-%d') + '/'
CONFIG_PATH = '/opt/openthread_test/'

os.chdir('~/src/silk/silk/tests/')

timestamp = datetime.datetime.today().strftime('%m-%d-%H:%M')

run_log_path = RESULT_LOG_PATH + 'test_run_on_' + timestamp + '/'

argv = [
    'tests/silk_run.py',
    '-v2',
    '-c', CONFIG_PATH + 'hwconfig.ini',
    '-d', run_log_path,
    '-s', 'localhost',
    'ot_test_form_network.py'
]

silk_run.SilkRunner(argv=argv)

A visualização da topologia da rede formada vai aparecer na interface da Web do OTNS.

ee443b66e0a6620b.png

O canto superior esquerdo mostra as estatísticas de visualização, a versão OT e o título do teste. O canto inferior esquerdo tem os controles da janela de registros, mostrada à direita. Inicialmente, nós são adicionados, mas nenhuma rede é formada. À medida que o teste avança, os modos e as funções de cada nó mudam, e as vinculações são formadas.

5c38e2c72519e620.png

7. Parabéns

Parabéns! Você executou um teste do Silk em dispositivos físicos Thread e o visualizou usando o OTNS.

Você executou um teste do Silk usando placas de desenvolvimento que são atualizadas com firmwares compatíveis com OTNS. Os quadros informam o status para um servidor do Silk, que monitora e agrega todos eles e os envia ao serviço OTNS com outras informações de teste. O OTNS em execução no modo real visualiza a rede Thread na interface da Web.

A seguir

Tente executar outros casos de teste do OpenThread incluídos no pacote Silk.

Leitura adicional

Acesse openthread.io e Silk (links em inglês) para acessar uma variedade de recursos do OpenThread.

Documentos de referência