Patrón de Publicador-Suscriptor (Publish-Subscribe):
- Permite la comunicación asíncrona entre los diferentes componentes del sistema. Facilita la distribución de datos ambientales desde los sensores a los sistemas de procesamiento y visualización.
classDiagram
class Publisher {
+ subscribe(subscriber)
+ unsubscribe(subscriber)
+ notify(message)
}
class Subscriber {
+ receive(message)
}
Publisher <-- Subscriber
Patrón de Capas (Layered Pattern):
- Divide el sistema en capas (por ejemplo, capa de sensores, capa de procesamiento, capa de aplicación) para modularizar y facilitar el mantenimiento. Ayuda a aislar las preocupaciones y simplifica la escalabilidad y la gestión de cambios.
classDiagram
class PresentationLayer {
+ displayData()
}
class BusinessLogicLayer {
+ processRequest()
}
class DataAccessLayer {
+ fetchData()
}
PresentationLayer --> BusinessLogicLayer
BusinessLogicLayer --> DataAccessLayer
-
Patrón de Proxy:
- Utiliza proxies para gestionar la comunicación entre los dispositivos IoT y el servidor central. Puede ayudar a reducir la carga en el servidor central y mejorar la seguridad al filtrar y autenticar las solicitudes.
classDiagram
class Subject {
+ request()
}
class RealSubject {
- performRequest()
}
class Proxy {
- realSubject: RealSubject
+ request()
}
Subject <|.. RealSubject
Proxy --> RealSubject: Creates
Proxy --> Subject
Patrón de Repositorio (Repository Pattern):
- Abstrae el acceso a los datos ambientales, permitiendo la flexibilidad en el almacenamiento y recuperación de datos. Facilita la integración con diferentes tipos de bases de datos y sistemas de almacenamiento.
classDiagram
class Repository {
+ getAll()
+ getById(id)
+ add(entity)
+ update(entity)
+ remove(entity)
}
class ConcreteRepository {
- data: List<Entity>
+ getAll()
+ getById(id)
+ add(entity)
+ update(entity)
+ remove(entity)
}
class Entity {
- id: int
- name: string
+ getId()
+ getName()
+ setId(id)
+ setName(name)
}
class Client {
- repository: Repository
+ execute()
}
Repository <|-- ConcreteRepository
Repository o-- Entity
Client --> Repository
Patrón de Caché:
- Almacena en caché datos ambientales frecuentemente solicitados para mejorar el rendimiento y reducir la carga en los sistemas de procesamiento. Puede ayudar a garantizar tiempos de respuesta rápidos para consultas repetidas
classDiagram
class Cache {
- cache: Map<Key, Value>
+ get(key)
+ put(key, value)
+ remove(key)
+ clear()
}
class RealSubject {
+ request()
}
class Proxy {
- realSubject: RealSubject
- cache: Cache
+ request()
}
Cache --> Key-Value Pair
Proxy --> RealSubject: Creates
Proxy --> Cache: Creates
Patrón de Agente Inteligente:
- Utiliza agentes inteligentes para controlar y coordinar los dispositivos IoT y los sistemas de procesamiento. Puede mejorar la eficiencia energética al optimizar el uso de recursos y la toma de decisiones.
classDiagram
class Environment {
+ getState()
+ setState(state)
}
class Agent {
- environment: Environment
+ perceive()
+ think()
+ act()
}
Environment <|-- ConcreteEnvironment
Agent <|-- IntelligentAgent
Patrón de Supervisión y Control:
- Implementa un sistema de supervisión y control para monitorear el estado de los sensores, detectar anomalías y tomar medidas correctivas cuando sea necesario. Ayuda a garantizar la confiabilidad y la precisión del sistema de monitoreo ambiental.
classDiagram
class Controller {
+ executeAction()
}
class Monitor {
+ observe()
}
class Client {
- controller: Controller
- monitor: Monitor
+ execute()
}
Client --> Controller: Creates
Client --> Monitor: Creates
Clases
Para un Sistema de Monitoreo Ambiental IoT en Ciudades Inteligentes, se pueden definir varias clases que representen los diferentes componentes y entidades involucradas en el sistema. Aquí hay una lista de clases que podrían ser necesarias:
- Sensor:
- Representa un dispositivo de sensor IoT que recopila datos ambientales, como temperatura, humedad, calidad del aire, etc.
- Atributos: ID de sensor, tipo de sensor, ubicación, estado de funcionamiento, lecturas de datos, etc.
- Controlador de Sensor:
- Gestiona la comunicación y el control de los sensores IoT.
- Atributos: ID de controlador, estado de conexión, configuración, métodos para iniciar/parar la recolección de datos, etc.
- Datos Ambientales:
- Representa los datos ambientales recopilados por los sensores.
- Atributos: Tipo de datos, valor, unidad de medida, marca de tiempo, ID de sensor asociado, etc.
- Dispositivo de Actuación:
- Representa dispositivos IoT que pueden actuar sobre el entorno según los datos ambientales recopilados, como sistemas de riego automatizado, control de semáforos, etc.
- Atributos: ID de dispositivo, tipo de dispositivo, ubicación, estado, métodos para activar/desactivar, etc.
- Sistema de Almacenamiento:
- Encargado de almacenar y gestionar los datos ambientales recopilados.
- Atributos: Base de datos, método para guardar/recuperar datos, métodos para consultar datos históricos, etc.
- Sistema de Procesamiento:
- Procesa los datos ambientales recopilados para realizar análisis, generación de informes, detección de anomalías, etc.
- Atributos: Métodos para procesar datos, generar informes, detectar anomalías, etc.
- Interfaz de Usuario:
- Proporciona una interfaz para que los usuarios interactúen con el sistema, visualicen datos ambientales, configuren alarmas, etc.
- Atributos: Pantallas, widgets, métodos para mostrar datos, métodos para configurar el sistema, etc.
- Administrador del Sistema:
- Gestiona la configuración, la seguridad y el mantenimiento del sistema.
- Atributos: Métodos para configurar el sistema, gestionar usuarios, aplicar actualizaciones, etc. conexión
classDiagram
class Sensor {
- sensor_id: int
- sensor_type: string
- location: string
- operational_status: bool
- data_readings: list
+ __init__(sensor_id, sensor_type, location, operational_status)
+ add_reading(reading)
+ get_sensor_id(): int
+ get_sensor_type(): string
+ get_location(): string
+ is_operational(): bool
+ set_operational_status(operational_status)
+ get_data_readings(): list
}
class SensorController {
- controller_id: int
- connection_status: bool
- configuration: dict
+ __init__(controller_id, connection_status)
+ start_data_collection()
+ stop_data_collection()
+ get_controller_id(): int
+ get_connection_status(): bool
+ get_configuration(): dict
+ set_configuration(configuration)
}
class EnvironmentalData {
- data_type: string
- value: float
- unit: string
- timestamp: datetime
- sensor_id: int
+ __init__(data_type, value, unit, timestamp, sensor_id)
+ get_data_type(): string
+ get_value(): float
+ get_unit(): string
+ get_timestamp(): datetime
+ get_sensor_id(): int
}
class ActuationDevice {
- device_id: int
- device_type: string
- location: string
- state: bool
+ __init__(device_id, device_type, location, state)
+ activate()
+ deactivate()
+ get_device_id(): int
+ get_device_type(): string
+ get_location(): string
+ get_state(): bool
+ set_state(state)
}
class StorageSystem {
- database: Database
+ save_data(data)
+ retrieve_data(start_time, end_time)
+ query_historical_data(query)
}
class ProcessingSystem {
+ process_data(data)
+ generate_reports(data)
+ detect_anomalies(data)
}
class UserInterface {
- screens: list
- widgets: list
+ show_data(data)
+ configure_system()
+ set_alarms()
}
class SystemAdministrator {
+ configure_system()
+ manage_users()
+ apply_updates()
}
class Database {
+ save(data)
+ retrieve(query)
}
Sensor -- SensorController
Sensor -- EnvironmentalData
SensorController -- Sensor
EnvironmentalData -- Sensor
ActuationDevice -- Sensor
StorageSystem -- Database