HomeKit Garagentor- und Drehtoröffner EPS8266 Arduino – Hörmann / Sommer Antriebe

HomeKit Garagentor- und Drehtoröffner EPS8266 Arduino – Hörmann / Sommer Antriebe

In diesem Blogbeitrag geht es um ein HomeKit Garagentoröffner, gebaut mit einem Wemos D1 mini, Wemos D1 mini pro oder auch jedem anderen ESP8266. Sicher kann man sich solche Sachen einfach kaufen, aber das macht ja kein Spaß. Deswegen möchte ich euch an diesem Projekt teilhaben lassen.

Ziel ist es den ESP8266 mit dem HomeKit zu verbinden und steuern zu können. Das hört sich erst mal sehr kompliziert an, ist es aber nicht. Den es haben sich schon andere über das HomeKit Thema Gedanken gemacht. Aus diesem Grund gibt es hier schon fertige Librarys die wir hier nutzen können.

Der Aufbau

Wie können wir den ESP8266 dazu bringen das Garagentor zu öffnen und zu schließen?
Hier haben die Hersteller der Antriebe, in dem Fall Hörmann und Sommer, ein Anschluss auf Ihren Platinen für externe Funksender (Hörmann) oder Schlüsseltaster (Sommer). Diesen können wir für unseren ESP8266 benutzen. (Sicher gibt es das auch für andere Antriebshersteller, habe ich aber nur für die beiden rausgesucht.)

Bei Welchem Antrieb welche Klemme benutzt werden kann, könnt Ihr in der List nachsehen.

Die Klemmenbezeichnung auf dern Platinen stimmen mit dem aktuellen Modellen überein, bei älteren Modellen kann es zu Abweichungen kommen. Daher bitte in die Liste gucken oder selber recherchieren. Ich habe die Angaben aus den Handbücher rausgesucht, übernehme aber keine Haftung dafür.

Hörmann

S1 = Tor auf oder zu (Impulseingang)
S2 = Teilöffnung / Gehflügel

Sommer

S1 = Beide Torflügel
S2 = Gehflügel

Liste Hörmann Antriebe

Prinzipiell kann man sagen überall wo die Externen Funksender HE1, HE2, HE3, HEI1, HEI2 und HEI3 angeschlossen werden können, kann auch meine Platine angeschlossen werden.

Garagentor

Model Klemme Beschreibung Max Strom PDF Seite Externer Sender
ProMatic 21a Impulseingang 100mA 16, 22 HE1
20 0V
5 24V
Model Klemme Beschreibung Max Strom PDF Seite Externer Sender
ProMatic 2 21 Impulseingang 100mA 13, 3 HE1
20 0V
5 24V
ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
ProMatic 321Impulseingang???25HE3
200V
524V
23Teilöffnung

ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
ProMatic 421Impulseingang350mA26???
200V
524V
23Teilöffnung

ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
ProMatic/ProMatic P21aImpulseingang100mA16, 22 
200V
524V

ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
RollMatic21Impulseingang???22HE1, HE2, HE3
23Teilöffnung
524V
200V

ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
RollMatic BiSecur21Impulseingang???21HE3
23Teilöffnung
524V
200V

ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
ProMaticSupra
Matic E P
21Impulseingang100mA17, 18, 30HE1
200V
524V

ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
SupraMatic E P21Impulseingang???18HE1
200V
524V

ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
SupraMatic E221Impulseingang???13, 33HE2, HE3
23Teilöffnung
524V
200V

ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
SupraMatic T21Impulseingang250mA12, 47HE2, HE3
200V
524V
23Teilöffnung

ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
SupraMatic H Serie1 A21Impulseingang???23, 34HE1
200V
524V

ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
SupraMatic H b21Impulseingang???23, 34HE1
200V
524V

ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
SupraMatic H Serie1 C21Impulseingang100mA29, 30, 42HE1, HE2
200V
524V

ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
SupraMatic HT21Impulseingang250mA24HE3
200V
524V
23Teilöffnung

ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
SupraMatic 2 (E, P, H)21Impulseingang250mA10, 33HE2, HE3
23Teilöffnung
524V
200V

ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
SupraMatic 3
21Impulseingang250mA24HE3
200V
524V
23Teilöffnung

ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
SupraMatic 421Impulseingang350mA27ESE
23Teilöffnung
524V
200V

ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
Turbo 7521Impulseingang250mA14, 33HE2, HE3
200V
524V
23Teilöffnung

Drehtor

ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
Drehtorantrieb DTA21Impulseingang???26, 51 
23Gehtür
524V
200V

ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
Portronic D 500021Impulseingang???16, 34 
23Gehtür
524V
200V

ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
RotaMatic 12 DIL-Schalter21Impulseingang100mA13, 25 
23Gehtür
524V
200V

ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
RotaMatic II21Impulseingang???21, 44 
23Gehtür
524V
200V
ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
RotaMatic II BiSecur21Impulseingang100mA17, 46HE3
23Gehtür
524V
200V
ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
RotaMatic 221Impulseingang250mA21HEI3
23Gehtür
524V
200V
ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
RotaMatic P-PL21Impulseingang100mA13, 27 
23Gehtür
524V
200V
ModelKlemmeBeschreibungMax StromPDF SeiteExterner Sender
VersaMatic21Impulseingang250mA26HEI3
23Gehtür
524V
200V

Liste Sommer Antriebe

Garagentor

ModelKlemmeBeschreibungMax StromPDF SeiteInfo
twist 200 E  100mA41, 42 
ModelKlemmeBeschreibungMax StromPDF SeiteInfo
duo rapido 650+7 + 8Taster100mA23DIP-Schalter 2 ON
100V
924V
ModelKlemmeBeschreibungMax StromPDF SeiteInfo
duo vision / duo rapido7 + 8Taster100mA23DIP-Schalter 2 ON
100V
924V
ModelKlemmeBeschreibungMax StromPDF SeiteInfo
marathon SL2 + 3Taster Innen100mA22, 23 
4 + 5Taster Außen
1024V
110V
ModelKlemmeBeschreibungMax StromPDF SeiteInfo
marathon tiga SL2 + 3Taster Innen100mA20, 21 
4 + 5Taster Außen
1024V
110V
ModelKlemmeBeschreibungMax StromPDF SeiteInfo
marathon tiga SLX2 + 3Taster Innen100mA25, 26 
4 + 5Taster Außen
1024V
110V
ModelKlemmeBeschreibungMax StromPDF SeiteInfo
pro / pro+  100mA46, 47 
ModelKlemmeBeschreibungMax StromPDF SeiteInfo
sprint evolution7 + 8Taster100mA19DIP-Schalter 2 ON
100V
924V
Model Klemme Beschreibung Max Strom PDF Seite Info
tiga 100mA 46,49
ModelKlemmeBeschreibungMax StromPDF SeiteInfo
tiga+  300mA46, 48, 50 
Drehtor
ModelKlemmeBeschreibungMax StromPDF SeiteInfo
twist 200 E13 + 14Impulseingang1,25A26, 27, 28 
15 + 16Gehtür
1024V
90V
ModelKlemmeBeschreibungMax StromPDF SeiteInfo
twist 200 E L13 + 14Impulseingang1,25A30, 31 
15 + 16Gehtür
1024V
90V
Model Klemme Beschreibung Max Strom PDF Seite Info
twist 350 / twist 350 rapido 21 + 22 Impulseingang 100mA 31, 34
23 + 24 Gehtür
35 24V
36 0V
ModelKlemmeBeschreibungMax StromPDF SeiteInfo
twist UG / twist UG+21 + 22Impulseingang100mA31, 33 
23 + 24Gehtür
3524V
360V

Die Platinen

Es gibt hier einmal die Version 1 mit den Bauteilen neben dem ESP8266 und die Version 2 mit den Bauteilen unter dem ESP8266.

Mit der Platine werden die entsprechenden Schalter via Optokoppler geschalten. Das hat den Vorteil das hier ein galvanische Trennung vorliegt. Sprich die beiden Stromkreise ESP8266 und der Schaltkontakt haben keine Verbindung. Sicher könnte man das auch über eine Transistorschaltung realisieren.

Version 1: 70,3mm x 50,3mm x 1,5mm
Version 2: 48,2mm x 50,3mm x 1,5mm
 
Stromverbrauch: ca. 40mA

Hörman Platine

Sommer Platine

Die 24 Volt von der Antriebssteuerung müss auf 5 Volt runtergeregelt werden. Dafür habe ich paar Bauteile rausgesucht, die dafür verwendet werdenkönnen.

Der Programmcode

Der Code kann hier runtergeladen werden.

Datei xx_homekit_AP.ino

An dieser Stelle wird der Access Point Name und Passwort festgelegt.
				
					#ifndef APSSID
#define APSSID "AP_HomeKit_GSwitch"
#define APPSK  "ESP-HomeKit24"
#endif
				
			
Access Point Zugangsadresse.
				
					/* hostname  http://homekit.local */
const char *myHostname = "homekit";

IPAddress apIP(192, 168, 100, 1);
IPAddress netMsk(255, 255, 255, 0);
				
			
Hier wird die Webansicht definiert und in der Datei handleHttp.ino ausgeführt.
				
					  server.on("/", handleRoot);
  server.on("/reset", handleReset);
  server.on("/reset_do", handleResetDo);
  server.on("/wifi", handleWifi);
  server.on("/wifisave", handleWifiSave);
  server.on("/generate_204", handleRoot);  //Android captive portal. Maybe not needed. Might be handled by notFound handler.
  server.on("/fwlink", handleRoot);  //Microsoft captive portal. Maybe not needed. Might be handled by notFound handler.
  server.onNotFound(handleNotFound);
  server.begin(); // Web server start
				
			
Definition der Schaltanweisung für das HomeKit.
				
					// Diese Funktion wird aufgerufen, wenn der Schalter in HomeKit betätigt wird
void switch_S1_setter(const homekit_value_t value) {

  digitalWrite(PIN_SWITCH_S1, HIGH);
  delay(1000);
  digitalWrite(PIN_SWITCH_S1, LOW);

}

void switch_S2_setter(const homekit_value_t value) {

  digitalWrite(PIN_SWITCH_S2, HIGH);
  delay(1000);
  digitalWrite(PIN_SWITCH_S2, LOW);

}

void my_homekit_setup() {
  pinMode(PIN_SWITCH_S1, OUTPUT);
  digitalWrite(PIN_SWITCH_S1, LOW);
  switch_S1.setter = switch_S1_setter;

  pinMode(PIN_SWITCH_S2, OUTPUT);
  digitalWrite(PIN_SWITCH_S2, LOW);
  switch_S2.setter = switch_S2_setter;
  arduino_homekit_setup(&config);

}
				
			

Datei my_accessory.c

Definition was im Homekit als Name für das Gerät angezeigt werden soll und was es ist. Zum Beispiel ein Schalter oder ein Sensor usw. Was es da für Möglichkeiten gibt findet Ihr in der Library.

C:\Users\EuerName\Documents\Arduino\libraries\HomeKit-ESP8266\src\homekit

In der Datei types.h und characteristics.h siehe auch das Video.

				
					homekit_characteristic_t nameS1 = HOMEKIT_CHARACTERISTIC_(NAME, "Garagentor");
homekit_characteristic_t nameS2 = HOMEKIT_CHARACTERISTIC_(NAME, "Garagenteilöffnung");

homekit_accessory_t *accessories[] = {
  HOMEKIT_ACCESSORY(.id = 1, .category = homekit_accessory_category_garage, .services = (homekit_service_t*[]) {
    HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics = (homekit_characteristic_t*[]) {
      HOMEKIT_CHARACTERISTIC(NAME, "Garagentor"),
      HOMEKIT_CHARACTERISTIC(MANUFACTURER, "arduino-projekte.info"),
      HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "SN081523"),
      HOMEKIT_CHARACTERISTIC(MODEL, "ESP8266 D1 Mini"),
      HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
      HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
      NULL
    }),
				
			
Hier wird der Pin vergeben der beim Verbinden (Pairing) mit dem Homekit abgefragt wird.
				
					homekit_server_config_t config = {
  .accessories = accessories,
  .password = "111-11-111"
};
				
			

Hinweis:

Je nach Modell kann es sein das der Access Point nicht gleich startet, hier einfach das Modul nochmal aus und einstecken.

Update: vom 17.08.2021

Mit dem letzten IOS Update funktioniert das Garagenprogramm nicht mehr. Der Grund ist hier der lange Name in der my_accessory.c Datei “Garagentorteilöffnung” dieser muss gekürzt werden, dann geht es auch wieder. Scheinbar gibt es eine Begrenzung der Zeichen für die HomeKit Namen.

				
					homekit_characteristic_t nameS1 = HOMEKIT_CHARACTERISTIC_(NAME, "Garagentor");
homekit_characteristic_t nameS2 = HOMEKIT_CHARACTERISTIC_(NAME, "Garagenteilöffnung");

  HOMEKIT_ACCESSORY(.id = 2, .category = homekit_accessory_category_garage, .services = (homekit_service_t*[]) {
    HOMEKIT_SERVICE(ACCESSORY_INFORMATION, .characteristics = (homekit_characteristic_t*[]) {
      HOMEKIT_CHARACTERISTIC(NAME, "Garagenteilöffnung"),
                             HOMEKIT_CHARACTERISTIC(MANUFACTURER, "arduino-projekte.info"),
                             HOMEKIT_CHARACTERISTIC(SERIAL_NUMBER, "SN081523"),
                             HOMEKIT_CHARACTERISTIC(MODEL, "ESP8266 D1 Mini"),
                             HOMEKIT_CHARACTERISTIC(FIRMWARE_REVISION, "1.0"),
                             HOMEKIT_CHARACTERISTIC(IDENTIFY, my_accessory_identify),
                             NULL
    }),
				
			

Update: vom 14.08.2023

Das System bzw. die Platinen können auch für Home Assistant via ESP Home genutzt werden.

Folgende Bauteile wurden verwendet: