Personal PIN
Cada usuario recibe un código único, no un PIN de gimnasio compartido. Los intentos fallidos bloquean el teclado. Company Admin puede rotar un PIN sin tocar el hardware.
Una plataforma en la nube para cada puerta que importa: oficinas, plantas de gimnasio, salas de personal de cafeterías y ascensores. La gente desbloquea con PIN personal, toque NFC o teléfono, y Super Admin más Company Admin lo ven en vivo.
El producto es una consola React para tres roles, un backend Go y MQTT desde un controlador de puerta hardware en ESP32 / ESP32-S3. Cada apertura es un kit: panel ESP32, lector PN532 o Wiegand, cerradura, contacto y petición de salida. Esa placa publica desbloqueos, denegaciones y estado de puerta: Super Admin no sondea el teclado.
Los equipos de instalaciones gestionaban vestíbulos, puertas de gimnasio, puertas de personal de cafetería y pisos de ascensor como sistemas separados. Las llaves físicas estaban en un cajón. Un PIN estaba escrito en un post-it detrás de la cafetera. Los socios del gimnasio compartían el mismo código de cuatro dígitos. Cuando alguien dejaba la empresa, nadie sabía qué puertas podía seguir abriendo.
Cada método sigue comprobando horario, zona y rol en el motor de políticas Go. Las apps React solo muestran lo que ese rol puede hacer.
Cada usuario recibe un código único, no un PIN de gimnasio compartido. Los intentos fallidos bloquean el teclado. Company Admin puede rotar un PIN sin tocar el hardware.
Toque el lector para entrada sin contacto en vestíbulo, gimnasio, cafetería o ascensor. El evento igual aparece en los feeds en vivo de Super Admin y Company Admin.
El panel de usuario lista solo las puertas asignadas. Un toque desbloquea si están en rango, o van al teclado e introducen el PIN para las salas de personal de cafetería.
El cliente MQTT es un ESP32-S3 (o ESP32-WROOM-32 en salas de personal de cafetería de dos puertas). Los dispositivos de campo cuelgan de esa placa. Lectores y cerraduras no hablan con la nube por su cuenta.
Espressif ESP32-S3 (Wi-Fi + BLE) como panel de 2/4 puertas en el armario de comunicaciones. Relés GPIO para la cerradura, Wiegand/OSDP del lector, cliente MQTT TLS que publica cada evento. Las sedes de cafetería de dos puertas usan ESP32-WROOM-32.
ESP32-S3 · ESP32-WROOM-32NXP PN532 (13,56 MHz NFC / toque de teléfono) en el lado no seguro, más un lector RFID Wiegand de 125 kHz para credenciales. El ESP32 solo recibe el UID: no abre la cerradura hasta que Go (o la caché local) dice sí.
PN532 · Wiegand 26-bitTeclado de membrana 4×4 en puertas de personal de cafetería y puertas de gimnasio fuera de horario, leído por GPIO del ESP32. Los PIN erróneos bloquean el teclado; el ESP32 igual publica el denegado en MQTT.
4×4 keypadGolpe eléctrico fail-secure 12V en puertas de oficina; cerradura electromagnética 12V en hojas de cristal de gimnasio y vestíbulo. Un relé optoaislado en el ESP32 es lo que realmente desbloquea, no la app del teléfono.
12V lock · relayReed magnético MC-38 en el marco, cableado a GPIO del ESP32. Cerrada vs retenida abierta vs forzada. Las alertas de Super Admin vienen de este sensor, no de una conjetura de cámara.
MC-38 DPSPIR HC-SR501 o botón push-to-exit en el lado seguro para que la gente salga sin PIN. El ESP32 publica REX para que una salida libre no se registre como puerta forzada.
12V para maglock y golpe, 5V para el ESP32. Si se va la red, el ESP32 publica POWER_FAIL y se mantiene con un respaldo pequeño el tiempo suficiente para que la puerta del gimnasio siga siendo honesta.
El desbloqueo de My Doors no es una cerradura Bluetooth. El teléfono pega a la API Go; Go publica un comando al que se suscribe el ESP32, y dispara el mismo relé que usa el teclado PIN. El ESP32 igual publica el evento.
ESP32 /cmdEl mismo firmware de lector IoT se instala en cuatro entornos. La política — no el hardware — decide quién puede abrir qué puerta y cuándo.
Building
Entrada principal de cristal, pisos de inquilinos y salas de servidores. PIN o credencial de personal en horario de oficina. Los visitantes reciben un código de vestíbulo con tiempo limitado de Company Admin. Super Admin ve la salud de cada lector de cada edificio en un mapa.
Gym
Los socios desbloquean solo en horas pagadas. Los entrenadores conservan el acceso fuera de horario. Cuando vence una membresía, la lista de puertas del usuario quita Gym Floor 2 al momento: no más código de cuatro dígitos compartido en el cristal.
Cafe
La cafetería pública sigue abierta. La puerta de personal junto a la barra usa PIN para que solo los baristas en turno abran almacén y caja. Company Admin asigna ventanas de turno; los PIN fallidos salen como alertas en el feed en vivo.
Lift
El lector junto al banco de ascensores solo habilita los pisos de la lista de puertas de esa persona. Los pisos ejecutivos siguen ocultos. Cada llamada se registra con usuario, hora y destino para auditorías de Super Admin.
Cambie de rol. Super Admin vigila todo el recinto. Company Admin opera un negocio. Los usuarios solo ven las puertas que pueden abrir.
Esta es la torre de control. Super Admin da de alta empresas, ve cada controlador de puerta hardware ESP32 (edificio, gimnasio, cafetería, ascensor) y puede bloquear de emergencia un sitio. No gestiona las horas de gimnasio de un empleado: eso queda en Company Admin.
Panel React · MQTT desde ESP32-S3 · flujo de eventos Go.
| Time | Zone | Event | Status |
|---|---|---|---|
| 10:24:31 | Gym | CTRL-04 PUB ACCESS_GRANTED | Granted |
| 10:24:18 | Cafe | CTRL-09 PUB DPS closed | OK |
| 10:23:47 | Lift | CTRL-02 PUB REX | Exit |
| 10:22:30 | Building | CTRL-12 PUB ACCESS_DENIED | Denied |
Operadores del día a día de un negocio. Asignan personal a Building + Lift, socios a Gym, baristas a la puerta de personal Cafe, y ven quién entró en la última hora. Nunca ven datos de otra empresa.
If a PIN is shared, revoke it here. User door list updates instantly.
| Person | Zone | Method | Status |
|---|---|---|---|
| Asha Rao | Lobby + Lift 12–18 | App | Active |
| Mark Kim | Gym 06:00–22:00 | PIN | Active |
| Nora Lee | Cafe staff | PIN | Shift |
| Visitor · NL | Lobby only | PIN | Expires 18:00 |
Los usuarios nunca ven otras empresas ni la salud global. Abren la app y reciben una lista clara: qué puertas pueden usar, si el lector está en línea y si esta puerta necesita desbloqueo en la app o un PIN en el teclado.
Good morning, Asha
5 doors assigned to you
El usuario introduce el PIN en el teclado, toca NFC o toca Unlock en su lista de puertas estando en el lector.
El controlador de puerta hardware ESP32-S3 publica el PIN, el UID NFC o el comando de la app por MQTT. Go comprueba identidad, zona, horario y si el código sigue válido.
El ESP32 dispara el golpe o maglock 12V, o habilita el piso del ascensor. El teclado muestra Access Granted.
El mismo evento aparece en los feeds en vivo de Super Admin y Company Admin, y en el historial del usuario.
Cada ESP32-S3 (o ESP32-WROOM-32) es un cliente del broker. Publica eventos de puerta y salud. Se suscribe solo a comandos (unlock, lock, sincronización de horario). Las consolas nunca hablan con el maglock directamente.
access/{site}/{ctrl}/eventGranted, denied, REX, forced, held-openaccess/{site}/{ctrl}/healthOnline, tamper, power, batteryaccess/{site}/{ctrl}/lockStrike/maglock state after a relay changeaccess/{site}/{ctrl}/dpsDoor contact: closed, open, heldaccess/{site}/{ctrl}/cmdUnlock, lock, PIN cache, firmwarePUB access/tower-a/ctrl-04/event qos 1
{
"ts": "2026-09-19T10:24:31Z",
"hw": "ESP32-S3",
"controllerId": "CTRL-04",
"doorId": "gym-front",
"event": "ACCESS_GRANTED",
"method": "PIN",
"userId": "u_asha",
"lock": "UNLOCKED"
}
PUB access/tower-a/ctrl-04/dps qos 1
{ "hw": "ESP32-S3", "doorId": "gym-front", "sensor": "MC-38", "state": "OPEN" }
PUB access/tower-a/ctrl-12/event qos 1
{
"ts": "2026-09-19T10:22:30Z",
"hw": "ESP32-WROOM-32",
"controllerId": "CTRL-12",
"doorId": "lobby",
"event": "ACCESS_DENIED",
"method": "PIN",
"reason": "UNKNOWN_PIN"
}
PUB access/tower-a/ctrl-04/health qos 0 retained
{ "hw": "ESP32-S3", "online": true, "tamper": false, "mains": true }
Super Admin, Company Admin, and the user door list are React applications. The Go API owns authentication, PIN hashing, policy, and /cmd unlocks. Field hardware is named: ESP32-S3 / ESP32-WROOM-32 as the hardware door controller, PN532 NFC, Wiegand RFID, 4×4 PIN keypad, 12V maglock or strike, MC-38 door contact, and HC-SR501 REX.
El ESP32 publica eventos aunque nadie tenga la app abierta. Cuando Company Admin abre la monitorización en vivo, el feed ya está en el broker.
Los paneles en vivo se suscriben a temas del controlador. Super Admin y Company Admin nunca hacen polling al teclado.
Motor de políticas, ciclo de vida del PIN y comandos MQTT de vuelta al relé del controlador.
ACCESS_GRANTED, ACCESS_DENIED, REX, DOOR_FORCED, DPS, health. El broker los reparte a los tableros en vivo.
ESP32-S3 / ESP32-WROOM-32 · PN532 · Wiegand RFID · teclado 4×4 · maglock 12V · MC-38 · HC-SR501 — edificio, gimnasio, cafetería y ascensor.
Los códigos de cafetería y gimnasio dejaron de compartirse. Cada persona tiene un PIN que Company Admin puede rotar sin visitar el sitio.
Super Admin y Company Admin ven los desbloqueos en el momento, incluidos los intentos de PIN fallidos en puertas de personal.
La lista My Doors acabó con las conjeturas de recepción. Si Gym no está en la lista, la puerta no se abre.
Mapeamos la monitorización Super Admin, PIN y operaciones de personas de Company Admin, una lista de puertas de usuario y un controlador de puerta hardware ESP32-S3 (publicación MQTT) en una plataforma React y Go que sus equipos pueden operar.