Da ich schon relativ tief in der Smart-Home-Welt drin stecke, möchte ich meine Türklingel ebenfalls smart machen. Denn ich vergesse mit einer gewissen Regelmäßigkeit meinen Schlüssel zu Hause. Auch wenn das bislang keine unangenehmen Konsequenzen hatte, weil der Vermieter einen Ersatzschlüssel hat und fast immer zu Hause ist – zumindest dann, wenn ich mich ausschließe. Außerdem möchte ich wissen, ob und wann bei mir geklingelt wurde, auch wenn ich nicht zu Hause bin. Gerade in Bezug auf Paketdienstleister, die „mich nicht zu Hause angetroffen haben“. Ich wohne in einem Mehrfamilienhaus, das vor gar nicht allzu langer Zeit ein Gira TKS (Türkommunikationssystem) verpasst bekommen hat. Die Kommunikation erfolgt über einen Bus, auf dem sich alle Teilnehmer befinden.


Glücklicherweise gibt es aber das GDoor Projekt, das das Gira TKS Protokoll reverseengineered hat und einen Adapter als Open Hardware entworfen hat, der als Schnittstelle zu einem ESP32 dient. Diesen habe ich beim PCB-Fertiger meines Vertrauens produzieren lassen. 5x sogar (Mindestbestellmenge) und auch inkl. Bestückung. Das ist unglaublich, wie günstig solche Dinge heutzutage sind!


GDoor Firmware auf den ESP32mini flashen
Ich habe den Web Installer (im Chromium-basierten Browser) verwendet um die GDoor Firmware direkt auf den ESP32mini zu flashen, den ich über Amazon bezogen habe. Anschließend stecke ich den ESP32 mit dem USB-Port in Richtung der Bus-Schraubklemmen auf den GDoor Adapter.

Nach dem erfolgreichen Flashen startet die Software und erstellt ein WLAN mit dem Namen „GDoor
“ und dem Passwort „12345678
„. Verbindet man sich mit diesem, kann man das Webinterface aufrufen. Hier verbindet man den ESP mit dem eigenen WLAN und konfiguriert die MQTT Parameter des Home Assistants, bzw. von Mosquitto. Neben IP-Adresse des Servers, gebe ich den Port (1883 – unverschlüsselt ) und das Passwort an. Den Rest belasse ich auf den voreingestellten Werten.
Achtung: Das MQTT-Passwort darf max. 30 Zeichen lang sein, und auch mit einigen Sonderzeichen gibt es Probleme. Fragt mich, woher ich das weiß!
Damit sind die Vorbereitungen abgeschlossen und ich kann das Gerät in das Klingelsystem integrieren.
Neben der MQTT-Firmware gibt es auch noch ein bisschen Beispielcode für eine ESPHome Integration. Das würde ich mir in Zukunft auch gerne noch mal näher angucken wollen. Aber jetzt soll es erst einmal „einfach funktionieren“.
GDoor Integrationstest ins Gira TKS System

Ich hänge den ESP-Adapter nun erst einmal testweise fliegend verkabelt an den Bus. Die Polarität ist dabei egal, da auf dem GDoor Adapter ein Vollbrückengleichrichter (FULL BRIDGE RECTIFIER!!) sitzt. Zur Stromversorgung nutze ich temporär eine Powerbank.
Bei der Demontage der Wohnungsstation ist mir auch direkt eine ungenutze Unterputzdose aufgefallen, die sich dafür anbietet, später den ESP darin verschwinden zu lassen.
Jetzt ist es Zeit, Knöpfe zu rücken. Klingelknöpfe meine ich, das heißt den Etagenschalter und den Klingelknopf an der Haustür. Letzteren einmal kurz und einmal lang (bis zum Piep). Denn es stellt sich heraus, dass ein kurzer und ein langer Druck mitunter unterschiedliche Payloads und busdata Events senden. Damit ich auch sehe, was dabei passiert, lausche ich mit MQTT Explorer auf dem topic bus_rx. Alternativ kann man sich auch via USB seriell an den Adapter hängen, oder auf der HA-Geräteseite auf MQTT-Info nachsehen, welche Events zuletzt empfangen wurden.


In meiner Installation sind dabei folgende Werte herausgekommen, die sich nicht auf eine andere Installation übertragen lassen und daher hier nur als Beispiel dienen.
{"action": "DOOR_OPEN", "parameters": "0000", "source": "9A59A6", "destination": "E2A1A4", "type": "INDOOR", "busdata": "0200319A59A60000A1E2A1A494", "event_id": "3"} # Haustür öffnen
{"action": "BUTTON_FLOOR", "parameters": "FF6F", "source": "9A59A6", "destination": "000000", "type": "INDOOR", "busdata": "0110139A59A6FF6FA1CC", "event_id": "15"} # Wohnungstür
{"action": "BUTTON_RING", "parameters": "0560", "source": "194E80", "destination": "000000", "type": "OUTDOOR", "busdata": "011011194E800560A00E", "event_id": "9"} # Haustürklingel kurz
{"action": "BUTTON_RING", "parameters": "05A0", "source": "194E80", "destination": "000000", "type": "OUTDOOR", "busdata": "011011194E8005A0A04E", "event_id": "11"} # Haustürklingel lang
Code-Sprache: PHP (php)
Home Assistant Automatisierung
Nun ist es an der Zeit, eine Automatisierung zu erstellen, die auf die MQTT Nachrichten reagiert und eine entsprechende Benachrichtigung an die Home Assistant App auf dem Mobiltelefon schickt. Später folgt auch eine Sprachansage auf den Smartspeakern. In diese Automatisierung werden die eben gesammelten Payloads und/oder busdata Nachrichten eingearbeitet:
alias: Türklingel
description: Benachrichtigung über Wohnungs- oder Haustürklingeln
triggers:
- trigger: mqtt
topic: gdoor/bus_rx
actions:
- choose:
- conditions:
- condition: template
value_template: >-
{{ (trigger.payload_json.action == 'BUTTON_RING' and
trigger.payload_json.parameters == '0560') or (
trigger.payload_json.action == 'BUTTON_RING' and
trigger.payload_json.parameters == '05A0') }}
sequence:
- data:
data:
push:
interruption-level: time-sensitive
message: Türklingel (außen)
action: notify.alle_mobilen_gerate
- conditions:
- condition: template
value_template: >-
{{ trigger.payload_json.action == 'BUTTON_FLOOR' and
trigger.payload_json.parameters == 'FF6F' and
trigger.payload_json.busdata == '0110139A59A6FF6FA1CC'}}
sequence:
- data:
data:
push:
interruption-level: time-sensitive
message: Türklingel (innen)
action: notify.alle_mobilen_gerate
mode: single
Code-Sprache: YAML (yaml)
Dabei ist notify.alle_mobilen_gerate
eine Gruppe, die meine 2 primären Handys und das Notebook (mit dem go-hass-agent) enthält. Das sieht dann so aus:

Haustür öffnen
Was noch fehlt, ist eine Möglichkeit, die Haustür zu öffnen, nachdem es geklingelt hat – ohne dabei den Arsch vom Schreibtischstuhl oder dem Sofa zu heben. Auch wenn der Besuch dann immer noch an der Wohnungstür stehen bleibt. Ein Problem, das noch gelöst werden will.
Dazu habe ich einen Button auf dem Dashboard erstellt, der entsprechend eine MQTT Nachricht auf den bus_tx mit der richtigen Payload (meinem DOOR_OPEN busdata code) sendet.
type: button
name: Haustür öffnen
icon: mdi:door-open
show_name: true
show_icon: true
tap_action:
action: perform-action
target: {}
perform_action: mqtt.publish
data:
qos: "0"
payload: 0200319A59A60000A1E2A1A494
topic: gdoor/bus_tx
Code-Sprache: YAML (yaml)

Im Prinzip wäre es egal, welchen DOOR_OPEN Code ich sende, aber es soll ja alles seine Richtigkeit haben, nicht, dass irgendwann mal wer verwirrt ist, der gerade zum Debugging auf den Bus drauf schaut.
Bei Installationen mit mehreren Benutzern ist es sicherlich sinnvoll, noch den Standort, bzw. die Standortzone des drückenden Users in die Action einzubeziehen. Damit der Türöffnungsknopf nur gedrückt werden kann, wenn derjenige auch vor Ort ist – schließlich öffnet man so potentiell einem Fremdem die Haustür.
Unfug mit Strom
Eine blöde Idee habe ich noch durchgespielt, die nicht nachgemacht werden sollte. Die Denke war: die Wohnungsstationen werden vom Bus parasitär mit Strom versorgt, ginge das auch für den ESP32? Dazu habe ich einen Step-down Wandler (Buck converter) mit an den Bus gehängt, um 5V für den ESP zu erzeugen. Die Stromversorgung funktioniert so auch. Dafür geht danach im gesamten Haus gar nichts mehr. Der Noise des (ungefilterten) Schaltreglers ist viel zu groß. Das legt den Bus lahm.

Das ist eigentlich auch gar nicht verwunderlich, denn das Nutzsignal wird mit 60kHz und +/- 2V auf die ~25V Busspannung aufmoduliert. Es muss also leider eine externe Stromversorgung her. Und diese sollte (!) auch isoliert sein. Der Bus GND wird (wie von Gira ebenfalls empfohlen) mit dem PSU GND verbunden. Liegen beide GNDs auf unterschiedlichen Potenzialen geht etwas schief. Angeblich soll das die TKS Installation schwerlich beschädigen können, aber das Bussignal wird durch so etwas sicher auch lahmgelegt. Ich wollte es aber auch nicht herausfinden und bin schließlich der Empfehlung gefolgt und habe ein 5V USB-Ladegerät als externe Stromversorgung verwendet.
Finale Installation
Theoretisch ist es egal, wo der ESP am Bus hängt. Heißt, der muss nicht zwangsläufig hinter oder in der Nähe der Wohnungsstation installiert werden. Gibt es einen zentralen Schrank mit der Gira Anlage, könnte er ebenso dort installiert werden – sofern das WLAN bis dorthin reicht. Ich hätte den aber tatsächlich gerne in meinem Einflussbereich. Im Keller ist mein WLAN auch arg schwach …
Die Stromversorgung muss also von extern in die Unterputzdose eingeführt werden. Mit einem Kabel, was nicht so schön ist.
So erhalte ich nun Benachrichtigungen, wenn jemand bei mir klingelt und ich kann die Tür unten öffnen. Fehlt noch ein smartes Türschloss an der Wohnungstür, dann könnte ich tatsächlich ohne Schlüssel das Haus verlassen. Das ist aber ein Thema für einen zukünftigen Blogeintrag.
Wegen der Mindestbestellmenge habe ich den fertig bestückten Adapter noch 3x hier herum liegen. Solltest Du Dich inspiriert fühlen, Deine kompatible TKS Anlage ebenfalls smart machen zu wollen, kann ich Dir ein PCB zum Selbstkostenpreis + Porto weitergeben. Melde Dich dazu einfach via E-Mail bei mir.