Alarmanlage: Ein Code pro Nutzer statt ein Code pro Haus

Der Bedarf

Heute hat ein Haus einen Code, und nur einen. Alle teilen sich denselben: die Bewohner, die Person, die die Pflanzen gießt, der Freund, dem man die Schlüssel für ein Wochenende geliehen hat. Drei Konsequenzen:

  • Man weiß nie, wer die Alarmanlage deaktiviert hat;
  • Der Zugang für eine Person zu entfernen erfordert, den Code für alle zu ändern;
  • Es gibt keine Möglichkeit, einen zeitlich begrenzten Zugang zu gewähren.

Der Code sollte der Person gehören, nicht dem Haus — und überall gültig sein, wo er eingegeben wird: die Gladys-App, ein Wandtablet oder später eine physische Tastatur.

Was erwartet wird

  • Ein Code pro Benutzer, einzeln widerrufbar.
  • Wissen, wer die Alarmanlage aktiviert oder deaktiviert hat, und die Möglichkeit, dies in einer Szene oder Benachrichtigung zu nutzen.
  • Unterschiedliche Berechtigungen: Einige können aktivieren und deaktivieren, andere nur deaktivieren.
  • Zeitlich begrenzte Codes für gelegentlichen Zugang.

Wie es aussehen würde

ZUGRIFFSCODES                                  + Code hinzufügen

Quentin              ••••      Aktivieren · Deaktivieren          aktiv
Camille              ••••      Aktivieren · Deaktivieren          aktiv
Haushaltshilfe       ••••      Deaktivieren         08/09 → 15/09
Ehemaliger Mieter    ––––      —                       widerrufen

Offene Fragen

  1. Braucht man ein Gladys-Konto, um einen Code zu haben? Ein vollständiges Konto für die Person, die eine Woche lang die Katze füttert, ist umständlich. Braucht man „Gastcodes“ ohne zugeordnetes Konto?
  2. Welche Berechtigungen in der ersten Version: Aktivieren/Deaktivieren reichen aus, oder braucht man bereits „Kann Zwangsaktivierung erzwingen“, „Kann Konfiguration ändern“?
  3. Sind zeitlich begrenzte Codes in der ersten Version enthalten, oder eine spätere Ergänzung?
  4. Vorgeschriebene Länge? Können zwei Personen denselben Code haben (in diesem Fall weiß man nicht mehr, wer es ist)?
  5. Was passiert mit dem aktuellen Hauscode beim Update? Er muss weiterhin funktionieren, sonst werden Installationen außer Betrieb gesetzt.
  6. Was passiert nach mehreren falschen Codes? Gladys begrenzt bereits die Versuche — sollte es zusätzlich eine Benachrichtigung oder sogar eine Auslösung geben?
  7. Braucht man einen Zwangscode? Ein Code, der oberflächlich normal deaktiviert, aber diskret warnt — nützlich, wenn man gezwungen wird, zu öffnen. Das ist ein Klassiker bei Alarmanlagen, man muss entscheiden, ob es im Umfang liegt.

Komplexität und Abhängigkeiten

Mittel. Diese Anforderung hängt von keiner anderen ab und kann parallel zu allem anderen umgesetzt werden. Sie ist jedoch Voraussetzung für die physische Tastatur, die benötigt, dass Gladys weiß, wie man einen Code validiert.

Verwandte Anfragen: Benutzercodes sind eine Voraussetzung für die physischen Tastaturen, und die Identität der Person, die deaktiviert, speist den Kontext der Szenen.


Diese Anforderung ist Teil einer Sammlung aus der Diskussion Gladys-Alarmsystem (Bedarf F08).

Implementierung läuft → https://github.com/GladysAssistant/Gladys/pull/3105

Die für diese erste Version getroffenen Annahmen, in der Reihenfolge der obigen Fragen:

  1. Gastcodes ohne Gladys-Konto: ja. Ein Admin erstellt einen Code für die Person, die die Katze füttert — ein Name, ein Code, ein Ablaufdatum. Kein Konto muss erstellt werden.
  2. Rechte: keine Rechte pro Code vorerst. Jeder gültige Code deaktiviert. Ein Punkt hat sich unterwegs geklärt: Ein Code dient nie zum Aktivieren — Aktivieren bleibt die Aktion eines angemeldeten Benutzers, einer Szene oder von HomeKit. „Kann Aktivierung erzwingen“ und „Kann Konfiguration ändern“ warten noch.
  3. Codes mit begrenzter Gültigkeit: in dieser Version. Der gewählte Tag ist vollständig gültig; nach Ablauf wird der Code genau wie ein falscher Code abgelehnt — die Tastatur verrät einem Unbekannten nicht, dass sein Code existiert hat.
  4. Länge: 4 bis 8 Ziffern, und zwei Personen können nicht denselben Code haben. Ein bereits genutzter Code wird abgelehnt, ohne jemals zu verraten, von wem.
  5. Der aktuelle Hauscode funktioniert weiter. Beim Update wird er zu einem Gastcode, benannt nach dem Haus, und niemandem speziell zugewiesen: Es war ein gemeinsamer Code, und ihn einem Profil zuzuweisen hätte ermöglicht, ihn versehentlich zu ersetzen und allen anderen den Zugriff zu verweigern. Wer ihn zu seinem persönlichen Code machen möchte, widerruft ihn und trägt ihn in sein Profil ein.
  6. Falsche Codes: Verhalten bleibt gleich. Der Szenenauslöser „zu viele Codeversuche“ bleibt der einzige Ankerpunkt — jeder kann daraus eine Benachrichtigung machen.
  7. Zwangscode: außerhalb des Umfangs dieser Version.

Was sich im Gebrauch ändert:

  • Jeder legt seinen Code von seiner Profilseite aus fest. Ein Code ist nie wieder lesbar: weder für einen Admin noch für seinen Besitzer. Man ersetzt ihn, man konsultiert ihn nicht.
  • Die Alarmkonfiguration (Aktivierungsverzögerung, Zugriffscodes) wird auf Admins beschränkt.
  • Das Feld „Alarmcode“ der Hausdatei weicht der Liste der Zugriffscodes: Inhaber, Ablaufdatum, Widerruf.
  • Szenen wissen, wer deaktiviert hat, der Vorname der Person oder der Name des Gastcodes, direkt nutzbar in einer Szene (und daher Benachrichtigung).
  • Die Tastatur der gesperrten Wandtablets ändert sich nicht.
  • Nebenbei: Der Hauscode wurde im Klartext gespeichert und von der API an jeden angemeldeten Benutzer zurückgesendet. Die Codes sind nun gehasht und verlassen den Server nie wieder.

Ein Testbild ist unter cicoub13/gladys:alarm-user-codes verfügbar

:warning: Eine Datenmigration wird angewendet, also verwenden Sie AUF KEINEN FALL dieses Bild auf Ihrer Produktionsdatenbank !!!

Auf der Seite Einstellungen → Haus (nur Admin) mit den Gastcodes

Auf der Seite Profil jedes Benutzers

Ich denke, es gibt ein Problem zwischen Haus / Benutzer / Code. Vielleicht müssen wir die Zuordnung eines Benutzers zu einem Haus hinzufügen, aber ich würde das gerne vorher besprechen.

Was ist das Problem?

Ein einzelner Code, der einem Nutzer zugewiesen wird, deaktiviert alle Häuser.