Natives HomeKit Schloss im Eigenbau mit dem ESP8266

von cooper.bin
veröffentlicht am 15.04.2024 aktualisiert am 16.04.2024

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.

Apple Home Schloss Gerät ><

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.

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.

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 ...

Arduino IDE HomeKit-ESP8266 Mixiaoxiao Bibliothek ><

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:

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.

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.

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.

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

  1. Nach dem erfolgreichen Upload kann der ESP8266 wie gewohnt zu HomeKit hinzugefügt werden. ( Gerät hinzufügen / + oben rechts )
  2. Gehe auf den Punkt Weitere Optionen ... und warte, bis dein ESP8266 gefunden wird
  3. Der Pairing-Code lautet: 123-45-678
  4. Das Pairing wird anschließend durchgeführt

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:

ESP8266 D1 Mini Relais D8 Verdrahtung ><

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);
  [...]
}

Zum Kapitel springen Demovideo

Die Themen smarthome und arduino-ide gibt es auch auf dem makesmart Discord-Server! Trete bei, um dich auszutauschen.

mehr erfahren

Teile diesen Beitrag



Diese Artikel könnten dich auch interessieren

ESP8266 D1 Mini Relais als HomeKit Schalter ohne Bridge

Egal ob Schalter, Lampe oder Ventilator. In diesem Tutorial erfährst du, wie die HomeKit Zubehör mit dem ESP8266 umsetzen kannst. Nativ und ganz ohne zusätzliche Bridge.

Titelbild ersetzen Bearbeiten

cooper.bin am 26.03.2024

Der ESP8266 als nativer HomeKit Kontaktsensor

Echtes natives HomeKit-Zubehör mit dem ESP8266? In diesem Tutorial erfährst du, wie die Smarthome Zubehör mit dem ESP8266 umsetzen kannst. Ganz ohne zusätzliche Bridge.

Bearbeiten

cooper.bin am 19.03.2024

ESP32-Cam als HomeKit Kamera via RTSP-Stream & Homebridge

Mit einem RTSP-Stream von der ESP32-Cam lässt sich die Übertragung in vielen Plattformen einbinden. Unter anderem auch im eigenen Smarthome wie HomeKit.

Titelbild ersetzen Bearbeiten

cooper.bin am 08.04.2024

Der DHT22 am ESP8266 - Wie man die Temperatur und Luftfeuchtigkeit misst

In diesem Tutorial lernst du, wie du mit einem DHT22 und einem ESP8266 D1 Mini die Luftfeuchtigkeit und die Temperatur einfach messen kannst.

Titelbild ersetzen Bearbeiten

cooper.bin am 12.03.2024

Der DS18B20 Temperatursensor am ESP8266 D1 Mini - Einfache Temperaturmessung

Lerne, wie du mit der Arduino IDE, dem ESP8266 und einem DS18B20 Temperatursensor einfache und schnelle Temperaturmessungen durchführen kannst.

Titelbild ersetzen Bearbeiten

cooper.bin am 05.03.2024