Desenvolvimento

15 jul, 2016

Desenvolva um aplicativo IoT para carro conectado com o Geospatial Analytics

Publicidade

Quer construir um aplicativo para a Internet of Things (IoT) no IBM Bluemix? É mais fácil do que você imagina! A maioria dos aplicativos IoT consiste em três peças: uma coisa conectada, um aplicativo para ver e gerenciar a coisa e análise para detectar eventos acionados por essa coisa. O serviço Internet of Things no Bluemix (o IoT Foundation) facilita a conexão de alguma coisa a aplicativos e serviços de análise de dados. Para demonstrar o quão fácil é, desenvolvi um kit iniciante IoT para carros conectados. O kit Veículo Conectado consiste em três partes:

  • Um simulador de veículos (um app Node.js);
  • Aplicativos HTML5 para visualizar e gerenciar os veículos em um mapa;
  • O serviço Geospatial Analytics, no Bluemix e o Node-RED para análise.

Este artigo o guiará através da configuração e implementação do kit iniciante de Veículo Conectado no Bluemix e desenvolver análises com o serviço Geospatial Analytics e Node-RED.

O aplicativo Connected Vehicle usa o IoT Foundations para mensagens em tempo quase real entre veículos simulados e o Mapa e aplicativos de Testador.”

O que você precisa para desenvolver seu app

execute o app

obtenha o código

Visão geral do kit iniciante do Connected Vehicle

O aplicativo Connected Vehicle que você irá configurar e implementar possui três componentes:

  • Simulador de veículos Node.js;
  • Aplicativo de mapas HTML5;
  • Aplicativo de testador HTML5.

Esses três componentes usam o IBM Internet of Things Foundation (IoT Foundation) para publicar/assinar mensagens em tempo real com o protocolo MQTT. Os veículos simulados publicam dados de telemetria com frequência (duas mensagens por segundo) e assinam um tópico de comando por onde aceitam comandos (por exemplo, “set speed to 60”) a partir do aplicativo do testador. O aplicativo de mapa assina o tópico de telemetria do veículo para exibir a posição e status em tempo real. O aplicativo do Testador permite publicar comandos de controle para os veículos e notificações no app de mapa.

Esse diagrama de visão geral mostra os relacionamentos entre os componentes do aplicativo:

image001 (1)

1. Criar uma instância de serviços Internet of Things no Bluemix

  1. Efetue login no Bluemix. No painel, clique em Adicionar um Serviço. Escolha Internet of Things a partir do catálogo de serviços. Escolha o plano selecionando Grátis e clique em Criar para criar o serviço.
  2. Selecione o serviço recém-criado em seu painel, depois clique no botão Ativar no canto superior direito da página.
  3. Agora você está no painel IoT Foundation, onde poderá registrar dispositivos, gerar chaves API para aplicativos, visualizar seu uso e convidar outros para a organização:

image002 (1)

2. Configurar a organização na IoT Foundation

O aplicativo Connected Vehicle usa o IoT Foundation para mensagens próximas ao tempo real entre veículos simulados e os aplicativos Mapa e Testador. Para facilitar essa comunicação, você, primeiro, precisa registrar os dispositivos e gerar uma chave API para os aplicativos.

Com o simulador de veículos, você pode modelar vários veículos de uma única instância de tempo de execução Node.js. IoT Foundation trata cada simulador de veículos como um dispositivo. Você irá eventualmente executar três simuladores de veículos, portanto, a primeira etapa é registrar esses simuladores manualmente para obter credenciais de acesso:

  • A partir da página do Dispositivo do painel da organização, clique em Incluir Dispositivo. No campo Tipo de Dispositivo, clique em Criar um tipo de dispositivo… e insira veículo no campo abaixo do Tipo de Dispositivo. Insira um ID do dispositivo de qualquer comprimento que será único para esta organização (por exemplo, ABC) e clique em Continuar:

image003 (2)

  • A próxima página exibe as credenciais para seu dispositivo. Anote-as! Por exemplo:
org=o4ze1w type=vehicle id=ABC auth-method=token
auth-token=5QK1rWHG9JhDw-rs+S
  • Crie mais dois dispositivos (por exemplo, DEF e GHI), e anote as credenciais. Você irá configurar o kit iniciante com essas informações
  • A partir do painel da organização, clique na guia Chaves API Key e selecione Nova Chave API. Copie a chave e o token. Os aplicativos Mapa e Testador usarão essas credenciais para se conectarem ao IoT Foundation

3. Fazer o download, configurar e implementar o kit iniciante

O código-fonte para o kit iniciante IoT é armazenado no bryancboyd |projeto iot-vehicle-geospatial-starter-kit nos Serviços DevOps. É possível obter sua própria cópia do código de várias maneiras, inclusive:

  • Criando seu próprio projeto usando a opção Bifurcar Projeto na página de projetos
  • Clonando o repositório Git

Se estiver familiarizado com qualquer desses métodos, você pode obter sua própria cópia do código usando esses métodos. Caso contrário, siga as instruções para criar um arquivo ZIP do código e faça o download para seu PC:

  • Role para cima e clique no botão desse tutorial Obtenha o código
  • No the bryancboyd | projeto iot-connected-vehicle-starter-kit, clique em Editar Código
  • Destaque a raiz da árvore de origem e clique em Arquivo >Exportar > Zip, a partir do menu: Salve o arquivo transferido localmente
  • Extraia o arquivo ZIP
  • Em seu projeto local, abra o arquivo manifest.yml. Escolha um nome global único de aplicativo (por exemplo, bryancboyd-trafficsim) e insira o nome para os campos hoste na nome. Configure o número de instâncias para 4, e salve o arquivo
  • Abra config/settings.js. Esse aquivo armazena todos os dados de configuração de dispositivos e chaves API
    • Para o iot_deviceType, insira veículo
    • Para o iot_deviceOrg, insira seu ID de organização de seis caracteres (por exemplo,O4ze1w)
    • Para o iot_deviceSet, insira o ID e tokens para os três dispositivos que você registrou
    • Para o iot_apiKey, insira a chave API que você criou
    • Para o iot_apiToken, insira o token de chave API
    • Mantenha os valores padrão para notifyTopic e na inputTopic; esses são parâmetros de configuração usados pelo serviço Geospatial Analytics.
  • Salve suas mudanças
  • A partir do diretório-raiz de seu aplicativo extraído, digite cf login. Siga os prompts, inserindo https://api.ng.bluemix.net para o endpoint do API e seu endereço de e-mail e senha Bluemix IBM ID como credenciais de login. Caso tenha mais de uma organização Bluemix e espaço disponível, você também terá de escolher esses
  • Tipo cf push para implementar seu aplicativo no Bluemix
  • Após seu aplicativo ser implementado, execute o aplicativo Mapa em http://app-name.mybluemix.net. Você verá três veículos simulados se movendo no mapa. Clique em um veículo para ver os dados de telemetria:

image005 (3)

  • Cada simulador pode simular vários veículos. A contagem é controlada por uma variável de ambiente Bluemix: VEHICLE_COUNT. Tipo cf set-env <app-name> VEHICLE_COUNT 5 para aumentar o número total de veículos para 15

4. Criar e configurar o Geospatial Analytics

Usando o serviço Bluemix Geospatial Analytics, você pode monitorar onde cada veículo insere ou deixa uma região de geofence definida. O aplicativo mapa pode interagir com o serviço, permitindo criar e excluir graficamente geofences de forma dinâmica:

  • No painel do Bluemix de seu novo aplicativo, clique em Adicionar um serviço. Escolha Geospatial Analytics a partir do catálogo de serviços. Escolha o plano selecionado Grátis e clique em Criar para ligar o serviço a seu aplicativo
  • O aplicativo do kit iniciante inclui APIs para iniciar e parar o Geospatial Analytics com a organização IoT Foundation configurada e credenciais de mensagem. Para iniciar o serviço, navegue até http://app-name .mybluemix.net/GeospatialService_start e aguarde até que a página mostre que foi concluído com êxito (isso pode levar 30-45 segundos).
  • Abra o aplicativo Mapa e crie algumas geofences. Clique no botão Alerta (o ícone de ponto de exclamação) na barra de ferramentas para iniciar o processo de criação de geofence, e arraste as alças e bordas até posicionar o geofence. Para criar o geofence, clique no círculo preto central para abrir o menu de contexto, depois clique em Criar:
image006

O serviço Geospatial Analytics adiciona esse geofence à lista de regiões vigiadas e publica uma mensagem MQTT através do IoT Foundation sempre que um veículo entrar ou sair da área. O aplicativo mapa consome a mensagem e exibe uma sobreposição sobre o veículo no mapa:

image007 (1)

Para excluir o geofence, selecione a região e clique em Excluir.

5. Usar o aplicativo Testador

O aplicativo Testador envia comandos aos veículos simulados e ao aplicativo de mapa. O simulador de veículos se inscreve para comandos do tipo setProperty e, dinamicamente, muda suas próprias propriedades, velocidade e estado. O aplicativo mapa se inscreve para comandos do tipo addOverlay e exibe dinamicamente um pop-up de texto sobre o veículo.

  • Abra o aplicativo mapa e o aplicativo Testador (http://app-name .mybluemix.net/tester) lado a lado para que você possa ver ambas as páginas
  • Para configurar o comando setProperty, selecione um veículo e insira o ID no formulário inferior no aplicativo testador. Insira uma propriedade de velocidade e um valor de 100 e clique em Atualizar Propriedade. Você verá o tópico MQTT e a carga útil contendo o comando no aplicativo Testador e o veículo irá mudar sua velocidade para 100 mph
    • Observação: os veículos simulam um conjunto de propriedades estáticas (localização, velocidade, estado e tipo) e propriedades customizadas. É possível usar o API setProperty para dinamicamente adicionar/mudar/excluir uma propriedade customizada em um veículo. Para adicionar uma propriedade, publique uma propriedade que ainda não existe (por exemplo, DriverWindow = UP). Para excluir uma propriedade, atualize a propriedade com um valor de uma sequência vazia; o veículo deixará de incluir a propriedade em sua mensagem de telemetria:

image008 (2)

  • Para configurar o comando addOverlay: no aplicativo Testador, use o formulário superior para exibir uma mensagem sobre um veículo:

image009 (1)

6. Criar um aplicativo analítico Node-RED

É possível usar o texto padrão Node-RED no Bluemix para estender o kit iniciante com análises básicas. O Node-RED é uma ferramenta visual para conectar eventos em casos de uso do IoT. Com o Node-RED, você pode projetar fluxos de lógica que se ligam uma variedade de entradas (como MQTT, TCP e HTTP) a saídas (como MQTT, HTTP, Twitter, MongoDB, e Cloudant) para adicionar rapidamente análises leves:

  • Implemente o aplicativo de texto padrão do Node-RED no Bluemix: Em seu painel Bluemix, clique em Adicionar Aplicativo e escolha o texto padrão do Internet of Things Foundation. Forneça um nome e nome do host exclusivos (por exemplo, bryancboyd-nodered) e clique em Criar.
  • Quando o aplicativo estiver em execução, clique em Ligar um Serviço e escolha o serviço Internet of Things, que você criou na etapa 1
  • Após os estágios do aplicativo, abra a tela do Node-RED em http:// node-red-app.mybluemix.net/red/
  • O texto padrão IoT para aplicativos Nose-RED começa com um fluxo padrão. Selecione os nós na tela e exclua-os
  • Desenvolva um fluxo para monitorar a telemetria para todos os veículos: Arraste um nó de entrada ibmiot da paleta à esquerda para a tela. Arraste um nó de depuração para a direita do nó ibmiot e conecte os dois nós. Dê um clique duplo no nó ibmiot e configure-o como segue:
    • Para o Autenticação, selecione Bluemix Service
    • Para o Tipo de Entrada, selecione Evento de Dispositivo
    • Para o Tipo de Dispositivo, insira veículo
    • Para o Id do Dispositivo, selecione Todas
    • Para o Evento, insira telemetria
    • Para o Formato, insira json
    • Para o Nome, insira telemetria
  • Clique em Implemente (canto superior direito da página) e selecione o painel depuração. Se a configuração foi realizada com sucesso e o aplicativo do kit inciante estiver sendo executado, você verá as cargas úteis MQTT para os veículos conectados no painel de depuração:

image010

  • Se a sua variável de ambiente VEHICLE_COUNT estiver configurada para um valor maior que 1, os dados de telemetria para os VEHICLE_COUNT veículos são contidos em um único array. Para modificar o fluxo para filtrar para um único veículo (por exemplo, ABC-2), adicione um nó de função no meio de seu fluxo, dê um clique duplo e preencha com o seguinte código:
var data = msg.payload; for (var i in data) {
  if (data[i].id == "ABC-2") {
    msg.payload = data[i];
       return msg;
  }
}
  • Conecte o fluxo e clique em Implemente. Você deve agora ver dados para um único veículo em seu painel de depuração:

image011

7. Criar uma chave virtual fob no Node-RED

Depois, use o Node-RED para desenvolver um controle remoto simples para trancar/destrancar um veículo. Você utilizará dois nós injetar: um para destrancar o veículo, e o outro para trancá-lo. Para cada operação, você publicará um comando setProperty para a propriedade lockState com um valor de trancado ou destrancado, depois publique um comando addOverlay para exibir uma notificação no aplicativo mapa:

  • Vá até seu fluxo Node-RED e arraste dois nós de entrada injetar para a tela do Node-RED. Edite cada nó e configure uma carga útil de cadeia de caracteres: trancado para um, destrancado para o outro. Essa carga útil será o valor enviado no comando setProperty:

image012

  • Adicione um nó de função ao fluxo e ligue ambos os nós injetar a ele. Essa função desenvolverá e publicará dois comandos para o IoT Foundation: um para configurar o estado do veículo, o outro para exibir uma mensagem sobreposta no aplicativo mapa. Use o seguinte código:
var commandValue = msg.payload; var setPropertyMsg = {
        deviceId: "ABC",
        deviceType: "vehicle",
        eventOrCommandType: "setProperty",
        format: "json",
        payload: JSON.stringify({
               "id": "ABC-2",
               "property": "lockState",
               "value": commandValue
        })
} var addOverlayMsg = {
        deviceId: "tester",
        deviceType: "api",
        eventOrCommandType: "addOverlay",
        format: "json",
        payload: JSON.stringify({
               "id": "ABC-2",
               "text": commandValue,
               "duration": 5000
        })
} return [ [setPropertyMsg, addOverlayMsg] ];
  • Adicione um nó de saída ibmiot ao fluxo, após o nó de função. O nó de função irá sobrescrever muitos dos valores de configuração no nó ibmiot; marcaremos esses campos com um valor “simulado” de substituição. Dê um clique duplo no nó ibmiot e configure-o como segue:
    • Para o Autenticação, selecione Bluemix Service
    • Para o Tipo de Entrada, selecione Comando de Dispositivo
    • Para o Tipo de Dispositivo, insira substituição
    • Para o Id do Dispositivo, insira substituição
    • Para o Tipo de Comando, insira substituição
    • Para o Formato, insira json
    • Para Dado, insira substituição
    • Para o Nome, insira comandos

image013

  • Implemente o aplicativo (clique em Implementar no canto superior direito da página) e clique no botão nos nós de injeção enquanto observa o aplicativo de mapa. É possível ver a propriedade lockState atualizar para o veículo ABC-2 e uma mensagem de “destrancado” aparece no mapa:

image014

Com o serviço Bluemix Geospatial Analytics, você pode criar polígonos de geofences no aplicativo de Mapa e receber eventos IoT Foundations quando um veículo entra ou sai de uma região. O aplicativo de Mapa já assina este tópico de evento e exibe mensagens como uma sobreposição de notificação sobre o veículo. Esse tópico de evento geo-espacial pode ser assinado por vários aplicativos, e pode ser um bloco de construção usado para criar cenários mais complexos, como — por exemplo, uma caixa delimitadora para motoristas jovens, avisando seus pais sempre que o filho sai de uma zona “aprovada”. Ou detectar quando seu veículo entrou em um geofence próximo à sua casa e notificar o sistema de automação de sua casa para se preparar para sua chegada.

É possível usar o Node-RED para ligar alertas de geofence a outros aplicativos e APIs. Neste fluxo, você publicará um tweet ao receber uma mensagem de notificação de geofence para um veículo específico:

  • Solte um nó de entrada ibmiot na tela. Dê um clique duplo no nó ibmiot e configure-o conforme descrito abaixo:
    • Para a Autenticação, selecione Bluemix Service
    • Para o Tipo de Entrada, selecione Comando de Dispositivo
    • Para o Tipo de Dispositivo , insira api
    • Para o Id do Dispositivo, insira geo-espacial
    • Para o Tipo de Comando, insira geoAlert
    • Para o Formato, insira json
    • Para o Nome, insira comandos

image015 (1)

  • Adicione um nó de função após o nó de entrada ibmiot. Essa função filtrará os dados retornados do serviço geo-espacial e continuará a execução do fluxo somente se o veículo para o alerta corresponde com um ID especificado. Use o seguinte código (se desejado, substitua o ID com um veículo em seu ambiente), ligue a função ao nó de depuração e implemente:
msg.payload = {
   time: msg.payload.time,
   id: msg.payload.deviceInfo.id,
   lon: msg.payload.deviceInfo.location.longitude,
   lat: msg.payload.deviceInfo.location.latitude,
   eventType: msg.payload.eventType
   region: msg.payload.regionId 
       } 
       if (msg.payload.id == "ABC-3") { return msg; }
  • Depois, arraste um nó de saída twitter para a tela e conecte a saída da função para a entrada deste nó. É possível usar o nó do twitter para configurar uma conta Twitter existente usando o OAuth e depois publicar um tweet sobre os conteúdos damsg.payload. Entre em sua conta Twitter e modifique o nó de função para desenvolver a mensagem para o Twitter:
msg.payload = {
   time: msg.payload.time,
   id: msg.payload.deviceInfo.id,
   lon: msg.payload.deviceInfo.location.longitude,
   lat: msg.payload.deviceInfo.location.latitude,
   eventType: msg.payload.eventType,
   region: msg.payload.regionId 
       } 
       if (msg.payload.id == "ABC-3") { 
    var verb = "exited";
    if (msg.payload.eventType == "Entry") { verb = "entered"; }
    msg.payload = "Vehicle " + msg.payload.id + " has " + verb + 
       " region " + msg.payload.region + "!";
    return msg; 
       }
  • Implemente o aplicativo

Agora o Node-RED publicará um tweet sempre que seu veículo atravessar um geofence:

image016

Conclusão

Construir um aplicativo IoT com os serviços Internet of Things e Geospatial Analytics no Bluemix é simples e fácil. Agora tente: estenda o kit iniciante do Connected Vehicle com outros serviços Bluemix, aplicativos móveis, até mesmo sensores físicos.

bluemix

bluemix01