PTC29008: Projeto 2: Sistema de aquisição de dados

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Próxima aula


No projeto 2 será desenvolvido um protótipo de um sistema de aquisição de dados. Cada unidade de aquisição de dados, representada por um kit baseado em RaspberryPi 3, é responsável por coletar dados de monitoramento e enviá-los para um servidor de coleta. A comunicação entre as unidades e o servidor se dá por links sem-fio ponto-a-ponto, implantados com o protocolo do projeto 1. A figura a seguir ilustra um cenário desse sistema de aquisição de dados remotos.

PTC-Proj2-aquisicao-dados.jpg
O sistema de aquisição de dados remotos


Nesse sistema, a transmissão de mensagens de dados através dos links sem-fio faz uso do protocolo CoAP. Esse protocolo foi desenhado para serviços web em dispositivos com restrições de recursos, tendo em mente aplicações da Internet das Coisas (IoT). As unidades de aquisição de dados se comportam como clientes CoAP, o servidor de coleta é um servidor CoAP.


O projeto tem por objetivo geral implementar a unidade de aquisição de dados, a qual monitora dados ambientais e os envia para o servidor de coleta. Os objetivos específicos são:

  1. Especificar um protocolo de aplicação, que deve estar fundado no protocolo CoAP: esse protocolo de aplicação deve ser capaz de:
    1. Configurar a unidade de aquisição de dados
    2. Transmitir mensagens contendo dados monitorados
  2. Implementar um cliente CoAP para o envio das mensagens de aquisição de dados
  3. Usar uma técnica de codificação de mensagens que possibilite o intercâmbio de dados entre sistemas heterogêneos

A especificação do protocolo de aplicação

A especificação deve descrever:

  1. o serviço oferecido
  2. as mensagens do protocolo
  3. o formato dessas mensagens
  4. o comportamento do protocolo

Formato das mensagens da aplicação

As mensagens da aplicação são de dois tipos:

  • Configuração: trocadas no início da sessão, servem para identificar os sensores e o período de amostragem e transmissão de dados. Seu conteúdo é formado pelo seguinte:
    periodo: INTEIRO
    Lista de nomes de sensores: LISTA DE STRING
    
  • Dados: contêm os valores amostrados dos sensores, e têm este formato:
    Lista de amostras dos sensores: LISTA DE <STRING,INTEIRO,TIMESTAMP>
    


A especificação e codificação das mensagens deve ser feita usando Protocol Buffers:

syntax = "proto2";
 
package sensor;
 
message Sensor {
  // nome do sensor
  required string nome = 1;

  // valor amostrado do sensor
  required int32 valor = 2; 

  // timestamp da amostragem, em milissegundos desde 1/1/2019 0:0:0
  optional int32 timestamp = 3;
}

message Config {
  // periodo dado em milissegundos
  required int32 periodo = 1;

  // lista de nomes de sensores
  repeated string sensores = 2;  
}

message Dados {
  // lista de sensores com seus valores amostrados e timestamp
  repeated Sensor amostras = 1;
}

// Mensagem genérica: encapsula uma mensagem Config OU uma mensagem Dados
message Mensagem {
  required string placa = 1;
  oneof msg {
    Config config = 2;
    Dados dados = 3;
  }
}


As trocas de mensagens entre unidade de sensores e servidor de coleta é feita sempre por iniciativa da unidade de sensores, de acordo com esta MEF:

PTC-Proj2-proto.jpg
O comportamento do protocolo de aquisição de dados no lado da unidade de sensores


Essa MEF é particularmente adequada para a aplicação baseada no CoAP. No caso do MQTT, o comportamento da aplicação deve ser adaptado:

  • não é necessária a confirmação de mensagens de dados
  • a identificação da unidade de sensores pode ser feita por um tópico. Isso evita que mensagens da unidade de coleta sejam transmitidas para todas unidades de sensores desnecessariamente

Versão CoAP


O servidor CoAP de teste pode ser instalado assim:

  1. Instale o pacote Python aio-coap:
    sudo pip3 install aiocoap
    
  2. Copie este script Python que implementa o servidor de demonstração (descompacte-o).
  3. Execute o servidor com este comando:
    python3 coaps.py
    
    ... e ele iniciará escutando no port UDP 5683.

Versão MQTT

O cliente MQTT deve conseguir conversar com o broker MQTT do IFSC-SJ. Ele deve conseguir publicar e receber mensagens do broker.

  • Endereço do broker: mqtt.sj.ifsc.edu.br


Entrega e apresentação do projeto

O projeto deve ser apresentado ao professor em data e horário a combinar. A entrega deve ser feita pelo Moodle até dia 20/11: