Meine neue smarte Klingel

Veröffentlicht von am 31. Mai 2019 in Mitgliederblog

Moin! Ich habe heute den ersten Teil meines Projekts „Smarte Klingel“ fertig gestellt und lasse euch hiermit daran teilhaben.

Hintergrund

Vor ziemlich genau einem Jahr habe ich angefangen, meine Wohnung smarter zu machen. Bei mir läuft Home Assistant auf einem Raspberry Pi und bindet ein breites Sammelsurium an smarten Geräten zusammen. Von Homematic IP über Xiaomi und Sonoff bis hin zu ESP-basierenden Eigenkreationen ist alles dabei.

Da die Balkon- bzw. Gartensaison jetzt ja doch bald beginnt, rückt auch die Haustürklingel wieder in den Fokus. Im Garten hört man nichts von der Klingel und selbst auf dem Balkon nur mit Glück. Hier im Haus ist eine Klingelanlage installiert. Eigentlich ganz nett mit Gegensprechanlage, Türöffner, etc. Allerdings ist das System nicht dafür gedacht, einfach mal die Klingel anzuzapfen.

Klingelanlage

Die Klingelanlage ist ein geschlossenes System von TCS. Es gibt eine Basisstation an der Außentür mit den Tastern für die einzelnen Wohnungen und in jeder Wohnung eine Satellitenstation. In jeder Wohnung kommen 2 Drähte an, alle Satelliten sind in Reihe angeschlossen. Über die beiden Drähte kommt zum einen die 24 Volt Versorgungsspannung an, zum anderen wird ein proprietärer Bus aufmoduliert. In der frei verfügbaren Dokumentation findet man nur die Information, dass jede Station eine eindeutige Adresse hat und Nachrichten von jeder Station quittiert werden. Die Satellitenstation hat einen Anschluss für ein Funkmodul, aber auf das müsste als Busteilnehmer angelernt werden. Also ist kreatives Hacken gefragt.

Umsetzung

Hardware

Da es im Internet nicht viel Detailinformation gibt, war der erste Schritt die Spannung mit dem Multimeter zu messen, während geklingelt wird. Das Gerät ist natürlich viel zu langsam um konkrete Aussagen treffen zu können, aber es reichte für die Erkenntnis, dass die Spannung abgesenkt wird, wenn Nachrichten auf dem Bus laufen. Ich musste also einen Bus-Sniffer bauen, um die einzelnen Bits mitlesen zu können. Der Wemos D1 Mini erlaubt am ADC Eingang maximal 3,2 Volt, daher habe ich einen Spannungsteiler aus 1 MΩ zu 147 kΩ zusammengelötet, der die 24 Volt auf knapp unter 3 Volt drückt. Dazu zwei Schraubklemmen und Sockel für den Wemos. Verpackt wird das ganze in ein gelasertes Gehäuse auf MDF.

Software

Die Software auf dem Wemos ist ein Arduino Sketch (Code auf Github). Ich lese die Spannung am A0 ein und skaliere die Digits auf die ursprünglichen 24 Volt. Der nächste Schritt ist die Flankenauswertung. Das TCS Installationshandbuch spricht von 24V +/- 8%, also habe ich als Threshold willkürlich 20 Volt eingetragen. Wenn die Spannung unter diesen Wert fällt, merke ich mir den Zeitpunkt, wenn die Spannung wieder höher steigt, bilde ich die Zeitdifferenz. Das hat auf Anhieb sehr gut funktioniert, allerdings musste ich von Millisekunden auf Mikrosekunden wechseln, um die Bitlängen zuverlässig messen zu können.

Den ursprünglichen Plan, das Busprotokoll zu reverse-engineeren, habe ich schnell verworfen zugunsten einer einfacheren Variante. Da beim Klingeln immer die gleiche Nachricht gesendet wird, muss ich nur genau diese eine Abfolge von Flanken erkennen. Die Sequenz der Bitdauern habe ich schließlich als Array fest ins Programm geschrieben. Bei jeder Flanke wird die Anzahl der Mikrosekunden seit der letzten Flanke mit dem Wert im Array verglichen. Gibt es eine Übereinstimmung wird weitergezählt, andernfalls wird der Sequenzzähler zurückgesetzt. Wenn die Sequenz vollständig durchlaufen wurde, wird eine Nachricht verschickt.

Die Nachricht wird per MQTT an mein Home Assistant geschickt. Da die MQTT Libraries für Arduino anscheinend ein Problem haben, wenn der Client zu oft aufgerufen wird, ist in meinem Standard-Code ein Delay von 10 Millisekunden im Loop eingebaut. Damit würde natürlich die Flankenauswertung nicht mehr funktionieren, also verbinde in diesem Fall den MQTT Client erst dann, wenn eine Nachricht gesendet werden soll und trenne dann sofort die Verbindung wieder.

Ausblick

Der schwierigste Teil des Projekts ist erledigt. Ich erkenne, dass es an meiner Haustür klingelt und melde die Information an mein Smart Home. Jetzt fehlt noch ein System zur Benachrichtigung auf dem Balkon bzw. im Garten. Wahrscheinlich werde ich dort einen weiteren ESP mit LEDs, einem Summer oder etwas ähnliches installieren.

Update

Der zweite ESP zur Benachrichtigung auf dem Balkon ist zwar noch nicht fertig, aber der Adapter ist mittlerweile fest montiert.

Microcontroller Werkstatt am Samstag

Veröffentlicht von am 24. Mai 2018 in Veranstaltungen

Auch in diesem Monat gibt es natürlich wieder die Mikrocontroller Werkstatt!

Dieses Mal steht die Themen MQTT, 433MHz, ESP8266, ESP32 und BLE auf meinem Plan. Das alles soll mit Hilfe von OpenMQTTGateway verknüpft werden.

Wie jedes Mal sind natürlich auch alle anderen kleinen Platinen gerne gesehen. Sei es Arduino, Rspberry Pi oder etwas ganz anderes. Kommt einfach vorbei, bringt eigene Projekte mit oder lasst euch inspirieren.

Der Termin ist der 26.05. und los geht es wie immer um 12 Uhr bei uns in der Bornstraße.

Microcontroller Werkstatt am Samstag

Veröffentlicht von am 26. April 2018 in Veranstaltungen

Auch in diesem Monat gibt es natürlich wieder die Mikrocontroller Werkstatt!

Ich werde mich nochmal an MicroPython auf dem ESP32 versuchen. Hinzu kommt als mögliches Thema für dieses Mal MQTT, einer der Internet of Things Standards.

Wie jedes Mal sind natürlichauch alle anderen kleinen Platinen gerne gesehen. Sei es Arduino, Rspberry Pi oder etwas ganz anderes. Kommt einfach vorbei, bringt eigene Projekte mit oder lasst euch inspirieren.

Der Termin ist der 28.04. und los geht es wie immer um 12 Uhr bei uns in der Bornstraße.

Microcontroller Werkstatt am Samstag

Veröffentlicht von am 23. März 2018 in Veranstaltungen

Es ist mal wieder Zeit für Mikrocontroller!

Wie jeden Monat steht morgen wieder die Mikrocontroller Werkstatt an. Mögliche Themen sind:

  • USB Devices emulieren mit Raspberry Pi Zero und Python
  • Platinen mit KiCad entwerfen und ätzen
  • MicroPython auf ESP32 installieren

Aber es sind natürlich wie jedes Mal auch alle anderen kleinen Platinen gerne gesehen. Sei es Arduino, ESP oder etwas ganz anderes. Kommt einfach vorbei, bringt eigene Projekte mit oder lasst euch inspirieren.

Der Termin ist der 24.03.und los geht es wie immer um 12 Uhr bei uns in der Bornstraße.