Benutzer-Werkzeuge

Webseiten-Werkzeuge


projekte:schlosssystem_2026

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
projekte:schlosssystem_2026 [2026-03-07 00:00] – [MQTT] weneprojekte:schlosssystem_2026 [2026-03-20 18:48] (aktuell) – [User Storys] wene
Zeile 49: Zeile 49:
   * Als Ruum42 Vollmitglied möchte ich das Schloss auch ohne Smartföhn öffnen können. Idee ist ein ESP.   * Als Ruum42 Vollmitglied möchte ich das Schloss auch ohne Smartföhn öffnen können. Idee ist ein ESP.
   * (Allenfalls) Als Besucher ohne persönliches Login/Passwort möchte ich über die [[https://f-droid.org/de/packages/com.example.trigger/|Trigger Anwendung]] mit einem "generischen" Benutzer die Klingel betätigen können. Die Einrichtung des Benutzers finde ich auf der Ruum42 Webseite. Im Ruum42 ist eine Klingel angebracht, die vom Raspberry-PI angesteuert wird.   * (Allenfalls) Als Besucher ohne persönliches Login/Passwort möchte ich über die [[https://f-droid.org/de/packages/com.example.trigger/|Trigger Anwendung]] mit einem "generischen" Benutzer die Klingel betätigen können. Die Einrichtung des Benutzers finde ich auf der Ruum42 Webseite. Im Ruum42 ist eine Klingel angebracht, die vom Raspberry-PI angesteuert wird.
 +  * Als Ruum42 Vollmitglied möchte ich mehrere Tokens zur Authentifizierung in meinem Account hinterlegen und verwalten können. Damit kann ich beispielsweise den SSH Schlüssen der Trigger App auf dem Smartphone sowie den SSH Schlüssel meines Laptops hinterlegen und im Falle eines Verlustes auch wieder getrennt zurückziehen. Die Schlüssel würde ich gerne anhand eines Namens, den ich selbst vergeben kann, identifizieren können.
 +  * Als Vorstandsmitglied möchte ich Dienstleistern wie z.B. Getränkelieferanten einen Einmal-Schlüssel per E-Mail senden können. Dabei sollte der Dienstleister keine spezielle Hard- oder Software benötigen. Ein gängiges Smartphone mit Browser muss genügen. Der Einmal-Schlüssen wird ungültig, sobald er einmal benutzt wurde. (resp. ein paar Minuten danach, damit nach versehentlicher Schliessung nochmals geöffnet werden kann.) Beispiele für einen Schlüssel wären ein Link, der nur im Schloss-Netz gültig ist, oder ein Zahlencode der in einem Captive-Portal eingegeben werden muss.
  
 === Schloss-Aktuatoren === === Schloss-Aktuatoren ===
Zeile 137: Zeile 139:
  
 ==== MQTT ==== ==== MQTT ====
 +
 +=== Client ===
 +
 +Dies sind ein paar Kommandos, die auf einem Client verwendet werden können, um MQTT zu testen. Sie gehen von einer Verschlüsselten Verbindung über TLS aus. Details zur Konfiguration siehe nächster Abschnitt.
 +
 +Um diese Kommandos verwenden zu können, muss folgendes installiert werden: ''sudo apt install mosquitto-clients''
  
 <code bash> <code bash>
Zeile 148: Zeile 156:
  
 # Das Schloss schickt den Status "opened" zurück: # Das Schloss schickt den Status "opened" zurück:
-mosquitto_pub -h wene-raspi-lock -t "main-door/status" -r -m "opened" -p 8883 --cafile ca.crt +mosquitto_pub -h wene-raspi-lock -t "main-door/status" -r -m "opened" -p 8883 --cafile ca.crt 
 +# Das Flag '-r' steht für "retain" und bedeutet, dass dieser Wert auf dem Broker als Status gespeichert bleibt und neuen Clients bei Verbindung zugestellt wird.
 </code> </code>
 +
 +=== Mosquitto Message Broker ===
 +
 +So wird auf dem RasPi den MQTT Server, genannt "Message Broker" installiert: ''sudo apt install mosquitto''
 +
 +Die Konfigurationsdatei ''/etc/mosquitto/mosquitto.conf'' enthält ein paar Standardeinstellungen welche wir auskommentieren. Die Einzige Zeile, die aktiv bleibt ist die letzte, welche die Konfigurationen aus den Dateien im Unterverzeichnis ''conf.d'' inkludiert.
 +
 +In ''/etc/mosquitto/conf.d'' legen wir folgende Dateien mit entsprechendem Inhalt an:
 +
 +<file - log.conf>
 +log_dest syslog
 +</file>
 +
 +<file - tls.conf>
 +listener 8883
 +allow_anonymous true
 +cafile /etc/mosquitto/ca_certificates/ca.crt
 +certfile /etc/mosquitto/certs/server.crt
 +keyfile /etc/mosquitto/certs/server.key
 +</file>
 +
 +Die Datei ''tls.conf'' enthält Pfade zu Zertifikaten, welche wir natürlich erst an der Stelle ablegen müssen, damit das funktioniert. Wie sie erstellt werden, wird im Kapitel [[#TLS Self Signed Certificates]] erklärt. Nachdem die Dateien an den entsprechenden Pfaden liegen, sollte Mosquitto als Eigentümer festgelegt werden: ''sudo chown mosquitto:mosquitto -R /etc/mosquitto/certs'' und ''sudo chown mosquitto:mosquitto -R /etc/mosquitto/ca_certificates''.
 +
 +=== Python Library Paho ===
 +
 +Um aus Python MQTT zu nutzen, bietet sich [[https://eclipse.dev/paho/clients/python/|Paho]] an: ''sudo apt install python3-paho-mqtt''
 +
 +
 +==== NTP ====
 +
 +Als NTP Server bietet sich [[https://chrony-project.org/|Chrony]] an. Der kann sehr einfach so konfiguriert werden, die wahre NTP Zeit weiter zu leiten solange es eine Verbindung zu NTP Servern gibt. Wenn diese Verbindung nicht existiert, kann eine angenommene Zeit verbreitet werden.
 +
 +Dies ist die Konfigurationsdatei in ''/etc/chrony'':
 +
 +<file - chrony.conf>
 +# Welcome to the chrony configuration file. See chrony.conf(5) for more
 +# information about usable directives.
 +
 +# Use Debian vendor zone.
 +pool 2.debian.pool.ntp.org iburst
 +
 +# Use time sources from DHCP.
 +sourcedir /run/chrony-dhcp
 +
 +# Use NTP sources found in /etc/chrony/sources.d.
 +sourcedir /etc/chrony/sources.d
 +
 +# This directive specifies the location of the file containing ID/key pairs for
 +# NTP authentication.
 +keyfile /etc/chrony/chrony.keys
 +
 +# This directive specifies the file into which chronyd will store the rate
 +# information.
 +driftfile /var/lib/chrony/chrony.drift
 +
 +# Save NTS keys and cookies.
 +ntsdumpdir /var/lib/chrony
 +
 +# Uncomment the following line to turn logging on.
 +#log tracking measurements statistics
 +
 +# Log files location.
 +logdir /var/log/chrony
 +
 +# Stop bad estimates upsetting machine clock.
 +maxupdateskew 100.0
 +
 +# This directive enables kernel synchronisation (every 11 minutes) of the
 +# real-time clock. Note that it can't be used along with the 'rtcfile' directive.
 +rtcsync
 +
 +# Step the system clock instead of slewing it if the adjustment is larger than
 +# one second, but only in the first three clock updates.
 +makestep 1 3
 +
 +# Get TAI-UTC offset and leap seconds from the system tz database.
 +# This directive must be commented out when using time sources serving
 +# leap-smeared time.
 +leapseclist /usr/share/zoneinfo/leap-seconds.list
 +
 +# Include configuration files found in /etc/chrony/conf.d.
 +confdir /etc/chrony/conf.d
 +
 +# allow usage of local time without real time source
 +local
 +
 +# allow changes using `chronyc settime`
 +manual
 +
 +allow all
 +</file>
 +
 +Beim Starten des RasPi ohne Zugang zum echten NTP Server wird die Änderungszeit der Datei ''/var/lib/systemd/timesync/clock'' verwendet. Leider wird dieser Zeitstempel bei Verwendung von ''chrony'' nicht automatisch aktualisiert. Das muss spätestens beim Ausstellen neuer Zertifikate manuell mit ''sudo touch'' gemacht werden.
 +
projekte/schlosssystem_2026.1772838012.txt.gz · Zuletzt geändert: von wene