IA369Z - Reprodutibilidade em Pesquisa Computacional.

Douglas Vinicius Esteves

Consumo de energia para dispositivos IoT

Objetivo

Objetivo foi pesquisar melhor o conceito e importância de reprodutibilidade, criando um formato de coletar informações e avaliar o consumo de energia para diferentes arquiteturas de microcontroladores com módulos de comunicação sem fio para utilização em dispositivos focando em Internet das Coisas. Segue uma descrição do Ambiente e seus componentes.

Nesse projeto foi utilizados diferentes plataformas e tecnologias citadas em diferentes tipos de projetos ao longo do texto, grande parte citadas são usadas em comunidades de software livre, grupos educacionais, mostrando ferramentas e meios para aprender e construir projetos que vem trazendos bons resultados para todas comunidades inseridas nessas atividades.

Workflow

/figures/workflow02.png

Durante os estudos utizaremos apenas a área laranja do desenho, porém está aberta e descritos todas as etapas, dó código do dispositivo ao formato de leitura das informações coletadas na plataforma online. Utilizando um protótipo, em um formato que consiga reproduzir os mesmos formato de fluxo de comunicação, coletando dados para criar um modelo de comparação de consigo para diferentes arquiteturas utilizadas em protótipação de produtos para Internet of things.

Device "Dispositivo IoT"

Protótipo do hardware com breve descrição de funcionamento e recursos. Esse dispositivo é parte de um projeto de estudos no Hackerspace LHC cituado em Campinas-SP, nomeado como Campainha IoT afim de estudos e testes com a arquitetura do módulo ESP8266 para acionar avisos sonoros no laboratório do Hackerspace, utilizamos um modelo de circuito simples atraves de um acionamento via botão o hardware é alimentado por duas baterias e ligado o dispositivo, seu programa aciona os recursos conecta na rede local e aciona o faz a conexão de aviso, depois o dispositivo é desligado novamente esperando outra ativação.

Esse dispositivo é composto pelos seguintes itens.

Batery, forma de alimentar o dispositivo. ESP8266, Um chip de baixo custo implementado a plilha de TCP/IP e com um microcontrolador fabricado pela empresa Chinesa Espressif systems. Programa LUA : Programa com controle do device e exução de funções. Connection : Tratamento com a conexão do device com o gateway local para envio de informações para plataforma online e ativação de sinal no local. Switch : Interface Homem máquina, acionamento para ativação do device.

Gateway "Ponte e Equipamento local de comunicação"

Equipamento usado para executar a comunicação com os dispositivos locais e rodar programa para tratar as informações de solicitadas. Conforme o paper com os códigos fontes, o programa roda em Ambiente Python e o equipamento precisar ter um ip fixo para efetuar as comunicação e acesso a internet, para alimentar com informações um canal da plataforma Thingspeak que podem ser visualizado no seguinte dadhboard.

Esse gateway pode ser simulado apenas com um equipamento local, rodando de preferencia uma distribuição linux Ubuntu, para outras distribuições podem ter problemas com bibiliotecas, necessita também ter uma caixa de som para executar a saída de audio para execução dos processos do programa servidor.py.

Thingspeak "Plataforma online com informações coletadas"

Plataforma Open Source para análise da Internet das Coisas, contém recursos como registrar dados coletados por devices e através de telas e gráficos exibir informações de forma dinâmica. Por ser aberta existem diversos recursos que podem ser usado nessa ferramenta. Como exportar as informações coletadas através de arquivos JSON e CSV. Existe uma integração com a plataforma da MATLAB voltada para Internet das Coisas. Os dados são coletados e processados na nuvem, suas informações são registradas através de canais onde criadas em formas de perfis para acesso público ou fechadas de forma restrita conforme sua necessidade. Plataforma disponibiliza formas de compartilhar essas informações que geralmente são usadas gráficos dinâmica para exibir os valores coletados por sensores. Outro recurso diferenciado é forma de reação, sendo assim não apenas recebe informações, mas se uma condição for específica ou ultrapassar certo limite pode criar um mecanismo de acionamento de um retorno. (talback). Arquivo exportado no estudo que contêm informações coletado da campainha IoT. Tem informações como data de acionamento, numero registrado e total de carga contida nas baterias de alimentação do equipamento.

Código Fonte

Os códigos fontes dispónivel no seguinte Notebook

Data "Dados coletados"

Os dados dessa pesquisa, foram registrados através da plataforma thingspeak, que apresetou recursos interessantes para armezenar as informações coletadas atraves do dispositivo, consigo publicar em canais com perfil publico, com possibilidades de compartilhamento de links para fácil acesso na visualização dos dados. Essas informações são exibidas através de diferentes tipos de gráficos dinamicos. Outro recurso interessante da plataforma e facilidade de exportar essas informações coletadas para o formato csv, xml ou json.

Informações divulgadas no diretório data podem ser alterada e usada para testes, também pode ser confirmada direto no canal do thingspeak original do projeto.

Arquivos na pasta data

Leitura de informações do arquivo CSV

O Arquivo é exportado pela plataforma thingspeak por um canal aberto e público para visualização. Gerando o arquivo conseguimos estudar melhor e também pode ser usado para gerar novos históricos de outras arquiteturas para comparações.

Resultados gerados de um módulo ESP8266 versão 1, programado na linguagem LUA.

Contéudo no notebook

São informado 3 tipos colunas de informações

  • Data e Hora de ativação
  • Registro de entrada
  • Tensão da bateria

In [2]:
import numpy as np
import csv
with open('../data/database2017.csv', 'rb') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
    for row in spamreader:
        print ', '.join(row)


created_at,entry_id,field1
2017-01-06, 22:49:19, UTC,380,3238
2017-01-07, 14:31:19, UTC,381,3238
2017-01-07, 15:32:59, UTC,382,3234
2017-01-07, 17:33:27, UTC,383,3238
2017-01-07, 20:02:41, UTC,384,3230
2017-01-08, 16:04:56, UTC,385,3222
2017-01-08, 20:07:52, UTC,386,3211
2017-01-08, 21:49:05, UTC,387,3237
2017-01-08, 22:49:15, UTC,388,3238
2017-01-10, 20:37:57, UTC,389,3238
2017-01-10, 21:02:21, UTC,390,3238
2017-01-10, 21:08:35, UTC,391,3238
2017-01-10, 21:27:09, UTC,392,3237
2017-01-10, 21:30:44, UTC,393,3238
2017-01-10, 21:35:02, UTC,394,3236
2017-01-10, 21:51:12, UTC,395,3235
2017-01-11, 21:06:39, UTC,396,3236
2017-01-11, 21:25:03, UTC,397,3235
2017-01-12, 13:07:17, UTC,398,3231
2017-01-12, 13:07:51, UTC,399,3230
2017-01-12, 18:47:26, UTC,400,3230
2017-01-12, 18:48:13, UTC,401,3230
2017-01-12, 18:49:18, UTC,402,3230
2017-01-12, 20:56:32, UTC,403,3230
2017-01-14, 11:15:14, UTC,404,3226
2017-01-14, 11:15:42, UTC,405,3226
2017-01-22, 22:19:29, UTC,406,3206
2017-01-23, 21:13:22, UTC,407,3204
2017-01-23, 21:18:54, UTC,408,3207
2017-01-23, 21:28:57, UTC,409,3205
2017-01-24, 21:20:48, UTC,410,3204
2017-01-24, 21:32:20, UTC,411,3203
2017-01-24, 21:40:18, UTC,412,3204
2017-01-25, 18:41:05, UTC,413,3204
2017-01-26, 16:29:37, UTC,414,3197
2017-01-26, 21:59:48, UTC,415,3203
2017-01-27, 00:49:57, UTC,416,3202
2017-01-29, 18:10:08, UTC,417,3191
2017-01-31, 22:47:38, UTC,418,3192
2017-02-01, 23:25:51, UTC,419,3196
2017-02-01, 23:26:15, UTC,420,3190
2017-02-02, 21:42:21, UTC,421,3190
2017-02-04, 12:00:49, UTC,422,3189
2017-02-04, 14:04:45, UTC,423,3187
2017-02-04, 15:29:49, UTC,424,3196
2017-02-04, 15:45:48, UTC,425,3196
2017-06-09, 01:05:24, UTC,426,3104
2017-06-09, 11:04:44, UTC,427,3100
2017-06-09, 13:45:08, UTC,428,3092
2017-06-09, 16:43:57, UTC,429,3086
2017-06-09, 16:44:26, UTC,430,3090
2017-06-09, 21:35:30, UTC,431,3090
2017-06-10, 18:29:19, UTC,432,3090
2017-06-10, 20:03:10, UTC,433,3090
2017-06-10, 21:38:51, UTC,434,3083
2017-06-10, 21:39:12, UTC,435,3082
2017-06-12, 00:58:24, UTC,436,3074
2017-06-12, 00:59:28, UTC,437,3081



In [3]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
pd.__version__


Out[3]:
u'0.19.2'

In [8]:
%matplotlib inline

Leitura dos cinco primeiros registros do arquivo.


In [9]:
import pandas as pd
from altair import Chart, X, Y, Axis, SortField

budget = pd.read_csv("../data/database2017.csv")
budget.head()


Out[9]:
created_at entry_id field1
0 2017-01-06 22:49:19 UTC 380 3238
1 2017-01-07 14:31:19 UTC 381 3238
2 2017-01-07 15:32:59 UTC 382 3234
3 2017-01-07 17:33:27 UTC 383 3238
4 2017-01-07 20:02:41 UTC 384 3230

In [10]:
## Últimos 10 Registros

In [11]:
budget_top_10 = budget.sort_values(by='created_at',ascending=False)[:10]

In [12]:
budget_top_10.plot(kind="bar", x=budget_top_10["created_at"],
                   title="Consumo de energia dispositivo",
                   legend=True)


Out[12]:
<matplotlib.axes._subplots.AxesSubplot at 0x7ff90b40d090>

In [13]:
Chart(budget_top_10).mark_bar().encode(x='created_at', y='field1')



In [14]:
Chart(budget_top_10).mark_bar().encode(y='created_at', x='field1')



In [15]:
Chart(budget_top_10).mark_bar().encode(
    x=X('field1'),
    y=Y('created_at'),
    color='entry_id')



In [16]:
Chart(budget_top_10).mark_bar().encode(
    x=X('created_at:O',
        axis=Axis(title='Project')),
    y=Y('field1:Q',
        axis=Axis(title='2014 Budget')),
    color='entry_id')


Método

Utilização da arquitetura do módulo ESP8266, armazenando informações na plataforma Thinkspeak, utilizando jupyter notebook para ler arquivos exportados em formato CSV, gerando gráficos e centralizando todos os dados e informações na plataforma do Github.

Resultado

A Utilização dos recursos citados, podem ser utilizados versionando e controlando os dados coletados e versão de software utilizadas para comparar partes das arquiteturas.