@startuml interface MQTT as mqtt1 interface MQTT as mqtt2 interface HTTP as http1 interface HTTP as http2 interface WebSocket node Agent { component Accelerometer component GPS component CarParkingSlots component "Data Aggregator" as agent_agg } node Edge { component AgentMQTTAdapter component AgentDataProcessor component HubMQTTAdapter component HubHTTPAdapter } node Hub { component EdgeHTTPAdapter component EdgeMQTTAdapter component Aggregator component StoreHTTPAdapter component Redis } node Store { component "HTTP Rest API" as store_http component "SQL Adapter" as store_sql component "Websocket API" as store_ws } node MapView { component "Store Processor" as mv_sp component "Input Handler" as mv_ih component "Map" } component PostgreSQL agent_agg --> Accelerometer agent_agg --> GPS agent_agg --> CarParkingSlots agent_agg -> mqtt1 mqtt1 <- AgentMQTTAdapter AgentMQTTAdapter -> AgentDataProcessor AgentDataProcessor --> HubMQTTAdapter AgentDataProcessor --> HubHTTPAdapter HubMQTTAdapter --> mqtt2 HubHTTPAdapter --> http1 mqtt2 <-- EdgeMQTTAdapter http1 <-- EdgeHTTPAdapter EdgeMQTTAdapter --> Aggregator EdgeHTTPAdapter --> Aggregator Aggregator <--> Redis StoreHTTPAdapter <-- Aggregator http2 <-- StoreHTTPAdapter store_http --> http2 store_http -> store_sql store_sql <- store_ws store_ws --> WebSocket store_sql <--> PostgreSQL WebSocket <-- mv_sp mv_sp <-- mv_ih mv_sp --> Map actor Spectator as user Map --> user mv_ih <-- user @enduml