WIKI EM PROCESSO DE EDIÇÃO
CosmicPampaDataHub
Servidor Web do CosmicPampa.
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
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
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 | |
+-------+--------------+------+-----+---------+-------+
usuarios.py
ProgramaEsse 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
inicial.py
ProgramaÉ 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.
Estrutura do servidor
O servidor possui dois usuários:
-
cosmicp: Este é o usuário principal, onde tudo vai ficar funcionando. Só será modificado quando tudo estiver totalmente pronto. Ainda, o acesso externo a esse usuário está bloqueado.
-
sandbox: Nesse usuário, podem ser realizados testes para garantir que tudo está pronto para ser passado para o usuário cosmicp. O acesso externo deve ser feito por esse usuário e, a partir dele, é possível acessar o usuário cosmicp.
Os diretórios de ambos usuários devem manter a seguinte estrutura geral:
- py_scripts: Deve conter todos os scripts em Python.
- main: Deve conter os principais scripts em Python, que se relacionam diretamente com o andamento do projeto.
- cosmicbot: Deve conter todos os scripts relacionados com o funcionamento do bot.
- website_related: Deve conter todos os scripts em Python que se relacionam com o funcionamento do site.
- website: Deve conter os arquivos HTML do site e algumas outras coisas essenciais, como a fonte do CTA.