1. Introdução
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:
- Linux x86_64.
- Git (em inglês).
- Go 1.11 ou versão mais recente
- Navegador da Web. O OTNS-Web usa um navegador da Web para exibir simulações.
Pré-requisitos:
2. Pré-requisitos
Concluir os codelabs básicos anteriores
- Thread Primer Você precisa conhecer os conceitos básicos do Thread para entender o que é ensinado neste codelab.
- Criar uma rede Thread com placas nRF52840 e OpenThread. Este codelab pressupõe que você criou uma rede Thread.
- Simular redes Thread usando OTNS. Este codelab pressupõe que você já executou a ferramenta OTNS.
Como verificar os pré-requisitos do pacote
Vamos garantir que todos os pré-requisitos sejam atendidos.
- Execute
which otns
para verificar se o executávelotns
é pesquisável em$PATH
. - Execute
which wpantund
para garantir que owpantund
esteja disponível. - 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.
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.
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.
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.