home-anthill is an IoT home automation system where ESP32 microcontrollers send sensor data (temperature, humidity, motion, air quality, light, air pressure, etc.) over MQTT. A Kubernetes-based microservice backend collects, stores, and exposes that data via REST/gRPC APIs. A React web UI and an Android mobile app let users manage their devices remotely.
ESP32 devices
│ MQTT (TLS)
▼
Mosquitto (MQTT broker)
├──► online-receiver ──► Redis ◄── online ◄── online-alarm ──► FCM (push)
└──► producer ──► RabbitMQ ──► consumer ──► MongoDB (sensors DB)
api-devices (gRPC) ◄──► admission (REST/gRPC)
api-server (REST) ──► MongoDB (main DB)
▲
gui (React) / app (Android) ── GitHub OAuth2
There are 3 types of ESP32 firmwares:
controllers— control devices like Air Conditioners (supports BekoRG52A9/BGEFand LGAKB74955603; extendable viacrankyoldgit/IRremoteESP8266)sensors— read temperature, humidity, light (lux), air quality, motion, air pressurehybrid— both control and sense
| Repository | Language | Role |
|---|---|---|
| api-server | Go | Central REST API: homes, rooms, devices, profiles, auth |
| api-devices | Go | gRPC service: device registration + MQTT value publishing |
| admission | Go | REST + gRPC: device/sensor registration gateway |
| register | Rust | Sensor registration and data retrieval (MongoDB) |
| producer | Rust | MQTT → RabbitMQ bridge |
| consumer | Rust | RabbitMQ → MongoDB: persists sensor data |
| online | Rust | Tracks device online status in Redis; manages FCM tokens |
| online-receiver | Rust | MQTT → Redis: stores device presence with timestamps |
| online-alarm | Rust | Polls Redis for offline devices; sends FCM push notifications |
| gui | TypeScript (React) | Web dashboard: homes, devices, sensors |
| app | Kotlin (Android) | Mobile app: GitHub OAuth2, device management, FCM notifications |
| firmwares | C++ (Arduino) | ESP32 firmware: sensor, controller, thermostat variants |
| deployer | Helm | Kubernetes Helm chart for full platform deployment |
| mosquitto | Go + Docker | MQTT broker with dynamic auth entrypoint |
| esp32-configurator | Python | CLI: generates C header files from YAML config for ESP32 firmware |
| k8s-config-reloader | Go | K8s sidecar: watches ConfigMaps/Secrets, sends SIGHUP on change |
| docs | — | Architecture diagrams, setup guides, API collections |
| Guide | Description |
|---|---|
| Local development setup | Run the full stack locally with Docker |
| Hetzner / K8s deployment | Production deployment on a K3s cluster (Hetzner) |
| Firmware install | Flash ESP32 firmware with arduino-cli |
| Architecture diagrams | Draw.io diagrams: register, control, sensor, notification flows |
| Bruno API collections | Ready-to-use API request collections |