Gateway domótico com sistema de “messaging”
José Miguel Alfaiate Pereira
Dissertação para obtenção do Grau de Mestre em
Mestrado Bolonha em Engenharia Informática e de
Computadores – Alameda
Júri
Presidente: Prof. José Carlos Martins Delgado
Orientador: Prof. Renato Jorge Caleira Nunes
Vogais: Prof. Alberto Manuel Ramos da Cunha
Outubro 2009
Resumo
Neste trabalho é apresentado um gateway domótico dotado de uma interface de messaging,
o que possibilita a monitorização e controlo de uma habitação remotamente a partir de comuns
clientes de instant messaging. Este conceito inovador não só expande o leque de dispositivos a
partir dos quais se pode interagir com a casa, como melhora bastante a usabilidade do sistema,
na medida em que os serviços de instant messaging estão largamente disseminados e são de
fácil utilização. Além de proporcionar este tipo de interacção de forma simples e natural, o
gateway disponibiliza algumas funcionalidades que o tornam mais dinâmico e interessante.
Uma delas é a videovigilância, crucial quando a questão é a segurança. Outras funcionalidade,
que podem ser aglomeradas e intituladas de “perfis”, influenciam o comportamento do gateway
em função do utilizador. Com efeito, cada utilizador pode definir quais as ocorrências do
sistema sobre as quais deseja ser notificado, construir uma lista de favoritos para acesso mais
rápido e criar macros que desencadeiam sequências de acções. A estrutura do gateway foi
desenvolvida de forma independente das tecnologias domóticas com que comunica, o que lhe
permite apresentar uma interface comum para todas elas. Relativamente à avaliação do
sistema, foi definido um conjunto de testes funcionais que comprovam o correcto
funcionamento do gateway. Adicionalmente, foram testados o desempenho e segurança
oferecidos pelo mesmo.
Palavras-chave
Domótica, Automção de casas, Instant Messaging, Home gateway, DomoBus, Interoperação
Abstract
This paper presents a domotic gateway enabled with a messaging interface which allows
controlling and monitoring a house remotely using common instant messaging clients. Not only
this brand-new concept expands the range of devices from which one can interact with the
house but also it greatly improves the system’s usability, given that instant messaging services
are widely known and easy to use. Besides providing this type of interaction in a simple and
natural way, the gateway offers some features which make it more dynamic and interesting.
One of those, important to security, is video surveillance. Other functions make the gateway
behave accordingly to user preferences and can be clustered and named “profiles”. Indeed
each user may define the events about which he wants to be notified, build a favorites list to
speed-up access and create macros which trigger series of actions. The gateway’s structure
was developed independent from the underlying domotic technologies, resulting in a common
interface for all of them. Concerning system evaluation, a series of functional tests were defined
and proved the gateway’s functionalities. Additionally, performance and security tests were also
performed.
Keywords
Domotics, Home Automation, DomoBus, Instant Messaging, Home gateway, Interoperation
3
Índice
Pág.
1
Introdução ........................................................................................................................... 8
1.1 Objectivos do trabalho ................................................................................................... 9
1.2 Estrutura deste documento ............................................................................................ 9
2
Soluções existentes ou relacionadas ................................................................................ 10
3
Arquitectura da solução .................................................................................................... 13
3.1 Modelo do sistema domótico ....................................................................................... 16
3.2 Interface IM .................................................................................................................. 19
4
Estrutura interna da aplicação gateway ............................................................................ 25
4.1 Camada inferior ........................................................................................................... 26
4.2 Camada intermédia ...................................................................................................... 27
4.3 Camada superior ......................................................................................................... 35
4.4 Comandos e Menus ..................................................................................................... 36
4.4.1 Comandos ............................................................................................................ 37
4.4.2 Menus ................................................................................................................... 38
4.5 Estruturas de dados do Gateway ................................................................................ 40
5
Metodologia de avaliação do trabalho .............................................................................. 42
5.1 Definição de testes e casos de uso ............................................................................. 43
5.2 Resultados ................................................................................................................... 46
6
Conclusões........................................................................................................................ 52
7
Referências ....................................................................................................................... 54
4
Lista de quadros
Pág.
Quadro 1 – Comandos disponíveis no cliente IM ................................................................... 23
Quadro 2 – Tabela de operadores .......................................................................................... 30
Quadro 3 – Resultados dos testes de leitura e de escrita ...................................................... 47
Quadro 4 – Resultados dos testes de criação ........................................................................ 48
Quadro 5 – Resultados dos testes de remoção...................................................................... 49
Quadro 6 – Tempos médios de resposta do gateway para vários serviços de IM ................. 49
Quadro 7 – Respostas do gateway aos vários tipos de contactos ......................................... 50
Quadro 8 – Modo de envio de mensagens dos vários serviços de IM ................................... 50
Quadro 9 – Tempos medidos na execução dos vários casos de uso .................................... 51
5
Lista de figuras
Pág.
Figura 1 – Vista geral da arquitectura de todo o sistema ....................................................... 13
Figura 2 – Enquadramento do gateway no sistema domótico ................................................ 14
Figura 3 – Interfaces de comunicação do gateway ................................................................ 15
Figura 4 – Diagrama de classes UML para o modelo dos dispositivos domóticos. ............... 16
Figura 5 – Diagrama de classes UML dos tipos de valores para uma propriedade ............... 17
Figura 6 – Diagrama de classes UML para o modelo da estrutura da casa........................... 18
Figura 7 – Exemplo de interacção através de comandos ....................................................... 20
Figura 8 – Exemplo de interacção através de menus............................................................. 21
Figura 9 – Arquitectura geral do gateway domótico ............................................................... 25
Figura 10 – Estrutura da cache de estados de dispositivos ................................................... 27
Figura 11 – Exemplo de lista de favoritos ............................................................................... 29
Figura 12 – Estrutura dos testes para notificações ................................................................. 30
Figura 13 – Exemplo de uma notificação ................................................................................ 31
Figura 14 – Exemplo de um alarme e de uma notificação...................................................... 31
Figura 15 – Interacção “Ver filme” sem recurso à funcionalidade de macros ........................ 32
Figura 16 – Interacção “Ver filme” com recurso à utilização de uma macro .......................... 33
Figura 17 – Janela de selecção de fonte para imagem .......................................................... 34
Figura 18 – Exemplo de interacção de pedido de imagem de uma câmara .......................... 34
Figura 19 – Exemplo de verificação de um contacto .............................................................. 36
Figura 20 – Diagrama de classes UML do padrão de desenho Factory method ................... 37
Figura 21 – Diagrama de classes UML do padrão de desenho Command ............................ 38
Figura 22 – Diagrama de sequência UML de uma possível execução do menu ................... 40
Figura 23 – Estrutura do ambiente de testes utilizado............................................................ 42
Figura 24 – Diagrama UML geral de casos de uso do gateway ............................................. 45
6
Lista de abreviaturas
IM ........................................................................................................................ Instant messaging
IP ........................................................................................................................... Internet Protocol
PC ..................................................................................................................... Personal Computer
PDA ......................................................................................................... Personal digital assistant
RO .................................................................................................................................. Read Only
RW ............................................................................................................................... Read / Write
UDP ...........................................................................................................User Datagram Protocol
UML ..................................................................................................... Unified Modeling Language
WO ..................................................................................................................................Write Only
XML .................................................................................................. Extensible Markup Language
XMPP ......................................................................Extensible Messaging and Presence Protocol
7
1 Introdução
A domótica é uma área em clara expansão e com um grande potencial. Apesar disso, não se
encontra ainda integrada nas nossas casas, em geral, não fazendo parte do dia-a-dia de cada
um de nós. Isto deve-se, provavelmente, ao facto de haver várias tecnologias disponíveis,
muitas delas proprietárias, não sendo nenhuma dominante em relação a todas as outras. A
solução passa claramente por “uni-las”, oferecendo ao utilizador uma interface única,
independente da tecnologia em uso na casa. Deve ser também suficientemente dinâmica não
só para se adaptar a novas tecnologias sem que o utilizador sinta uma mudança abrupta mas
também para lidar com várias em simultâneo (numa casa devem poder coexistir várias
tecnologias, quer por a instalação ter sido faseada, quer por se ter chegado à conclusão que
uma só tecnologia não preenche totalmente os requisitos estabelecidos). Por outro lado, a
solução deve também ter em conta o utilizador alvo. Neste âmbito, inicialmente poder-se-á
considerar apenas utilizadores mais experientes no que toca à informática e electrónica, pois
serão estes os que terão maior propensão à instalação de um sistema deste tipo nas suas
casas. Contudo, olhando um pouco mais à frente no tempo, podemos ver a domótica como
uma tecnologia generalizada, presente em casas de pessoas de vários níveis sociais e com
diferentes graus / especializações de formação. Assim, torna-se pertinente desenvolver uma
interface que facilite ao máximo a interacção com a casa, utilizável por todos e, muito
importante, que não obrigue necessariamente à interacção com um computador. Uma forma de
interacção a que praticamente toda a gente está habituada e que é bastante difundida é o
conjunto dos vários serviços de instant messaging (daqui em diante, IM). Este tipo de serviços
não só é fácil de utilizar, sendo conhecido por todos, como chega à grande maioria de
dispositivos, móveis ou não – PC, PDA, telemóvel. Neste contexto, o protocolo XMPP [7] e a
tecnologia Jabber [6] têm um papel preponderante, possibilitando não só a criação de novos
serviços de IM mas também a fácil interligação entre estes e os vários já existentes.
O Extensible Messaging and Presence Protocol (XMPP) é um protocolo aberto inspirado no
XML para sistemas de IM. Dado que é um standard aberto, é possível a qualquer um utilizá-lo
para criar o seu próprio serviço de IM, correndo o seu próprio servidor onde todos os clientes
se ligam. Este protocolo é a base a partir da qual a tecnologia Jabber foi desenvolvida. Esta
tecnologia foi o grande motor para a criação de muitos clientes de IM de código aberto e com
suporte para vários protocolos, que possibilitam a criação de aplicações que interactuam com
os sistemas de IM, abrindo espaço para um novo modo de interacção através da Internet.
O trabalho aqui apresentado preenche os requisitos anteriormente descritos – interligação
entre tecnologias domóticas e facilitação na interface. Por um lado, suporta a utilização de
8
várias tecnologias, de forma indiferenciada. Por outro, o facto de ter suporte para messaging
permite controlar e monitorizar habitações de forma simples, utilizando uma vasta gama de
dispositivos que não apenas um PC (por exemplo, um telemóvel) e a partir de qualquer lugar,
local ou remoto.
1.1 Objectivos do trabalho
Este trabalho tem por objectivo o desenvolvimento de um gateway domótico com um sistema
de messaging, ou seja, um conjunto de software capaz de controlar e monitorizar
equipamentos domóticos (de várias tecnologias) através da utilização não só do próprio
software, mas também de sistemas de messaging (por exemplo, MSN, Google talk, ICQ,
Yahoo, AIM).
O software desenvolvido deverá ter as seguintes capacidades:
• Interacção com vários tipos de tecnologias domóticas (DomoBus [3] [16], X10 [12], KNX
[13], LonWorks [14], ZigBee [15] e outras), utilizando para tal a infra-estrutura de
comunicação DomoBus – existem apenas as mensagens SET, GET e Notify, que seguem
o modelo DomoBus para dispositivos (cada um tem um conjunto de propriedades cujo
valor pode ser lido ou escrito);
• Comportamento ajustável por utilizador, sendo que cada um define o seu perfil com os
aspectos mais relevantes para si;
• Videovigilância;
• Monitorização e controlo através de sistemas de IM, permitindo ao utilizador interagir com
o sistema sob a forma de digitação de comandos ou de navegação em menus.
1.2 Estrutura deste documento
No capítulo que se segue – capítulo 2 – é feita uma análise crítica e comparativa sobre
algumas soluções relacionadas com este trabalho e apresentam-se as principais tecnologias a
ele associadas. A arquitectura geral, estruturada em 3 camadas, é descrita no capítulo 3. De
seguida, os componentes de cada uma são apresentados com todo o detalhe de desenho e
também algum detalhe de implementação – capítulo 4. O gateway suporta dois métodos de
interacção com o utilizador, sendo ambos descritos de forma exaustiva e exemplificados. No
capítulo 5 é descrito o modo como o sistema foi testado tirando partido de casos de uso e de
testes funcionais, sendo apresentados os respectivos resultados. No último capítulo tecem-se
as conclusões finais.
9
2 Soluções existentes ou relacionadas
Existe algum trabalho desenvolvido nesta área, maioritariamente académico ou de
investigação. De facto, não existe um gateway domótico que cumpra com os objectivos
anteriormente enunciados e com utilização prática.
Tecnologias mais simples, como o X10, baseiam-se na simplicidade extrema de instalação e
configuração, sendo necessário apenas ligar o novo dispositivo à corrente eléctrica da casa
(numa tomada comum) e escolher qual o seu número de identificação no próprio dispositivo.
Por outro lado, tecnologias mais complexas como o EIB pressupõem uma instalação mais
complexa, com passagem de fios pela casa, e uma configuração mais técnica, sendo
necessária a intervenção de pessoal especializado. Apesar de existirem programas
desenvolvidos especificamente para algumas tecnologias, estes não cumprem a função de
gateway, nem os objectivos enunciados anteriormente: não só por serem específicos a uma
única tecnologia mas também por serem, em geral, meros “portais” para as funcionalidades já
disponibilizadas pelos próprios dispositivos, não adicionando qualquer dinamismo à casa. Por
outro lado, nenhuma delas suporta o sistema de messaging, requisito fundamental para este
trabalho.
Passando para o panorama académico, há uma série de artigos que têm sido publicados
nos últimos anos, os quais vão mais de encontro aos presentes objectivos. Exemplos são o
Domotic House Gateway [4] e o DOG: an Ontology-Powered OSGi Domotic Gateway [5].
Apesar de não contemplarem a característica do messaging, ambos são bons exemplos de
gateways domóticos que acrescentam valor ao sistema instalado na casa. De facto, esta
característica é inovadora e apesar de conceptualmente simples, pode fazer uma grande
diferença no que toca à usabilidade.
Avançando mais na análise destes dois gateways, torna-se relevante tecer algumas
considerações. Quanto ao Domotic House Gateway, revela-se um pouco limitado no que toca a
tecnologias de domótica. Apesar de suportar integração de device drivers para controlo de
qualquer dispositivo domótico, este processo é feito dispositivo a dispositivo. Isto implica o
desenvolvimento de um número grande de device drivers: para uma casa em que existam
controladores de lâmpadas e de estores tanto de X10 como EIB, por exemplo, será necessário
desenvolver 4 diferentes. Grande parte do código presente em cada um será, possivelmente,
repetido ou muito semelhante ao dos outros. Com efeito, foram desenvolvidos apenas 3 device
drivers para testar o sistema: BTicino MyHome System, porta paralela com 8 LEDs e servidor
de música (MServ). Os dois últimos, apesar de serem interessantes como características extra,
não têm muita relevância para demonstrar as capacidades do gateway; a porta paralela não
representa uma situação real nem actual e o servidor de música é uma simples aplicação que
aceita ligações num porto TCP. Por sua vez, o primeiro controla todo um conjunto de
10
dispositivos de uma dada tecnologia (BTicino), permitindo testar uma situação real. Este device
driver acaba por não ir de encontro à metodologia de desenvolvimento anteriormente
enunciada, já que controla toda uma gama de dispositivos, apesar de ter sido ainda necessário
desenvolver pequenos módulos independentes. Há que notar, contudo, que tal foi possível
devido ao facto de a tecnologia testada disponibilizar um control sub-system, que estabelece
um ponto único de comunicação com todos os dispositivos. Isto não pode, no entanto, ser
assumido para qualquer tecnologia. Um módulo presente neste gateway, não contemplado no
presente trabalho, é o rule miner. Este encarrega-se de inferir novas regras com base na
análise do registo de eventos passados. De qualquer forma, tal como é dito na secção de
resultados [4], há que ter cuidado com as regras que se permite ao sistema inferir. Por
exemplo, o sistema pode inferir que um forno deve ser ligado quando a sua porta é aberta e
novamente fechada. Apesar de útil, esta regra inferida pode também revelar-se perigosa, pois
pode dar-se o caso de uma criança colocar um objecto impróprio dentro do forno, sendo que
este se liga automaticamente, podendo provocar uma explosão. Aliando este risco ao facto de
não haver perfis de utilizadores no gateway, este módulo torna-se pouco apetecível, sendo a
alternativa do presente trabalho – perfis de utilizadores definidos pelos próprios – bastante
completa e segura. Finalmente, apesar de os resultados dos testes terem sido satisfatórios,
eles não representam interacção entre vários tipos de tecnologias domóticas, o que lhes retira
alguma importância.
O outro gateway, DOG: an Ontology-Powered OSGi Domotic Gateway, resolve o problema
das várias tecnologias, sendo necessário apenas um device driver por cada uma. Não
contempla, contudo, nenhum módulo do género do rule miner. De facto, este gateway, apesar
de muito bem estruturado em vários rings, simplifica um pouco demais. Não contempla
qualquer sistema de regras ou personalização por utilizador ou qualquer outro sistema
dinamizador. Apesar de possuir um modelo de abstracção de alto nível que lhe dá a
capacidade de criar interacções entre dispositivos de várias tecnologias, tal é apenas referido
vagamente, sem detalhes, dando a ideia de que existem capacidades por explorar ou
desenvolver. Não foram documentados quaisquer testes ao gateway, pelo que não existem
resultados para mostrar o seu funcionamento.
É também pertinente mencionar neste capítulo o trabalho referido em [3]: DomoBus. Apesar
de não se tratar de um gateway tal como os dois trabalhos anteriores, está bastante ligado ao
trabalho apresentado neste documento. De facto, o DomoBus, tal como o nome sugere, é mais
uma tecnologia, tal como as anteriormente referidas (X10, KNX e outras). O que o torna
interessante é toda a lógica em que está envolvido e a tentativa de generalização na
representação e comunicação com dispositivos, definindo-os como sendo uma série de
propriedades que podem ser lidas e escritas utilizando apenas mensagens GET e SET para
obter ou escrever valores nas ditas propriedades. A sua abordagem muito simples mas muito
flexível não é específica a nenhuma tecnologia já existente, sendo contudo facilmente
11
adaptável a qualquer uma. De facto, as mensagens definidas pelo DomoBus são intuitivamente
traduzidas para qualquer tecnologia, uma vez que representam fielmente o funcionamento de
um sistema domótico da forma mais simples possível. Por outro lado, o facto de todas as
especificações e representações serem explicitadas em XML leva a que a alteração ou adição
de novos componentes seja trivial e obrigue apenas a alterações de código pontuais. Posto
isto, o DomoBus, apesar de não resolver o problema da não existência de dominância de uma
tecnologia domótica que se instale e se torne num standard, é um passo no caminho a seguir
para interligar as várias tecnologias, estabelecendo um excelente modelo de representação e
de comunicação domótica a ser utilizado por softwares domóticos como o gateway
apresentado neste trabalho. Ainda no âmbito do DomoBus, é de referir o Módulo de
comunicações DomoBus – COMM-API [9] [10] – que implementa o respectivo modelo de
comunicação e permite desenvolver programas que funcionem de acordo com este modelo de
forma simples e despreocupada.
Concluindo esta secção, é de notar que o suporte para sistemas de messaging é algo
inovador nesta área e também que, apesar de existirem alguns trabalhos com objectivos muito
semelhantes, têm algumas falhas ou limitações que este trabalho resolve, tais como a
capacidade para lidar com várias tecnologias da forma mais simples e abstraída ou para
acrescentar dinamismo ao sistema domótico através da definição de perfis de utilizador.
12
3 Arquitectura da solução
Internet
Home gateway
Gateway domótico
Sistema domótico
Figura 1 – Vista geral da arquitectura de todo o sistema
Tomando o ponto de vista do utilizador e olhando para todo o sistema, tendo em conta a sua
funcionalidade, a arquitectura geral pode ser representada pela imagem da Figura 1. A ideia
básica consiste na utilização da internet para estabelecer a ligação entre comuns clientes de IM
e o gateway domótico, sendo que este se encontra também ligado aos dispositivos domóticos
instalados na casa. Este gateway desempenha, portanto, o papel de intermediário entre os
utilizadores e a casa, permitindo que notificações de dispositivos fluam destes até aos
13
utilizadores e que comandos fluam no sentido contrário. O gateway encontra-se instalado no
home gateway, um simples PC que pode também disponibilizar outros serviços com interesse
numa casa (por exemplo: partilha de ficheiros / multimédia). Como se pode depreender do
esquema, podem ser utilizados vários tipos não só de dispositivos – desktop, laptop, PDA mas também de sistemas de IM – MSN, Google Talk, ICQ.
Logger
Directório
Verificação
de cenários
Gateway
domótico
Aplicação DomoBus
Módulo COMMM-API
Comunicação
Pedido de endereço de aplicação
Figura 2 – Enquadramento do gateway no sistema domótico
Em termos de enquadramento, o gateway domótico situa-se na posição evidenciada na
Figura 2. Como já foi referido, o gateway é um mero intermediário, sendo que existem outras
aplicações DomoBus a correr na mesma ou noutra máquina com o intuito de gerir todo o
sistema. O directório DomoBus é uma aplicação crucial para que se possa estabelecer
comunicação entre os vários elementos. A sua utilidade será mostrada mais à frente, na
secção 4.1.
Entrando um pouco mais em detalhe, torna-se óbvia a necessidade de especificação das
duas interfaces através das quais o gateway comunica com cada tipo de interveniente do
sistema. A solução serve-se de protocolos já estabelecidos e de fácil utilização, como está
evidenciado na Figura 3. Por um lado, para estabelecer a ligação e comunicação com serviços
de IM, é utilizado o protocolo XMPP. Por outro, para a comunicação com o sistema domótico,
tira-se proveito do módulo de comunicação COMM-API. Este último simplifica e generaliza toda
a comunicação, disponibilizando, essencialmente, as funções send e receive. Toda a
responsabilidade não só de encaminhar as mensagens para o gateway correcto mas também
de oferecer alguma garantia na sua entrega fica depositada neste módulo, tornando a
programação do gateway muito mais limpa e lógica. Em relação à comunicação com os
14
serviços de IM, na prática não será usado exclusivamente o protocolo XMPP, mas sim todo o
leque de protocolos disponibilizados pelo cliente de fonte aberta utilizado. Para intermediar a
comunicação entre o gateway e os dispositivos propriamente ditos, existe um gateway por
tecnologia. Estes gateways não são abrangidos pelo âmbito do presente trabalho, podendo ser
aproveitados de trabalho já desenvolvido (integrando o módulo COMM-API) ou desenvolvidos
de raiz. É de notar que o facto de utilizar esta hierarquização de gateways torna o sistema mais
dinâmico, sendo possível ter gateways de tecnologias a correr em máquinas que não o home
gateway1.
XMPP
Gateway
domótico
COMM-API
COMM-API
COMM-API
Gateway
X10
Gateway
DomoBus
Figura 3 – Interfaces de comunicação do gateway
1
O módulo COMM-API estabelece as comunicações enviando datagramas UDP, pelo que é possível
utilizá-lo em qualquer rede IP.
15
Será necessário especificar um modelo de comunicação para cada uma das interfaces
enunciadas, o que será feito nas duas secções seguintes: 3.1 e 3.2.
3.1 Modelo do sistema domótico
Para interpretar a estrutura do sistema domótico e entender as mensagens dele proveniente,
o gateway deve acordar um modelo de representação. Esse modelo é adoptado do documento
referido em [1] e é descrito de seguida.
Figura 4 – Diagrama de classes UML para o modelo dos dispositivos domóticos.
Na Figura 4 é apresentado o diagrama de classes UML [11] que expressa como são
representados os dispositivos e suas propriedades. Como se pode perceber, esta
representação, apesar de simples, é bastante eficaz e completa. Os dispositivos estão divididos
em tipos, que são representados pela classe Tipo de dispositivo. Cada Tipo de dispositivo tem
uma designação – o Nome – que pode assumir valores como “lâmpada”, “tomada”, “motor de
estore”, “televisão” ou “motor de portão”. Associadas a cada Tipo de dispositivo, existem um ou
mais tipos de propriedades, representadas pela classe Tipo de propriedade. Os tipos de
propriedades não são específicos a um só tipo de dispositivo, podendo ser partilhados por
vários. Tipos de propriedades como intensidade-luminosa e temperatura serão muito
provavelmente utilizadas apenas por um tipo de dispositivo, respectivamente, lâmpada e
sensor-temperatura. Por outro lado, estado-ligado-desligado é um grande candidato a partilha.
Cada Tipo de propriedade, além do Nome, dispõe também de um Modo de acesso e um Tipo
de Valor. O modo de acesso especifica se o tipo de propriedade em causa pode ser apenas
lido, escrito ou ambos. Utilizando os exemplos já mencionados, faria sentido atribuir leitura-
16
escrita a estado-ligado-desligado e só-leitura a temperatura. O Tipo de valor especifica o tipo
de dados que o tipo de propriedade representa.
Para mostrar quais as possibilidades para tipos de valores, é apresentado o diagrama de
classes da Figura 5. O valor de uma propriedade pode ser do tipo Escalar, Enumerado ou
Vector. Um valor escalar pode variar entre ValorMin e ValorMax, tem as Unidades
representadas no atributo com o mesmo nome e é convertido pela Expressão2 contida na
Conversão a ele associada. Se o tipo de um valor for Enumerado, este deve ter pelo menos
dois elementos Enumerado associados a ele, cada um com a respectiva Designação e Valor.
Finalmente, valores do tipo Vector especificam apenas a Dimensão do mesmo.
Figura 5 – Diagrama de classes UML dos tipos de valores para uma propriedade
A propriedade intensidade-luminosa, por exemplo, terá um valor do tipo Escalar (inteiro),
tendo como ValorMin e ValorMax, respectivamente, 0 e 100. As Unidades desta propriedade
serão, como é óbvio, percentagem. Finalmente, dado que os valores são guardados tal como
devem ser interpretados pelo gateway, a Expressão de Conversão será apenas x. Um outro
exemplo para propriedades com valores do tipo Escalar é a temperatura. Assumindo que a
temperatura é medida com uma casa decimal de precisão e representada por um inteiro, os
seus ValorMin e ValorMax serão, por exemplo, -250 e 650, sendo as Unidades graus Celsius.
2
A Expressão de Conversão é escrita em função do valor guardado no modelo – x.
17
Consequentemente, a Expressão de Conversão será 0,1x. Caso fosse necessário converter
esta mesma representação (entre -250 e 650) para graus Fahrenheit, bastaria utilizar a
Expressão 0,1x * 9⁄5 + 32. Por outro lado, a propriedade estado-ligado-desligado tem um valor
do tipo Enumerado, tendo associados dois elementos Enumerado: um com Valor 0 e
Designação “Desligado” e outro com Valor 1 e Designação “Ligado”. O tipo de valor Vector
pode ser útil para propriedades que representem uma string (cadeia de caracteres) ou algum
tipo de informação estruturada em vários elementos.
Vendo as classes Tipo de dispositivo e Tipo de propriedade como a definição de
dispositivos, podemos ver as duas seguintes como instâncias dos mesmos. Por conseguinte, a
classe Dispositivo representa um dispositivo real no sistema, com os respectivos Nome e
Endereço3. Associadas a cada Dispositivo, existem uma ou mais propriedades – classe
Propriedade - de um certo tipo (ou seja, cada uma está associada a um e um só Tipo de
propriedade).
Cada propriedade contém apenas o Valor, com os dados por ela representados. Finalmente,
a classe Serviço visa agrupar os dispositivos com finalidades semelhantes. Ar-condicionado e
sensor-temperatura poderão pertencer ao serviço Climatização enquanto câmara-vigilância e
alarme serão incluídos no serviço Segurança. Note-se que um dispositivo pode pertencer a
vários serviços, como por exemplo um sensor de presença, que se insere tanto no serviço de
segurança, para detectar intrusos, como no serviço de iluminação, para activar a iluminação em
divisões ocupadas. Utilizar este tipo de associação pode revelar-se bastante útil, pois permite
ao utilizador aceder a todos os dispositivos de um dado serviço como, por exemplo, verificar o
estado de todos os dispositivos de segurança quando se está fora de casa durante algum
tempo.
Figura 6 – Diagrama de classes UML para o modelo da estrutura da casa
Para expressar a distribuição dos dispositivos pela casa, é utilizado o modelo representado
pelo diagrama de classes da Figura 6. Este modelo segue fielmente a estrutura de uma casa,
que está dividida em um ou mais pisos, estando cada um destes dividido em uma ou mais
divisões. Finalmente, cada uma destas divisões contém um número arbitrário de dispositivos
domóticos. Apesar de estarem fortemente ligadas à estrutura da casa, as classes Piso e
Divisão podem representar espaços lógicos diferentes, podendo os pisos dividir a casa em
3
O endereço de cada dispositivo deve ser constituído por duas partes: a primeira com a identificação da
tecnologia e a segunda com a identificação do dispositivo dentro dessa tecnologia.
18
áreas sociais e privativas - salas, entrada, casa de banho social / quartos, casas de banho
privativas - e as divisões separar uma divisão como uma sala em área de jantar e uma outra de
lazer.
3.2 Interface IM
No que toca à interface com o utilizador através de IM, são disponibilizados dois métodos de
interacção: comandos e menus. O 1º consiste, basicamente, numa linha de comandos à
distância. O 2º consiste em, em cada momento, listar todas as opções possíveis no contexto
em questão, numerando-as. Basta, portanto, ao utilizador escolher a opção desejada,
escrevendo o número correspondente. Na prática, os menus são uma forma estruturada e mais
visual de aceder às funcionalidades dos comandos. Tendo em conta que o utilizador poderá a
interagir com o gateway a partir de um dispositivo que tanto pode ser um comum PC como um
telemóvel / PDA, é dada ao utilizador a liberdade para escolher quantas opções de menu lhe
são mostradas de cada vez. Se o menu tiver mais opções do que a quantidade que o utilizador
escolheu, a última servirá de ligação para as seguintes e assim sucessivamente. Um utilizador
menos experiente poderá sempre navegar pelos menus para aceder a todas as
funcionalidades, enquanto um utilizador mais experiente poderá tirar partido da utilização de
comandos, pois já conhece bem a sintaxe de cada um, poupando o tempo de navegação nos
menus. Na Figura 7 e na Figura 8 são demonstradas, respectivamente, a utilização dos
comandos e dos menus.
19
Figura 7 – Exemplo de interacção através de comandos
20
Figura 8 – Exemplo de interacção através de menus
21
Através do cliente IM deve ser possível não só consultar e alterar (através de acções simples
ou macros) o estado de dispositivos mas também criar ou eliminar macros e editar o perfil
pessoal. Adicionalmente, deve ser disponibilizada também ajuda geral e referente à sintaxe de
cada comando.
No Quadro 1 são apresentados os comandos disponíveis, juntamente com a sua descrição e
sintaxe. Os elementos entre os sinais de maior e menor - < > - são parâmetros do comando em
causa e os elementos entre parêntesis rectos – [ ] - são opcionais. Com este conjunto de
comandos, ficam asseguradas todas as funcionalidades as quais compete ao gateway
disponibilizar.
Alguns parâmetros de alguns comandos necessitam de uma especificação adicional, o que
será feito de seguida.
O comando list aceita para o argumento tipo os seguintes valores:
• macro – para listar os nomes de todas as macros
• device – para listar os nomes de todos os dispositivos
• F:<piso> - para listar os nomes de todos os dispositivos pertencentes ao piso indicado
em <piso>
• D:<divisão> - para listar os nomes de todos os dispositivos pertencentes à divisão
indicada em <divisão>
• S:<serviço> - para listar os nomes de todos os dispositivos pertencentes ao serviço
indicado em <serviço>
Para o argumento especificação, os valores aceites dependem do valor passado em tipo, de
acordo com o que se segue: quando é passado macro para o argumento tipo, a especificação
é o nome de uma macro, sendo o resultado do comando a listagem de todas as acções que
constituem a macro indicada; caso contrário, a especificação é um tipo de dispositivo, refinando
a listagem de nomes de dispositivos aos do tipo indicado.
O parâmetro acesso do comando createmacro visa definir o tipo de acesso que a macro a
ser criada terá e aceita apenas dois valores: P (private – privado) ou S (shared – partilhado).
Uma macro privada será visível apenas para o utilizador que a criou enquanto uma macro
partilhada será visível para todos os utilizadores. Cada uma das acções (<acção 1> … <acção
n>) representa uma acção da macro, sendo da forma:
<nome> <comando set>
Em <nome> deve ser passado o nome da acção enquanto em <comando set> é passado
um normal comando set.
22
Comando
Sintaxe
Descrição
help / ?
help|? [<comando>]
menu
list
menu
list <tipo>
[<especificação>]
get
get <dispositivo>
[<propriedade>]
set
set <dispositivo>
<propriedade> <valor>
run
createmacro
run <macro>
createmacro <nome>
<acesso> <acção 1> …
<acção n>
alarm <entidade>
[<propriedade>
[<operador> <valor>]]
notify <entidade>
[<propriedade>
[<operador> <valor>]]
addfavourite <entidade>
Fornece ajuda geral ou da sintaxe do
comando indicado em <comando>, caso
seja fornecido
Iniciar / mostrar menu
Lista todas as instâncias do tipo indicado
em <tipo>, restringindo à especificação
indicada em <especificação>, caso seja
fornecida
Lista os valores de todas as propriedades
do dispositivo indicado em <dispositivo> ou
apenas o valor da propriedade indicada em
<propriedade>, caso seja fornecida
Escreve na propriedade indicada em
<propriedade> do dispositivo indicado em
<dispositivo> o valor indicado em <valor>
Corre a macro indicada em < macro>
Cria uma nova macro com o nome
indicado em <nome> e acções indicadas
em <acção 1> … <acção n>
Regista o interesse no alarme especificado
pelos parâmetros indicados
alarm
notify
addfavourite
removemacro
removealarm
removenotification
removefavourite
camera
removemacro <macro>
removealarm <entidade>
[<propriedade>
[<operador> <valor>]]
removenotification
<entidade> [<propriedade>
[<operador> <valor>]]
removefavourite
<entidade>
camera <câmara>
Regista o interesse na notificação
especificada pelos parâmetros indicados
Adiciona a entidade indicada em
<entidade> aos favoritos
Elimina a macro indicada em <macro>
Elimina o interesse no alarme especificado
pelos parâmetros indicados
Elimina o interesse na notificação
especificada pelos parâmetros indicados
Elimina dos favoritos a entidade indicada
em <entidade>
Pede uma imagem da câmara indicada em
<câmara>
Quadro 1 – Comandos disponíveis no cliente IM
Os comandos alarm e notify criam interesses, respectivamente, em alarmes e notificações e
têm a mesma sintaxe. Em ambos, o parâmetro entidade se refere à entidade-alvo do alarme ou
notificação e pode assumir os seguintes valores:
• <dispositivo> - o alvo é o dispositivo indicado em <dispositivo>
• T:<tipo de dispositivo> - os alvos são todos os dispositivos do tipo indicado em <tipo de
dispositivo>
• P:<piso> - os alvos são todos os dispositivos pertencentes ao piso indicado em <piso>
23
• D:<divisão> - os alvos são todos os dispositivos pertencentes à divisão indicada em
<divisão>
• S:<serviço> - os alvos são todos os dispositivos pertencentes ao serviço indicado em
<serviço>
Se for indicado apenas o parâmetro entidade, o alarme ou notificação será accionado
sempre que um qualquer novo valor chegar para qualquer uma das propriedades de qualquer
um dos alvos. Para um comportamento mais específico, poderá ser passado, para o caso de a
entidade ser um dispositivo ou um tipo de dispositivo, o parâmetro propriedade e,
opcionalmente, os parâmetros operador e valor. No caso de ser indicada uma propriedade, o
alarme ou notificação só será accionado para novos valores dessa propriedade e, caso o
operador e valor sejam indicados, se passar o teste:
<novo valor> operador valor
O comando addfavourite aceita para o seu parâmetro entidade os seguintes valores:
• <dispositivo> - o dispositivo indicado em <dispositivo> é adicionado à lista de favoritos
• D:<divisão> - a divisão indicada em <divisão> é adicionada à lista de favoritos
• M:<macro> - a macro indicada em <macro> é adicionada à lista de favoritos
Os comandos removealarm, removenotification e removefavourite funcionam de forma
análoga, respectivamente, aos comandos registeralarm, registernotification e addfavourite, mas
eliminando as respectivas entidades (caso existam) em vez de as criar.
Finda esta aproximação mais abrangente ao sistema, é detalhada a estrutura interna da
aplicação gateway no capítulo seguinte – 4.
24
4 Estrutura interna da aplicação gateway
O gateway domótico é constituído por 3 camadas, cada uma responsável por tarefas
diferentes, tal como se pode ver na Figura 9.
Gateway domótico
Cliente Jabber alterado
Reencaminhamento de mensagens
Contactos registados
Validação e interpretação de comandos
Modelo do
sistema domótico
Lógica / execução de comandos
Macros
Perfis de
utilizadores
Videovigilância
Interacção com dispositivos domóticos
Cache de estados de dispositivos
COMM-API
Camada
Componente
Sub-componente
Recurso externo
Figura 9 – Arquitectura geral do gateway domótico
A camada inferior trata de toda a comunicação com os dispositivos domóticos dos vários
tipos. Para efectivamente comunicar com um dispositivo, esta camada utiliza o módulo COMMAPI, que permite que a comunicação seja independente do tipo de tecnologia a que cada
dispositivo pertence.
A camada intermédia é responsável pela lógica da aplicação, interpretando os comandos
vindos da camada superior e encaminhando-os para a inferior mas também fazendo chegar as
notificações da camada inferior à superior. É esta a camada responsável por manter não só as
preferências dos utilizadores sob a forma de perfis, mas também a representação da casa,
25
organizada por pisos, divisões e dispositivos. O modelo para a representação do sistema
domótico e seu comportamento segue, como já foi dito, o do documento referido em [1].
Finalmente, é também na camada intermédia que são oferecidas as funcionalidades de
macros, que permitem a execução sequencial de várias acções, e de videovigilância.
Por último, a camada de topo é a que suporta a interacção com sistemas de IM, consistindo
num cliente Jabber alterado. As mensagens recebidas, em vez de apresentadas na interface
gráfica, devem ser passadas à camada de baixo para validação e interpretação do comando.
Além disso, as mensagens a enviar devem ser recebidas uma vez mais, não pela interface
gráfica, mas sim pela camada de baixo.
De seguida são detalhados os vários componentes de cada uma das camadas nas secções
4.1, 4.2 e 4.3.
4.1 Camada inferior
O módulo COMM-API, como já foi referido, abstrai a comunicação com o sistema domótico,
encarregando-se de encaminhar as mensagens para os dispositivos correctamente.
Representa, portanto, o componente do gateway que está mais próximo conceptualmente do
sistema domótico. Para traduzir o endereço DomoBus do dispositivo num endereço de rede
(endereço IP + porto) utilizável para comunicação, contacta o serviço de directório DomoBus.
Os endereços DomoBus são estruturados, tendo uma primeira parte identificadora da
tecnologia e uma segunda identificadora do dispositivo dentro da tecnologia. Na realidade, a
primeira parte do endereço representa o endereço de uma aplicação DomoBus, que pode ser,
ou não, um gateway de uma dada tecnologia. Um exemplo de uma aplicação DomoBus que
não é um gateway de tecnologia é uma aplicação que regista o histórico das mensagens
trocadas no sistema (logger). O directório DomoBus extrai a parte do endereço identificadora
da aplicação e utiliza-a para indexar a sua tabela interna de associações entre endereços
DomoBus e endereços de rede. O resultado é devolvido ao módulo COMM-API requerente,
que estabelece a comunicação directamente com a aplicação destino.
O componente principal, interacção com dispositivos domóticos, processa toda a
comunicação de alto nível (indiferenciada por tecnologia) com os dispositivos domóticos
instalados na casa, servindo-se para tal do módulo COMM-API. Além disso, é responsável por
garantir o funcionamento do sistema de notificações. Este sistema informa os utilizadores da
alteração de estados de dispositivos com interesse registado. Os interesses podem ser
registados em duas variantes: notificação ou alarme. Apesar de apresentarem comportamentos
diferentes, neste componente são tratados de igual modo. Assume-se que os gateways de
tecnologias têm a capacidade de reportar alterações no estado dos dispositivos sem terem que
26
ser necessariamente interrogados. Neste âmbito, torna-se útil a cache de estados de
dispositivos, já que é garantido que o estado de um dispositivo permanece igual até à
chegada de nova mensagem de notificação. Assim, pode-se usar esta cache aquando de uma
consulta de estado por parte da camada superior, diminuindo o tráfego entre dispositivos
domóticos. Quando uma mensagem de notificação chega, o estado do dispositivo em causa é
actualizado na cache e, pedindo para tal à camada superior, são notificados os utilizadores
cujos interesses em notificações passam a estar activos. Mais à frente será detalhado o
funcionamento do sistema de notificações. A estrutura básica da cache pode ser consultada na
Figura 10 e conta com uma entrada por cada propriedade de cada dispositivo. Contém
identificadores para o dispositivo e sua propriedade, o valor associado e também uma lista de
estruturas contendo informação sobre os interesses em notificações de utilizadores referentes
à propriedade em causa.
Dispositivo
Propriedade
Valor
Luz da sala
estado-ligado-desligado
1
Luz da sala
intensidade
75
…
…
…
Testes
…
Teste
1
Teste
n
Teste
1
Teste
n
Figura 10 – Estrutura da cache de estados de dispositivos
Esta é uma representação conceptual da cache, sendo que, na realidade, será criado em
run-time um objecto por cada dispositivo domótico ao qual estarão associadas todas as suas
propriedades, com os respectivos valores armazenados. As estruturas de dados do gateway
serão descritas mais à frente, na secção 4.5.
4.2 Camada intermédia
Esta é a camada que atribui ao gateway o funcionamento que dele esperamos. Estabelece a
ligação entre a camada superior – que comunica com os utilizadores – e a inferior – que
comunica com o sistema domótico.
A validação e interpretação de comandos toma lugar sempre que os mesmos chegam de
qualquer uma das interfaces disponíveis. Apesar de apenas ser planeada a utilização de
clientes de messaging como interface para o gateway, é possível desenvolver uma linha de
comandos ou mesmo uma interface gráfica. Todas as possíveis interfaces devem, contudo,
estar sujeitas ao mesmo módulo de validação. Assim, por exemplo, a validação sintáctica é
processada para comandos provenientes de uma linha de comandos ou de um cliente de
messaging. Por sua vez, a validação semântica é processada para comandos provenientes de
27
qualquer fonte, porque, mesmo que o comando tenha uma sintaxe correcta, pode estar
semanticamente errado, tentando, por exemplo, atribuir um valor inválido a uma propriedade de
um dispositivo. Na realidade, a interface IM suporta um outro modo de interacção – menus – já
referido e descrito mais à frente, que também está sujeito apenas à validação semântica. Após
a validação terminar com sucesso, o pedido de execução da acção correspondente é passada
ao módulo que se segue.
O módulo lógica / execução de comandos é o centro da funcionalidade do gateway
domótico. Desencadeia as acções necessárias de acordo com os pedidos recebidos, quer
alterando o estado de um dispositivo quando solicitado pelo utilizador quer notificando os
utilizadores interessados de uma alteração de estado recebida. Além desta tarefa mais óbvia,
este módulo está ainda encarregue de mais 4 tarefas - manter o modelo do sistema domótico,
manter os perfis dos utilizadores, oferecer a funcionalidade de macros e oferecer a
funcionalidade de videovigilância – que são descritas em maior detalhe de seguida.
No arranque da aplicação, é responsabilidade desta camada carregar toda a configuração
da habitação de acordo com o modelo do sistema domótico, que já foi descrito no capítulo
anterior. Para armazenar os dados em memória, são instanciadas as estruturas descritas na
secção 4.5 referentes às entidades em causa.
Também os perfis de utilizadores são carregados no arranque, sendo utilizadas para
armazenamento estruturas que são definidas na mesma secção. Por cada utilizador, é
guardado um conjunto de informação que é constituído por quatro listas: favoritos, macros
privadas, interesses em notificações e interesses em alarmes.
Os favoritos de cada utilizador contemplam os dispositivos, divisões e macros que este
tenha escolhido para acesso mais rápido e frequente e estão-lhe acessíveis a partir de uma
opção do menu principal. Na Figura 11 é ilustrado um exemplo da referida lista.
As macros podem pertencer ao perfil de um utilizador na medida em que, quando um
utilizador cria uma nova macro, pode escolher se a quer partilhar ou não com os outros
utilizadores. Caso escolha não partilhar, a macro será considerada privada e apenas o
utilizador que a criou lhe terá acesso, pertencendo assim ao seu perfil.
Finalmente, os interesses em notificações e em alarmes representam o interesse do
utilizador em ser informado de uma dada alteração no sistema domótico. Apesar de serem
definidos da mesma forma, apresentam comportamentos diferentes. Uma notificação é enviada
aos contactos do utilizador que estejam online; caso nenhum esteja, nada acontece. Por outro
lado, um alarme representa um acontecimento algo grave, pelo que, caso nenhum contacto
esteja online, é enviado um email com a informação do alarme para o endereço do utilizador.
Adicionalmente, o alarme é guardado e apresentado quando algum contacto passar a estar
28
online. Cada interesse pode referir-se a um serviço, piso, divisão, tipo de dispositivo ou
dispositivo concreto.
Figura 11 – Exemplo de lista de favoritos
Nestes dois últimos casos pode ainda ser especificada a propriedade com interesse e uma
condição. Quando a aplicação é iniciada, todos os dados de perfis de utilizador são
carregados. Na prática, os interesses em notificações e alarmes são inseridos na cache
mantida pela camada inferior, como foi já ilustrado na secção anterior. Cada interesse é
inserido na cache sob a forma de um teste, que tem a estrutura simples evidenciada na Figura
12. Deverá ser possível notificar um utilizador apenas quando a propriedade com interesse
29
atingir um certo valor, pelo que os únicos dados guardados são um identificador de um
operador, um valor para comparação e o identificador do utilizador a notificar. Quando o valor
de uma propriedade é alterado na cache, devem ser corridos todos os testes associados a
essa propriedade, notificando os utilizadores referidos nos que passarem, utilizando para tal a
camada acima.
Valor
Significado
0
=
1
≠
2
>
3
≥
Operador
4
<
Valor para comparação
5
≤
Utilizador a notificar
6
* (any)
Figura 12 – Estrutura dos testes para
notificações
Quadro 2 – Tabela de operadores
No Quadro 2 é apresentada uma tabela com os significados dos vários valores do campo
operador. O operador * (any) faz com que o teste passe para qualquer valor presente na cache
e qualquer valor para comparação. Todos os interesses em dispositivos concretos terão um
mapeamento directo para um teste na cache, enquanto para os restantes será necessário criar
testes para todos os dispositivos abrangidos, utilizando o operador * (o valor para comparação
é indiferente) quando não houver condição. Com esta especificação, torna-se simples definir
notificações e alarmes que representam interesses condicionais em propriedades de
dispositivos. Tomemos o seguinte exemplo: um utilizador define que quer receber uma
notificação quando a temperatura de uma dada sala for igual ou superior a 25ºC e um alarme
quando for igual ou superior a 30ºC. Para a situação deste exemplo, serão criadas duas
estruturas de teste, uma para a notificação e outra para o alarme. Ambas se referem ao mesmo
utilizador e utilizam para comparação o mesmo operador, logo, terão a mesma referência de
utilizador e mesmo operador – ≥ / 3. Quanto ao campo “valor para comparação”, o teste da
notificação terá, obviamente, o valor 25 enquanto o teste para o alarme terá o valor 30. A
alteração da referida temperatura para 26.4ºC e 32.1ºC resulta, respectivamente, nos avisos
mostrados na Figura 13 e na Figura 14.
30
Figura 13 – Exemplo de uma notificação
Figura 14 – Exemplo de um alarme e de uma notificação
Para o valor 32.1ºC, tanto a notificação como o alarme são gerados, uma vez que ambos
são activados por este valor.
31
As macros facilitam bastante a tarefa de colocar a casa ou mesmo uma divisão num certo
estado. São constituídas por sequências de acções simples, representando cada uma dessas
acções a atribuição de um valor a uma propriedade de um dispositivo. É muito mais simples,
por exemplo, invocar a macro Ver filme, que liga a televisão, baixa os estores a 25% e deixa
apenas uma luz acesa, a 25%, do que colocar manualmente todos estes valores nas
propriedades dos respectivos dispositivos. As diferentes sequências de interacção são
mostradas na Figura 15 e na Figura 16.
Figura 15 – Interacção “Ver filme” sem recurso à funcionalidade de macros
32
Figura 16 – Interacção “Ver filme” com recurso à utilização de uma macro
Para capacitar o gateway de realizar videovigilância, foi criado o componente com o
mesmo nome. É da sua responsabilidade, perante um pedido de envio de imagem, contactar a
câmara em causa, obter uma imagem e enviá-la. Na prática, este componente foi desenvolvido
com o principal intuito de testar o funcionamento do gateway, sendo que não obtém as
imagens de câmaras reais.
Como se pode ver na Figura 17, sempre que lhe é pedida uma imagem de uma qualquer
câmara, disponibiliza, no gateway, uma interface gráfica para selecção de um ficheiro de
imagem ou obtenção de uma imagem a partir de uma das câmaras que eventualmente esteja
directamente ligada ao home gateway – máquina onde está a correr a aplicação gateway.
Na Figura 18 é mostrado um exemplo de interacção de pedido de imagem de uma câmara.
Como se pode constatar, a imagem é enviada servindo-se dos mecanismos para envio de
ficheiros já presentes nos clientes de IM.
O tipo de comunicação necessário para efectivamente obter imagens a partir de câmaras do
sistema domótico não encaixa no modelo de comunicação DomoBus e, portanto, teria que ser
feito à sua margem, utilizando métodos alternativos que as câmaras disponibilizam.
Não só seria impossível fazê-lo sem acesso aos dispositivos reais como não acrescentaria
muito interesse no que toca ao âmbito deste trabalho, que se baseia em toda a lógica
DomoBus. Mesmo assim, será possível constatar um comportamento mínimo simulado de
videovigilância, podendo-se obter imagens de qualquer uma das câmaras virtuais.
33
Figura 17 – Janela de selecção de fonte para imagem
Figura 18 – Exemplo de interacção de pedido de imagem de uma câmara
34
No futuro poderá ser explorada a possibilidade de incluir no DomoBus funcionalidades de
streaming, que suportarão a transferência de vídeo, imagens ou áudio. Com tais
funcionalidades, seria interessante explorar a videoconferência com os clientes de IM que o
suportem, o que, no entanto, não é abrangido por este trabalho.
4.3 Camada superior
Esta camada serve o objectivo de tornar o gateway usável a partir de serviços de IM. Como
tal, consiste apenas num cliente Jabber alterado. Foi então escolhido um cliente com código
de fonte aberta para que se pudesse utilizar e alterar o seu código livremente. Após alguma
pesquisa, o cliente Miranda IM [8] foi seleccionado pela sua completude em termos de
protocolos suportados e aparente robustez e estabilidade denotados pelos seus 8 anos de
existência com lançamentos de novas versões periodicamente. A modificação necessária
consiste em redireccionar a entrada e saída de mensagens. Para tal, é utilizado o componente
reencaminhamento de mensagens, que actua como a pessoa que habitualmente estaria a ler
e escrever. Todas as mensagens chegadas ao cliente Jabber deverão ser passadas ao módulo
de reencaminhamento em vez de apresentadas na interface gráfica. Este, por sua vez, deve
passar a informação à camada inferior, indicando qual o utilizador que originou a mensagem.
Deve também estar à escuta de mensagens que essa mesma camada lhe transmita,
juntamente com o utilizador a ser informado, para desempenhar de seguida o papel do teclado
ao enviar a mensagem para o utilizador pretendido.
Dado que cada utilizador pode ter vários contactos de IM e que o seu identificador dentro do
gateway poderá não corresponder a nenhum deles, é da responsabilidade deste componente
manter a associação entre eles, armazenando-a em contactos registados. Para um utilizador
existente registar um novo contacto, tal deverá ser feito directamente no gateway, sendo este a
adicionar o novo contacto à sua lista. Seguidamente, o cliente deve, obviamente, aceitar a
adição do contacto do gateway à sua lista de contactos, utilizando para tal os métodos
disponibilizados pelo seu cliente de IM. Após este passo, o novo contacto já estará adicionado
ao gateway e associado ao utilizador, no entanto, não estará verificado. A verificação é um
passo adicional que visa aumentar a garantia de autenticidade dos contactos e que consiste
em pedir ao utilizador que escreva a sua password antes de poder interagir com o gateway, o
que é exemplificado na Figura 19. Perante a figura, torna-se óbvio um possível problema de
segurança em relação ao envio da password. Mais à frente, na secção 5.2, será testada a
existência de tal problema de segurança.
35
Figura 19 – Exemplo de verificação de um contacto
4.4 Comandos e Menus
O funcionamento dos comandos e menus exigiu o envolvimento de técnicas específicas,
pelo que é pertinente expor os detalhes do seu desenho e implementação. Em termos de
arquitectura geral, ambos pertencem ao componente Lógica / execução de comandos
evidenciado na Figura 9.
Quando uma nova mensagem de IM chega ao gateway, supondo que é verificada a
identidade do utilizador, é sujeita a um processo inicial de triagem. Assim, se houver um menu
36
a correr para o contacto e a mensagem consistir num número inteiro positivo, esta é
encaminhada para o respectivo menu que a processará, indexando a sua entrada
correspondente. É de notar que os menus são criados um por contacto (e não utilizador), sendo
que cada utilizador pode ter várias interacções simultâneas com o gateway através dos seus
vários diferentes contactos. Por outro lado, se ainda não existir um menu para o contacto ou a
mensagem não consistir num número inteiro positivo apenas, esta será interpretada como um
comando seguido dos seus argumentos.
O funcionamento específico de cada um dos modos de interacção do gateway será descrito
de seguida nas sub-secções 4.4.1 e 4.4.2.
4.4.1 Comandos
Após ter sido identificada como um comando, a mensagem é dividida nos seus vários
elementos pelo método Tokenize, desenvolvido para essa mesma finalidade. A particularidade
deste método, face a um qualquer método de split ou explode de uma string em várias, prendese com o facto de receber como parâmetro não só o elemento separador mas também o
elemento agregador. Na prática, isto significa que é possível passar vários argumentos a um
comando separados por espaços, mas também argumentos que contenham espaços,
bastando para tal colocar o elemento agregador – a plica – antes do seu início e depois do seu
fim. Estando a mensagem dividida, os seus elementos são passados ao método
CreateCommand, que, juntamente com a estrutura de classes Commad e suas subclasses,
implementa o padrão de desenho Factory method, cujo diagrama de classes está ilustrado na
Figura 20.
Figura 20 – Diagrama de classes UML do padrão de desenho Factory method
A classe Command representa o Criador do diagrama, e as suas subclasses representam
tanto o CriadorConcreto como o Produto. Com efeito, será construído e devolvido um comando
37
(uma subclasse de Command) com base no primeiro elemento. Obviamente que, caso o nome
enviado na mensagem não corresponda a nenhum comando, será lançada uma excepção que
acabará por resultar no envio de numa mensagem de erro para o contacto.
Tendo o comando sido identificado e criado com sucesso, segue-se a sua execução.
Também para este passo foi adoptado um padrão de desenho, desta vez o padrão Command,
cujo diagrama de classes se pode ver na Figura 21.
Figura 21 – Diagrama de classes UML do padrão de desenho Command
A associação dos seus elementos com as classes do gateway torna-se óbvia: a classe
Command
representa
o
Comando
enquanto
as
suas
subclasses
representam
o
ComandoConcreto. O chamador é representado pelo despacho de comandos. Como já foi
referido, a classe Command é super classe de todas as classes que representam comandos
concretos, obrigando-as, através da declaração virtual de métodos, a implementarem o método
que executa o funcionamento do comando - execute. Assim, qualquer comando tem a mesma
interface – método execute – mas funcionamento específico, sendo que o chamador não tem
que se preocupar com qual o comando que está a invocar, fazendo-o sempre de forma igual.
A combinação dos dois padrões de desenho anteriormente enunciados torna o despacho de
comandos bastante simples e limpo, uma vez que basta sequenciar uma chamada ao método
CreateCommand com uma chamada ao método execute no seu resultado.
4.4.2 Menus
Como já foi referido, os menus não são mais do que uma camada de funcionalidade
depositada em cima da dos comandos. Consequentemente, não há nenhuma acção que se
consiga efectuar através da utilização de menus que não se consiga através da utilização de
comandos, e vice-versa.
38
Para criar um menu, é necessário um conjunto de dados que são agrupados numa estrutura
própria (ver secção 4.5). Um dos elementos desse conjunto é um vector de comandos
(objectos que pertencem a subclasses da classe Command anteriormente referida), o qual
define as opções do menu. Como se pode então deduzir, cada uma das opções de um menu é
um comando, tal como os que são criados pelo método CreateCommand referido na subsecção anterior. Contudo, dentro de um menu, os comandos são criados de forma estática, em
função do contexto. Assim, por exemplo, um menu de um piso listará sempre um comando de
divisão por cada divisão, sendo que cada um destes criará um novo menu com um comando de
dispositivo por cada dispositivo que pertença a essa divisão. O funcionamento do menu tornase assim recursivo, permitindo navegar a maior e menor profundidade, até se chegar a uma
“folha” do menu, a qual é representada por um comando que efectivamente executa alguma
acção no sistema domótico.
Na Figura 22 é exemplificado uma possível execução do menu do gateway através de um
diagrama de sequência UML.
Como se pode depreender, os menus vão chamando os seus submenus através de uma
chamada a execute. Chegando a um menu com comandos “folha” (neste exemplo, chamadas 6
e 11), o método execute actua sobre o sistema domótico e retorna para o mesmo menu.
Posteriormente, à medida que o utilizador regressa até ao menu principal (chamadas 7 a 8 e 12
a 16), os métodos execute terminam a sua execução e retornam para o menu que os chamou.
Posto isto, os traços gerais do algoritmo dos menus tornam-se claros:
• Listar opções disponíveis, numerando-as;
• Aguardar que o utilizador introduza uma opção;
o
Caso a opção seja inválida, informar utilizador;
o
Caso seja igual a 0, retornar (para o menu acima);
o
Caso contrário (a opção indexa um comando), chamar o método execute
correspondente;
• Voltar ao início.
39
Figura 22 – Diagrama de sequência UML de uma possível execução do menu
4.5 Estruturas de dados do Gateway
Para suportar o carregamento de toda a configuração do sistema domótico para o gateway,
foram criadas várias estruturas de dados à medida. Nesta secção serão abordadas as mais
pertinentes.
O gateway carrega a referida configuração a partir de dois ficheiros XML diferentes:
• domotic system.xml;
• settings.xml;
O primeiro contém informação que o gateway apenas lê; assume-se que é criada e editada
por uma ferramenta externa. Nele encontra-se descrita toda a tipificação de dispositivos e suas
propriedades e também a estrutura da casa. Neste âmbito, as estruturas mais relevantes são
as seguintes:
• scalarValueType, enumValueType e arrayValueType, nas quais são armazenados os
vários tipos de valores definidos;
• deviceType e propertyType, para armazenar, respectivamente, tipos de dispositivos e
tipos de propriedades;
40
• device e property, que representam os dispositivos reais existentes na casa e suas
propriedades;
• floor e division, com os quais fica definida a estrutura física da casa.
Por outro lado, no segundo ficheiro, settings.xml, encontra-se todo o tipo de configurações
que podem ser alteradas pelo gateway: perfis de utilizadores e seus contactos. Eis as principais
estruturas:
• contact, que guarda os dados de cada um dos contactos de cada utilizador, contendo
informação sobre o respectivo estado de verificação;
• alarm e notification, que contêm informação para cada alarme ou notificação,
respectivamente, registada no sistema. Estas estruturas, quando criadas, são
associadas à estrutura property (anteriormente enunciada) a que se referem;
• macro, que, como o nome indica, serve para carregar todas as macros;
• favouriteList, que representa os favoritos de um dado utilizador e contem três listas
internas:
o
DeviceList;
o
DivisionList;
o
MacroList;
Finalmente, falta referir que foi criada uma estrutura genérica denominada entity que
representa uma qualquer entidade e que contempla os campos ID e Name. Todas as estruturas
anteriormente referidas que representem entidades e que, portanto, contemplem estes mesmos
campos, herdam-nos de entity.
À parte do sistema domótico propriamente dito, vale a pena ainda referir uma última
estrutura de dados: menuData. Esta é a estrutura que contém todos os dados necessários para
a criação de um novo menu:
• title – o título a apresentar quando o menu for utilizado;
• commands – um vector de comandos que representa as opções do menu;
• contact – uma referência para o contacto ao qual o menu está associado4;
• root – um booleano que indica se o menu é ou não a raiz.
4
Este campo é indispensável não só para utilizar no envio de mensagens de IM mas também para
obtenção da identidade do utilizador e posterior verificação de permissões
41
5 Metodologia de avaliação do trabalho
Para testar a fiabilidade real do gateway, foi definida uma série de testes que cobrem por
completo as suas funcionalidades mas também casos de uso que representam situações reais
da sua utilização, combinando várias funcionalidades. Dado que o gateway assenta todo o seu
funcionamento em comunicações de IM, encontra-se um pouco limitado no que toca a
imposições de requisitos não funcionais como desempenho, disponibilidade ou segurança.
Contudo, poderá ser útil registar algumas informações de desempenho – tempos de resposta –
e testar minimamente o quão seguro o sistema consegue ser. O ambiente de testes é igual ao
que foi apresentado na Figura 3, exceptuando o facto de que não serão usados gateways de
tecnologias nem dispositivos domóticos mas sim um gateway simulador, já que para as
funcionalidades a testar é irrelevante a utilização de um ou outros. O ambiente de testes tem
então a estrutura representada na Figura 23.
XMPP
Gateway
domótico
COMM-API
COMM-API
Gateway
simulador
Figura 23 – Estrutura do ambiente de testes utilizado
A interface do gateway simulador consiste numa consola na qual aparecerão as mensagens
recebidas do gateway domótico e através da qual se poderá alterar qualquer propriedade de
42
qualquer dispositivo, simulando o comportamento de um sistema real. Quanto à estrutura do
sistema domótico utilizada no ambiente de testes, pode ser consultada no Anexo I.
Findada esta apresentação ao ambiente de avaliação, segue-se a definição dos testes e
casos de uso.
5.1 Definição de testes e casos de uso
Quanto aos testes, estes visam testar cada uma das funcionalidades individuais do gateway,
podendo ser agrupados em seis categorias:
• Leitura (utilizador com permissão)
o
Leitura de uma propriedade do tipo escalar;
Para propriedades do tipo RO, WO e RW;
o
Leitura de uma propriedade do tipo enumerado;
Para propriedades do tipo RO, WO e RW;
o
Leitura de uma propriedade do tipo array;
Para propriedades do tipo RO, WO e RW.
• Leitura (utilizador sem permissão)
o
(mesmos testes que no ponto anterior);
• Escrita (utilizador com permissão)
o
Escrita de uma propriedade do tipo escalar;
Para propriedades do tipo RO, WO e RW;
o
Escrita de uma propriedade do tipo enumerado;
Para propriedades do tipo RO, WO e RW;
o
Escrita de uma propriedade do tipo array;
Para propriedades do tipo RO, WO e RW.
• Escrita (utilizador sem permissão)
o
(mesmos testes que no ponto anterior);
• Criação
o
Criação de uma nova macro privada;
Verificando que foi criada apenas para o utilizador que a criou;
o
Criação de uma nova macro partilhada;
Verificando que foi criada para todos os utilizadores;
o
Criação de uma nova notificação;
E posterior verificação da sua geração.
43
o
Criação de um novo alarme;
E posterior verificação da sua geração;
•
Verificando que é enviado por email se o utilizador não
estiver online no momento em que o alarme é gerado.
• Remoção
o
Remoção de uma macro privada;
o
Remoção de uma macro partilhada;
Verificando que foi removida para todos os utilizadores;
o
Remoção de uma notificação;
E posterior verificação da sua não geração;
o
Remoção de um alarme;
E posterior verificação da sua não geração.
Como preparação para os testes de leitura, foram introduzidos, a partir da consola do
gateway simulador, valores tão aleatórios quanto possível nas propriedades a ler. Os testes de
remoção visam eliminar as entidades respectivas criadas nos testes de criação.
Adicionalmente, foram definidos alguns testes para verificar a segurança alcançada pelo
sistema:
• Testar a resposta do gateway perante uma mensagem de contacto desconhecido;
• Testar a resposta do gateway perante um contacto conhecido mas não verificado;
• Testar se as mensagens enviadas pelo utilizador passam “em branco” na rede ou se
vão de alguma forma cifradas5 (teste ao sistema de IM);
o
5
Testar com diferentes serviços de IM.
Para obter e analisar o tráfego gerado pelo cliente de IM e pelo gateway, foi utilizado o programa
Wireshark [17]
44
Figura 24 – Diagrama UML geral de casos de uso do gateway
Os casos de uso, como já foi dito, têm por objectivo simular uma situação real de interacção
com o gateway, englobando várias funcionalidades. De um modo geral, a interacção dos
utilizadores com o gateway pode ser representada pelo diagrama de casos de uso da Figura
24. Como é perceptível, o tipo de interacção possível depende do tipo de utilizador:
• Um utilizador cujo contacto é desconhecido pelo gateway pode apenas ser actor do
caso de uso “Ignorar mensagens do utilizador”. Por outras palavras, todas as suas
mensagens serão ignoradas;
• Um utilizador com contacto conhecido, mas ainda não verificado fica também
restringido a um só caso de uso: “Pedir password para autenticação”. Até que o
utilizador introduza a sua password, este será o único comportamento do gateway.
Após introdução correcta da password, o utilizador torna-se no enunciado de seguida;
45
• Um utilizador com contacto conhecido e verificado pode protagonizar os dois casos de
uso que representam a utilização efectiva do gateway: “Interpretar, validar e executar
opção do menu” e “Interpretar, validar e executar comando”;
Feita esta apresentação inicial, definem-se os casos de uso específicos que efectivamente
avaliam a interacção com o gateway:
• Utilizador vai de férias
o
Cria a macro “Ir de férias” que:
Fecha todos os estores;
Desliga todas as lâmpadas;
Desliga todas as televisões;
Liga o alarme.
o
Corre a macro que acabou de criar
o
Faz uma simples verificação ao estado do alarme
• Utilizador é segurança de um edifício e pretende monitorizar todos os equipamentos
relacionados com segurança:
o
Cria interesse em notificação em todos os dispositivos pertencentes ao
serviço “Segurança”;
• Utilizador é empregado de um restaurante e pretende ligar o ar condicionado nas salas
em que a temperatura seja igual ou superior a 26º:
o
Para cada sala (divisão), verifica se existe alguém na sala (sensor de
presença);
Se existir, verifica a temperatura (sensor temperatura);
•
Se esta for superior a 26º, liga o ar condicionado;
• Utilizador é recepcionista num hotel e pretende avisar um hóspede que alguém na
recepção o quer contactar:
o
Verifica se é detectada a presença de alguém no quarto do hóspede em
questão (sensor de presença);
Em caso afirmativo, utiliza a respectiva televisão para lhe fazer um
breve sinal sonoro, disponibilizando a informação no canto do ecrã;
5.2 Resultados
Nesta secção são apresentados os resultados da execução dos testes e casos de uso
enunciados na secção anterior.
46
No que toca à funcionalidade, o gateway foi aprovado, uma vez que todos os testes tiveram
o resultado esperado. O resumo dos resultados dos testes de leitura e de escrita pode ser
consultado no Quadro 3.
Propriedade enumerado
Propriedade escalar
RO
WO
RW
RO
WO
RW
Propriedade array
RO
WO
RW
Leitura
Leitura
(com
(sem
permissão)
permissão)
Valor OK
Valor OK
Valor OK
(sem permissão)
Valor
Valor
Valor
Valor
válido
inválido
válido
inválido
Erro de escrita
Valor
OK
Permissão
Valor
negada
OK
Permissão
Erro de
valor
Permissão negada
inválido
Erro de
valor
Permissão negada
inválido
Erro de escrita
negada
Valor
OK
Permissão
Valor
negada
OK
Permissão
Erro de
valor
Permissão negada
inválido
Erro de
valor
Permissão negada
inválido
Erro de escrita
negada
Erro de leitura
Valor OK
(com permissão)
negada
Erro de leitura
Valor OK
Escrita
Permissão
Erro de leitura
Valor OK
Escrita
Valor
OK
Permissão
Valor
negada
OK
Erro de
valor
Permissão negada
inválido
Erro de
valor
Permissão negada
inválido
Quadro 3 – Resultados dos testes de leitura e de escrita
Como seria de esperar, numa leitura, para propriedades do tipo WO, foi retornado um erro
de leitura. Caso contrário, se não se verificou a permissão do utilizador, foi mostrada uma
47
mensagem de permissão negada. Por último, não sendo verdade nenhuma das condições
anteriores, foi apresentado correctamente o valor presente no gateway simulador.
Quanto aos testes de escrita, o comportamento foi análogo, sendo que foi apresentada uma
mensagem de erro de escrita para as propriedades do tipo RO e uma mensagem de erro de
valor inválido para as restantes no caso de o utilizador ter permissão e fornecer um valor
inválido.
Criação
Criação
macro
macro
privada
partilhada
Quando
está
Resultado
Nova macro disponível
Online
para o
utilizador
Criação
notificação
Criação alarme
Notificação
Alarme recebido
recebida aquando
aquando do
do acontecimento
acontecimento
com interesse
com interesse
Email com alarme
Quando
está
recebido aquando
Nenhuma alteração
do acontecimento
Offline
com interesse
Resultado para
Nenhuma
Nova macro
restantes utilizadores
alteração
disponível
Nenhuma alteração
Quadro 4 – Resultados dos testes de criação
Os resultados do conjunto de testes seguinte, testes de criação, são mostrados no Quadro 4.
Ficou confirmada, portanto, a privacidade no modo de acesso às macros e o bom
funcionamento do sistema de notificações e alarmes, incluindo o envio de alarmes por email
quando o utilizador interessado está offline.
Mais uma vez de forma análoga, em relação aos resultados dos testes de criação, os
resultados dos testes de remoção são apresentados no Quadro 5, que completa os resultados
de testes funcionais do gateway.
Quanto aos testes não funcionais, foram realizados de dois tipos: desempenho e segurança.
Como já foi referido, os testes não funcionais reflectem mais o funcionamento dos sistemas de
IM do que o do gateway propriamente dito. Contudo, vale a pena analisar.
48
Remoção
Remoção
macro
macro
privada
partilhada
Remoção
notificação
Nenhuma
Quando
está
Resultado
Macro removida deixou de
estar disponível
Online
recebida aquando
do acontecimento
com interesse
para o
utilizador
notificação
Remoção alarme
Nenhum alarme
recebido aquando
do acontecimento
com interesse
Nenhum email
Quando
com alarme
está
Nenhuma alteração
recebido aquando
do acontecimento
Offline
com interesse
Macro
Resultado para
Nenhuma
restantes utilizadores
alteração
removida
deixou de
Nenhuma alteração
estar
disponível
Quadro 5 – Resultados dos testes de remoção
Para medir o desempenho, foi cronometrado o tempo que cada uma das interacções com o
gateway demora a retornar uma resposta. Foram capturados os pacotes gerados na rede
resultantes da interacção, utilizado o programa Wireshark [17]. De seguida, foi calculada a
diferença entre o momento em que saiu um pacote com um comando e o momento em que
chegou o pacote com a resposta. Os resultados – valores médios para o conjunto dos
resultados de testar cada um dos comandos – constam no Quadro 6, por serviço de IM.
MSN
Google talk
AIM
ICQ
Jabber
0,8 s
0,5 s
0,5 s
0,5 s
0,5 s
Quadro 6 – Tempos médios de resposta do gateway para vários serviços de IM
Como é óbvio, esta duração prende-se com o atraso introduzido pelos sistemas de IM, não
sendo representativo do real desempenho do gateway. Neste sentido, é notório o
distanciamento do MSN em relação aos outros serviços testados.
No que toca à segurança, os resultados são apresentados de seguida. No Quadro 7 são
sintetizadas as respostas do gateway para cada tipo de contacto.
49
Contacto
Contacto conhecido
desconhecido
Não verificado
Verificado
Nenhuma resposta
Pedido para introdução da
Resultado do comando / opção
respectiva password
do menu
Quadro 7 – Respostas do gateway aos vários tipos de contactos
Estes testes contemplaram a tentativa de execução de cada um dos comandos e de
navegação no menu. Como se poderia esperar – e está evidenciado no Quadro 7 – as
mensagens de um contacto desconhecido são simplesmente ignoradas, enquanto as de um
contacto não verificado obtêm sempre como resposta um pedido de introdução de password.
Finalmente, apenas um contacto verificado pode executar comandos e navegar nos menus,
obtendo o resultado respectivo.
Ainda no âmbito da segurança do gateway, é apresentado o Quadro 8, onde se pode
verificar a forma como cada serviço de IM envia as mensagens pela rede.
MSN
Google
talk
AIM
ICQ
Jabber
Em
Em
Em
Em
Em branco / cifradas (dependente da
branco
branco
branco
branco
configuração do servidor)
Quadro 8 – Modo de envio de mensagens dos vários serviços de IM
De um modo geral, os serviços de IM não cifram as mensagens a enviar. O Jabber constitui
uma excepção, oferecendo tal funcionalidade, ainda que de forma opcional. Podemos então
detectar aqui uma falha na segurança do gateway, causada pelo modo de funcionamento dos
serviços de IM. Exceptuando o Jabber em modo de cifra, todos os serviços de IM enviam as
mensagens em branco na rede, podendo qualquer atacante capturar os respectivos pacotes e
reconstruí-las.
Para concluir a secção de resultados, basta sumarizar os tempos medidos aquando da
execução de cada um dos casos de uso, o que se pode ver no Quadro 9. Os tempos foram
medidos em duas vertentes: menus e comandos. Na primeira, cada caso de uso foi executado
50
tirando partido apenas da utilização de menus; na segunda, foi executado através da utilização
de comandos6.
Utilizador
vai de férias
Utilizador é
Utilizador é
Utilizador é
segurança de um
empregado de um
recepcionista de
edifício
restaurante
um hotel
Menus
5m 40s
22s
1m 13s
40s
Comandos
3m 41s
5s
47s
26s
Quadro 9 – Tempos medidos na execução dos vários casos de uso
Como já foi referido antes, os menus são mais adequados a um utilizador inexperiente,
perdendo em desempenho. Por sua vez, os comandos obrigam a conhecer bem a sua sintaxe,
ganhando, porém, onde os menus perdem. Esta dicotomia está reflectida no Quadro 9.
6
Na prática, também foram utilizados os menus, uma vez que alguns comandos teriam uma quantidade
de caracteres superior ao suportado pelo cliente de IM
51
6 Conclusões
Neste trabalho foram apresentadas a arquitectura e estrutura interna de um gateway
domótico com suporte para sistemas de messaging. O foco principal deste trabalho prende-se
com a característica inovadora introduzida: a capacidade de utilizar um sistema de IM para
comunicar com o gateway e, consequentemente, monitorizar e controlar o sistema domótico.
Tendo também em conta a relevância das funcionalidades referidas como “perfis”, foi dada
especial ênfase à descrição das partes da arquitectura responsáveis pela lógica e pela
interacção com sistemas de messaging. A metodologia de avaliação foi planeada em função do
mesmo foco, utilizando um simulador em vez de um sistema com dispositivos reais.
O gateway mostrou-se fiel à especificação do seu funcionamento, o que corrobora as
decisões tomadas no desenho da sua arquitectura. De facto, a sua divisão em três camadas
assemelha-se a um padrão de desenho de software bastante comum e com provas dadas “Three-tier”, que se divide em “apresentação”, “lógica” e “dados”. As tecnologias domóticas
utilizadas pelo sistema podem então ser vistas como uma “base de dados” que é controlada
pela camada inferior – “dados” – do gateway. A camada intermédia representa, obviamente, a
“lógica” do sistema. Por fim, a camada superior constitui parte da “apresentação”, uma vez que,
para ser concluída a sua finalidade, é necessária a intervenção do cliente de IM do lado do
utilizador.
Os dois modos de interacção descritos, comandos e menus, são, em conjunto, uma maisvalia, uma vez que se combinam para oferecer ao utilizador o melhor de cada um: rapidez dos
comandos e facilidade de utilização dos menus. Esta dicotomia torna a utilização do gateway
bastante versátil, permitindo a existência de utilizadores com vários níveis de experiência em
simultâneo. Um utilizador sem experiência descobre o sistema utilizando menus; um utilizador
com experiência média faz uma utilização equilibrada dos dois tipos interacção; um utilizador
experiente interage, essencialmente, através de comandos, tirando partido da sua rapidez.
O suporte para vários protocolos de IM representa outra mais-valia. Pode dizer-se que esta é
oferecida pelo cliente de IM englobado no gateway, o que, contudo, concede mérito à escolha
feita. O valor acrescentado reside na possibilidade que o utilizador tem em poder utilizar o
sistema com o seu cliente de IM preferido. Para um utilizador típico é comum, por exemplo, a
utilização exclusiva do Windows Live Messenger. Apesar de disponíveis para a instalação de
novos clientes de IM, os utilizadores não se sentem completamente à vontade ao utilizá-los, o
que pode prejudicar a experiência de utilização do sistema. Há que ressalvar, contudo, que
para situações em que os requisitos de segurança não possam ser aliviados, é aconselhada a
instalação e utilização de um servidor Jabber com rede de IM própria, configurando-o para o
modo de cifra de todas as mensagens.
52
Como nota para trabalho futuro, fica a possibilidade de explorar a funcionalidade de
videochamada oferecida pela maioria dos clientes e serviços de IM. Seria interessante poder
observar, em tempo real, as zonas de uma habitação cobertas por câmaras de vigilância ou
webcams. Na prática, esta funcionalidade obrigará ao desenvolvimento de módulos de
comunicação específicos para cada tipo de câmara. Como alternativa, poderá ser explorada a
possibilidade de inclusão de mecanismos de streaming no DomoBus. Apesar de não oferecer
este tipo de interacção mais interessante, o gateway simula-o minimamente, recorrendo a
câmaras reais conectadas à máquina onde está instalado.
Para finalizar, o gateway apresentado mostrou-se capaz de representar o seu papel num
sistema domótico, oferecendo funcionalidades personalizadas e inovadoras e estando à altura
das necessidades dos utilizadores.
53
7 Referências
[1] Renato Nunes, Modelo de Especificação e Programação de um Sistema Domótico,
IADIS Conferência Ibero-Americana WWW/Internet 2004, Madrid, Spain, October 2004,
pp. 377-384
[2] Renato Nunes, Análise Comparativa de Tecnologias para Domótica, JEACI 2002- III
Jornadas de Engenharia de Automação, Controlo e Instrumentação, EST Setúbal, Maio
2002
[3] Renato Nunes, DomoBus - A New Approach to Home Automation, 8CLEEE - 8th
International Congress on Electrical Engineering, Portugal, July 2003, pp.2.19-2.24
[4] Paolo Pellegrino, Dario Bonino, Fulvio Corno, Politecnico di Torino, Domotic House
Gateway
[5] Dario Bonino, Emiliano Castellina, Fulvio Corno, Politecnico di Torino, DOG: an
Ontology-Powered OSGi Domotic Gateway
[6] Jabber, http://www.jabber.org/ (data de última consulta – 21/10/2009)
[7] XMPP - Extensible Messaging and Presence Protocol, http://xmpp.org/ (data de última
consulta – 21/10/2009)
[8] Miranda IM - http://www.miranda-im.org/ (data de última consulta – 21/10/2009)
[9] Bruno Miguel Nunes Almeida, Sérgio Alexandre Bento Esteves Gomes, Módulo de
Comunicação DomoBus, Relatório da cadeira de Ambientes Inteligentes, MEIC IST,
Janeiro 2009
[10] Renato Nunes, API de Comunicação do sistema DomoBus, Relatório Técnico, IST,
Outubro 2005
[11] UML – Unified Modeling Language, http://www.uml.org/ (data de última consulta –
21/10/2009)
[12] X10, http://www.x10.com (data de última consulta – 21/10/2009)
[13] KNX (EN 50090,ISO/IEC 14543), http://www.knx.org (data de última consulta –
21/10/2009)
[14] LonWorks, http://www.echelon.com (data de última consulta – 21/10/2009)
[15] ZigBee, http://www.zigbee.org (data de última consulta – 21/10/2009)
[16] Domobus, http://www.domobus.net (data de última consulta – 21/10/2009)
[17] Wireshark, http://www.wireshark.org/ (data de última consulta – 21/10/2009)
54
Anexo I
Conteúdo do ficheiro domotic system.xml:
<DomoBusSystem ID="1" Name="Test House" Version="1.0">
<ConversionFormulaList>
<ConversionFormula ID="1" Name="Double" UserToSystem="2*X" SystemToUser="X/2" DecimalPlaces="0" />
<ConversionFormula ID="2" Name="10*X+200" UserToSystem="10*X+200" SystemToUser="(X-200)/10"
DecimalPlaces="1" />
</ConversionFormulaList>
<ScalarValueTypeList>
<ScalarValueType ID="1" Name="Percentage (0-100)" NumBits="8" MinValue="0" MaxValue="100" Step="1">
<ValueConversion Type="NONE" Ref="" />
</ScalarValueType>
<ScalarValueType ID="2" Name="Temperature" NumBits="16" MinValue="0" MaxValue="800" Step="1">
<ValueConversion Type="FORMULA" Ref="2" />
</ScalarValueType>
<ScalarValueType ID="3" Name="Test scalar value" NumBits="16" MinValue="0" MaxValue="1000" Step="1">
<ValueConversion Type="NONE" Ref="" />
</ScalarValueType>
</ScalarValueTypeList>
<EnumValueTypeList>
<EnumValueType ID="1" Name="On-Off">
<Enumerated Name="Off" Value="0" />
<Enumerated Name="On" Value="1" />
</EnumValueType>
<EnumValueType ID="2" Name="Air conditioner">
<Enumerated Name="Off" Value="0" />
<Enumerated Name="Heat" Value="1" />
<Enumerated Name="Cool" Value="2" />
</EnumValueType>
<EnumValueType ID="3" Name="Test enum value">
<Enumerated Name="Enum 0" Value="0" />
<Enumerated Name="Enum 1" Value="1" />
<Enumerated Name="Enum 2" Value="2" />
<Enumerated Name="Enum 3" Value="3" />
</EnumValueType>
</EnumValueTypeList>
<ArrayValueTypeList>
<ArrayValueType ID="1" Name="Description" MaxLen="50">
<ValueConversion Type="NONE" Ref="" />
</ArrayValueType>
<ArrayValueType ID="2" Name="Test array value" MaxLen="10">
<ValueConversion Type="NONE" Ref="" />
</ArrayValueType>
</ArrayValueTypeList>
<DeviceTypeList>
<DeviceType ID="1" Name="Dim-Lamp" Description="-">
<PropertyTypeList>
<PropertyType ID="1" Name="On-Off" AccessMode="RW" ValueType="ENUM" RefValueType="1" />
<PropertyType ID="2" Name="Intensity" AccessMode="RW" ValueType="SCALAR" RefValueType="1" />
</PropertyTypeList>
</DeviceType>
<DeviceType ID="2" Name="Temperature-Sensor" Description="-">
<PropertyTypeList>
<PropertyType ID="1" Name="Temperature" AccessMode="RO" ValueType="SCALAR" RefValueType="2" />
</PropertyTypeList>
</DeviceType>
<DeviceType ID="3" Name="Blind" Description="-">
<PropertyTypeList>
55
<PropertyType ID="1" Name="Height" AccessMode="RW" ValueType="SCALAR" RefValueType="1" />
</PropertyTypeList>
</DeviceType>
<DeviceType ID="4" Name="Camera" Description="-">
<PropertyTypeList>
<PropertyType ID="1" Name="On-Off" AccessMode="RW" ValueType="ENUM" RefValueType="1" />
</PropertyTypeList>
</DeviceType>
<DeviceType ID="5" Name="Alarm" Description="-">
<PropertyTypeList>
<PropertyType ID="1" Name="On-Off" AccessMode="RW" ValueType="ENUM" RefValueType="1" />
</PropertyTypeList>
</DeviceType>
<DeviceType ID="6" Name="Test device" Description="-">
<PropertyTypeList>
<PropertyType ID="1" Name="Scalar RO" AccessMode="RO" ValueType="SCALAR" RefValueType="3" />
<PropertyType ID="2" Name="Scalar RW" AccessMode="RW" ValueType="SCALAR" RefValueType="3" />
<PropertyType ID="3" Name="Scalar WO" AccessMode="WO" ValueType="SCALAR" RefValueType="3" />
<PropertyType ID="4" Name="Enum RO" AccessMode="RO" ValueType="ENUM" RefValueType="3" />
<PropertyType ID="5" Name="Enum RW" AccessMode="RW" ValueType="ENUM" RefValueType="3" />
<PropertyType ID="6" Name="Enum WO" AccessMode="WO" ValueType="ENUM" RefValueType="3" />
<PropertyType ID="7" Name="Array RO" AccessMode="RO" ValueType="ARRAY" RefValueType="2" />
<PropertyType ID="8" Name="Array RW" AccessMode="RW" ValueType="ARRAY" RefValueType="2" />
<PropertyType ID="9" Name="Array WO" AccessMode="WO" ValueType="ARRAY" RefValueType="2" />
</PropertyTypeList>
</DeviceType>
</DeviceTypeList>
<AccessLevelList>
<AccessLevel Level="0" Name="Free Access" />
<AccessLevel Level="1" Name="Guest" />
<AccessLevel Level="2" Name="Common User - Child" />
<AccessLevel Level="3" Name="Common User - Parent" />
<AccessLevel Level="10" Name="Administrator" />
</AccessLevelList>
<UserList>
<User ID="1" Name="admin" Password="admin" Email ="[email protected]" AccessLevel="2" />
</UserList>
<House ID="1" Name="Test House" Address="xxxxx" Phone="xxxx">
<FloorList>
<Floor ID="1" Name="Garage" HeightOrder="-1">
<DivisionList>
<Division ID="1" Name="Garage" AccessLevel="1" />
</DivisionList>
</Floor>
<Floor ID="2" Name="First floor" HeightOrder="0">
<DivisionList>
<Division ID="2" Name="Kitchen" AccessLevel="3" />
<Division ID="3" Name="Living room" AccessLevel="2" />
<Division ID="4" Name="Room 1" AccessLevel="3" />
<Division ID="5" Name="Room 2" AccessLevel="3" />
<Division ID="6" Name="Bathroom 1" AccessLevel="3" />
<Division ID="7" Name="Bathroom 2" AccessLevel="3" />
<Division ID="8" Name="Hall" AccessLevel="2" />
</DivisionList>
</Floor>
<Floor ID="3" Name="Attic" HeightOrder="1">
<DivisionList>
<Division ID="9" Name="Attic" AccessLevel="2" />
</DivisionList>
</Floor>
</FloorList>
</House>
<ServiceList>
<Service ID="1" Name="Heating" />
<Service ID="2" Name="Illumination" />
<Service ID="3" Name="Alarm" />
<Service ID="4" Name="Plugs" />
56
<Service ID="5" Name="Irrigation" />
<Service ID="6" Name="Security" />
</ServiceList>
<DeviceList>
<Device ID="1" RefDeviceType="1" Name="Living room Table Lamp" Address="0x30000001" RefDivision="3"
MonAccessLevel="3" ControlAccessLevel="5">
<DeviceServiceList>
<DeviceService RefService="2" />
</DeviceServiceList>
</Device>
<Device ID="2" RefDeviceType="1" Name="Living room Ceiling Lamp" Address="0x30000002" RefDivision="3"
MonAccessLevel="3" ControlAccessLevel="5">
<DeviceServiceList>
<DeviceService RefService="2" />
</DeviceServiceList>
</Device>
<Device ID="3" RefDeviceType="3" Name="Living room blinds 1" Address="0x30000003" RefDivision="3"
MonAccessLevel="3" ControlAccessLevel="5">
</Device>
<Device ID="4" RefDeviceType="3" Name="Living room blinds 2" Address="0x30000004" RefDivision="3"
MonAccessLevel="3" ControlAccessLevel="5">
</Device>
<Device ID="5" RefDeviceType="1" Name="Room 1 Ceiling Lamp" Address="0x30000005" RefDivision="4"
MonAccessLevel="3" ControlAccessLevel="5">
<DeviceServiceList>
<DeviceService RefService="2" />
</DeviceServiceList>
</Device>
<Device ID="6" RefDeviceType="1" Name="Room 2 Ceiling Lamp" Address="0x30000006" RefDivision="5"
MonAccessLevel="3" ControlAccessLevel="5">
<DeviceServiceList>
<DeviceService RefService="2" />
</DeviceServiceList>
</Device>
<Device ID="7" RefDeviceType="3" Name="Room 1 blinds" Address="0x30000007" RefDivision="4"
MonAccessLevel="3" ControlAccessLevel="5">
</Device>
<Device ID="8" RefDeviceType="3" Name="Room 2 blinds" Address="0x30000008" RefDivision="5"
MonAccessLevel="3" ControlAccessLevel="5">
</Device>
<Device ID="9" RefDeviceType="2" Name="Thermometer" Address="0x30000009" RefDivision="3"
MonAccessLevel="1" ControlAccessLevel="10">
</Device>
<Device ID="10" RefDeviceType="1" Name="Bathroom 1 Ceiling Lamp" Address="0x3000000A" RefDivision="6"
MonAccessLevel="3" ControlAccessLevel="5">
<DeviceServiceList>
<DeviceService RefService="2" />
</DeviceServiceList>
</Device>
<Device ID="11" RefDeviceType="1" Name="Bathroom 2 Ceiling Lamp" Address="0x3000000B" RefDivision="7"
MonAccessLevel="3" ControlAccessLevel="5">
<DeviceServiceList>
<DeviceService RefService="2" />
</DeviceServiceList>
</Device>
<Device ID="12" RefDeviceType="4" Name="Camera 1" Address="0x3000000C" RefDivision="3"
MonAccessLevel="8" ControlAccessLevel="10">
<DeviceServiceList>
<DeviceService RefService="6" />
</DeviceServiceList>
</Device>
<Device ID="13" RefDeviceType="5" Name="Alarm" Address="0x3000000D" RefDivision="3" MonAccessLevel="8"
ControlAccessLevel="10">
<DeviceServiceList>
<DeviceService RefService="6" />
</DeviceServiceList>
</Device>
<Device ID="14" RefDeviceType="6" Name="Test device" Address="0x3000000E" RefDivision="3"
MonAccessLevel="3" ControlAccessLevel="3">
</Device>
</DeviceList>
57
</DomoBusSystem>
58
Conteúdo do ficheiro settings.xml:
<DomoBusSystem ID="1" Name="Test House" Version="1.0">
<SMTPSettings ServerAddress="smtp.sapo.pt" ServerPort="25" Username="[email protected]"
Password="mgs2sol" SourceAddress="[email protected]"/>
<ContactList>
<Contact ID="5" Protocol="MSN_1" Name="[email protected]" RefUser="2" Verified="1"/>
</ContactList>
<MacroList>
<Macro ID="1" Name="Watch TV" RefUser="2">
<ActionList>
<Action ID="1" Name="Close blinds" RefDevice="3" RefProperty="1"
Value="0"/>
<Action ID="2" Name="Table Lamp 50%" RefDevice="1" RefProperty="2"
Value="50"/>
<Action ID="3" Name="Ceiling Lamp 40%" RefDevice="2" RefProperty="2"
Value="40"/>
</ActionList>
</Macro>
</MacroList>
<AlarmList>
<Alarm ID="1" RefUser="1" RefDevice="4" RefProperty="1" Operator="3" Value="30"/>
</AlarmList>
<NotificationList>
<Notification ID="1" RefUser="1" RefDevice="4" RefProperty="1" Operator="3" Value="25"/>
</NotificationList>
<Favourites>
<FavouriteList RefUser="1">
<FavouriteDevice RefDevice="1"/>
<FavouriteDivision RefDivision="3"/>
<FavouriteMacro RefMacro="1"/>
</FavouriteList>
</Favourites>
</DomoBusSystem>
59
Download

Tese 1,9 MB - Técnico Lisboa