Dublin – SmartHome

Dublin ist der Nachfolger meines bisherigen SmartHome-System. Die Idee für den Nachfolger war, ein MQTT ähnliches Protokoll zu definieren und die Implementierung der Schnittstelle zu den Geräten größtenteils aus dem bisherigen System zu übernehmen. Denn damit bin ich schon sehr zufrieden. Nur eben die Kommunikation könnte noch verbessert werden, sodass eine geringere Latenzzeit beim Zugriff erreicht wird.

Server

Der Server ist eine reine Python3-Implementierung. Das Kernstück des Servers ist die Klasse SmartHomeServer, welche einen Threaded-TCP-Server-Socket eröffnet. Über diesen Socket können Clients mit dem Server durch die im Protokoll definierte Kommandos mit dem SmartHome interagieren.

Die „kundenspezifische“ Implementierung der Abläufe im SmartHome wird in einer eigenen Klasse untergebracht. Diese könnte beispielsweise SmartHomeSample lauten. Wichtig ist, dass diese Klasse von der Klasse SmartHome erbt. Denn die Vererbung SmartHome definiert die genaue Schnittstelle, die jede kundenspezifische Implementierung einhalten muss. Das sind zum Beispiel Methoden, die ausgeführt werden, wenn der Server startet oder stoppt. Natürlich sind auch die Events wie on_set_tag_request oder on_get_tag_request definiert.

Dadurch wird die Software in zwei Teile aufgeteilt. Der Standard-Bereich enthält alles, was der Server braucht um als solcher zu agieren. Der kundenspezifische Teil kümmert sich lediglich um das Ansteuerung und Auslesen der jeweiligen SmartHome-Hardware (z.B. Thermostate, Energiezähler, Lampen, Rolladenmotoren usw.).

Kommandos

Folgende Kommandos kennt der Server:

KommandoFunktion
get_tag;[tag]|Abfragen des aktuellen Wertes für den angegebenen Tag.
set_tag;[tag];[wert]|Setzen des Wertes für einen Tag.
ping| Sendet ping_ack zurück. Kann genutzt werden, um die Verbindung zu prüfen.

Jedes Kommando muss mit einer Pipe (|) abgeschlossen werden, sodass sichergestellt ist, dass das Kommando komplett übertragen wurde, bevor Dublin mit der Verarbeitung beginnt.

Ansteuerung der Geräte

Die Ansteuerung der Geräte erfolgt analog zur vorherigen Version des SmartHome-Systems.

Hardware

Da mir der RaspberryPi doch öfter das ein oder andere Problem bereitet hat, habe ich mich als Server-Hardware für ein altes Notebook entschieden. Teilweise ist der RaspberryPi aus unerfindlichen Gründen eingefroren, hatte keine Verbindung mehr oder war auch einfach nur träge. Das war mir auf Dauer zu instabil. Deshalb habe ich auch in diesem Punkt ein bisschen aufgerüstet. Dadurch gewann ich auch die Möglichkeit, per Remote auf den Server zuzugreifen, um ggf. Programmänderungen bzw. Schalthandlungen durchzuführen.

Plugin-System

Nach und nach habe ich den Server natürlich noch erweitert. Neulich kam ein Plugin-System hinzu. Hiermit ist es nun möglich kleine Automatisierungs-Plugins in Dublin einzubinden.

SmartphonePresence

Das Plugin SmartphonePresence sendet jede Minute ICMP Ping Requests an die IP-Adresse meines Smartphones. Dadurch kann das Plugin feststellen, ob jemand Zuhause ist. Ist dies der Fall und die Sonne ist bereits untergegangen, wird einmal am Tag das Licht eingeschaltet. Einmal am Tag, weil ich ja Nachts in der Regel auch Zuhause bin. Da soll dann nicht ständig das Licht angehen, wenn das Smartphone einmal kurz nicht erreichbar ist und danach wieder auf einen Ping reagiert.

Quellenangabe

Bild von Gerd Altmann auf Pixabay

Loading

Nach oben scrollen