/ZPerformace

Uma simples ferramenta em python para realizar testes de comunicação em dispositivos XBee utilizando da biblioteca digi XBee.

Primary LanguagePythonMIT LicenseMIT

ZigBee Test Tool

O projeto consiste em uma ferramenta para auxiliar na realização de testes de performaces com dispositivos digi XBee que utilizam o protocolo de comunicação ZigBee

Para utilizar as ferramentas do projeto basta baixar o repositório com git clone ou pelo próprio download do github, e instalar as dependências necessárias com o comando:

$ pip install -r requirements.txt

OBS.: Caso tenha problemas em instalar a biblioteca digi-xbee que consta no arquivo requirements.txt você pode instalar a biblioteca usando a recomendação do repositório da Digi, LINK


Como utilizar a ferramenta?

No momento a ferramenta dispões de dois recursos um para medir a valor de throughput entre dois dispoistivos XBee e outro para enviar dados, que podem ser strings de até 256 caracteres ou imagens (ainda em implementação), entre dois dispositivos ambos os recursos utilizam o protocolo ZigBee. Para realizar o teste de throughput citado anteriormente existem dois métodos, se pode utilizar a linha de comando da ferramenta ou importar em arquivo python as funções necessárias para a realização do teste de throughput.

Vale salientar que para realizar o teste de throughput é necessário dois aparelhos, um receptor e outro entregador, ou seja, para que o teste seja realizado se deve ter dois comandos ocorrendo paralelamente, um para enviar dados e outro para receber.

  • Via código Python:

É Necessário utilizar a biblioteca Digi Xbee já citada, a utilização dessa biblioteca é simples e pode ser vista nos arquivos exemplo da pasta de sample. Para realizar o teste é necessário ter dois arquivos python um como receptor e outro como entregador, o entregador deve estar na máquina que irá enviar os pacotes do teste enqunato que o receptor deve estar na máquina a qual o está o dispositivo que irá receber e armazenar os dados do teste.

  • Receptor: O receptor deve ser o primeiro código a ser rodado.
# importação da função que recebe os pacotes de dados do throughput
from zigbee_tool.core.tests.throughput import throughput_receiver
...
# utilização da função
throughput_receiver(
    device_receiver=local_device,
    file_dets=file_dest # arquivo CSV destino dos dados extraídos do teste (opcional)
)
  • Entregador: O entregador só pode ser rodado após o receptor já estiver sendo operado, caso contrário ocorrerá um erro.
# importação da função que envia os pacotes de dados do throughput
from zigbee_tool.core.tests.throughput import throughput_sender
...
# utilização da função
throughput_sender(
        local=local_device,
        remote=remote_device,
        packet_size=size_Bytes,
        pack_amount=amount_packet,
        rep_amount=repetition_number
        
    )

Para um exemplo prático de como utilizar ambas as funções throughput_receiver e throughput_sender paralalemente veja o README da pasta de samples e os arquivos python de demostração. LINK

  • Via CLI:

Para utilizar a CLI do projeto basta usar o terminal e chamar um arquivo python que possua a importação da ferramenta CLI, como no arquivo main_cli(inclusive o mesmo arquivo pode ser utilizado para se chamar as funções via linha de comando).

Abaixo um exemplo de como utilizar a CLI:

> python main_cli.py senddata --help

O comando acima checa os parâmetros do comando senddata que performa a tarefa de mandar uma mensagem síncrona para um nó definido.

Agora, como utilizar a cli para realizar um teste de throughput? Para isso é necessário utilizar os comandos peformacereceiver e performacesender, esses comandos devem ser utilizados na respectiva ordem pelo mesmo motivo citado do método via python. Caso fique confuso sobre o funcionamento desses dois comandos é sempre possível utilizar a flag --help para conseguir mais informações sobre o comando e seus parâmetros.

Abaixo um exemplo do teste de throughput via CLI, supondo que temos um dispositivo na porta /dev/ttyUSB0(receptor com ID de router4) e outro na /dev/ttyUSB1(entregador com ID de router2) de uma mesma máquina:

  • Comando receptor:
# python main_cli.py peformacereceiver PORT DEST_FILE(opcional) <-- comentário(ignore)

> python main_cli.py peformacereceiver /dev/ttyUSB0

ou

> python main_cli.py peformacereceiver /dev/ttyUSB0 /data/data.csv
  • Comando entregador:
# python main_cli.py performacesender PORT DEST PACKET_SIZE PACKET_AMOUNT REPETITIONS <-- comentário(ignore)

> python main_cli.py performacesender /dev/ttyUSB1 router4 84 100 3

Esses comandos acima resultariam em um teste com pacotes com 84 bytes de tamanho, com 100 testes e com 3 repetições, que tem como aparelho receptor o router4 e como entregador o router2.

  • Envio e recebimento de dados:

Também é possível enviar e receber dados utilizando esta ferramenta. Para enviar dados é necessário a porta, o nó de destino e o dado a ser enviado. Já para receber é nescessário apenas a porta do dispositivo. Para enviar dados é similar ao recurso anterior:

# python main_cli.py senddata PORT DEST String <-- comentário(ignore)

> python main_cli.py senddata /dev/ttyUSB0 route04 teste123

ou

# python main_cli.py senddata PORT DEST IMAGE_FILE <-- comentário(ignore)

> python main_cli.py senddata /dev/ttyUSB0 route04 imageFrag/image.png

Para receber dados:

# python main_cli.py receivedata PORT <-- comentário(ignore)

> python main_cli.py receivedata /dev/ttyUSB1

Esses comandos acima resultariam em um envio de dados que tem como aparelho receptor o router4 e como entregador o router2.

  • Verificar dispositivos conectados fisicamente:

É possível detectar dispositivos conectados fisicamente através do comando checkdevices, porém funciona apenas no Linux! Serão apresentados os dados de porta, nó e endereço MAC de cada dispositivo encontrado.

> python main_cli.py checkdevices

Possível saida:


Foram encontrados 2 dispositos:
PORT - NODE - MAC
(1)/dev/ttyUSB1 - router04 - 0000000000001234
(2)/dev/ttyUSB0 - router02 - 0000000000001234