Um registrador de dados, mais conhecido como “data logger”, é um gravador autônomo tipicamente pequeno e relativamente barato que monitora e registra dados em tempo real, como tensão, temperatura e variáveis ambientais, através de sensores. Muito usado na Meteorologia, geralmente possui uma caixa resistente para ficar exposto a condições atmosféricas adversas.
A maioria das unidades autônomas são alimentadas por bateria, o que permite armazenar uma quantidade considerável de dados por um bom período de tempo. Eles usam um microprocessador, uma memória interna para armazenamento de dados e um ou mais sensores, além de interfaces, conectores e cabos para conectar dispositivos e placas.
O tempo em que consegue armazenar os dados antes de ocupar todo o espaço dsponível depende da capacidade da memória do data logger de dados e da taxa de amostragem desejada. Para determinar a duração, divida a capacidade da memória (número de amostras que o dispositivo pode gravar) pela taxa de amostragem. Como exemplo, suponha que um determinado registrador de dados possa armazenar 10.000 amostras. Se você quiser registrar duas amostras a cada minuto, o data logger pode funcionar por 5.000 minutos (cerca de 3,5 dias).
Os data loggers podem interagir com um computador e usar um software próprio para visualizar e analisar os dados coletados ou serem usados como um dispositivo autônomo, com uma interface local ou conectando-se sem fio a um dispositivo. Conforme a conexão, é possível escrever um script para baixar e tratar automaticamente esses dados, disponibilizando-se em um local para consulta.
Script para leitura de dados
O objetivo dos scripts em python disponibilizados no Github (viniroger/read_datalogger) consiste em realizar uma série de procedimentos, que podem ser desligados ou não, para tratar os arquivos copiados do data logger e salvar em um formato mais “amigável” para ser inserido em um banco de dados.
O script principal (read_raw.py) importa os métodos do arquivo auxiliar (helpers/rawdata.py). Ele pode ser executado na linha de comando do terminal recebendo como argumento o nome da estação onde está instalado o equipamento, mas isso pode ser alterado para definição dentro do próprio código (variável “place”).
Seguindo pelo script principal, a variável “cols_names” define o nome das colunas que devem aparecer no arquivo de saída. Nesse caso, somente contam duas colunas: informação de tempo (“Timestamp”) e irradiância global (“Global_Avg”). Será gravado apenas um arquivo de saída.
Todos os arquivos que foram coletados devem ser salvos na pasta “data_in”, de onde o método “list_files” vai listar os nomes desses arquivos. Para cada um deles, será verificado se o arquivo tem cabeçalho ou não para a escolha do método (“read_withheader” ou “read_withoutheader”). A data frame resultante (“df”) será unida ao resultado dos arquivos que já foram trabalhados em uma só dataframe (“df_all”).
- read_withheader – a primeira linha, com informações fora da tabela de dados, é excluída e o cabeçalho com os nomes das colunas, já pertencente ao próprio arquivo, é considerado. Também existem duas colunas que são renomeadas e considera-se que a coluna “Timestamp” esteja no formato “%Y-%m-%d %H:%M:00”.
- read_withoutheader – o cabeçalho é definido manualmente no método “get_columns” (a configuração atual dá conta do maior número de variáveis possível, então caso não possua valor, o campo é preenchido com “NaN – Not a Number”). Também são selecionadas as linhas cuja coluna “ID” tenha string começando com 1 e tenha três dígitos (o primeiro deles identifica o instrumento de interesse e os outros dois, o número da estação), mas que pode ser alterado conforme o equipamento utilizado.
Ainda na função “read_withoutheader”, é criada a coluna “Timestamp” a partir das informações de data e tempo informadas em outras colunas. Nelas, estão separados o ano e o dia do ano (em vez de mês e dia do mês). A coluna “Min” contém o número de minutos desde a meia noite, então o método também converte para separar em horas e minutos. O “Timestamp” vai ter o formato “%Y-%m-%d %H:%M:00”, que é mais interessante para trabalhar no python ou mesmo no banco de dados.
Também existe um método opcional chamado “clean_df”. Ele está ativo e serve para converter a string “NAN” pelo objeto do numpy referente à ausência de dados “np.nan”. Nesse método, você pode incluir outras verificações, como a exclusão de dados inválidos, restrição por período de tempo ou por intervalo de valores ou mesmo cálculo de variáveis.
Por fim, a data frame final é salva em um arquivo CSV, com o delimitador definido como ponto e vírgula, cujo nome é definido pela variável “filename”. Também foi incluído um método para calcular médias a cada 5 minutos e salvar em outro arquivo, mas cujas linhas podem ser comentadas sem mais problemas. Do jeito que o script está, os arquivos são salvos na pasta “data_out”. Com esse formato, fica mais fácil utilizar o arquivo, contendo os dados de todo o período, para popular o banco de dados.
Com o banco de dados (como o MySQL, veja mais no link) instalado, configurado e populado, pode-se instalar também um servidor de páginas web (como o Apache, veja mais no link) e um interpretador de PHP (linguagem para processamento de códigos no servidor) para fazer uma interface de consulta aos dados. Um exemplo pode ser visto no post Formulário de busca, em que uma página é montada com HTML e PHP para montar queries que vão fazer a consulta no banco de dados e imprimir o resultado na tela do navegador web – seja uma aplicação local ou remota, na internet.