Vor längerer Zeit habe ich ein Video veröffentlicht, in dem ich die Vorteile eines smarten Türschlosses aufzeige. Konkret habe ich dabei einen ESP8266 D1 Mini mithilfe von Homebridge in ein HomeKit-Schloss verwandelt. Die Nachfrage nach einem Tutorial war erstaunlich groß - aus diesem Grund habe ich mich an die Arbeit gemacht und eine Lösung gefunden, die völlig ohne Bridge auskommt: Ein smartes Türschloss mit dem ESP8266 - nativ in HomeKit eingebunden.
Zum Kapitel springen Das Schloss
HomeKit unterstützt viele verschiedene Gerätetypen. Neben Lampen, Schaltern oder auch dem Ventilator, kann es auch ein Türschloss sein, welches mithilfe von Apple Home gesteuert wird. Ein Türschloss in HomeKit zeichnet sich durch besondere Absicherungen aus, die benötigt werden, um es zu schalten. In der neueren iPhone-Generation wäre das zum Beispiel die vorherige Abfrage durch Face ID. In älteren Generationen die Freigabe durch den Fingerabdruck. Auch ein Schalten über Siri per Sprache ist ohne nachfolgende Bestätigung der Identität nicht möglich. Ein Schloss bietet gegenüber einem Schalter eine erhöhte Sicherheit.
Sollte das für dein Anliegen zu viel des Guten sein, kannst du dir gerne mein anderes Tutorial ansehen, in dem ich zeige, wie man einen HomeKit-Schalter mit einem ESP8266 realisiert. Hast du hingegen noch gar keine Erfahrung mit ESP8266, D1 Mini und Co., dann ist es vielleicht besser, ein bisschen kleiner anzufangen: Lerne, wie du einen ESP8266 D1 Mini programmieren kannst.
Es ist nicht immer besser, komplett eigenes Smarthome-Zubehör zu programmieren. Gerade im Bezug auf das Schloss sollte genau abgewogen werden, ob der Einsatz passend ist und ob Sicherheits- und versicherungstechnische Gründe eine solche Eigenlösung unterstützen. Sollte man spezifische Anforderungen haben, macht es durchaus Sinn. Geht es jedoch darum, wirklich eine Haustür zu steuern, könnte eine fertige Lösung sinnvoller sein.
Zum Kapitel springen Hardware
Die benötigte Hardware für dieses Projekt hängt davon ab, wofür das (virtuelle) Schloss letzten Endes tatsächlich eingesetzt werden soll. Primär braucht man natürlich ein ESP8266 Board, auf dem die passende Software läuft. Hier mal einige Boards, die für dieses Tutorial in Frage kommen würden:
Grundätzlich kann im Grunde jedes ESP8266 basierte Board genutzt werden kann. In diesem Tutorial verwende ich einen ESP8266 D1 Mini.
Zu dem Mikrocontroller braucht man natürlich noch einen passenden Aktor. In meinem Fall ist der Aktor ein High-Trigger Relais. Da der ESP8266 direkt mit dem HomeKit Interface kommuniziert, weiß HomeKit im Grunde genommen gar nicht, was am Ende beim Auf- oder Absperren in der realen Welt passiert. HomeKit übermittelt lediglich die Schaltbefehle und Zustandsänderungen entgegen.
Produktempfehlungen und -suche in Verbindung mit dem Amazon Partnerprogramm:
- Preis aufsteigend
- Preis absteigend
- Reduzierte zuerst
¹ Angaben ohne Gewähr. Bei einem Kauf über den Link erhalten wir eine Provision.
Du kannst eine komplett eigene Logik implementieren um festzulegen, was beim Auf- oder Absperren passieren soll. Du bist nicht auf das Relais beschränkt. Theoretisch kannst du auch einen Servomotor ansteuern, welcher dann mechanisch etwas verriegelt oder entriegelt. Deiner Umsetzung sind kaum Grenzen gesetzt.
Zum Kapitel springen Bibliotheken installieren
Um das HomeKit Schloss mit dem ESP8266 umzusetzen muss eine Bibliothek in der Arduino IDE installiert werden. Das geht über den Bibliotheksverwalter. Er ist über das Menü der Arduino IDE erreichbar. Die Bibliothek heißt "HomeKit-ESP8266", ist von Mixiaoxiao auf Github und kann über die Suche des Bibliotheksverwalters gefunden und installiert werden.
Arduino IDE
└───Werkzeuge
└───Bibliotheken verwalten ...
Zum Kapitel springen Programmcode
Um das Programm über die Arduino IDE auf den ESP8266 zu spielen ist mehr als eine Datei notwendig. Ingesamt werden drei Dateien benötigt. Diese habe ich in einem ZIP-Archiv vorbereitet. Das Archiv kann direkt über makesmart heruntergeladen werden:
- Download: makesmart-homekit-lock.zip
Entpackt das .zip-Archiv an einem beliebigen Ort auf eurem Computer. In dem entpackten Order befinden sich die genannten drei Dateien:
/makesmart-homekit-lock.zip
├── makesmart_homekit_lock.ino
├── my_accessory.c
└── wifi_info.h
Es reicht, die Datei mit dem Namen makesmart_homekit_lock.ino
mit einem Doppelklick zu öffnen. Die anderen zwei Dateien werden dann automatisch innerhalb der Arduino IDE geladen.
Zum Kapitel springen makesmart_homekit_lock.ino
Diese Datei enthält die Logik was beim Auf- und Absperren via HomeKit auf dem ESP8266 passieren soll.
In dieser Datei ist die Zeile homekit_storage_reset();
innerhalb der setup()
-Funktion sehr wichtig. Diese Zeile löscht beim Start des ESPs die HomeKit Konfiguration vom. Dadurch ist immer wieder ein erneutes Pairing notwendig. In der Phase der Entwicklung ist dies sehr praktisch - für den laufenden Betrieb jedoch nicht. Haltet ein Auge auf die setup()
-Funktion und fügt diese Zeile je nach Bedarf ein.
void setup() {
Serial.begin(115200);
wifi_connect();
homekit_storage_reset();
my_homekit_setup();
}
Was beim Schalten des Schlosses passieren soll, wird in diesen beiden Funktionen festgelegt:
void open_lock(){
[...]
Serial.println("Schloss öffnen");
[...]
}
void close_lock(){
[...]
Serial.println("Schloss schließen");
[...]
}
Im Beispielcode wird lediglich eine Nachricht über den seriellen Monitor ausgegeben. Statt der einfachen Ausgabe kann an dieser Stelle eine komplett eigene Logik implementiert werden. Wie zum Beispiel das Schalten eines Relais.
Wenn du die Funktionen open_lock()
und close_lock()
aufrufst, wird automatisch der Status zurück an HomeKit gemeldet. Das ist hilfreich, wenn das Schloss beispielsweise noch zusätzlich mit einem Hardware-Button am ESP8266 geschaltet werden soll.
Zum Kapitel springen wifi_info.h
Diese Datei enthält die Zugangsdaten zum WLAN-Netzwerk. Diese müssen natürlich angepasst werden damit der ESP8266 sich mit dem WLAN verbinden kann.
const char *ssid = "WLAN-SSID";
const char *password = "WLAN-PASS";
Zum Kapitel springen my_accessory.c
Diese Datei enthält die Definitionen des Schlosses für HomeKit. Wenn ihr keine besonderen Extrawünsche habt, könnt ihr diese Datei getrost ignorieren.
Zum Kapitel springen Programm hochladen
Nach diesen Informationen kann das Programm schon kompiliert und auf den ESP8266 geladen werden. Die einzige Änderung, die noch offen ist, ist die Taktrate des ESP8266 von 80MHz auf 160MHz zu stellen.
HomeKit ESP8266 benötigt durch die Verschlüsselung mit WolfSSL eine Menge Rechenleistung. Die Erhöhung der Taktrate kann dem etwas entgegenwirken.
Die Taktrate kann einfach über die Einstellungen geändert werden. Gehe dazu innerhalb der Arduino IDE auf den folgenden Pfad und passe die Taktrate dementsprechend an:
Arduino IDE
└───Werkzeuge
└───CPU Frequency: 160MHz
Zum Kapitel springen Pairing mit Apple Home
- Nach dem erfolgreichen Upload kann der ESP8266 wie gewohnt zu HomeKit hinzugefügt werden. ( Gerät hinzufügen / + oben rechts )
- Gehe auf den Punkt
Weitere Optionen ...
und warte, bis dein ESP8266 gefunden wird - Der Pairing-Code lautet:
123-45-678
- Das Pairing wird anschließend durchgeführt
Sollte das Pairing nicht auf Anhieb klappen reicht es oftmals den ESP8266 vom Strom zu trennen und es anschließend erneut zu versuchen.
Zum Kapitel springen Schalten eines Relais
Sollte das Tutorial bis hierhin geklappt haben, du aber noch keine eigene Logik für dein Schloss implementiert hast, gibt es hier ein kleines Snippet. Es zeigt, wie einfach es sein kann, eigene Logik zu implementieren. Hier in Form eines Relais, welches bei Betätigung des Schlosses schaltet.
Zuerst muss ein Pin für das Relais definiert werden. Ich verwende als Signalpin für das Relais den Pin D8.
// Pin D8
byte relay = 15;
Die passende Verdrahtung sieht dabei wie folgt aus:
KY-19 Relaismodul | ESP8266 D1 Mini |
---|---|
S | D8 |
+ | 5V |
- | G |
Da wir Signale über den Pin ausgeben möchten, muss der Signalpin D8 im Setup als Output definiert werden.
void setup() {
pinMode(relay, OUTPUT);
Serial.begin(115200);
wifi_connect();
homekit_storage_reset();
my_homekit_setup();
}
In meinem Video Tutorial ESP8266 Digital Outputs - Relais über Webseite steuern erfährst du mehr über das Thema Digital Outputs am ESP8266.
Zu guter Letzt müssen noch die beiden Funktionen zum Öffnen und Schließen des Schlosses angepasst werden:
void open_lock(){
[...]
Serial.println("Schloss öffnen");
digitalWrite(relay, HIGH);
[...]
}
void close_lock(){
[...]
Serial.println("Schloss schließen");
digitalWrite(relay, LOW);
[...]
}