Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • CPDataHub CPDataHub
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 7
    • Issues 7
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Container Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • CosmicPampa
  • CPDataHubCPDataHub
  • Wiki
  • Home

Last edited by ALEXSANDRO SANTOS DA ROSA JUNIOR Jan 09, 2023
Page history
This is an old version of this page. You can view the most recent version or browse the history.

Home

WIKI EM PROCESSO DE EDIÇÃO

CosmicPampaDataHub

Servidor Web do CosmicPampa.

Diagrama ilutrando o funcionamento do DataHub

Diagrama ilutrando o funcionamento do DataHub

Descrição da Área

O DataHub remete a centralização dos dados dos possíveis múltiplos detectores em um servidor único, mas também cabe a essa área a configuração do protocolo e software de comunicação dos dados. Outra parte essencial é a criação de uma página de frontend gráficos e valores estatísticos. O diagrama de funcionamento demonstra o caminho que os dados seguem.

Tabela de Conteúdos

  • CosmicPampaDataHub
  • Diagrama ilutrando o funcionamento do DataHub
    • Descrição da Área
    • Tabela de Conteúdos
    • Tarefas
      • Passando mensagem com MOSQUITTO MQTT
      • Backend do DataHub
        • MySQL
          • Programa usuarios.py
          • Programa inicial.py
      • Implementar frontend do DataHub.
    • Documentação
      • Códigos
      • Histogramas
    • Referências
  • Manual do CTA
  • Gerenciamento de projetos do CTA - 08 de Julho de 2016

Esta Wiki é feita a partir do Modelo de Documentação Padrão do CTA. O registro dos progressos serão feitos nas Issues.

Tarefas

Abaixo, são descritas as tarefas propostas para o decorrer do projeto, que serão atualizadas na medida em que for obtido maior grau de precisão de seus objetivos. Existem três tarefas principais que foram criadas com o começo do projeto

Passando mensagem com MOSQUITTO MQTT

O MQTT é um sistema de mensagens publish/subscriber leve e fácil de usar. Especificamente utilizamos o Mosquitto MQTT como broker open source para trocas de dados com a placa com sensores e o servidor.

Existem dois tipos de comandos necessários para troca de mensagens:

  • mosquitto_pub -h 111.111.111.111 -t topico -u usuario -P senha -m "1605897707516.9966 20.84722977270505 20.267821522059513 80.06540389143701 1017.5982491300462 Bruno fd87a003fcd0b41d105cadd654d3c2cb"
    • -h [ip] que dá o endereço que a mensagem deve ser enviada;
    • -t [topic] a mensagem vai para um tópico específico;
    • -u [user] declara o usuário que tem que ser previamente registrado que está mandando mensagem;
    • -P [senha] senha única para o usuário.
    • -m "[mensagem]" mensagem a ser enviada

Exemplo enviando mensagem com hora, local, intensidade, temperatura, umidade, pressão, usuário e HASH calculado a partir das informações da mensagem para ser um identificador único e para que se possa checar a integridade da mensagem chegada no servidor.

  • mosquitto_sub -h 111.111.111.111 -t topico -v -u usuario -P senha | tee -a /var/www/html/data/test.txt

    • -h [ip] endereço que a mensagem foi enviada enviada;
    • -t [topic] lê as mensagens de um tópico específico;
    • -u [user] declara o usuário que tem que ser previamente registrado;
    • -P [senha] senha única para o usuário.
    • -v imprime junto qual tópico que a mensagem veio

Exemplo que imprime no terminal a mensagem e as salva usando o pipe ( | ) e o comando tee -a [endereço] em um arquivo .txt


Backend do DataHub

O banco de dados do servidor foi construido a partir do mysql

comandos de consultas simples

exemplo: Select horas from eventos where horas > 100

MySQL

Para criar a tabela eventos onde são armazenados os dados enviados pelo NodeMCU o seguinte código de sql foi executado por um usuário com privilégios para criar tabelas. As são colunas hora, local, intensidade, temperatura, umidade, pressao, usuario, HASH e id que serve de identificador de um dado e é auto incrementada e não precisa ser declarada quando um dado é inserido:

mysql> CREATE DATABASE COSMICPAMPA
mysql> Use COSMICPAMPA

mysql> CREATE TABLE IF NOT EXISTS eventos (
hora double(20,2) unsigned NOT NULL,
local varchar(100),
intensidade float(14,10) unsigned,
temperatura float(14, 10),
umidade float(14, 10) unsigned,
pressao float(14,10) unsigned,
usuario varchar(50) NOT NULL,
HASH varchar(50) NOT NULL,
id int(250) AUTO_INCREMENT,
PRIMARY Key (id)
);

Para inserir na tabela através do terminal usa-se o seguinte código:

INSERT INTO eventos (hora,local,intensidade,temperatura,umidade,pressao,usuario,HASH) VALUES
  (1605897697391.9326,'POA', 17.510940991357113, 19.93308839701117, 78.77037825894631, 1017.1170110098117, 'Bruno', 555f20572647f7d16719ad1b5df73964)

A tabela usuarios foi criada de maneira similar com as seguintes condições (para descrever a tabela usa-se describe usuarios):

mysql> describe usuarios;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| user  | varchar(100) | NO   |     | NULL    |       |
| nome  | varchar(100) | YES  |     | NULL    |       |
| pais  | varchar(100) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+ 
Programa usuarios.py

Esse programa maneja de forma simples a tabela usuários. Quando inicializado através de python3 usuarios.py ele apresenta a interface:

> python3 usuarios.py 
PROGRAMA DE USUARIOS (crtrl+c para sair) 
 Opções:
		1. Adicionar usuario 
		2. Retirar usuario 
		3. Checar usuarios

O que quer fazer? 

Se a resposta for 1 deve-se preencher usuário, nome e pais:

O que quer fazer? 1
User, Nome e Pais

Usuario: huea
Nome: Helena Faria
País: Argentina
("'huea','Helena Faria','Argentina'", 'user, nome, pais')

Com o input de 2 é listado as opções de usuários da tabela, para retirá-lo deve-se digitar uma das opções.

O que quer fazer? 2
opções: [('bruno',), ('maria',), ('joao',), ('fili',), ('gras',), ('huea',)]

qual usuario deve ser retirado? 

A terceira opções mostra a tabela usuários:

O que quer fazer? 3
user    |       nome    |       pais
--------------------------------------------------
bruno   |       Bruno Thomazi Zanette   |       Brasil
maria   |       Maria A B       |       Rússia
joao    |       João C D        |       Chile
fili    |       Filipe Souza    |       Russia
gras    |       gilberto        |
huea    |       Helena Faria    |       Argentina
Programa inicial.py

É o programa que roda até ser encerrado (ctrl+c) recebendo mensagens de um tópico por mqtt e, após avaliar se os dados são válidos, salva na tabela eventos da database COSMICPAMPA. Quando um dado não corresponde ao esperado é salvo no arquivo log_inicial.dat e também é enviado ao tópico feedback no localhost, este pode ser acessado por mosquitto_sub -h localhost -t feedback -u cta -P cta. A melhor forma de rodar o programa é apartir de um programa em bash inicial.sh para que os erros que interrompem o loop sejam salvos no arquivo de texto log.err.

Implementar frontend do DataHub.

Documentação

Códigos

O uso de try e except em todos códigos pode ser questionado se é ou não a melhor prática em relação a otimização, a resposta principal da pergunta Is it a good practice to use try-except-else in Python? nos informa que (tradução livre):

  • O estilo de escrita com try-except-else produz codigo mais confiável

  • Não diminui a velocidade de códigos ao redor, como métodos similares fazem com outros códigos

  • Programa_inicial_server.py: é o programa que roda até ser encerrado (ctrl+c) recebendo mensagens de um tópico por mqtt e salva em uma tabela eventos na date base. As mensagens de erro são mandadas para o tópico feedback no localhost, que pode ser acessado por mosquitto_sub -h localhost -t feedback -u cta -P cta.

Histogramas

Histogramas são formas interessantes de representar dados, pois mostra a distribuição de frequências de determinada grandeza.

Referências

Clone repository
  • Home

Os conteúdos dos repositórios estão sob licenças livres e são responsabilidade dos próprios autores, não representando as opiniões e posicionamento da UFRGS ou do CTA.