Teil 4: Breitere Unterstützung von Wiegand Codeschlössern für den Keymatic / Abus Funk Türschlossantrieb

Nachdem ich das Projekt für ein Codeschloss für den Keymatic/Abus Türschlossantrieb online gestellt hatte (Teil 1Teil 2Teil 3), sind viele Kommentare und Wünsche per Mail gekommen. Zwei Wünschen konnte ich entsprechen. Diese möchte ich hier kurz vorstellen und natürlich den Code als Version 1.1 zur Verfügung stellen.

1. Unterstützung weiterer und günstigerer Wiegand Leser
Ziel ist die Unterstützung von einer breiteren Auswahl an Wiegand Lesern. Positive Rückmeldungen habe ich konkret zum TDSI Optica und zum IK-500 von I-Keys (und natürlich läuft das ursprünglich verwendete Sebury sTouch auch weiterhin und bleibt mein Favorit).
TDSIOptica
Mit dieser Codeänderung sollte hoffentlich fast jedes Codeschloss gehen (ich verspreche aber nix verbindlich). Wer erfolgreich weitere Modelle testet, kann dies gerne als Kommentar vermerken.
Viele Wiegand Codeschlösser geben bei einer Codeeingabe nur die einzelnen Tastendrücke als 4-Bit Wiegand Codes aus. Dies trifft insbesondere auch auf günstigere Varianten zu. Bei den „besseren“ Schlössern kann man typischerweise konfigurieren, ob die Codeeingaben als 26 oder 37 Bit Wiegand Codes weitergegeben werden sollen. In diesem Fall sammelt das Codeschloss die einzelnen Tastendrücke ein und erzeugt eine 26 oder 37-Bit Zahl daraus.
Bei der 4-Bit Variante werden einfach die Tastendrücke als 4-Bit Zahl kodiert und einzeln gesendet. Dabei sind 0..9 jeweils durch ihren numerischen Wert repräsentiert; * ist eine 10 und # eine 11. Mit der Version 1.1 wird diese 4-Bit Codeeingabe nun unterstützt. Das Format wird automatisch erkannt.

Die Bedienung erfolgt so:
* startet ein Codeeingabe bzw startet sie neu falls man sich vertippt hat.
# schließt die Codeeingabe ab
Den anfänglichen * kann man auch weglassen. 10 Sekunden nach dem letzten Tastendruck wird die Codeeingabe in jedem Fall neu gestartet.

Weiterhin wird ein Spezialfall unterstützt. Bei dem TDSI Optica kommen aus irgendeinem Grund die 4-Bit Eingaben invertiert an. Warum auch immer das der Fall sein mag, invertieren ist nicht schwer und nochmal invertieren hebt’s auf. Für dieses Codeschloss und für eventuell auch andere muss man in der Wiegand_Controller.ino in der folgende Zeile die 0 durch eine 1 ersetzen:

#define INVERT4BIT 1 // invert 4 Bit entry (some Wiegand devices need this)

Wenn es also nicht klappt und die Tasten im seriellen Monitor falsch angezeigt werden: Einfach mal mit der Invertierung probieren.

2. Bei mehrfacher Fehleingabe einen externen Pin schalten
Wenn zu oft ein falscher Code eingegeben wurde (Default: 5), dann wird das Codeschloss für eine gewisse Zeit (Default: 180s) gesperrt. Dies soll verhindern, dass jemand mit einer Brute-Force Attacke Zugang bekommt.
In der neuen Version 1.1 wird in diesem Fall zusätzlich der Pin 6 (PINWRONGCODE in HandelCodes.ino) auf high gezogen. Der Pin wird in der ursprünglichen Schaltung nicht benutzt, so dass diese Anpassung keine Hardware Änderung erfordert.
Dadurch lassen sich zusätzliche Aktionen triggern, wie eine Warnlampe oder das senden einer SMS mit Hilfe eines RFduinos usw.

Hier gibt es den Arduino Code: Wiegand_Controller_V.1.1

Upgrade auf die Version 1.1:
Wer von der ersten Version auf die 1.1 upgraden will kann das problemlos tun. Das Speicherformat im EEProm wurde nicht verändert, so dass alle Einstellungen erhalten bleiben.

In Teil 5 geht es dann um die Unterstützung der neueren Version des Türschlossantriebs namens Keymatic eQ-3.

25 Gedanken zu „Teil 4: Breitere Unterstützung von Wiegand Codeschlössern für den Keymatic / Abus Funk Türschlossantrieb

  1. Schumi

    Hallo ST,
    Kompliment für Dein perfektes und brillant dokumentiertes Projekt!
    Motiviert durch eine defekte Folientastatur des Abus Handsenders CFB 1000 und in Ermangelung eines Ersatzangebotes seitens ABUS bin ich in diesem Blog gelandet und habe das hier geschilderte Projekt binnen einer Woche (brutto) erfolgreich in die Tat umgesetzt.
    Da die Zuleitung für meinen Original-Klingeltaster in der Hauswand allerdings nur aus drei Drähten bestand, war ich gezwungen, die Klingel mittels 433MHz Funk-Sende-/Empfangs-Modul sowie eines weiteren Arduino Nano V3 anzusteuern.
    Außerdem ergänzte ich eine Realtime-Clock, ein LCD-Shield sowie einen Taster zur Steuerung des LCD-Backlights sowie als Reset der drei-minütigen Wartezeit (Punishtime) bei mehrfacher Fehleingabe.
    Durch den Einsatz der RTC kann ich gespeicherte Codes bspw. mit dem aktuellen Tag ergänzen. Ein gespeicherter Code von „1234“ würde heute (25.05.2015) also ergänzt um „25“. Am Codeschloss müsste also heute „123425#“ eingegeben werden, um die Tür zu öffnen. Morgen wäre dieser Code wieder ungültig. Außerdem lässt sich natürlich jeder Protokolleintrag (Serial.print…) mit einem (Real-) Timestamp versehen.

    Hier nochmal kurz die eingesetzte Hardware:
    Basiseinheit:
    – Sebury sTouch standalone W-w
    – Umgebauter Abus Handsender CFB 1000
    – Arduino Uno R3
    – Aukru 433MHz Funk-Sende-Modul
    – Foxnovo I2C DS1307 Real Time Clock Module
    – SainSmart IIC/I2C/TWI 1602 Serial LCD Modul
    – Taster
    – 12V-Netzteil

    Klingeleinheit:
    – Spannungsregler
    – Arduino Nano v3. 0
    – Aukru 433MHz Funk-Empfangs-Modul
    – Relais-Shield (parallel zu Original-Klingeltaster)
    – Separate einfache Software „BellReceiver“

    Software-Ergänzungen:
    – Klingel wird per Funk-Sende-Befehl getriggert
    – Vierstellig gespeicherte Codes werden um den aktuellen Tag zweistellig ergänzt
    – LCD-Display liefert Realtime und quittiert 30 Sek. lang erfolgreichen Zugang
    – Protokollausgabe um Realtimestamp (statt millis) ergänzt
    – Taster schaltet Backlight des Displays für 30 Sek. ein und beendet die Punishtime bei mehrfacher Fehleingabe sofort

    Sollte jemand Interesse an dem Quellcode haben: Bitte feedback hier.

    Antworten
    1. Andreas Gerlach

      Hallo

      Tolles Projekt. Bin gerade am zusammenstellen der Hardware, weil auch mein Zahlenschloss hin ist, aber durch Wassereinwirkung. Jetzt nervt mich das Aufgeschließe mit dem Schlüssel, weil auch mein Handsender den Geist aufgegeben hat . An der Erweiterung mit dem aktuellen Tag an den Usercodes dran bin ich schon stark interessiert. Wenn ich da Hinweise zu bekommen kann oder codeschnipsel, wäre super. Dann können die Mädels sich einen 4stelligen Code merken und das Datum zeigt das Handy an.

      A.Gerlach

      Antworten
      1. ST Beitragsautor

        Nur so als Gedanke dazu: RFIDs – die kosten <50ct pro Stück und sogar unser 3-Jähriger kann damit die Türe auf schließen. Wenn der RFID verloren ist, dann wird er halt rauskodiert.

        Antworten
    2. Niels

      Hallo Schumi,
      das ist das erste mal, das ich mit Arduino zu tun habe. IKannst Du so nett sein und mir Deinen Code zukommen lassen? Ich habe ein Nano V3 Nachbauboard mit einem ATMEL MEGA 168PV gekauft. Ich denke da sollte DEin Code drauf laufen…
      Im Win10 Gerätemanager wird ein Serial-USB CH340 korrekt erkannt, falls das noch eine Rolle spielt.

      Danke schon mal und viele Grüße aus der Pfalz Niels

      Antworten
  2. Mexx

    Hallo ich bin von deinem Projekt begeistert!
    Ich habe es mit dem ELV Digitales Codeschloss DK-2872 nachgebaut. und mit deiner mit deiner Ergänzung
    für Wiegand 34 Funktioniert es auch.
    Leider habe ich keine Ahnung wie ich es weiter programmieren kann.
    Hätte da nochmal eine Frage an dich und zwar:
    Ist es möglich einen Pin für ein Relay freizuschalten wenn man z.B. den Code 1234 eingibt um das Licht
    einzuschalten und bei Code Wiederholung wieder aus?
    Vielen Dank in voraus
    und nochmal es ist eine Top Anleitung!
    MFG MEXX

    Antworten
    1. ST Beitragsautor

      Hallo Mexx,

      prima, dass es mit dem Wiegand 34 Protokoll geklappt hat. Dein Ansinnen ist umsetzbar. Schau Dir mal in der HandleCodes.ino die Funktion DoDoor an. In dem Code ist bAction=1 als öffnen und bAction=0 als schließen definiert. Du könntest die 3 als eine Umschaltaktivität definieren.

      Also an dieser Stelle hier grob folgendes tun:

      Serial.print(F(" at runtime "));
      Serial.println(millis());

      // ab hier neu
      if (pCodeList[iCodeListEntry].bAction == 3)
      {
      // hier umschalten; entsprechenden global bToggleState anlegen und initalisieren; sowie PINTOGGLE definieren!
      bToggleState != bToggleState;
      digitalWrite(PINTOGGLE, bToggleState);

      }
      else
      {
      // ab hier weiter wie im Code bisher - Klammer hinten im Code wieder schließen
      digitalWrite(PINRFPOWER, HIGH); // power to RF transmitter

      Viel Erfolg
      Stefan

      Antworten
      1. Mexx

        Danke
        für die hilfe leider bekomme ich es nicht hin.
        bekomme diesen Fehler
        ‚bToggleState‘ was not declared in this scope
        aber trozdem danke
        Mexx

        Antworten
        1. ST Beitragsautor

          Das hatte ich entsprechend in den Kommentaren des Codesnipplets vermerkt: Du musst die Variablen natürlich auch oben im Code deklarieren. Sonst meckert der Compiler.

          Antworten
  3. Frank

    Herzlichen Glückwunsch zu diesem tollen Projekt und der super Anleitung.
    Hatte meinen sKey Reader erst am Raspberry, musste aber auf Grund der Leitungslänge
    jetzt eine andere Lösung wählen. Habe Deinen Code auf den Nano geladen und es hat sofort
    funktioniert! Danke dafür. Da ich mit dem Reader meine HM Keymatic ansteuern möchte und mit diesem meine Eingangstür öffnen und abschließen will, ist mir nur der PIN oder der Transpondercode zu unsicher. Es könnte ja sein, dass jemand meinen Transponder zufällig kennt und damit die Tür öffnen kann.
    Ich würde daher gerne beide Varianten kombinieren –> 4 stelliger-Code # & –> Transponder.
    Ich bin noch Arduino-Programmieranfänger, würde Deinen Sketch aber gerne erweitern.
    Kannst Du mir dazu einen Tipp geben wie es realisierbar ist?

    Vorab VIELEN DANK!
    Frank

    Antworten
    1. ST Beitragsautor

      Hallo Frank,

      danke für das Lob und es freut mich, wenn’s klappt. Was Du möchtest ist technisch komplett im Rahmen der Lösung. Allerdings habe ich dieses Verhalten in der Businesslogik nie angenommen. Muss ich mal drüber nachdenken, ob es da einen einfachen Ansatz gibt.

      Gruss Stefan

      Antworten
    2. Martin

      Hallo,

      Die unsichere Methode wäre mit dem IK-500 bereits möglich, ich hätte aber auch Interesse an einer sicheren Lösung mit Aufteilung von Innen- und Außenteil – optional auch mit „online“ Anbindung an ein bestehendes Zutrittsystem 😉

      @Stefan Vielen Dank auch von meiner Seite für deinen Einsatz ufn die gute Doku, bin absoluter Laie auf dem Gebiet aber jetzt durchblicke ich das System schon wesentlich besser.

      lg Martin

      Antworten
      1. ST Beitragsautor

        Die unsichere Methode geht mit vielen RFID & Codeschlössern – aber dann muss der Sender vor die Türe…

        Ich habe hier mal was gehackt. Ist aber kein geprüfter Code! – Nur zum Testen nehmen!
        https://blog.thesen.eu/wp-content/uploads/2015/09/WiegandHack.zip

        Darin gibt es neben den Aktionen 0 für Schließen und 1 für Öffnen noch die Aktionen 4 & 5.
        Dann so konfigurieren: RFID Tag bekommt Aktion 4 zugewiesen. Der zugeordnete Code die Aktion 5.
        Dann erst den RFID dran halten und danach den Code und # eintippen.

        P.S.: Da sind auch Codefragemente für die Unterstützung des aktuellen eQ3 Schlosses drin. Kommt bald 🙂

        Antworten
        1. Mathias

          Hallo ST,
          soll ich mir das so vorstellen:
          RFIDTag1:13,12345,4
          User1:1,12345,5 oder
          User1:5,12345,1???
          Sorry, ich mache noch Trockenübungen, weil mein Codeschloss braucht doch länger als vermutet. Ich hoffe, es ist dann Anfang Januar da.

          Antworten
  4. Björn

    Hallo Stefan!

    Danke für diesen tollen Beitrag zum Wiegand Codeschloss!! Ich konnte den Code sehr gut gebrauchen und habe ihn allerdings für meine Bedürfnisse angepasst und daraus ist eine neue Version entstanden, vor allem ohne blocking delays… Wenn Du Interesse daran hast und diese hier auch veröffentlichen möchtest, so kannst Du mich gerne kontaktieren. Leider konnte ich Dir über die Mailadresse im Impressum keine Mail direkt an Dich senden…

    Folgende Anpassungen habe ich gemacht:
    – removed blocking code (hardcoded delay/pause),
    – added „Keycard plus Pincode“-function (you need a valid Keycard before a Pincode is accepted)
    – added Signal and Pin Handling functions (to avoid blocking code)
    – added more Action Codes (to cover different usages)
    – added additional Serial Menu for program settings (can also be used for further functions)
    – added Verbose Mode (to be set via program setting and serial)
    – added Sabotage code (WiegandHandleCodes)
    Copyright: public domain -> do what you want

    Für diejenigen, die Hardwarefernbedienungen nutzen, ist es erforderlich hierzu an den entsprechenden Stellen einen Aufruf einzufügen…

    Beste Grüße
    Björn

    Antworten
    1. Sebastian

      Hallo Björn,

      Deine Erweiterungen würde ich auch gerne umsetzten, insbesondere das Thema Sabotage Code und Keycard+Pincode. Kannst Du mir den Code zukommen lassen?

      Danke!
      Sebastian

      Antworten
  5. Stephan JAnßen

    Hallo . Vor einiger Zeit hatte ich mein Abus CFA 1000 erfolgreich mit dem Arduino steuern können. Nur leider ist jetzt das Getriebe hin. Es gibt zwar noch einige bei ebay aber meist zu wahnsinns Preisen.
    Von Abus gibt es jetzt das Model : Abus HomeTec Pro CFA3000S.
    Hat da schon jemand den Sender geöffnet und erfolgreich neu verdrahtet ??
    Gibt es dafür schon etwas ??

    Antworten
    1. ST Beitragsautor

      Das neue Abus Modell hatte ich noch nicht in den Fingern. In Teil 5 steht, wie man das aktuelle Keymatic eQ 3 Modell anschließen kann. Das wäre die Alternative.
      Ich würde aber stark vermuten, dass sich das neue Abus Modell ähnlich interfacen lässt.

      Gruss Stefan

      Antworten
  6. Mathias

    das projekt hört sich sehr vielversprechend an.
    Bevor ich loslege noch eine (sehr wichtige) Frage:
    Da ich auch eine Alarmanlage habe, relaisiert mit dder CCU2, möchte ich die Alarmanlage natürlich scharf bzw wieder unscharf schalten.
    im Moment ist das über die Fernbedienung der neuen Keymatic realisiert.
    Bleibt die FB weiter im system der CCU2? Dann bäuchte ich nichts ändern. Ansonsten muß ich eine Lösung suchen.
    Gruß,
    Mathias

    Antworten
    1. ST Beitragsautor

      Hallo Mathias, die Fernbedienung selbst wird nicht verändert. Wenn die „virtuellen“ Tastendrücke zur Implementierung passen, dann sollte es gehen.

      Antworten
  7. Turbo

    Hallo zusammen,
    auchich finde das Projekt sehr interessant. Ich habe 2 Sebury sTouch, die ich auch über die Wiegand-Schnittstelle ansteuern möchte. Allerdings benötige ich den Zugriff auf eine mySql-DB in der 200 RFID-Codes hinterlegt sind. Ebenso sollen die Zugangszeiten erfasst werden. Oder gibts da für den Uno andere Möglichkeiten?

    Würde gerne auch den Code zugemailt bekommen, um mal zu schauen, ob ich da mit einem Uno zurechtkomme oder doch einen Raspberry Pi nutzen sollte, dann hätte ich auch gleich eine WLAN Einbindung, um externe eingreifen zu können. Das Projekt ist nämlich nicht an meiner Haustür 🙂

    Vielen Dank im Voraus.

    Antworten

Schreibe einen Kommentar

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