Überblick

Das Programm bildet die zentrale Steuereinheit unseres Smart-Home Systems. Es empfängt Daten über MQTT, analysiert sie und Steuert je nach Input verschiedene Prozesse bzw. Threads. Es ermöglicht die Kommunikation zwischen dem Raspberry Pi und verschiedenen Endpoints über HTTP-Requests, wie zum Beispiel die Stundenplandatenbank oder Home-Assistant Entitäten.

Beschreibung

Das Programm ist in verschiedene Ordner unterteilt, die jeweils für eine bestimmte Aufgabe zuständig sind.

Die Datei lesson_hours.py enthält die Unterrichtszeiten und die Räume, die aus der Stundenplandatenbank abgefragt werden sollen. Außerdem enthält es eine for-schleife, die den jeweiligen Raum im Dictionary mit default werten initialisiert. Zum einen soll der State auf 1 gesetzt werden, denn das Signalisiert, dass der Raum noch nicht belegt ist, also nicht geheizt wird. Die Flag  "tread_active" zeigt, ob für den jeweiligen Raum gerade ein thread läuft oder nicht. Die Flag soll am Anfang für jeden Raum mit "False" initialisiert werden.

Die Datei http_req.py enthält diverse get()-funktionen und Funktionen, mit denen http-Requests an Home Assistant gemacht werden können. Es kann z.B. über get_movement_sensor() der Zustand des Bewegungssensor in einem bestimmten Raum abgefragt werden oder über change_temperature() die Temperatur eines Raumes verändert werden. Dazu werden in den Funktionen die URL, des gewünschten Endpoints angegeben. Eine Liste alle URL-Endpoints von Home-Assistant sind im Home Assistant Forum einsehbar.

Die Datei URL_encoding.py enthält die check_timetable-Funktion, die ebenfalls einen http-request macht, aber aus Sicherheitsgründen mit AESGCM-Verschlüsselung arbeitet. Mit der Funktion wird die Stundenplandatenbank abgefragt und geprüft ob in den kommenden 30 Minuten Unterricht ist oder nicht. Falls Unterricht ist, wird der state des jeweiligen Raumes verändert, die Temperatur auf 21°C gesetzt und ein thread gestartet, der Prüft, ob in den ersten 30-Minuten der Stunde tatsächlich auch Personen im Raum sind. Falls keine Bewegung erkannt wird, wird die Temperatur wieder abgesenkt.

Die Datei MQTT_communication.py ermöglicht die Kommunikation mit Home-Assistant über MQTT und sorgt für eine ereignisgesteuerte Steuerung  basierend auf Nachrichten. Es wird ein MQTT-Client initialisiert, der eine Verbindung zum Broker hält und verschiedene Topics abonniert. Je nach Topic wird eine bestimmte Funktion durch eine Dispatcher-Tabelle aufgerufen.

Die Datei thread_management.py verwaltet die threads, die von verschiedenen Funktionen gestartet werden können. Es wird je nach state geprüft, welche Thread Funktion gestartet werden soll. Die Funktion check_condition1_thread() Prüft zum Beispiel sobald eine Bewegung erkannt wurde, ob Innerhalb einer bestimmten Zeit weitere Bewegung erkannt werden. Falls ja erhöht er die Temperatur. Die check_condition2_thread() prüft, ob in einem Raum der laut Stundenplan belegt sein soll auch tatsächlich am Anfang der Stunde Bewegungen erkannt werden und steuert je nach Ergebnis die Temperatur.

In Datei config.py dient zu Konfiguration des Programmes. Es enthält wichtige Konstanten, Passwörter oder Usernames, oder fragt sie aus dem System ab. In diesem Fall sind alle Passwörter etc. in einer .env Datei und die config-Datei fragt diese ab. Die Datei .env enthält sensible Daten und muss für jedes Projekt individuelle initialisiert werden. Sie darf auf keinen Fall weitegegeben werden, da sonst jeder Zugriff auf Passwörter, Usernames und somit auf das gesamten System hat.

Die Datei .gitnore enthält Informationen über Dateien, die beim pushen auf das Repository ignoriert werden sollen. Dazu gehören zum Beispiel die Virtuelle Umgebung die eingerichtet wurde, der Python-Bytecode-Ordner und die .env Datei. 

Das Reposatory ist unter folgenden Link einsehbar: Git Repsitory. Installationshinweise sind in der README.md im Repository zu sehen.


Zuletzt geändert: Montag, 30. Juni 2025, 20:35