Conteúdo


Faça você mesmo: desenvolva um aplicativo de vigilância remota usando IBM Cloud, Cloudant e Raspberry Pi

IBM Cloud é uma plataforma baseada em nuvem de software livre para desenvolver, gerenciar e executar aplicativos de todos os tipos (web, móvel, Big Data e dispositivos inteligentes, por exemplo).

Com um pouco de código, a plataforma IBM Cloud e a câmera em um Raspberry Pi, podemos criar um sistema simples de segurança doméstica. Para fazer você mesmo, siga estas etapas.

Execute o aplicativoObtenha o código

Para implementar um sistema de segurança doméstica, é possível criar um aplicativo que envie imagens capturadas por um dispositivo Raspberry Pi para um Cloudant. Usando Node.js, é possível exibir a imagem em uma página da web que pode ser monitorada remotamente.

O que será necessário para o seu aplicativo

Etapas básicas

O aplicativo de segurança doméstica realiza as seguintes ações:

  1. Usando Python, o aplicativo abre um soquete da web no dispositivo Raspberry Pi.
  2. O aplicativo Node.js em execução em IBM Cloud conecta-se a esse soquete da web.
  3. O evento HGServerProtocol.onConnect do Python chama a função que captura a imagem.
  4. A imagem é capturada é transferida por upload para o Cloudant.
  5. O soquete da web retorna o ID do documento para Node.js.
  6. O Node.js conecta-se ao Cloudant e usa o ID de documento para recuperar a imagem do banco de dados.
  7. O Node.js exibe a imagem na página da web.

Esse aplicativo usa os seguintes protocolos e classes:

  • A classe HGServerProtocol, que implementa o WebSocketServerProtocol no Raspberry PI e define o que fazer quando os seguintes eventos são encontrados:
    • onConnect
    • onOpen
    • onMessage
    • onClose
  • A classe HGCloudantDB, que manipula a conexão com o banco de dados Cloudant e trata da manipulação dos documentos JSON (incluindo as chamadas GET, PUT, POST, e assim por diante).

Etapa 1. Criar credenciais não administrativas no Cloudant

Para maior segurança, use uma chave de API e um par de senhas que seja específico do banco de dados ao qual você está se conectando, em vez de usar informações de login na conta. Para criar uma chave de API e um par de senhas para seu banco de dados, siga estas etapas.

  1. Clique em database e depois clique no ícone de cadeado ao lado do banco de dados que deseja usar. Screen capture of Databases window; select a database
    Screen capture of Databases window; select a database
  2. Na janela Permissions, clique em Generate API key para criar um novo par de usuários e senha para esse banco de dados. Screen capture of Permissions window; ceate user and                             password for database
    Screen capture of Permissions window; ceate user and password for database
  3. Tome nota da senha, pois ela não é mostrada novamente. Na lista no centro da janela, veja o novo usuário da API. Clique no ícone na coluna Writer para conceder permissão de gravação. Screen capture of granting write permission to new API user
    Screen capture of granting write permission to new API user
  4. Chame a classe HGCloudantDB e inclua os três argumentos a seguir:
    • acc: O nome de usuário da conta
    • user: A chave de API
    • passwd: A senha da API

Etapa 2. Capturar a imagem e converter os dados

  1. Codifique a função take_picture para capturar uma imagem com a biblioteca picamera e mantê-la na memória. A imagem então é convertida em uma cadeia de caractere base64 .
  2. Os dados de imagem (agora codificados como base64) então são inseridos em um dicionário, que depois é interpretado pela biblioteca Cloudant como um arquivo JSON. Esse código a seguir é a imagem já carregada no Cloudant. É um código JSON que o Cloudant recebeu e armazenou.
    	_file_JSON_ = {
    	    "_attachments": {
    	        "file.jpg": {
    	            "content_type": "image/jpeg",
    	            "data": string64(_stream_data_)
    	        }
    	    }
    	}
  3. A chave _attachments mostrada na listagem de código anterior faz o Cloudant anexar o arquivo, o tipo de conteúdo e a cadeia de caractere base64 ao campo _attachment , de modo que, quando você solicitar um anexo GET , o recuperará a imagem.

A última etapa é executar o script Python e aguardar as solicitações feitas pelo servidor Node.js.

Etapa 3. Criar o aplicativo da web Node.js

Para criar o aplicativo da web Node.js, use o Node.js padrão.

  1. Efetue login no IBM Cloud e acesse a página Catalog.
  2. Selecione Node.js web starter boilerplate.Screen capture of the IBM Cloud catalog page; select                             Node.js web starter boilerplate
    Screen capture of the IBM Cloud catalog page; select Node.js web starter boilerplate
  3. Criar o aplicativo.
  4. Quando o aplicativo estiver em operação, faça o download do arquivo starter.zip e extraia-o para o seu computador local.
  5. Abra o arquivo app.js e inclua a seguinte linha de código:
    var jade = require('jade');
    var WebSocketClient = require('websocket').client; // Library used to create the websocket
    var fs = require('fs'); // Library used to save the file in the server
    var uuid = require('node-uuid'); // Library used to create a unique file name in the server
  6. Altere a linha de código app.set('view engine', 'ejs') para esta linha de código:
    	app.set('view engine', 'jade');

    Essas duas linhas de código notificam o servidor de que o Jade é usado para desenvolver o HTML.

  7. Crie um novo índice em Jade para seu aplicativo. Recupere o código de amostra do repositório ou crie um novo.
  8. Salve o arquivo como index.jade no diretório de visualizações na pasta do aplicativo.
  9. Observe que a identificação <a> inclui um button . Esse botão é criado em CSS. Salve esse código no diretório public/stylesheets com o nome button.css.
  10. Para ajustar o estilo padrão do botão, comece com o código no repositório.
  11. Realize o push de seu aplicativo ao IBM Cloud e aponte um navegador para o arquivo de índice do seu aplicativo. O resultado é similar à figura a seguir. Screen capture: Take a picture button

Etapa 4. Recuperar a imagem do Cloudant

Escreva o código para recuperar a imagem do dispositivo Raspberry Pi. A imagem é transferida por upload para o Cloudant.

  1. Inclua o código para manipular a solicitação GET quando o usuário clicar no botão Take a picture . (Sem esse código, o botão leva o usuário a uma página que não existe ainda.) Para manipular a solicitação que o servidor recebe da página da web, inclua o seguinte código ao arquivo app.js:
    	app.get('/takepicture', function (req, res){
    	
    	  });
  2. Inclua código para criar um soquete da web que se conecte ao servidor Raspberry Pi.
  3. O dispositivo Raspberry Pi captura a imagem e a transfere por upload ao banco de dados Cloudant. O código de resposta e o ID do documento indicam se o upload foi bem-sucedido.
  4. O aplicativo de amostra inclui código que realiza as seguintes tarefas:
    • Conecta-se ao banco de dados Cloudant para obter o anexo no documento que está sendo transferido por upload pelo dispositivo Raspberry Pi.
    • Salva o anexo no servidor da web.
    • Integra o anexo em uma resposta HTML e o envia para o usuário.

É possível encontrar esse código no código de amostra transferido por download. Consulte o arquivo app.js sob app.get de capturar imagem para a função que manipula a solicitação GET para a página da web takepicture :

app.get('/takepicture', function (req, res){//code});

Conclusão

Agora é possível monitorar remotamente qualquer local com seu dispositivo Raspberry Pi.


Recursos para download


Temas relacionados

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Cloud computing
ArticleID=987349
ArticleTitle=Faça você mesmo: desenvolva um aplicativo de vigilância remota usando IBM Cloud, Cloudant e Raspberry Pi
publish-date=10242014