Smart-Home

Folgender Artikel enthält Werbung.

Für den Bereich Smart-Home finde ich, gilt das selbe wie beim Kochen.

Selbst gemacht schmeckt am besten.

Naja oder so ähnlich 😉

Mittlerweile gibt es zahlreiche Lösungen, um sein bestehendes Haus bzw. die bestehende Wohnung „Smart“ zu machen. Von ganz günstig bis sehr exklusiv. Leider arbeiten die unterschiedlichen Systeme aber nicht wirklich zusammen. Das finde ich sehr Schade! Ich möchte meinen Fernseher nicht weggeben, nur weil es keine direkten Schnittstellen für ein großes Smart-Home-System gibt. Bezahlbar soll das Ganze am Ende ja auch noch sein. Hinzu kommt, dass der eine Hersteller z.B. die Schaltbare Steckdose besser umgesetzt hat, als der bei dem es die Smarte Lampe für E14 gibt usw. Tja und für wen entscheide ich mich dann?

Nachdem ich über Freunde, Bekannte und auch selbst einige Berührungspunkte mit den verschiedensten System hatte, konnte ich aus den oben genannten Gründen kein geeignetes finden, bei dem wirklich alles passte.

In Hinblick auf die gewonnene Erfahrung und den Spaß, entschied ich mich selbst ein Smart-Home-System zu programmieren.

Ziele

Meine Zielsetzung war dabei folgende:

  • Heizungen steuerbar
  • Beleuchtung im Wohnzimmer steuerbar
  • Zusätzliche Leuchte hinter dem TV
  • TV steuerbar (Ein/Aus, evtl. noch Programm und Lautstärke)
  • Anzeige, ob alle Fenster geschlossen sind

Auswahl der Komponenten

Bei der Auswahl der Komponenten hatte ich ein K.-o.-Kri­te­ri­um. Die Geräte müssen unbedingt per Python angesprochen werden können. Also habe ich mich auf die Suche gemacht und dabei jeweils auch eine Eigenbau-Lösung (z.B. für schaltbare Steckdosen) in Betracht gezogen. Schnell musste ich aber feststellen, dass die Produkte auf dem heutigen Markt viel zu günstig sind, um selbst noch eine einigermaßen rentable Eigenbau-Lösung zu entwickeln.

Folgende Komponenten habe ich schlussendlich ausgewählt:

  • Eurotronic 700018 Comet DECT Heizkörperthermostat (kompatibel mit der FritzBox und somit über die Fritz Python API ansprechbar)
  • E27-LED Lampe WLAN-fähig (Der ursprüngliche Hersteller ist hier Tuya)
  • Nooie Plug (Eine schaltbare Steckdose mit einer sehr schlanken Bauform, ebenso ursprünglich von Tuya hergestellt)
  • BroadLink RM4 mini (IR-Blaster zur Steuerung von Geräten, die nicht „smart“ sind)

Tuya

Ein kurzer Hinweis zum Hersteller Tuya. Tuya ist ein großer Hersteller von SmartHome-Lösungen. Egal ob es sich dabei um die Hardware oder die Software handelt. Andere Unternehmen können von Tuya ein sog. White Label Produkte kaufen und unter ihrem eigenen Namen vertreiben. Das geht sogar so weit, dass Tuya auf Wunsch die Apps der Produkte entwickelt und für den Hersteller entsprechend anpasst.

Tuya ist also wie geschaffen für solche vorhaben. Denn es funktioniert zum einen einigermaßen unkompliziert auf die API (siehe tinytuya) zuzugreifen. Zum anderen gibt es von Tuya unendlich viele Produkte für alle möglichen Szenarien.

FritzBox

Das DECT Heizkörperthermostat von der Firma Eurotronic ist äquivalent zu dem Modell von AVM und arbeitet auch problemlos mit der FritzBox zusammen. Zur Ansteuerung nutze ich die Python-API python-fritzhome.

BroadLink

Über die Python Bibliothek python-broadlink kann der IR-Blaster einfach angesteuert werden. Man kann sich die Rohdaten der einzelnen Tastendrücke als String ausgeben lassen und diese beispielsweise in einem Dictionary speichern. Bei Bedarf kann können jetzt die Rohdaten über ein Funktion aus der Bibliothek wieder gesendet werden. So kann jede Taste von einer beliebigen Infrarot-Fernbedienung emuliert werden.

Server

Natürlich muss es auch einen Computer geben, der die ganzen Geräte und deren APIs ansteuern kann und eine Schnittstelle für den Menschen bereitstellt. Hier fiel meine Wahl auf den Raspberry Pi (ein sehr effizienter, kleiner und leiser Einplatinencomputer), da dieser für das Projekt – aus bekannten Gründen – perfekt geeignet ist. So viel zu Hardware Seite.

Die Software-Seite sollte in etwa so aussehen:

  • Eine MySQL-Datenbank enthält eine Tabelle mit Tags. Ein Tag steht dabei jeweils für eine Zustand. Also beispielsweise die Solltemperatur der Heizung im Wohnzimmer, den Zustand der Lampe, den aktuellen Sender des Radios usw.
  • Ein Daemon (programmiert mit Python aufgrund der hohen Anzahl verfügbarer Bibliotheken) wacht ständig über die in der Datenbank definierten Tags. Wird ein Tag verändert, so wird dessen Eigenschaft commited auf false gesetzt. Der Daemon muss also nur prüfen, ob irgendein Tag noch nicht commmited ist.
  • Die Ansteuerung der Geräte erfolgt nun anschließend über die vielen installierten Bibliotheken wie oben beschrieben.

Umsetzung

System

Zunächst musste der Raspberry Pi natürlich mit der aktuellsten Version von Raspberry Pi OS geimaged werden. Hierbei entschied ich mich für die headless-Variante. Also ganz ohne grafische Oberfläche, denn diese würde nur unnötig Ressourcen verbrauchen.

Backend

Datenbank, Daemon und Bibliotheken werden genauso, wie im Bereich Server erläutert implementiert. Somit stellt die Tabelle für die Tags in der Datenbank die Schnittstelle zwischen Front- und Backend dar. Dadurch ist das Front-End beliebig austauschbar. Ein großer Vorteil den ich während der Entwicklung auch sehr zu schätzen gelernt habe.

Frontend

Nun, da das Backend fertig implementiert war, konnte ich mich dem Frontend widmen.

Hierbei entschied ich mich zunächst für eine webbasierte Version, programmiert mit den üblichen Verdächtigen. Sprich HTML, JavaScript, PHP und dem Framework MDBootstrap (für das ich eine kommerzielle Lizenz besitze). Wird eine Schaltfläche auf der Webseite betätigt, startet ein AJAX-Aufruf innerhalb des Event Handlers. Dieser AJAX-Aufruf führt die PHP-Skriptdatei set_tag.php mit entsprechenden Parametern aus. Mittels PHP greife ich auf die Datenbank zu, setze den neuen Tag Wert entsprechend und setzte das Flag commited auf 0.

Der Python-Daemon übernimmt nun die weiteren Schritte wie bereits beschrieben.

Hier Screenshot der Weboberfläche. Aus Urheberrechtsgründen habe ich die Logos der Radio- und TV-Sender unkenntlich gemacht. Außerdem ist der Screenshot so lang gezogen, weil die Webseite auf dem Smartphone natürlich scrollt 😉

Weboberfläche des SmartHomes

Über diverse Meta-Tags im HTML habe ich die Webseite als Webapp spezifiziert. Dadurch erscheint diese auf einem Smartphone fast wie eine native App. Das klappt schon recht gut, allerdings hatte ich öfter Probleme beim Starten der App. Der Browser hat hier teilweise den Cache benutzt bzw. die Webseite gar nicht neu geladen. Und so gab es die Effekte, dass ein Gerät eingeschaltet war, obwohl es eigentlich ausgeschalten war.

Natürlich kann man das mit vielen kleinen Ergänzungen im Code noch hinbiegen. Aber die professionelle Lösung ist das nicht. Greift man mit einem anderen Browser oder sogar nur einer neueren Version auf die Webseite zu, funktionieren die Ergänzungen möglicherweise schon nicht mehr. Das ist nicht sehr zuverlässig!

Deshalb bin ich nun einen Schritt weiter gegangen und habe eine iOS-App für das SmartHome entwickelt. Diese greift ebenso über HTTP-Requests auf die Datenbank mit den Tags zu. Ein gutes Beispiel für die Austauschbarkeit des Front-Ends 😉

Hier noch ein paar Eindrücke davon. Aus Gründen des Urheberrechtsschutzes habe ich auch hier einige Bereich unkenntlich gemacht. Die Symbole stammen von Freepik auf www.flaticon.com, sind jedoch ebenso verpixelt.

Hier ist die Hauptansicht der App zu sehen, darüber können die einzelnen Geräte ein- und ausgeschalten werden.

SmartHome App – Hauptansicht

Tippt der Benutzer auf eines der Geräte, wird die Detailansicht angezeigt:

Fazit

Bisher bin ich mit dem SmartHome-System sehr zufrieden. Natürlich hat es einige Revisionen gebraucht, bis das Ganze fehlerfrei und zuverlässig läuft. Mittlerweile ist dieser Punkt aber erreicht. Die Fensterkontakte habe ich vorerst weg gelassen, da der Aufwand hierfür in keinem Verhältnis zum Nutzen steht. Die übrigen Ziele wurden jedoch wie geplant umgesetzt.

Zukunft

In Zukunft würde ich die Datenbank-Schnittstelle gerne noch durch einen MQTT-Broker ersetzen. Die App kommuniziert dann über MQTT-Nachrichten mit dem Broker, welcher dann entsprechende Nachrichten an ein Python-Programm gibt. Dieses Programm kümmert sich wieder um die Ansteuerung der einzelnen smarten Geräte.

Loading

Nach oben scrollen