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:
Kommando | Funktion |
---|---|
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