# mit4el/iotmanager architecture

> Architecture diagram of the GitHub repository mit4el/iotmanager, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mit4el/iotmanager
- Repository: https://github.com/mit4el/iotmanager
- Video tour (about a minute): https://gitdiagram.com/mit4el/iotmanager/video

## Overview

IoTManager is ESP8266/ESP32 smart-home firmware: it connects peripheral devices to a shared model, runs configurable automation, and exposes readings and controls through MQTT and a local web interface. The principal workflow is device input → item/event handling → scenario logic → device action, with status also synchronized to clients. README capabilities include remote MQTT control, local web control, graphs, and notifications. The tree supports the major subsystem paths, but most module wiring is unsampled; uncertain call relationships are omitted.

Main entry points: [`src/classes/IoTItem.cpp`](https://github.com/mit4el/iotmanager/blob/ver4dev/src/classes/IoTItem.cpp) (Device items), [`src/Main.cpp`](https://github.com/mit4el/iotmanager/blob/ver4dev/src/Main.cpp) (Firmware runtime), [`src/MqttClient.cpp`](https://github.com/mit4el/iotmanager/blob/ver4dev/src/MqttClient.cpp) (MQTT client), [`src/classes/IoTScenario.cpp`](https://github.com/mit4el/iotmanager/blob/ver4dev/src/classes/IoTScenario.cpp) (Scenarios)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_core["Runtime and model"]
  node_firmware["Firmware runtime<br/>[Main.cpp]"]
  node_items["Device items<br/>[IoTItem.cpp]"]
  node_scenarios["Scenarios<br/>[IoTScenario.cpp]"]
  node_events["Events and orders"]
  node_database[("IoT database<br/>[IoTDB.cpp]")]
  node_tasks["Periodic tasks<br/>[PeriodicTasks.cpp]"]
  node_filesystem[("Configuration files<br/>[EspFileSystem.cpp]")]
end

subgraph group_device["Device modules"]
  node_sensors["Sensor modules"]
  node_executors["Action modules"]
  node_virtuals["Virtual modules"]
  node_displays["Display modules"]
end

subgraph group_interfaces["Client interfaces"]
  node_mqtt["MQTT client<br/>[MqttClient.cpp]"]
  node_web["Web servers<br/>[StandWebServer.cpp]"]
  node_asyncweb["Async web server<br/>[AsyncWebServer.cpp]"]
  node_websocket["WebSockets<br/>[WsServer.cpp]"]
  node_api["Device API<br/>[API.cpp]"]
  node_discovery["Home discovery<br/>[IoTDiscovery.cpp]"]
end

subgraph group_integrations["External services"]
  node_broker(("MQTT broker"))
  node_telegram(("Telegram"))
end

node_owner(("Homeowner"))
node_app(("Mobile app"))
node_browser(("Web browser"))
node_peripherals(("Sensors and actuators"))

node_owner -->|"controls remotely"| node_app
node_owner -->|"controls locally"| node_browser
node_peripherals -->|"provide readings"| node_sensors
node_sensors -->|"device data"| node_items
node_items -->|"trigger logic"| node_scenarios
node_scenarios -->|"request actions"| node_executors
node_executors -->|"control devices"| node_peripherals
node_items -->|"raise events"| node_events
node_scenarios -->|"issue orders"| node_events
node_firmware -->|"initializes"| node_filesystem
node_firmware -->|"initializes"| node_asyncweb
node_firmware -->|"initializes"| node_web
node_firmware -->|"initializes"| node_websocket
node_firmware -->|"schedules"| node_tasks
node_mqtt -->|"dispatches messages"| node_items
node_mqtt -->|"publishes and subscribes"| node_broker
node_broker -->|"delivers messages"| node_mqtt
node_app -->|"exchanges state"| node_broker
node_web -->|"serves controls"| node_browser
node_asyncweb -->|"serves controls"| node_browser
node_websocket -->|"synchronizes updates"| node_browser
node_items -->|"publishes status"| node_mqtt
node_virtuals -->|"provide functions"| node_items
node_displays -->|"show device state"| node_items
node_discovery -->|"announces devices"| node_mqtt
node_items -->|"stores data"| node_database
node_telegram -.->|"optional notifications"| node_executors

click node_firmware "https://github.com/mit4el/iotmanager/blob/ver4dev/src/Main.cpp"
click node_items "https://github.com/mit4el/iotmanager/blob/ver4dev/src/classes/IoTItem.cpp"
click node_scenarios "https://github.com/mit4el/iotmanager/blob/ver4dev/src/classes/IoTScenario.cpp"
click node_events "https://github.com/mit4el/iotmanager/blob/ver4dev/src/EventsAndOrders.cpp"
click node_database "https://github.com/mit4el/iotmanager/blob/ver4dev/src/classes/IoTDB.cpp"
click node_tasks "https://github.com/mit4el/iotmanager/blob/ver4dev/src/PeriodicTasks.cpp"
click node_sensors "https://github.com/mit4el/iotmanager/tree/ver4dev/src/modules/sensors"
click node_executors "https://github.com/mit4el/iotmanager/tree/ver4dev/src/modules/exec"
click node_virtuals "https://github.com/mit4el/iotmanager/tree/ver4dev/src/modules/virtual"
click node_displays "https://github.com/mit4el/iotmanager/tree/ver4dev/src/modules/display"
click node_mqtt "https://github.com/mit4el/iotmanager/blob/ver4dev/src/MqttClient.cpp"
click node_web "https://github.com/mit4el/iotmanager/blob/ver4dev/src/StandWebServer.cpp"
click node_asyncweb "https://github.com/mit4el/iotmanager/blob/ver4dev/src/AsyncWebServer.cpp"
click node_websocket "https://github.com/mit4el/iotmanager/blob/ver4dev/src/WsServer.cpp"
click node_api "https://github.com/mit4el/iotmanager/blob/ver4dev/src/modules/API.cpp"
click node_discovery "https://github.com/mit4el/iotmanager/blob/ver4dev/src/classes/IoTDiscovery.cpp"
click node_filesystem "https://github.com/mit4el/iotmanager/blob/ver4dev/src/EspFileSystem.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_firmware,node_items,node_scenarios,node_events,node_database,node_tasks,node_filesystem,node_browser toneBlue
class node_sensors,node_executors,node_virtuals,node_displays toneAmber
class node_mqtt,node_web,node_asyncweb,node_websocket,node_api,node_discovery toneMint
class node_broker,node_telegram toneRose
class node_owner,node_app,node_peripherals toneIndigo
```

## Components

### Runtime and model

- [Firmware runtime](https://github.com/mit4el/iotmanager/blob/ver4dev/src/Main.cpp): `src/Main.cpp`
- [Device items](https://github.com/mit4el/iotmanager/blob/ver4dev/src/classes/IoTItem.cpp): `src/classes/IoTItem.cpp`
- [Scenarios](https://github.com/mit4el/iotmanager/blob/ver4dev/src/classes/IoTScenario.cpp): `src/classes/IoTScenario.cpp`
- [Events and orders](https://github.com/mit4el/iotmanager/blob/ver4dev/src/EventsAndOrders.cpp): `src/EventsAndOrders.cpp`
- [IoT database](https://github.com/mit4el/iotmanager/blob/ver4dev/src/classes/IoTDB.cpp): `src/classes/IoTDB.cpp`
- [Periodic tasks](https://github.com/mit4el/iotmanager/blob/ver4dev/src/PeriodicTasks.cpp): `src/PeriodicTasks.cpp`
- [Configuration files](https://github.com/mit4el/iotmanager/blob/ver4dev/src/EspFileSystem.cpp): `src/EspFileSystem.cpp`

### Device modules

- [Sensor modules](https://github.com/mit4el/iotmanager/tree/ver4dev/src/modules/sensors): `src/modules/sensors`
- [Action modules](https://github.com/mit4el/iotmanager/tree/ver4dev/src/modules/exec): `src/modules/exec`
- [Virtual modules](https://github.com/mit4el/iotmanager/tree/ver4dev/src/modules/virtual): `src/modules/virtual`
- [Display modules](https://github.com/mit4el/iotmanager/tree/ver4dev/src/modules/display): `src/modules/display`

### Client interfaces

- [MQTT client](https://github.com/mit4el/iotmanager/blob/ver4dev/src/MqttClient.cpp): `src/MqttClient.cpp`
- [Web servers](https://github.com/mit4el/iotmanager/blob/ver4dev/src/StandWebServer.cpp): `src/StandWebServer.cpp`
- [Async web server](https://github.com/mit4el/iotmanager/blob/ver4dev/src/AsyncWebServer.cpp): `src/AsyncWebServer.cpp`
- [WebSockets](https://github.com/mit4el/iotmanager/blob/ver4dev/src/WsServer.cpp): `src/WsServer.cpp`
- [Device API](https://github.com/mit4el/iotmanager/blob/ver4dev/src/modules/API.cpp): `src/modules/API.cpp`
- [Home discovery](https://github.com/mit4el/iotmanager/blob/ver4dev/src/classes/IoTDiscovery.cpp): `src/classes/IoTDiscovery.cpp`

### External services

- **MQTT broker**
- **Telegram**

### Other components

- **Homeowner**
- **Mobile app**
- **Web browser**
- **Sensors and actuators**

## Connections

- Homeowner → Mobile app: controls remotely
- Homeowner → Web browser: controls locally
- Sensors and actuators → Sensor modules: provide readings
- Sensor modules → Device items: device data
- Device items → Scenarios: trigger logic
- Scenarios → Action modules: request actions
- Action modules → Sensors and actuators: control devices
- Device items → Events and orders: raise events
- Scenarios → Events and orders: issue orders
- Firmware runtime → Configuration files: initializes
- Firmware runtime → Async web server: initializes
- Firmware runtime → Web servers: initializes
- Firmware runtime → WebSockets: initializes
- Firmware runtime → Periodic tasks: schedules
- MQTT client → Device items: dispatches messages
- MQTT client → MQTT broker: publishes and subscribes
- MQTT broker → MQTT client: delivers messages
- Mobile app → MQTT broker: exchanges state
- Web servers → Web browser: serves controls
- Async web server → Web browser: serves controls
- WebSockets → Web browser: synchronizes updates
- Device items → MQTT client: publishes status
- Virtual modules → Device items: provide functions
- Display modules → Device items: show device state
- Home discovery → MQTT client: announces devices
- Device items → IoT database: stores data
- Telegram → Action modules: optional notifications
