-
Notifications
You must be signed in to change notification settings - Fork 0
2.1 Módulo SensorNet
#SensorNet
##Descrição O SensorNet é o módulo que monitora a rede física e emite alertas para eventos de modificações na rede de sensores, no coletor e no sensor. O SensorNet está vinculado a rede física, mapeando a rede de sensores para o mundo computacional.
##Funcionalidades
A função do SensorNet no framework é monitorar o funcionamento da rede sensores através das mensagens recebidas de algum Colletor. Esses dados são persistidos em um banco de dados e, com isso, o SensorNet se torna apto a inferir sobre a quantidade de nós sensores na rede, a quantidade de rede e todos os coletores existentes em uma rede de sensores. O SensorNet suporta:
- O mapeamento de diversas redes sensores;
- Diversos coletores por rede;
- Verificação periódica do estado de funcionamento de um sensor.
###Consumo de dados do coletor
Para o SensorNet iniciar sua operação, ele necessita de dados sobre cada amostra capturada por um nó sensor da rede de sensores. Para obter estes dados, o SensorNet precisa capturá-los direto na infraestrutura de comunicação do OSIRIS, via inscrição em omcp://collector.ex/
, que é o endereço onde todos os coletores devem publicar seus dados. Após o recebimento do dado, o SensorNet o processa e retira todas as informações necessárias para mapear a rede de sensores no ambiente computacional o framework.
Todos os dados publicados por um coletor seguem o padrão, definido pelo OSIRIS, para o funcionamento consistente em todo o framework: mesmo tipo de pacotes e endereço único de publicação.
###Verificação periódica dos sensores O SensorNet precisa definir o estado de operação da rede, do coletor e de um sensor, para isso, o mesmo deve ser capaz de monitorar se uma amostra de um determinado nó sensor da rede de sensores foi enviada dentro de um período, atendo o prazo de captura. Como o SensorNet mapeia a rede de sensores para o ambiente computacional, ele deve ser capaz de informar se um nó sensor está funcionando ou não.
Para isso, verificações periódicas agendas ocorrem, afim realizar em um instante de tempo aproximado, a verificação de cada sensor mapeado pelo módulo. A após essa verificação o estado de funcionamento de um sensor, uma rede ou um coletor pode ser alterado.
####Tabela de estados de funcionamento A tabela a seguir contém todos os estados possíveis de serem atribuídos a uma rede, coletor ou sensor, com uma descrição do seu significado.
Estado de operação | Descrição |
---|---|
NEW | Novo item no módulo |
UPDATED | Atualizado com sucesso |
INACTIVE | Desativado |
REACTIVATED | Reativado |
MALFUNCTION | Funcionamento incorreto ou parcial |
O estado de funcionamento MALFUNCTION contém uma propriedade de transitividade entre o item mais específicos para o mais geral. Supondo que cada sensor seja uma folha, um coletor seja um nó e uma rede seja a raiz, uma folha com um de estado do funcionamento MALFUNCTION propaga seu estado até a raiz, hierarquicamente, tornando toda árvore condenada por mal funcionamento.
##Comunicação Para o SensorNet fazer parte do framework, o mesmo deve implementar o protocolo de comunicação OMCP para o servidor. O OMCP é um protocolo de comunicação REST, baseado no protocolo HTTP da Web, possuindo métodos de requisição e códigos de resposta previamente definidos.
###Servidor RPC Por debaixo dos panos, o SensorNet atua como um servidor OMCP, disponibilizado dados de todos os sensores, coletores e redes para uma aplicação externa, em formato REST, com todos estes itens endereçáveis por uma URL. O servidor SensorNet contém os seguintes recursos OMCP:
- omcp://sensornet.osiris/networks/;
- omcp://sensornet.osiris/networks/{networkId}/collectors/;
- omcp://sensornet.osiris/networks/{networkId}/sensors/;
- omcp://sensornet.osiris/networks/{networkId}/collectors/{collectorId}/sensors/;
- omcp://sensornet.osiris/networks/{networkId}/collectors/{collectorId}/sensors/{sensorId}/.
####Formato de dados para chamadas RPC O OSIRIS define como os dados do recurso rede, coletor e sensor devem ser. Todos os dados devem possuir o seu estado de operação.
#####Sensor O formato do dado de sensor devem ser como descrito no exemplo a seguir, contendo informações sobre nó sensor na rede física, o estado de seus recursos consumíveis, a última captura realizada pelos seus sensores e os metadados relacionados a informações diversas. Estes metadados são um conjunto variável de dados que estão relacionados a aplicação construída com o framework.
"sensor": {
"id": 34,
"state": "updated",
"modified": 1418734950,
"network": "labtempo",
"collector": "lab",
"timestamp": 1408734195,
"values": [
{
"name": "temperature",
"type": "real",
"value": 10,
"unit": "celsius",
"symbol": "°C"
},
{
"name": "luminosity",
"type": "real",
"value": 200,
"unit": "candela",
"symbol": "cd"
}
],
"consumables": {
"battery": 67,
"fuel": 87,
"tire": 45,
"oil": 89
},
"info": {
"description": "sensor baseado no hardware xpto386",
"model": "micaz",
"sn": 1235623512,
"vendor": "memsic",
"url": "http://memsic.com/micaz/"
}
}
#####Rede O formato de dado da rede segue o padrão do exemplo a seguir. A estrutura de dados deve possuir a quantidade de sensores e coletores da rede, dados relacionados a identificação da rede e os metadados de informações para a aplicação.
"network": {
"id": "labtempo",
"state": "updated",
"modified": 1418734950,
"collectors": 3,
"sensors": 20,
"info": {
"domain": "br.uff.ic",
"type": "wireless",
"os": "TinyOS"
}
}
#####Colector O formato de dado do coletor segue o padrão do exemplo definido a seguir. A estrutura de dados deve conter o dado de identificação do coletor na rede, a quantidade de sensores, a rede qual pertence e as informações relativas a aplicação.
"collector": {
"id": "lab",
"state": "new",
"modified": 1418734950,
"network":"labtempo"
"sensors": 15,
"info": {
"description": "coletor do laboratório tempo",
"role": "coletar dados de temperatura dos servidores"
}
}
###Anunciante de alterações("Servidor" de eventos)
O SensorNet agrega a funcionalidade de notificar todas as alterações de estados dos seus itens, rede, coletor e sensor, através de eventos. Para realizar esta funcionalidade, o SensorNet deve publicar mensagens de notificação para o endereço omcp://exchange-aqui/
e assim possibilitar o acompanhamento externo para um item individualmente ou para um conjunto deles, sem necessidade de contatar o servidor SensorNet a todo o momento(chamadas RPC).
Todas as mensagens de eventos devem ser publicadas dentro do formato padronizado pelo OSIRIS, para garantir a conversão correta em qualquer outro módulo que irá consumi-las. Mais informações sobre este formato, consultar as definições gerais do OSIRIS.
####Notificações do SensorNet A tabela a seguir descreve todos os eventos publicados pelo SensorNet para o mundo exterior.
Ação | Descrição |
---|---|
Atualização | Rede, coletor e sensor |
Descoberta | Rede, coletor e sensor |
Mal função | Rede, coletor e sensor |
Desativação | Rede, coletor e sensor |
Reativação | Rede, coletor e sensor |
Consumível do sensor atingindo o limiar | Sensor |
Todas as notificações devem conter a URL para o recurso notificado.
##Implementação
Para implementar o módulo do SensorNet, foi utilizado a linguagem Java, em sua versão 7, e aplicado o padrão de projeto MVC. O MVC utiliza três camadas controles, modelos e visão. Para melhor manipulação do projeto, como, por exemplo, o controle de dependências, o Maven está sendo utilizado para gerenciá-lo por completo.
###Controle
Os controles atuam como interface de comunicação entre o exterior e o SensorNet. Utilizando um servidor OMCP, o SensorNet recebe requisições e mensagens de eventos, as quais são todas tratadas pelos controles. Após o tratamento, o controle delega o processamento para um modelo e responde a requisição corretamente de acordo com o resultado do processamento. O conjunto de controles utilizados são: controle para os recursos de rede, controle para recursos de coletor, controle para recursos de sensor e um controle para tratar eventos chegados ao módulo por inscrição prévia do servidor OMCP em algum exchange. Neste último caso, o exchange é o omcp://collector.ex/
, o qual é utilizado para capturar as mensagens publicadas pelos coletores.
###Modelo As classes de modelo contêm a regra de negócio do módulo. Para a implementação correta, foram implementado classes de modelo para o sensor, a rede e o coletor. O SensorNet possui também classes de modelos auxiliares, necessárias para a correta implementação do módulo. Pela necessidade de armazenar os dados, as classes do modelo estão vinculadas as classes persistência.
####Persistência Para a persistência de dados, foi utilizado um banco de dados Postgres, banco de dados relacional, em conjunto com o Hibernate, framework de mapeamento objeto-relacional(ORM). O Hibernate facilita o trabalho de conversão de objetos Java para a persistência no modelo relacional.
###Visão A visão, ou view, tem a função de formatar a resposta de uma requisição dentro de um padrão capaz de ser entendido pelo cliente. No caso do módulo do SensorNet, a definição da view ficou por conta das definições gerais do OSIRIS, que utiliza o padrão JSON para os dados estruturados de respostas e requisições. A ampliação do conjunto de tipo de conteúdo para formatação de dados é possível, porém esta decisão pertence ao framework, fugindo do controle do SensorNet decidir como os dados devem ser entregues ao cliente. Já os dados entregues pela view seguem a estrutura definida no Formato de dados para chamadas RPC. Esta estrutura foi implementada para classes TO, classes para objetos transacionais, seguindo o padrão Core J2EE Patterns - Transfer Object - Oracle.