Heute habe ich ein natives ESP8266 HomeKit Zubehör für euch - einen Kontaktsensor. Der Kontaktsensor lässt sich direkt und ohne weitere Hardware oder Software in Apples HomeKit integrieren. Umsetzen werden wir den Kontaktsensor in diesem Tutorial mit einem ESP8266 D1 Mini. Aber auch der ESP01s wäre hier eine noch kleinere Option die funktioniert.
Der Kontaktsensor besteht in erster Linie aus einem einzigen Taster. Wie auch in meinen anderen nativen HomeKit Tutorials mit dem ESP8266 lässt sich der Taster durch alles ersetzen was man in der Arduino IDE eben implementieren kann. Euch sind hier wie immer kaum Grenzen gesetzt.
Zum Kapitel springen Kontaktsensor? Was genau?
Der Kontaktsensor, den wir in diesem Tutorial implementieren, kann in HomeKit verschiedene Formen annehmen:
- Kontaktsensor
- Fenster
- Garagentor
- Jalousie
- Tür
Ein Kontaktsensor kennt nur zwei Zustände: True
oder False
. Der Sensor repräsentiert mit diesem binären Signal ob eine der von Punkt 1. - 5. genannten Dinge geöffnet oder geschlossen ist. Ich persönlich habe einen solchen Sensor am Schwebetüren-Kleiderschrank. Sobald die Türe aufgeschoben wird, wird durch eine Automation eine Beleuchtung auf den Kleiderschrank gesteuert. Es gibt eine ganze Reihe an nativen HomeKit Kontaktsensoren. Diese beginnen preislich ab ca. 30€. Mit einer DIY Lösungen kommen wir auf rund 6€.
Eine DIY-Lösung mag nicht in jedem Fall die beste Wahl sein. Abhängig vom Einsatzbereich kann es vorteilhafter sein, einen fertigen Sensor zu erwerben. Der Nutzen einer Eigenbau-Lösung liegt jedoch darin, dass sie für spezifische Anforderungen maßgeschneidert werden kann. Ein Batteriebetrieb ist mit der DIY Lösung nicht ohne Weiteres möglich!
Zum Kapitel springen Hardware
In der Wahl der Hardware seid ihr realtiv freigestellt. Primär braucht man natürlich ein Board, auf welchem die passende Software läuft. Hier mal einige Boards die für dieses Tutorial in Frage kommen würden:
Grundätzlich lässt sich sagen, dass im Grunde genommen jedes ESP8266 basierte Board genutzt werden kann. In diesem Tutorial verwende ich einen ESP8266 D1 Mini.
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.
Dazu braucht man natürlich noch einen Trigger für den Sensor. Dieser kann theoretisch auch 100% softwarebasierz sein. Beispielsweise könnte das Signal des Sensors via GET-Parameter ausgelesen und an HomeKit übertragen werden. Das kann für manche Anwendungen durchaus Sinn machen, jedoch kann man natürlich auch genauso gut einen physischen Sensor verwenden, der am ESP8266 ausgelsen wird und dadruch dann an HomeKit übertragen wird. Auf Youtube findest du ein Video zum Thema ESP8266 einfache Sensoren auslesen.
Im Klartext bedeutet das aber, du kannst die veschiedensten Arten von Sensoren verwenden. Hauptsache am Ende hast du / machst du ein binäres Signal daraus, sodass HomeKit dieses für den Kontaktsensor auswerten kann. Als Sensoren wären hier sinnvoll:
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.
Zum Kapitel springen Bibliotheken installieren
Um den bereitgestellten Programmcode verwenden zu können, muss eine Bibliothek innerhalb der Arduino IDE installiert werden. Diese enthält bereits vordefinierte Funktionen und Methoden, die den Umgang mit HomeKit zu erleichtern. Die Bibliothken kann direkt über die Arduino IDE installiert werden. Navigiert dazu auf folgendes Menü innerhlab der Arduino IDE:
Arduino IDE
└───Werkzeuge
└───Bibliotheken verwalten ...
Die Bibliothek trägt den Namen "HomeKit-ESP8266" und ist von Mixiaoxiao auf Github.
Zum Kapitel springen Verdrahtung
Hier in meinem vorbereiteten Programmcode funktioniert der Kontaktsensor mit nur einem Taster. Der Taster ist mit GPIO0
- also Pin D3
und GND
.
Es könnte statt dem Pin D3
auch der Pin D4
verwendet werden. Nur dann leuchtet bei Betätigung auch die blaue LED am D1 Mini ( in meinem Fall ). Das kann je nach verwendetem Board natürlich auch anders sein.
// GPIO 0 = D3
// GPIO 2 = D4
byte inputPin = 0;
Wichtig zu wissen ist, dass die Kontaktsensoren meistens NC-Schalter sind, also sind sie im Ruhezustand geschlossen und öffnen bei Betätigung. Das ist auch der Grund, warum wir einen GPIO mit Pull-Up Widerstand verwenden. Wenn der Schalter nicht betätigt ist, ist das Signal HIGH
- wenn wir den Schalter betätigen ist das Signal LOW
.
Zum Kapitel springen Programmcode
Der Code besteht aus drei Dateien, diese drei Dateien habe ich einem ZIP-Archiv gepackt. Das Archiv könnt ihr euch direkt über makesmart downloaden:
- Download: makesmart-homekit-contact-sensor.zip
Die Dateistruktur innerhalb des Archivs sieht wie folgt aus:
/makesmart-homekit-contact-sensor.zip
├── makesmart_homekit_contact_sensor.ino
├── my_accessory.c
└── wifi_info.h
Ihr müsst lediglich die Datei mit dem Namen makesmart_homekit_contact_sensor.ino
mit einem Doppelklick öffnen. Die anderen zwei Dateien werden dann automatisch innerhalb der Arduino IDE geladen.
Zum Kapitel springen makesmart_homekit_contact_sensor.ino
Diese Datei enthält den eigentlichen Code. Was passiert wann? Welches Signal ist das Sensorsignal, welches an HomeKit gesendet wird?
In dieser Datei ist die Zeile homekit_storage_reset();
in der setup()
-Funktion sehr wichtig. Diese Zeile löscht beim Start die komplette HomeKit Konfiguration vom ESP8266. Somit ist immer wieder ein erneutes Pairing notwendig. Für die Phase der Entwicklung ist dies sehr praktisch - für den laufenden Betrieb jedoch nicht. Haltet ein Auge auf die Zeile und setzt diese je nach Bedarf. Standardmäßig ist diese auskommentiert.
void setup() {
Serial.begin(115200);
wifi_connect();
//homekit_storage_reset();
my_homekit_setup();
pinMode(inputPin, INPUT);
}
Zum Kapitel springen wifi_info.h
Diese Datei enthält die Daten für die WLAN-Verbindung innerhalb eures Netzwerkes. Was ihr auf jeden Fall anpassen müsst, sind die WLAN Daten. Dazu benötigt ihr nur die folgenden beiden Zeilen in der Datei wifi_info.h
:
const char *ssid = "SSID";
const char *password = "PSK";
Zum Kapitel springen my_accessory.c
Diese Datei enthält die Definitionen des Kontaktsensors für HomeKit. Solltet ihr genau diesen Kontaktsensor benötigen, müsst ihr in dieser Datei eigentlich nichts anpassen.
Zum Kapitel springen Programm hochladen
Nach diesen Informationen könnt ihr das Programm schon kompilieren und auf den ESP8266 laden. Die einzige Änderung die ihr machen solltet ist, die Taktrate des ESP8266 von 80MHz auf 160MHz zu stellen.
HomeKit ESP8266 benötigt eine menge Rechenleistung durch die Verschlüsselung mit WolfSSL. Die Erhöhung der Taktrate kann dem etwas entgegenwirken.
Die Taktrate kann einfach über die Einstellungen geändert werden. Geht dazu innerhalb der Arduino IDE auf den folgenden Pfad und passt 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.