La necesidad
Hoy en día, una casa tiene un código, y solo uno. Todos lo comparten: los habitantes, la persona que viene a regar las plantas, el amigo al que se le prestaron las llaves por un fin de semana. Tres consecuencias:
- nunca se sabe quién ha desactivado la alarma;
- retirar el acceso a una persona obliga a cambiar el código para todos;
- no hay ningún medio de dar un acceso limitado en el tiempo.
El código debería pertenecer a la persona, no a la casa — y seguir siendo válido independientemente del lugar donde se introduzca: la aplicación Gladys, una tableta mural, o más tarde un teclado físico.
Lo que se espera
- Un código por usuario, revocable individualmente.
- Saber quién ha activado o desactivado, y poder usarlo en una escena o una notificación.
- Derechos distintos: algunos pueden activar y desactivar, otros solo desactivar.
- Códigos con duración limitada, para un acceso puntual.
¿Cómo sería
CÓDIGOS DE ACCESO + Añadir un código
Quentin •••• Activar · Desactivar activo
Camille •••• Activar · Desactivar activo
Ayuda en el hogar •••• Desactivar 08/09 → 15/09
Antiguo inquilino –––– — revocado
Preguntas por resolver
- ¿Se necesita una cuenta Gladys para tener un código? Crear una cuenta completa para la persona que viene a alimentar al gato una semana es pesado. ¿Se necesitan códigos « invitados » sin cuenta asociada?
- ¿Qué derechos en la primera versión: activar / desactivar son suficientes, o ya se necesita « puede forzar la activación », « puede modificar la configuración »?
- ¿Los códigos con duración limitada están en la primera versión, o son una continuación?
- ¿Longitud impuesta? ¿Pueden dos personas tener el mismo código (en cuyo caso ya no se sabe quién es)?
- ¿Qué pasa con el código actual de la casa durante la actualización? Tiene que seguir funcionando, de lo contrario se ponen en defecto las instalaciones.
- ¿Qué pasa después de varios códigos incorrectos? Gladys ya limita los intentos — ¿se necesita además una notificación, o incluso un disparo?
- ¿Se necesita un código de restricción? Un código que desactive normalmente en apariencia pero avise discretamente — útil si se es obligado a abrir. Es un clásico de las centrales, hay que decidir si está dentro del perímetro.
Complejidad y dependencias
Media. Esta solicitud no depende de ninguna otra y puede hacerse en paralelo con el resto. Sin embargo, condiciona la llegada de los teclados físicos, que necesitan que Gladys sepa validar un código.
Solicitudes relacionadas: los códigos por usuario son un prerrequisito para los teclados físicos, y la identidad de la persona que desactiva alimenta el contexto de las escenas.
Esta solicitud forma parte de un conjunto derivado de la discusión Sistema de alarma Gladys (necesidad F08).
Implementación en curso → feat(alarm): one alarm code per person, hashed with bcrypt by cicoub13 · Pull Request #3105 · GladysAssistant/Gladys · GitHub
Las hipótesis retenidas para esta primera versión, en el orden de las preguntas anteriores:
- Códigos de invitados sin cuenta Gladys: sí. Un administrador crea un código para la persona que viene a alimentar al gato — un nombre, un código, una fecha de finalización. No se necesita crear ninguna cuenta.
- Permisos: ningún permiso por código por el momento. Todo código válido desactiva. Un punto se aclaró en el camino: un código nunca se usa para activar — activar sigue siendo la acción de un usuario conectado, de una escena o de HomeKit. «Puede forzar la activación» y «puede modificar la configuración» esperarán.
- Códigos de duración limitada: en esta versión. El día elegido es válido en su totalidad; pasada la fecha límite, el código es rechazado exactamente como un código falso — el teclado no le dice a un desconocido que su código existió.
- Longitud: 4 a 8 dígitos, y dos personas no pueden tener el mismo código. Un código ya tomado es rechazado sin nunca decir por quién.
- El código actual de la casa sigue funcionando. Al actualizar, se convierte en un código de invitado llamado por la casa, asignado a nadie en particular: era un código compartido, y ponerlo en el perfil de alguien habría permitido reemplazarlo por error y cortar el acceso a todos los demás. Quien quiera hacerlo su código personal lo revoca y lo ingresa en su perfil.
- Códigos falsos: se conserva el comportamiento actual. El disparador de escena «demasiados intentos de código» sigue siendo el único punto de anclaje — cada uno es libre de hacer una notificación.
- Código de restricción: fuera del alcance de esta versión.
Lo que cambia en el uso:
- Cada uno configura su código desde su página de perfil. Un código ya no es legible: ni por un administrador, ni por su propietario. Se reemplaza, no se consulta.
- La configuración de la alarma (retardo de activación, códigos de acceso) se reserva para los administradores.
- El campo «código de la alarma» de la ficha de la casa deja paso a la lista de códigos de acceso: titular, vencimiento, revocación.
- Las escenas saben quién ha desactivado, el nombre de la persona o el nombre del código de invitado, directamente utilizable en una escena (y por lo tanto notificación).
- El teclado de las tabletas murales bloqueadas no cambia.
- De paso: el código de la casa se almacenaba en texto claro y se devolvía a través de la API a cualquier usuario conectado. Los códigos ahora están hasheados y ya no salen del servidor.
Una imagen de prueba está disponible en cicoub13/gladys:alarm-user-codes
¡Se aplica una migración de datos, por lo que NO use ABSOLUTAMENTE ESTA imagen en su base de producción!!!
En la página Configuración → Casa (solo Admin) con los códigos de invitados
En la página Perfil de cada usuario
Creo que hay un problema entre Casa / Usuarios / Código. Quizás hay que añadir la vinculación de un usuario a una casa, pero me gustaría discutirlo antes.
Un solo código asignado a un usuario desactiva todas las casas.