Project
Velum
A self-hosted smart home system on ESP32: a HomeKit bridge in the distribution cabinet drives relays, lights and sensors through I²C expanders, while wireless nodes run on a custom UDP protocol — no cloud, no subscriptions, everything local.
Client / Industry
Home automation & IoT — an in-house product, in daily use in a real house.
Platforms
ESP32-S3, ESP32, ESP32-C3/C6 and ESP8266; Apple HomeKit plus a custom web UI and REST API.
Role
Everything: bridge and node firmware, the VLP protocol, web UI, companion services, deployment.
Problem
A typical smart home today means five apps, three clouds and vendor lock-in — and an older installation of plain relays and wall buttons has practically no way into Apple Home without expensive gateways. When the internet drops or a vendor kills a service, the switch stops working. The goal was the opposite: one device in the distribution cabinet that drives the existing wiring, talks to HomeKit directly and keeps working when the network goes.
Solution
Velum is two firmwares and a couple of companion services. The bridge (ESP32-S3) shows up in Apple Home as a HomeKit bridge: through I²C expanders (PCF8574 + MCP23017 on the same bus) it gets up to 128 pins and builds accessories out of them — lights, covers, locks, fans, garage doors, sensors and an alarm. The node is firmware for wireless modules (RGB strips, sensors, power metering): it has no UI of its own — it pairs to exactly one bridge and is configured, monitored and updated through it, all over VLP, a custom UDP protocol with mDNS discovery.

- Bridge: dual-core architecture (I/O supervisor on one core, HTTP/HomeKit/VLP on the other), embedded web UI, REST API, security zones, energy metering and OTA — with zero external dependencies.
- Node: RGB lighting and environmental sensors (temperature, humidity, pressure, air quality, CO, CO₂, particulate matter) plus a 433 MHz weather station; remote OTA goes through the bridge, so a module built in behind a light fixture never gets touched.
- Companion services in Docker: an Eve history archive (graphs survive reboots) and a firmware server for pull-OTA across the whole fleet — both on the local network.
- Velum Panel (early stage): a wall-mounted touch panel on ESP32-P4 with an LVGL UI — the macOS simulator and ESP-IDF skeleton are in place, the UI layer is just getting started.


Tech stack
C++ (Arduino core, ESP-IDF), ESP32-S3 / ESP32 / ESP32-C3 / ESP32-C6 / ESP8266, HomeSpan, VLP (custom UDP protocol + mDNS), I²C (PCF8574, MCP23017), NVS + PSRAM, LVGL (ESP32-P4), PHP, MariaDB, Docker.

Results
0 clouds
Pairing, control, measurement history and OTA work without a single external service — the system never calls anything outside the LAN.
2 firmwares
Bridge and node share one protocol; a node pairs, configures and updates through the bridge with no UI of its own.
24/7
In production in a real house: survives router outages and reboots without losing configuration or measurement history.