Nimbits - marcoosrs/solar-station GitHub Wiki

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.

O Nimbits foi utilizado para disponibilizar em nuvem os dados obtidos pelo Pimatic. Esses dados são obtidos no banco de dados do Pimatic e enviados por meio da aplicação desenvolvida.

Aplicação

A aplicação desenvolvida neste trabalho terá suas configurações e códigos apresentados a seguir.

Configurações

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:

  1. DHT11 temperature
  2. DHT11 humidity
  3. Light light
  4. 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.

Código

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:

  1. EMAIL_ADDRESS: Esta constante refere-se ao endereço de email do usuário Nimbits;
  2. ACCESS_KEY: Esta constante, por sua vez, contém a respectiva chave de acesso;
  3. INSTANCE_URL: Contém a URL da nuvem Nimbits a ser utilizada. Nesse caso, a URL referente a Nimbits Public Cloud;
  4. 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("[email protected]"); 
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. Essa checagem entretanto ocorre somente se o serviço do Pimatic estiver inativo, pois este bloqueia o acesso ao banco de dados sqlite, o qual não permite concorrência. Para realizar essa verificação, é necessário:

  1. Obter o momento da última atualização;
  2. 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);

Compilação

O Apache Maven, uma ferramenta para a automação da compilação foi utilizada na aplicação. O qual consiste basicamente em adicionar as dependências necessárias no arquivo pom.xml.

⚠️ **GitHub.com Fallback** ⚠️