Test di una rete Thread con visualizzazione

1. Introduzione

5abd22afa2f2ee9a.png

Che cosa sono Thread, OpenThread, OTNS e Silk?

Thread è un protocollo di rete mesh wireless a basso consumo basato su IP che consente comunicazioni sicure tra dispositivi e cloud. Le reti Thread possono adattarsi alle modifiche della topologia per evitare il single point of failure.

OpenThread rilasciato da Google è un'implementazione open source di Thread. Nonostante le dimensioni ridotte del codice e l'ingombro della memoria, OpenThread supporta tutte le funzionalità definite nella specifica Thread.

È possibile utilizzare OpenThread Network Simulator (OTNS) per simulare reti Thread eseguendo nodi OpenThread simulati sulle piattaforme posix. OTNS fornisce un'interfaccia web (OTNS-web) di facile utilizzo per visualizzare e utilizzare le reti Thread simulate.

Silk è una piattaforma di test completamente automatizzata per convalidare le prestazioni di funzioni, funzionalità e sistema di OpenThread con dispositivi reali.

Obiettivi didattici

  • Framework di verifica della funzionalità di OpenThread: Silk
  • Crea OpenThread per dispositivi reali con la funzionalità OTNS abilitata
  • Utilizza l'interfaccia web OTNS per monitorare lo stato della rete Thread creata eseguendo scenari di test Silk

Questo codelab è incentrato sull'utilizzo di Silk con OTNS. Le altre funzionalità di Silk e OTNS non sono descritte.

Che cosa ti serve

Hardware:

  • 6 schede di sviluppo nRF52840 di Nordic Semiconductor
  • 6 cavi da USB a micro-USB per collegare le schede
  • hub USB

Software:

Prerequisiti:

2. Prerequisiti

Completare i codelab di base precedenti

Controllo dei prerequisiti del pacchetto in corso...

Assicuriamoci che tutti i prerequisiti siano soddisfatti.

  1. Esegui which otns per verificare se l'eseguibile otns è disponibile per la ricerca in $PATH.
  2. Esegui which wpantund per assicurarti che wpantund sia disponibile.
  3. Assicurati che la toolchain ARM GNU, J-Link e i pacchetti nrfjprog siano tutti disponibili.

Nota:per indicazioni sulla configurazione, consulta la documentazione collegata. Il prerequisito 1 proviene da Simulare reti Thread utilizzando OTNS, mentre altri riguardano Build a Thread network with nRF52840 boards and OpenThread.

3. Configurazione Silk

Per clonare Silk e configurare l'ambiente, esegui questi comandi nella directory di origine:

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

Definisci file di configurazione hardware

Per consentire a Silk di raccogliere le risorse hardware di test disponibili connesse alla tua macchina, definisci un file hwconfig.ini nel seguente formato:

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

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

All'interno di Silk è installato uno strumento chiamato usbinfo, che può essere utilizzato per trovare il numero di serie dell'interfaccia e il numero di interfaccia USB. DutSerial è il numero SN stampato sul chip o visualizzato da usbinfo per i prodotti J-Link.

I campi LayoutCenter e LayoutRadius nella sezione [DEFAULT] definiscono la forma del layout quando i dispositivi vengono visualizzati nella UI web. Impostarli sui valori qui presentati può essere un buon punto di partenza.

Successivamente, definisce una sezione per ogni dispositivo di test e fornisce le informazioni hardware pertinenti.

4. Compilazione di OpenThread con OTNS abilitati

Creazione di immagini e flash

Per impostazione predefinita, i dispositivi OpenThread non emettono messaggi relativi a OTNS. Per consentire alle schede di sviluppo di emettere messaggi di stato nelle interfacce di log essenziali per la visualizzazione OTNS, eseguire il comando seguente nella directory di origine OpenThread per creare un'immagine FTD e convertirla in formato esadecimale.

$ 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

Per eseguire il flashing delle bacheche, segui le istruzioni nel passaggio 4 del codelab sulla creazione di una rete Thread per usare nrfjprog. Dopodiché, collega tutte le schede tramite la porta USB nRF alla macchina host. Lo stesso set di cavi da USB a Micro-USB può essere scollegato dalle porte J-Link e collegato alle porte USB nRF delle schede dev nRF52840. Pertanto, con solo questi 6 cavi è possibile eseguire il test. Per evitare problemi, usa 12 cavi e collegali a entrambe le porte.

5. Esecuzione del server OTNS in modalità reale

L'esecuzione di OTNS con parametri predefiniti consente all'utente di simulare una rete Thread. Per utilizzarlo come strumento di visualizzazione per una rete fisica reale, eseguilo con:

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

Questi argomenti indicano a OTNS di aspettarsi messaggi gRPC e UDP che descrivono come deve essere visualizzata la rete Thread, invece di eseguire più processi ot-cli per simulare la rete. Il browser dovrebbe aprire automaticamente la pagina di visualizzazione con un canvas vuoto.

4dd5b41bf7e71334.png

6. Esecuzione di scenari di test Silk con supporto OTNS

Silk è una piattaforma di test completamente automatizzata per convalidare le prestazioni delle funzioni, delle caratteristiche e del sistema di OpenThread con dispositivi reali. Le istruzioni nel progetto README spiegano come utilizzarlo.

Il file silk_run_test.py che si trova all'indirizzo silk/unit_tests è un ottimo punto di partenza. Silk fornisce supporto OTNS durante l'esecuzione di uno scenario di test. Poiché il servizio in modalità reale OTNS è già in esecuzione localmente, è sufficiente modificare il file silk_run_test.py con le posizioni desiderate per un file di log di output, script di test di input e file hwconfig.ini. L'argomento -s localhost indica a Silk di inviare messaggi OTNS a localhost.

Ad esempio, è possibile eseguire il test denominato ot_test_form_network.py utilizzando le seguenti modifiche al file silk_run_test.py. /opt/openthread_test/ è il percorso predefinito utilizzato da Silk per l'output del log e il file di configurazione, ma puoi utilizzare qualsiasi percorso.

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)

La visualizzazione della topologia della rete creata verrà mostrata nell'interfaccia utente web di OTNS.

ee443b66e0a6620b.png

L'angolo in alto a sinistra mostra le statistiche di visualizzazione, la versione OT e il titolo del test. Nell'angolo in basso a sinistra sono presenti i controlli della finestra del log, visualizzata a destra. Inizialmente vengono aggiunti i nodi, ma non viene creata alcuna rete. Man mano che il test procede, le modalità e i ruoli di ciascun nodo cambiano e i collegamenti vengono creati.

5c38e2c72519e620.png

7. Complimenti

Congratulazioni, hai eseguito correttamente un test Silk su dispositivi Thread fisici e lo hai visualizzato utilizzando OTNS.

Hai eseguito un test Silk usando schede di sviluppo con firmware che supportano OTNS. I board comunicano il loro stato a un server Silk, che li monitora e li aggrega e li invia al servizio OTNS insieme ad altre informazioni relative al test. OTNS in esecuzione in modalità reale mostra la rete Thread sull'interfaccia web.

Passaggi successivi

Prova a eseguire altri scenari di test OpenThread inclusi nel pacchetto Silk.

Per approfondire

Dai un'occhiata a openthread.io e Silk per trovare una serie di risorse OpenThread.

Documenti di riferimento