Digitizing Residential Access Control
An 800m² property, two gates and a roller shutter door, controlled by three unreliable remotes that couldn't be shared. Rebuilt as one secure IoT system — automated, app-controlled, and accessible to the whole household.
The Problem
One physical remote per door, for a household with 3 cars, 3 motorbikes, 4 bicycles, a UTV and an ATV.
Three separate entry points, three separate handheld remotes, and no way to share any of them. Whoever drove out with a remote took that door's only key with them — leaving everyone still at the property unable to open it, and anyone who left without one unable to get back in.
One opener.
Three doors. Every phone.
An IoT system that reports on itself.
Nothing goes unnoticed.
- Daily check-inA status summary reaches the admin every day — uptime, activity, nothing needed from anyone.
- Reboot notificationsPower cut, Wi-Fi drop, or a manual restart — every reboot is reported the moment it happens.
- Live health for every userTemperature, uptime and connection status are visible from any phone, in real time, not just to one admin account.
The system is automated.
Opens on schedule.
A door can open itself at a set time — the garage at 08:00 every morning — with nobody touching the app. It only runs while a phone is on the property's own Wi-Fi, so nothing opens by itself while the household is away.
Opens on arrival.
Drive back and the gate is already moving. The moment a phone rejoins the home Wi-Fi, the door it left through opens on its own — no app, no remote, no stopping at the gate.
The Opener
One board.
Three isolated circuits.
An ESP32 runs the whole system. It joins the home Wi-Fi on boot, listens for signed requests, and drives one GPIO pin per door — 23, 19 and 18.
Each pin feeds an optocoupler through a current-limiting resistor. Inside the PC817, the signal crosses as light: there is no electrical connection between the two halves, so the ESP32 never shares a circuit with the remote it triggers.
On the far side, the optocoupler simply closes the remote's own button contacts for 700 milliseconds — the same thing a thumb does, and nothing more.
3D-printed for the wall.
- Wall-mountedDesigned to mount on a wall and stay there, not sit loose on a shelf.
- Grilles for ventilationOn the top and bottom of the cover, letting air in and out around the board.
- Sealed power entryA cable hole feeds the 5V power lead straight to the ESP32.
- Dedicated mountsThe ESP32 held in place, and each of the three remotes gets its own fixed spot — nothing floating loose, nothing resting on its wiring.
The App
One slide opens any door. Every phone in the household controls the same three entry points, safely and independently — no shared remote, no waiting on whoever has it.
- Always connectedThe app and the opener exchange status live, over the local network — a real IoT link, not a one-shot command.
- Healthy, at a glanceA green status means the opener answered just now and everything's normal.
- Offline is shown tooLost Wi-Fi, no local network, or unreachable — the app says so, instead of pretending a door opened.
Always visible.
Live status from the opener itself, no separate dashboard.
- UptimeHow long the opener has been running since it last rebooted.
- ConnectionWi-Fi signal strength between the phone and the opener.
- Signals sentTrigger count per door, since boot.
- Board temperatureLive reading from the ESP32's own sensor.
- Free memoryRemaining heap on the controller.
Signed, single-use triggers over a local API.
The ESP32 issues a fresh nonce per request; the app signs it with a shared key over HMAC‑SHA256. A replayed or stale signature is rejected before anything touches a GPIO pin.
// shared by all three doors — cooldown + signature checked before firing void handleTriggerFor(uint8_t door) { if (millis() - g_lastTriggerAt[door] < COOLDOWN_MS) { return respond(429, "cooldown"); } if (!verifyNonceAndSignature()) { return respond(401, "unauthorized"); } pulse(DOOR_PIN[door], PULSE_MS); g_lastTriggerAt[door] = millis(); g_triggerCount[door]++; }
Digitizing Residential Access Control
Designed, wired, and shipped end-to-end — hardware, firmware, and app.
