Teil 2: Die Schaltung – RFID Codeschloss für den Keymatic / Abus Funk Türschlossantrieb

Im Teil 1 habe ich beschrieben, wie man einen Keymatic / Abus HomeTec Handsender so umbauen kann, dass er an einer Schaltung mit 3V oder 5V Versorgungsspannung betrieben werden kann.
In diesem Teil 2 geht es nun um die gesamte Schaltung für einen Ersatz bzw Nachfolger für ein Funk Codeschloss für einen Keymatic / Abus Funk Türschlossantrieb. In Teil 3 werde ich die passende Arduino Software vorstellen.

Das Grundprinzip
Vor der Türe ist ein RFID-Codeschloss auf Touchbasis montiert. Dieses gibt die eingegeben Codes / RFID-IDs per Wiegand Interface nach innen ins Haus weiter. Ein Arduino wertet die Codes aus und steuert einen Abus Homtec Handsender an. Verschiedene Codes / RFIDs können dann nach Wahl die Tür auf- oder abschließen.
Durch diesen Aufbau wird eine hohe Manipulationssicherheit gewährleistet. Das Codeschloss im Außenbereich wird nicht kodiert und die außen liegende Elektronik bewertet nicht, ob ein Code korrekt ist oder nicht. Die Auswertung erfolg vollständig auf dem Arduino, der im Innenbereich liegt.

Auswahl des Codeschlosses
Es gibt auf dem Markt eine Vielzahl von RFID Codeschlössern zu kaufen, die ein Wiegand Interface anbieten. Viele dieser Codeschlösser sind allerdings nicht wetterfest und/oder kamen qualitativ aus meiner Sicht nicht in Frage.
Ein weiteres Kriterium ist die Handhabung der RFID Codes auf dem Wiegand Interface. Oft ist dazu keine Dokumentation verfügbar. Ergo kauft man die Katze im Sack. Es gibt auch offen gesagt dämliche Implementierungen, bei denen auf dem Wiegand Interface übertragen wird, ob das Codeschloss einen gültigen RFID gesehen hat und ggf unter welcher Nummer er im Codeschloss registriert ist. Das führt das gesamte Sicherheitskonzept ad absurdum, da die Antwort des Codeschlosses auf einen gültigen RFID a priori für jeden bekannt ist.
Der qualitative Anspruch, eine vernünftige Dokumentation des Verhaltens sowie ein sinnvolles RFID Verhalten auf dem Wiegand Interface habe ich bei den Codeschlössern der Firma Sebury gefunden. Diese Codeschlösser werden in Deutschland über über i-keys.de vertrieben. Ich will hier keine Werbung machen. Es gibt bestimmt auch gute Codeschlösser anderer Firmen; u.a. auch mit Fingerabdrucklesern etc. Im Prinzip sollten alle diese Codeschlösser und Leser verwendbar sein und ich freue mich über Kommentare zu alternativer Hardware. Es kann jedoch im Bereich der Wiegand Codeauswertung zu Unterschieden kommen.
Wer am Ende gerne den Arduino Code ohne Änderung nutzen will, fährt mit dem vorgeschlagenen Codeschloss auf der sicheren Seite. Mit leichten Code Anpassungen sollte man auch andere Wiegand Leser ans Laufen bringen.
Konkret habe ich mich für das Modell Sebury sTouch standalone W-w entschieden; hier im Vergleich zur Originallösung:
1_Codeschloss_fertigold_abus

Die Wahl basiert einerseits auf der Optik, die meines Erachtens die Keymatic / Abus Lösung um Längen schlägt: Metall statt Pastik. Touch statt Folie. RFID zusätzlich. Weiterhin ist das Schloss nach IP65 staub- & wasserdicht ist und sollte aufgrund der kapazitiven Touch-Tastatur verschleißfrei sein sollte. Die Folientastatur der Originallösung hat sich also nicht sehr haltbar erwiesen.
Vieleinstellen muss man an dem Codeschloss nicht. Den Admin-Code sollte man natürlich ändern, das Schloss als Wiegand Leser konfigurieren und die Übertragung von 26 auf 37Bit umstellen. Das war es auch schon.
Die Anlernkarten für RFIDs braucht man bei der Nutzung als Wiegand Leser nicht. Als RFIDs kann man einfach 125kHz RFIDs nach EM4100/4102 kaufen. Wer günstig in China bestellt, bekommt bei ebay 10 Stück für unter 3€.
1a_RFID

Kein Wiegand Controller von der Stange
Ein Wiegand Controller ist eine Box, welche die Wiegand Codes interpretiert und bei korrekten Codes Ausgänge beschaltet. Es gibt natürlich kommerzielle Wiegand Controller zu kaufen. Nun kommt das kleine, aber relevante Problem: Wir brauchen einen Wiegand Controller mit zwei Ausgängen: Es müssen die Funktionen Auf- und Abschließen mit unterschiedlichen Codes angesteuert werden. Solche Wiegand Controller kosten mehrere Hundert Euro. Die Idee: Wir bauen uns einen entsprechenden Controller für ein paar Euro aus einem Arduino selbst.
Eine Alternative wäre auch ein simpler Wiegand Controller mit nur einem Ausgang. Das Kommando für Abschließen könnte man auch mit einem zusätzlichen Taster realisieren, da man dieses Kommando eigentlich nicht per Code schützen muss. Ein solcher einfacher Wiegand Controller kostet aber immer noch 50-100€. Und man braucht eine sinnvolle Lösung für den zusätzlichen Schalter.
Meine Wahl war damit klar: Controller selbst bauen.

Ein Arduino Nano Clone tut’s
Am Codeschloss ist ein Kabel für die Stromversorgung und die Signalleitungen angebracht. Dieses habe ich nach innen ins Haus geführt und mit etwas Abstand eine kleine Unterputzdose in der Wand montiert. Für die Auswertung der Wiegand Codes und die restliche Steuerung langt ein Arduino Nano. Ich habe mich für einen China Clone mit FTDI USB Schnittstelle entschieden (es geht natürlich auch einer mit CH340 USB Chip). Solche Arduino Clones gibt es für 3-5 Euro bei ebay.
So sieht das Ganze dann auf eine Lochrasterplatine aus:
7_Schaltung_komplett

Mit dieser Größe passen alle Komponenten für den Innenbereich problemlos in eine Unterputzdose. Auch das ist ein Argument für den Selbstbau. Ein Wiegandkontroller von der Stange ist größer.

Mit Hilfe der USB Schnittstelle ist es sehr einfach, Codes & RFIDs hinzuzufügen oder zu löschen: Rechner per USB anschließen, serielles Terminalprogramm (z.B. putty) mit 9600 Baud, 8N1 starten und fertig. Ein minimales textbasiertes Menü ist in der Arduino Software implementiert.
Ein weiterer Vorteil des Arduinos ist der eingebaute EEProm, auf dem RFID & Codedaten hinterlegt werden können. So können die Daten auch bei einem Spannungsverlust erhalten werden.

Das Wiegand Interface
Das Wiegand Interface ist ein sehr einfaches, serielles Protokoll mit den Pegeln 0V und 5V. Beschreibungen finden sich im Netz sehr viele. Stark verkürzt: Es gibt zwei Datenleitungen D0 und D1. Für jedes übertragene Bit springt D0 für 100 Mikrosekunden von high auf low. Geht D1 zwischen zwei D0 Pulsen auch auf low, so wurde eine 1 übertragen. Bleit D1 auf high, so ist es eine Null. Es gibt kein Ende einer Übertragung. Man muss halt schauen, ob länger nichts mehr kommt.
Dieses Format läßt sich sehr leicht auf einem Arduino implementieren. Die Pins D2 und D3 können bei einem Nano Interrupts auslösen. Passt perfekt auf unsere Problemstellung.

Stromversorgung
Arduino wie Codeschloss können mit 12V Gleichstrom betrieben werden. Wer sich einfach 12V mit Hilfe eines Steckernetzeils organisieren will, kann hier das Lesen aufhören. Da das Codeschloss bei uns an der Stelle des Klingelschalters montiert ist, soll die Stromversorgung über den Klingeltrafo erfolgen. Bei uns ist ein Klingeltrafo der Marke Grothe, Typ GT3148 montiert. Dieser liefert nach Spezifikation 8V Wechselstrom und einen maximalen Strom von 1A. Das sind allerdings nur Richtwerte. Im Leerlauf werden ca. 12V Wechselspannung erreicht. Wenn man die Spannung gleichrichtet und stabilisiert, ergeben sich ca. 16V.
Diese habe ich mit einem Festspannungsregler LM78S12 auf 12V Gleichspannnung herabgesetzt und mit einem Elko stabilisiert. Eine Diode schützt den Festspannungsregler gegen Restspannung auf der Verbraucherseite.
Den Gleichrichter und die Spannungsstabilisierung habe ich auf einer separaten Platine aufgebaut:
6_Netzteil
Da bei uns liegen an der Tür sowohl die Klingelspannung als auch die zwei Pole für die Klingel vor. Dadurch kann das Codeschloss/Arduino parallel zur Klingel angeschlossen werden. Bei manchen Häusern/Wohnungen sind an der Tür nur zwei Pole verfügbar; die Klingel löst bei Verbindung der Pole aus. Hier passt das hier vorgeschlagene Konzept zur Spannungsversorgung nicht.

Da war noch was: Die Klingel
Die 12V Gleichstrom haben wir uns jetzt vom Klingeltrafo organisiert. Nun müssen wir noch die Klingel ansteuern. Das Sebury Codeschloss hat einen Klingeltaster und wollen wir natürlich nutzen. Das Codeschloss hat einen eigenen Klingelausgang, der aber nicht mit hohen Strömen belastbar ist. Man braucht also eine Treiberstufe.
Ich habe einen alternativen Weg gewählt: Der Druck auf den Klingeltaster erzeugt einen 18Bit Wiegand Code. Dieser wird auf dem Arduino als Klingelkommando erkannt und steuert über den Pin D8 einen npn-Transistor an. Dieser schaltet ein Relais, an welchem die klassische Klingel (Ding/Dong – ca. 800mA) hängt. Eine Freilaufdiode stellt sicher, dass Transistor und Arduino beim Abschalten des Relais keinen Schaden neben (Relaisspule = Induktivität –> hohe Spannung beim Abschalten).

Anschluss des Handsenders
Nun muss noch der Keymatic / Abus HomeTec Handsender angeschlossen werden. Diesen wie in Teil 1 beschrieben umbauen. Die Spannungsversorgung läuft über den Arduino Pin D7. D11 und D12 schalten die Kommandos für auf- bzw abschließen. Der Handsender wird nur mit Spannung versorgt, wenn auch ein Kommando gesendet werden soll. Eine Kommandodauer von 3 Sekunden hat sich als ausreichend erwiesen.

Erfolgskontrolle: Buzzer und LED im Codeschloss
Im Sebury Codeschloss ist ein Piezosummer und eine LED eingebaut, die sich extern ansteuern lassen (pull to low). Die LED und der Summer wird genutzt, um den Anwender optisch und aktustisch zu informieren, ob ein korrekter Code eingegeben wurde. Dazu werden die entsprechenden Eingänge des Codeschlosses mit den Arduino Pins D8 und D9 verbunden.
Ein langer Piep und ein grünes Leuchten bestätigen einen korrektem Code. Eine Piep,Piep,Piep-Folge mit einer blinkenden LED im Fall einer Fehleingabe. Bei 5 falschen Codes / RFIDs in Folge blinkt das Codeschloss 3 Minuten lang und akzeptiert so lange keine Eingaben. Falsche Code Eingaben merken wir uns auch im EEprom, so dass man diesen Mechanismus nicht durch eine Sabotage an der Spannungsversorgung umgehen kann.

USB Init Probleme?
Einige Arduino Nanos (Clone und Original) haben Probleme mit der Initialisierung des FTDI Chips (Chip für USB Kommunikation), wenn parallel eine externe Spannung anliegt und danach währen des Betriebs ein USB Kabel angeschlossen wird. Es gibt im Netz Informationen, dass dies an einer fehlerhaften Beschaltung des Test-Pins am FTDI Chips liegt. Ich habe nicht versucht das Test-Pin Problem zu lösen. Statt dessen habe ich einen kleinen Schalter montiert, mit dem man die externe Spannung abklemmen kann, bevor man den Rechner per USB anschließt. Ist der Rechner dran und der FTDI erkannt, kann man die externe Spannung auch wieder zuschalten. Der FTDI ist jetzt sauber initialisiert.
Wer einen Arduino ohne diese Probleme hat, kann den Taster weglassen.

Hier der gesamte Schaltplan:
Codeschloss Arduino

Und hier die komplette Schaltung mit allen Kabeln vor der Unterputzdose:
8_Schaltung_einbau
Die Schaltung ist bei uns seit ca. Anfang Oktober in Betrieb und funktioniert stabil.

In Teil 3 werde ich die Software auf dem Arduino beschreiben.

14 Gedanken zu „Teil 2: Die Schaltung – RFID Codeschloss für den Keymatic / Abus Funk Türschlossantrieb

  1. Werner Donsbach

    Hallo,
    das krieg ich nicht hin – bin eider unbedarft in diesem Bereich :-/
    Suche einen Ersatz für meinen CFT 1000 – ohne techn. Aufwand.
    Benutze den CFT nur als „Türöffner“ , der den CFA (Antrieb) ansteuert.
    Kannst Du mir da helfen?

    Herzliche Grüße

    Werner

    Antworten
    1. ST Beitragsautor

      Hallo Werner,

      ich mache leider keine Auftragsarbeiten. Falls ein E-Technik Student o.ä. hier mitliest und ein Angebot unterbreiten will, kann ich Euch miteinander verbinden (ich sehe die Mailadressen, die Ihr eingebt). Bedenke aber bitte, dass diese Lösung hier etwas Installationsaufwand erfordert. Dafür ist sie sicherer.
      Ansonsten bleibt nur ein regelmässiges Schauen auf ebay & Co nach CFT1000 oder Keymatic KM300. Beide gehen.

      Gruss Stefan

      Antworten
  2. Florian

    Hallo Stefan,
    ich bin begeistert!
    Dein Arduino-Türöffner ist genau das was ich schon lange gesucht habe.
    Ich habe ebenfalls mit dem sTouch und dem Türcontroller von selbiger Website geliebäugelt. Da ich aber nicht weiß was auf der Platine alles programmiert ist, habe ich davon abgesehen.
    Mein Wunsch ist es, dass ich mit einem RFID Leser sowohl die Tür, als auch das Garagentor öffnen kann. RFID-Chip + PIN 1 für die Tür; RFID-Chip + PIN 2 für das Garagentor. Auf diese Weise hat man eine 2-Wege Authentifizierung und bei Chip-Verlust ist die Tür trotzdem noch halbweges sicher.
    Wenn ich deinen Code richtig verstehe, sollte das damit umsetzbar sein.
    Meine Programmierkenntnisse sind sehr beschränkt (da würde ich mir dann Hilfe holen) bei der Elektronik fehlt es leider noch mehr.
    Ich habe eine Haussprechanlage mit Klingel und automatischem Türöffner. Damit die Klingel auslöst muss ein Taster betätigt werden, beim Garagentor ebenfalls.
    Die Spannungsversorgung von Klingel und Tor ist extern. Ich müsste lediglich jeweils den stromlosen Taster ansteuern. Das entspricht doch dem betätigen Deines Fernbedienungsknopfes, oder habe ich das falsch verstanden?
    Viele Dank für Deine Hilfe!
    Florian

    Antworten
    1. ST Beitragsautor

      Hallo Florian,

      klingt alles umsetzbar. Bei den Tastern ist noch die Frage, mit welcher Spannung die Logik des anderen Schaltkreises läuft. Der Arduino setzt Pins auf +5V oder auf Masse. Wenn die anderen Schaltungen mit der selben Spannung arbeiten, wird es gehen. Falls nicht, brauchst Du einen Pegelwandler oder Du nimmst ein Relaisboard.

      Gruss Stefan

      Antworten
      1. Florian

        Hallo Stefan,
        vielen Dank für die schnelle Antwort.
        Die Spannung bei dem anderen System liegt ja schon an. Ich habe in der Garage nur einen Tasterschalter der 2 Kabel miteinander verbindet und dann geht das Tor auf. Die gleiche Funktion – 2 Kabel verbinden – müsste jetzt der Arduino machen.
        Mit einem Relais würde ich doch zusätzliche Spannung erzeugen, oder steh ich gerade völlig auf dem Schlauch?
        Viele Grüße,
        Florian

        Antworten
        1. ST Beitragsautor

          Hi Florian,
          es geht nicht darum, dass am anderen System schon eine Versorgungsspannung anliegt. Bei eine Schalter muss ein Potential verändert werden. Sonst ist der Schaltvorgang nicht erkennbar. Man kann das entsprechende Potential von anderer Seite erzeugen oder die Drähte verbinden. Der Ansatz hier erzeugt das passende Potential. Ggf muss man Spannungswandler nehmen (siehe Teil 5; dort habe ich Spannungsteiler genommen). Alternativ nimmst Du ein Relais, was ein elektrisch steuerbarer Schalter ist.
          Die Fragen zeigen, dass Du Dir besser jemanden organisieren solltest, der Dir von der Elektronikseite her etwas unter die Arme greift. Sonst machst Du Dir am Ende noch etwas kaputt.

          Gruss Stefan

          Antworten
          1. Florian

            Hi Stefan,
            danke für die Hilfe. Ich bin irgendwie davon ausgegangen dass am Relais ja eine Spannung im Sekundärkreis angelegt wird, bin aber nicht auf die Idee gekommen, dass ich da ja die Spannung nehme, die sowieso am Taster anliegt.
            Die liegt beim einen bei 12, beim anderen bei 20 V und sollte dann ja mit einem Relaisboard steuerbar sein. Mich hat an den Schaltplänen vor allem die Stromversorgung irritiert, bis ich kapiert habe, dass du da einen Gleichrichter etc. gebaut hast, den ich bei der Verwendung eines DC-Netzteils ja gar nicht brauche.
            Das Programm habe ich umgeschrieben und hoffe, dass es funktioniert. Das Kompilieren meldet zumindest mal keine Fehler. Da es sich um mein erstes Arduino-Projekt handelt, warte ich nur noch auf Post aus Hong Kong um es zu testen.
            Vielen Dank für die Schaltpläne, den Programmcode und die super Erklärungen!
            Florian

    1. ST Beitragsautor

      Hallo Mathias,

      ich keinen Grund, warum das nicht gehen sollte. Ich bin in der ganzen Homematic Thematik nicht so tief drin. Du musst halt schauen, dass Du das richtige Spannungsniveau erzeugst, wenn Du die FB ansteuerst. In Teil 1/2 ist das mit einer 3V FB gelöst. In Teil 5 mit einer 1.5V FB.

      Gruss Stefan

      Antworten
  3. Jan

    Hallo Stefan,
    vielen Dank für den begeisternden Bericht über dieses tolle Projekt.
    Ich überlege jetzt etwas ähnliches zu bauen…
    Viele Grüße,
    Jan

    Antworten
  4. Peter

    Hallo zusammen,

    Erstmals vielen Dank für diese so Ausführliche Seite echt ein top Projekt

    Ich versuche schon seit Ende 2015 – immer mal wieder – dieses Projekt umzusetzen

    Scheitere aber kläglich – wenn nichts dagegen spricht schildere ich mal kurz meinen Aufbau

    Ich habe ein 12v Netzteil das mir parallel den Nano und mein Wiegand Reader versorgt – bei mir kommt ein i-keys f2-2 zum Einsatz
    Der Fingerabdrücke und/oder rfid akzeptiert
    In der Software des f2-2 legt man User mit ihren Fingern bzw rfid-Dongles an wenn nun ein User von f2-2 erkannt wird gibt er ein Wiegand Signal aus

    Wenn ich jetzt dein Sketch aufspiele und meinen Nano mit den Wiegand signalleitungen des f2-2 verbinde bekomme ich kn Sekundentakt die Meldung dass ein Unbekannter Typ eingegeben wurde meist 50bit

    Ziehe ich nun meinen Finger über den f2-2 erkennt mich mein Gerät und gibt visuelle/akustische Rückmeldung
    ABER
    Wenn ich meinen Finger eingebe müsste doch jedesmal der selbe Code an den Nano übergeben werden – aber pustekuchen da kommt nichts zum Nano

    alternativ kann das Gerät auch ein Internen Relaiskontakt Schalten dies funktioniert wenn mein Finger erkannt wird

    Ich weis ich hab viel geschrieben würde mich aber sehr über eure Hilfe freuen

    Antworten
    1. ST Beitragsautor

      Hallo Peter,

      Wenn Du die 50Bit Fehlermeldung bekommst, heißt das eigentlich nur, dass die Kommunikation überhaupt nicht klappt. Im Code breche ich nach 50 Bits einfach ab. Die Ursachen können vielfältig sein: Masseleitung nicht verbunden (damit „Müll auf der Daten Leitung), kein Wiegand Protokoll am Leser konfiguriert, falsch angeschlossen etc.
      Vielleicht ist in der Sammlung was dabei?
      Gruss Stefan

      Antworten
  5. Jens

    Hallo an alle , hat von euch jemand ein funktionierendes Display von der alten Ausführung ? Ich würde es gerne erwerben . Ansonsten ist die Anleitung und die Idee super , leider für mich nicht durchführbar . Mit freundlichen Grüßen Jens

    Antworten
  6. Christian

    Hallo Stefan,
    dein Projekt finde ich sehr gut und wollte etwas ähnliches mit einem ESP8266 realisieren.
    dieser verträgt nur eine Eingangsspannung von 3.3 V an den D0 und D1 Eingängen.
    Dadurch, dass ich nur die 12 Versorgunsspannung am sTouch anklemme, weiß ich gar nicht, welche Ausgangsspannung am ESP8266 dann ankommen.
    Ein normaler Arduino verträgt ja auch nur 5V an den Eingangspins, hat jemand mal die Spannung gemessen?

    Grüße
    Christian

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert