Skip to content

Instantly share code, notes, and snippets.

@Barny-Claus
Last active February 29, 2024 03:42
Show Gist options
  • Save Barny-Claus/66648579f22396be300ff8457f0e6c83 to your computer and use it in GitHub Desktop.
Save Barny-Claus/66648579f22396be300ff8457f0e6c83 to your computer and use it in GitHub Desktop.

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
Loading

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
Loading
  • 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
Loading

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
Loading

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

Loading

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

Loading

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
Loading

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
Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment