4.6.1 Requisitos funcionales
Se requiere que para cada uno de los periféricos, actuadores y sensores, de los que consta el dispositivo SunSpot (sensor de temperatura, sensor de luz, acelerómetro y array de leds) se pueda modelar su comportamiento en tiempo real, haciendo uso de la API. Cada uno de estos periféricos tendrá tres estados: activado, desactivado y no presente. Para cada uno de estos estados el comportamiento del SunSpot será distinto cuando se haga uso de una de las funcionalidades que a su vez requieren el uso de estos periféricos.
4.6.2 Análisis
Figura 4.6.1 Diagrama de casos de uso de gestión de la configuración
4.6.3 Diseño
Haciendo uso de los patrones “factory”, “state” y “facade” se ha implementado el componente “ConfigurationManager” que aporta la funcionalidad necesaria para que la aplicación SunSpotApplication modifique su configuración de manera totalmente transparente a los demás componentes del midlet en el que está integrada.
4.6.3.1 Diagrama de componentes Entidad externa HostApplication SunSpotApplication ConfigurationManager API BroadcastConnection IConfigurationManager PeerConnection
Figura 4.6.2 Diagrama de componentes para la gestión de la configuración 4.6.3.2 Diagrama de clases
La clase “ConfigurationManager” (Figura 4.6.3) encapsula la lógica para modificar el estado de cada uno de los sensores y actuadores que son manejados por la clase “PeripheralsManager” cuando llega un mensaje de gestión de la configuración. Los objetos que modelan el comportamiento son instanciados por la clase “PeripheralsFactory” y establecidos en el objeto “PeripheralsManager”.
ConfigurationManager
A continuación se puede ver en los diagramas de clases que modelan el comportamiento de los sensores y actuadores como a partir de una interfaz que se implementa en una clase abstracta (Figuras 4.6.4, 4.6.5, 4.6.6 y 4.6.7), que provee de los métodos básicos y comunes, las clases concretas representan cada uno de los estados del sensor o actuador. Haciendo uso del patrón “state” se reduce el código a mantener y se facilita la extensión del mismo.
Sensores de luz
Sensores de temperatura
Figura 4.6.5 Diagrama de clases de del sensor de temperatura Acelerómetro
Array de leds
4.6.3.3 Diagramas de secuencia
En la Figura 4.6.8 se puede ver cuál es la secuencia de mensajes entre la aplicación SunSpotApplication y la clase “ConfigurationManager”: Cuando es recibido un mensaje de gestión de la configuración es entregado a la clase “ConfigurationManager” que decide en función del tipo y el contenido qué sensor o actuador tendrá un nuevo estado. La factoría instancia el objeto para el nuevo estado y este es establecido en el objeto “PeripheralsManager”.
Entidad
externa HostApplication SunSpot ConfigurationManager
Mensaje JSON PDU configFeatues(string e)
Respuesta PDU
Mensaje JSON
PeripheralsFactory
Instancia objeto concreto
PeripheralsManager
Establece objeto
Figura 4.6.8 Diagrama de secuencia de recepción de un mensaje de gestión de la configuración 4.6.3.4 Diagrama de actividad
Entidad externa HostApplication SunSpotApplication
Envia mensaje JSON
Recibe mensaje JSON
Parsea mensaje JSON
Envia PDUs Recibe PDU Instancia nuevo objeto de estado Envia PDU Recibe PDUs Procesa PDUs respuesta y forma un mensaje Parsea mensaje a JSON
Envia mensaje JSON Espera respuestas Recibe respuestas Reemplaza el estado del dispositivo Crea mensaje de respuesta
4.7
Consulta del estado de los dispositivos SunSpot
4.7.1 Requisitos funcionales
Se requiere que para cada uno de los periféricos, actuadores y sensores, de los que consta el dispositivo SunSpot (sensor de temperatura, sensor de luz, acelerómetro y array de leds) se pueda consultar su estado tiempo real, haciendo uso de la API. El sistema informará mediante un mensaje de respuesta del estado de todos los periféricos de un dispositivo SunSpot conectado a la red WSAN.
4.7.2 Análisis
Figura 4.7.1 Diagrama de casos de uso de para la consulta del estado de sensores y actuadores
4.7.3 Diseño
La clase “PeripheralsManager” (Figura 4.7.2) encapsula la lógica necesaria para, mediante el patrón “facade”, conocer el estado de cualquiera de los actuadores y sensores sin importar el estado en el que se encuentre de cada dispositivo. Cada sensor o actuador dispone de una serie de clases concretas según el patrón “state” que modelan su comportamiento como se ha podido ver anteriormente (Figuras 4.6.4, 4.6.5, 4.6.6 y 4.6.7).
4.7.3.1 Diagrama de componentes Entidad externa HostApplication SunSpotApplication PeripheralsManager API BroadcastConnection IPeripheralsManager PeerConnection
Figura 4.7.2 Diagrama de componentes para la consulta del estado de sensores y actuadores 4.7.3.2 Diagrama de clases
La clase “PeripheralsManager” (Figura 4.7.3) encapsula la lógica para acceder a los diferentes métodos para conocer el estado de las clases de los sensores y actuadores. Como se puede ver en la Figura 4.7.4 esta clase contiene como colaboradores abstracciones de cada uno de los sensores y actuadores de modo que no es consciente del estado concreto de cada uno de ellos y se limita a proveer de un punto de acceso común para la lógica de los dispositivos.
PeripheralsManager
Figura 4.7.4 Diagrama de clases relacionadas con la funcionalidad de consulta del estado de los sensores y actuadores
4.7.3.3 Diagramas de secuencia
En el diagrama de secuencia de la Figura 4.7.5 se puede ver cómo la aplicación SunSpotApplication se comunica con la clase PeripheralsManager que hace el papel de “facade” para proveer de toda la lógica para la consulta sobre los dispositivos.
Entidad
externa HostApp SunSpotApp PeripheralsManager
Mensaje JSON PDU GestStatus()
Respuesta PDU Mensaje JSON LightSensor TemperatureSensor Accelerometer LedArray GetStatusLighSensor GestStatusTemperatureSensor GetStatusAccelerometer GetStatusLedArray
Figura 4.7.5 Diagrama de secuencia de consulta de estado de los sensores y actuadores 4.7.3.4 Diagrama de actividad
Entidad externa HostApplication SunSpotApplication
Envia mensaje JSON
Recibe mensaje JSON
Parsea mensaje JSON
Envia PDUs Recibe PDU Consulta estado perifericos Envia PDU Recibe PDUs Procesa PDUs respuesta y forma un mensaje Parsea mensaje a JSON Envia mensaje JSON Espera respuestas
Recibe respuestas
Crea mensaje de respuesta