Guardian System — Home Assistant RFID portal, doorbell, and door lamp. Not an add-on, not a product, not supported
JavaScript
1
5 commits
updated Sep 25, 2026
A home security system built on Home Assistant: RFID entry at two doors, a keypad-and-display door portal, presence tracking per key, a camera-driven door lamp, person detection, and an alarm that reaches phones.
Start here: INSTALL.md — from a fresh Home Assistant to a working system.
Ready with documented caveats. Not a product, not an add-on, not supported. A burglar alarm that fails does so at the worst possible moment. Read the caveats below before you run it. MIT, as is, without warranty.
Interior portal |
Doorbell |
Door lamp |
Step-by-step assembly with more photographs is in
docs/documentation/.
PCBs/ has KiCad source plus Gerber+drill zips. There is no CPL.
The door lamp has no PCB — commercial bulb + camera in a printed
housing.Not application source code. It is the config tree for a Home Assistant instance, plus firmware for two ESP32 devices:
| Piece | What it is |
|---|---|
| Interior portal | ESP32 at the main door: RC522 RFID, keypad, 240×135 ST7789 display, LED, door contact, lever IMU, DFPlayer for siren and chirps. |
| Doorbell unit | A second ESP32 outside: RFID reader and button. A key works from outside without the portal. |
| Home Assistant | Automations, scripts, and helper packages. All the actual logic. |
| Frigate | A separate NVR add-on for person detection, reaching Guardian over MQTT. |
| Guardian panel | A custom Home Assistant panel in one vanilla-JS ES module. No build step. |
There is no application build and no way to execute this locally. The only way to run it is a real Home Assistant instance and real hardware.
Meshes are not in this tree. Download the Bambu Studio profile for each device from the MakerWorld collection or the Printables collection:
| Device | Profile | MakerWorld | Printables |
|---|---|---|---|
| Door lamp (Tapo C110 + L530E) | Lamp-Final.3mf | listing | listing |
| Interior portal | Internal-Portal-Final.3mf | listing | listing |
| Doorbell | Doorbell-Final.3mf | listing | listing |
| File | Read it for |
|---|---|
INSTALL.md | Day-one path: prerequisites, file placement, restart, setup wizard, what leaves your network. |
docs/ | Hardware index: assembly, printable PDFs, parts checklist, DFPlayer tracks. |
docs/documentation/ | Assembly photographs, soldering order, and a printable PDF per device. |
docs/bom.md | One-page parts checklist. Not a pick-and-place file. |
PCBs/ | Two KiCad 10 projects and Gerber+drill zips. |
3D-Models/ | Where the print files live (MakerWorld / Printables). This tree does not ship STLs. |
SECURITY.md | How to report a problem, and what not to paste into an issue. |
CONTRIBUTING.md | Preflight, selftest, and how to propose a change. |
DEPLOY.md | Maintainer changelog and manual test plan. |
docs/maintainers/ | Audit, panel design, contributor onboarding. |
There is exactly one automated check, and it is static:
python tools/guardian-preflight.py
It validates that every YAML file parses, that version literals agree,
that script references resolve, that automation ids are unique, that no
secret placeholder survives, that nothing under www/guardian-ui/
reaches an external host, and that nothing can quietly cancel an alert.
It makes no network call and reads no credential value.
And one test for that check:
python tools/guardian-selftest-preflight.py
It does not test behaviour. Nothing here fires an alarm. For that,
use Home Assistant's Check configuration and the numbered steps in
DEPLOY.md.
Stated plainly, because the parts that are careful could be mistaken for parts that are enforced.
require_admin: false so a non-administrator can use Keys
and Notifications. Home Assistant still does not restrict which
services a non-admin may call from Developer Tools. See
docs/maintainers/GUARDIAN_UI.md
§ Security boundaries.INSTALL.md §10.esphome/secrets.yaml (gitignored, generated by
tools/guardian-gen-secrets.py), Frigate add-on environment
variables, and the master PIN.Works, in daily use in one household: RFID entry at both readers, presence per key, passage windows and direction classification, the MFA/challenge flow, enrollment, per-person alert routing, the lamp, the panel, the offline watchdogs.
Known gaps, deliberately not hidden:
PCBs/. Not pick-and-place.INSTALL.md §9 and DEPLOY.md numbered steps remain the
proof.Early private git history contained a household LAN address and a camera RTSP URL. This public repository was seeded from a cleaned tree; that log is not here. If those credentials were ever live, rotate them.
MIT. This is a burglar alarm provided as is, without warranty of any kind. If you run it, you own the consequences of it failing.
5 commits
JavaScript
57.2%
Python
24.5%
C++
9.2%
HTML
6.3%
Shell
2.8%
Guardian System — Home Assistant RFID portal, doorbell, and door lamp. Not an add-on, not a product, not supported
JavaScript
1
5 commits
updated Sep 25, 2026
A home security system built on Home Assistant: RFID entry at two doors, a keypad-and-display door portal, presence tracking per key, a camera-driven door lamp, person detection, and an alarm that reaches phones.
Start here: INSTALL.md — from a fresh Home Assistant to a working system.
Ready with documented caveats. Not a product, not an add-on, not supported. A burglar alarm that fails does so at the worst possible moment. Read the caveats below before you run it. MIT, as is, without warranty.
Interior portal |
Doorbell |
Door lamp |
Step-by-step assembly with more photographs is in
docs/documentation/.
PCBs/ has KiCad source plus Gerber+drill zips. There is no CPL.
The door lamp has no PCB — commercial bulb + camera in a printed
housing.Not application source code. It is the config tree for a Home Assistant instance, plus firmware for two ESP32 devices:
| Piece | What it is |
|---|---|
| Interior portal | ESP32 at the main door: RC522 RFID, keypad, 240×135 ST7789 display, LED, door contact, lever IMU, DFPlayer for siren and chirps. |
| Doorbell unit | A second ESP32 outside: RFID reader and button. A key works from outside without the portal. |
| Home Assistant | Automations, scripts, and helper packages. All the actual logic. |
| Frigate | A separate NVR add-on for person detection, reaching Guardian over MQTT. |
| Guardian panel | A custom Home Assistant panel in one vanilla-JS ES module. No build step. |
There is no application build and no way to execute this locally. The only way to run it is a real Home Assistant instance and real hardware.
Meshes are not in this tree. Download the Bambu Studio profile for each device from the MakerWorld collection or the Printables collection:
| Device | Profile | MakerWorld | Printables |
|---|---|---|---|
| Door lamp (Tapo C110 + L530E) | Lamp-Final.3mf | listing | listing |
| Interior portal | Internal-Portal-Final.3mf | listing | listing |
| Doorbell | Doorbell-Final.3mf | listing | listing |
| File | Read it for |
|---|---|
INSTALL.md | Day-one path: prerequisites, file placement, restart, setup wizard, what leaves your network. |
docs/ | Hardware index: assembly, printable PDFs, parts checklist, DFPlayer tracks. |
docs/documentation/ | Assembly photographs, soldering order, and a printable PDF per device. |
docs/bom.md | One-page parts checklist. Not a pick-and-place file. |
PCBs/ | Two KiCad 10 projects and Gerber+drill zips. |
3D-Models/ | Where the print files live (MakerWorld / Printables). This tree does not ship STLs. |
SECURITY.md | How to report a problem, and what not to paste into an issue. |
CONTRIBUTING.md | Preflight, selftest, and how to propose a change. |
DEPLOY.md | Maintainer changelog and manual test plan. |
docs/maintainers/ | Audit, panel design, contributor onboarding. |
There is exactly one automated check, and it is static:
python tools/guardian-preflight.py
It validates that every YAML file parses, that version literals agree,
that script references resolve, that automation ids are unique, that no
secret placeholder survives, that nothing under www/guardian-ui/
reaches an external host, and that nothing can quietly cancel an alert.
It makes no network call and reads no credential value.
And one test for that check:
python tools/guardian-selftest-preflight.py
It does not test behaviour. Nothing here fires an alarm. For that,
use Home Assistant's Check configuration and the numbered steps in
DEPLOY.md.
Stated plainly, because the parts that are careful could be mistaken for parts that are enforced.
require_admin: false so a non-administrator can use Keys
and Notifications. Home Assistant still does not restrict which
services a non-admin may call from Developer Tools. See
docs/maintainers/GUARDIAN_UI.md
§ Security boundaries.INSTALL.md §10.esphome/secrets.yaml (gitignored, generated by
tools/guardian-gen-secrets.py), Frigate add-on environment
variables, and the master PIN.Works, in daily use in one household: RFID entry at both readers, presence per key, passage windows and direction classification, the MFA/challenge flow, enrollment, per-person alert routing, the lamp, the panel, the offline watchdogs.
Known gaps, deliberately not hidden:
PCBs/. Not pick-and-place.INSTALL.md §9 and DEPLOY.md numbered steps remain the
proof.Early private git history contained a household LAN address and a camera RTSP URL. This public repository was seeded from a cleaned tree; that log is not here. If those credentials were ever live, rotate them.
MIT. This is a burglar alarm provided as is, without warranty of any kind. If you run it, you own the consequences of it failing.
5 commits
JavaScript
57.2%
Python
24.5%
C++
9.2%
HTML
6.3%
Shell
2.8%