A Internet das Coisas (IoT) está se tornando a grande moda ultimamente. A capacidade de criar qualquer dispositivo mecânico, por exemplo, relógios, televisores, termostatos, e fazer com que eles se comuniquem pela Internet é a era moderna. Nessa era moderna, uma coisa que permanece consistente é a necessidade de transferir e armazenar dados. Como fazer isso em um dispositivo de IoT?

Servidor Couchbase existe para armazenar grandes quantidades de dados corporativos e Couchbase Mobile existe para armazenar dados localmente em dispositivos móveis e sincronizá-los com o Couchbase Server quando possível. Onde a IoT se encaixa nisso? Os dispositivos de IoT não são servidores e, tecnicamente, não são dispositivos móveis.

Você sabia que muitos dispositivos de IoT são capazes de executar aplicativos Java? Na verdade, existe um SDK do Couchbase Lite para Java. Esse não é um SDK para Android ou iOS. É um SDK para aplicativos Java em geral. Com isso, podemos usá-lo para a IoT.

O escopo do projeto

Agora que sabemos que isso é possível, vamos pensar em um exemplo legal de IoT e executá-lo. Vamos usar um exemplo de iBeacon com o seguinte cenário.

Digamos que você queira rastrear seu animal de estimação quando estiver fora de casa. Você quer saber por onde seu animal de estimação passa em sua casa e a que horas do dia. Então, você decide conectar um iBeacon à coleira do seu animal de estimação e instalar alguns scanners de IoT em sua casa.

Assim, com o iBeacon conectado e os gateways de IoT instalados, os dispositivos de IoT podem procurar iBeacons continuamente. Quando um iBeacon entra no alcance, um registro de data e hora, juntamente com o local e as informações do beacon, pode ser salvo e carregado no seu servidor. Posteriormente, você pode criar seu próprio painel com um mapa de calor para entender melhor seus dados.

Então, o que é necessário para experimentar esse projeto?

Os requisitos

Há alguns requisitos no âmbito do software e do hardware. Eles podem ser vistos abaixo:

Embora haja um requisito de hardware, a marca do hardware é um pouco flexível. Listei o Intel IoT Gateway e os beacons de proximidade Gimbal porque, além de serem incrivelmente acessíveis, foram os que usei ao criar meu aplicativo. Para aproveitar ao máximo este exemplo, é melhor ter vários beacons e gateways, mas um será suficiente para a criação de protótipos.

Veja a seguir como esse projeto será realizado.

O código-fonte completo desse projeto pode ser encontrado em GitHub.

Salvando seus dados com o Couchbase

Antes de entrarmos no trabalho de IoT e beacon, seria uma boa ideia definir nosso modelo de dados e criar nosso aplicativo Java. Nesse cenário, que é um dos muitos, o aplicativo Java não fará a varredura de beacons. Ele será responsável apenas por salvar os dados.

O modelo de dados do beacon do Couchbase

Se você não conhece os iBeacons, eles não oferecem nada além de alguns valores de cadeia de caracteres e inteiros em sua transmissão. Eles não podem ser conectados e não podem ver outros dispositivos. Tudo o que fazem é transmitir. Dito isso, os valores transmitidos são os seguintes:

  • UUID
  • Maior
  • Menor
  • Potência

O UUID, Maiore Menor oferecem informações exclusivas sobre um determinado beacon. Os três valores podem formar uma chave composta que é útil para consultas posteriores.

Vamos pensar em como armazenaremos os dados do beacon sempre que um for detectado.

Poderíamos criar um novo documento JSON sempre que um beacon fosse detectado. Os documentos individuais podem ter a aparência de algo como:

Não há nada de errado com a abordagem acima. No entanto, você pode acabar com grandes quantidades de documentos, dependendo de quantos beacons estiverem circulando. Novamente, o Couchbase foi projetado para lidar com isso, portanto é uma questão de preferência. Na verdade, prefiro manter todas as transações de beacon para um beacon específico no mesmo documento, dessa forma:

No segundo cenário, toda vez que um beacon é descoberto, o Couchbase é consultado com base na chave composta e, em seguida, os dados de status são adicionados à matriz de status.

Adição das dependências do Maven

Como este projeto Java será baseado no Maven, o pom.xml precisa que certas dependências sejam atendidas. Adicione a seguinte dependência ao seu arquivo Maven para incluir o Couchbase Lite Java SDK em seu projeto:

A dependência acima permitirá que você armazene documentos do Couchbase localmente em seu dispositivo IoT e os sincronize com o Couchbase Sync Gateway.

Criação de uma classe de beacon

Como trabalharemos com iBeacons, faz sentido criar uma classe Java Beacon. Essa classe deve ser responsável por salvar os dados do beacon, bem como carregá-los no caso de uma consulta. Vamos começar dando uma olhada em como é o carregamento:

Na função salvar, primeiro queremos carregar os documentos para ver se eles existem. Se existir um documento para as informações do beacon, queremos adicioná-lo a ele; caso contrário, podemos simplesmente criar um novo documento. Depois de reconstruirmos nosso documento do Couchbase, seja do zero ou a partir de dados de documentos existentes, nós o salvamos por meio da função putProperties Nesse ponto, os dados do beacon podem ser salvos e lidos no banco de dados local do Couchbase Lite.

Sincronização com o Couchbase Sync Gateway

É mais do que provável que você trabalhe com mais de um gateway de escaneamento de IoT. Por isso, os dados do beacon (no modelo de documento incorporado) precisarão ser sincronizados entre os dispositivos de IoT. Agora podemos levar nosso código de salvamento e carregamento para o próximo nível:

Esse código deve existir em outra classe, de preferência na classe que contém o principal função. Essencialmente, ela inicializará a conexão com o banco de dados local, configurará os replicadores push e pull para uma instância do Sync Gateway em execução remota e iniciará o processo de salvamento e sincronização. Quando executarmos o aplicativo, primeiro baixaremos todos os documentos de beacon relevantes do servidor. Com o uso de ouvintes de alterações nos replicadores, podemos esperar para salvar somente depois que terminarmos de baixar as alterações. Para evitar que o aplicativo Java permaneça aberto após o envio, adicionamos um ouvinte que fechará o aplicativo após a conclusão.

Resolvendo os erros de dependência do SQLite

Ao criar esse aplicativo com o Maven, não deve haver nenhum problema. No entanto, dependendo do dispositivo de IoT que você implantar, poderá haver um problema de dependência de biblioteca. Há muitas arquiteturas diferentes em circulação. Um exemplo de erro pode ser parecido com o seguinte:

Isso pode ser facilmente resolvido extraindo o arquivo JAR, renomeando um dos diretórios e, em seguida, empacotando-o novamente em um JAR. Para ser mais específico, para extrair seu arquivo JAR, execute o seguinte comando:

A partir dos documentos e arquivos extraídos, renomeie o arquivo /nativo/linux/x86 para o diretório /nativo/linux/i386. Feito isso, você pode reempacotar o arquivo JAR e reimplantá-lo.

O comando acima reempacotará o arquivo JAR para você.

Verificação de iBeacons e acompanhamento de seu status

Como mencionado anteriormente, o aplicativo Java não é responsável pela detecção de iBeacons. Ele é responsável apenas por salvar os dados. Em vez disso, usaremos algumas ferramentas que vêm pré-instaladas em um sistema operacional Linux.

Varredura com ferramentas do Linux

A maioria das distribuições Linux vem com o hcitool e hcidump aplicativos. Os hcitool permitirá que você procure dispositivos bluetooth que estejam dentro do alcance. Você executaria algo como o seguinte:

O procedimento acima retornaria informações básicas sobre os dispositivos encontrados em uma varredura. Em seguida, você usaria a função hcidump para mostrar tudo e qualquer coisa sobre os dados do Bluetooth que foram descobertos. Algo como isso mostraria os dados brutos:

O problema é que os dados são muito brutos. Não é algo com que possamos trabalhar em sua forma atual. Não poderíamos usá-los para dar sentido aos dados do iBeacon.

Simplifique o processo com uma ferramenta da Radius Networks

É aqui que um script de Redes Radius entra em ação. Há um script chamado Varredura iBeacon que fará uso de hcitool e hcidumpmas analisado e limpo. Ele pode ser visto abaixo:

Divulgação completa de que esse script foi escrito pela Radius Networks, com exceção de uma linha:

Estamos pegando as informações analisadas pelo script e canalizando-as em nosso aplicativo Java para serem salvas. Esse script será executado continuamente até ser interrompido manualmente.Acima está um exemplo de animação desse projeto em ação.

Conclusão

Isso não foi tão ruim, certo? Você acabou de criar um projeto simples de Internet das Coisas (IoT) que escaneia iBeacons e salva as informações no Couchbase. O SDK Java do Couchbase Lite é quase idêntico ao SDK Android do Couchbase Lite. Com ele, podemos levar nossos aplicativos Java para praticamente qualquer coisa que suporte Java. Um projeto de exemplo completo e funcional pode ser visto em GitHub.

Autor

Postado por Nic Raboy, defensor dos desenvolvedores, Couchbase

Nic Raboy é um defensor das modernas tecnologias de desenvolvimento móvel e da Web. Ele tem experiência em Java, JavaScript, Golang e uma variedade de estruturas, como Angular, NativeScript e Apache Cordova. Nic escreve sobre suas experiências de desenvolvimento relacionadas a tornar o desenvolvimento móvel e da Web mais fácil de entender.

Deixar uma resposta