-
Notifications
You must be signed in to change notification settings - Fork 1
Nimbits
O Nimbits é uma plataforma para conectar sensores e software à nuvem.
Uma instância do Nimbits, chamada Nimbits Public Cloud é gratuita e pode ser utilizada se registrando ou fazendo login com uma conta Google.
O Nimbits também oferece uma API Java a qual foi utilizada para desenvolver uma aplicação para a comunicação entre os dados recebidos pelo Pimatic e o Nimbits.
A aplicação desenvolvida neste trabalho terá suas configurações e códigos apresentados a seguir.
Inicialmente, precisa-se criar uma chave de acesso (Access Token) na nuvem Nimbits para que seja possível realizar o acesso aos dados presentes na nuvem por meio da aplicação. Na criação desta, o nome da chave, a chave propriamente dita e o nível de permissão podem ser alterados.
Em seguida, ainda na nuvem pontos de dados (Data Points) devem ser criados, os quais representam um sensor específico (como sensor de temperatura do DHT, por exemplo). Para este projeto quatro prontos de dados devem ser criados:
- DHT11 temperature
- DHT11 humidity
- Light light
- PIR presence
A partir dessa simples configuração, a nuvem está pronta para receber os dados providos pela aplicação, a qual será descrita a seguir.
A Aplicação desenvolvida está dividida em duas classes: MyNimbitsClient e Database. Em geral, esta aplicação sincroniza os dados do banco de dados do Pimatic com os do Nimbits. A seguir, os principais trechos do código da classe MyNimbitsClient são explicados.
Em primeiro lugar, quatro constantes são definidas:
- EMAIL_ADDRESS: Esta constante refere-se ao endereço de email do usuário Nimbits;
- ACCESS_KEY: Esta constante, por sua vez, contém a respectiva chave de acesso;
- INSTANCE_URL: Contém a URL da nuvem Nimbits a ser utilizada. Nesse caso, a URL referente a Nimbits Public Cloud;
- SERVER: Instância de um servidor o qual relaciona: EMAIL_ADDRESS, ACCESS_KEY e INSTANCE_URL.
O código para a criação destas constantes é apresentado a seguir.
private static final EmailAddress EMAIL_ADDRESS = CommonFactory.createEmailAddress("endereco@email.com");
private static final AccessToken ACCESS_KEY = AccessToken.getInstance("chave");
private static final UrlContainer INSTANCE_URL = UrlContainer.getInstance("cloud.nimbits.com");
private static final Server SERVER = ServerFactory.getInstance(INSTANCE_URL, EMAIL_ADDRESS, ACCESS_KEY);
Em seguida, a cada 30 segundos, uma checagem no banco de dados do Pimatic é realizada a fim de verificar para cada sensor, se existem novos dados a serem atualizados na nuvem. Para isso, é necessário:
- Obter o momento da última atualização;
- Verificar a existência de novos dados a partir daquele momento.
Essa é a finalidade do trecho a seguir. Em que, em primeiro lugar, o ValueHelper do servidor é obtido, o qual permite manipular os valores dos pontos de acesso, neste caso cada leitura dos sensores. Em seguida o timestamp da última atualização é obtida. Além disso, um acesso ao banco de dados do Pimatic é realizado, o qual retorna o valor e timestamp de cada leitura realizada em determinado sensor (dataPoint).
ValueHelper valueHelper = HelperFactory.getValueHelper(SERVER);
time = valueHelper.getValue(dataPoint).getTimestamp().getTime();
ResultSet rs = Database.getData(dataPoint, time);
Por fim, os resultados da consulta realizada anteriormente devem ser enviados à nuvem. Esse passo é tido no código apresentado a seguir. Em que um Value é criado para cada leitura presente no ResultSet e adicionado a uma lista de Values, a qual é enviada à nuvem por meio do ValueHelper.
List<Value> listValue = new ArrayList<Value>();
while(rs.next())
listValue.add(ValueFactory.createValueModel(data,new Date(time)));
valueHelper.recordValues(dataPoint, listValue);