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

In Teil 1 &  Teil 2 dieser Anleitung habe ich beschrieben, wie man einen Ersatz (oder Nachfolger) für das Funkcodeschloss Keymatic KM300 CAC (baugleich Abus CFT 1000) bauen kann. Dabei ist ein Arduino Nano die zentrale Koordinationsstelle, welche die Codes / RFID Eingaben auswertet, bei richtiger Eingabe den Sender aktiviert um den Türschlossantrieb zu aktivieren und die Klingel zu betätigen.

Den Arduino programmieren
In diesem abschließenden Teil 3 geht es um die Software für den Arduino. Wer noch nie mit einem Arduino gearbeitet hat: Es ist wirklich einfach.

  1. Den hier bereitgestellten Sourcecode herunterladen: Wiegand_Controller
  2. Die Arduino IDE (das ist das Entwicklungstool inkl. Compiler) von arduino.cc herunterladen. Diese Software ist Opensource und kostet nichts.
  3. Sourcecode mit der IDE öffnen. Alle vier .ino Dateien gehören zur Software. Am besten die Datei Wiegand_Controller.ino laden. Die anderen 3 Dateien werden automatisch mitgeladen.
  4. Arduino Nano per USB an den Rechner anschließen. Etwas warten, bis die USB Treiber installiert sind.
  5. Im Menü Tools den richtigen seriellen Port auswählen (meistens gibt es nur einen).
  6. Im Menü Tools unter Board den Arduino Nano auswählen.
  7. Pfeiltaste oben rechts anklicken (–> Upload).

Mehr muss man nicht tun. Der Sourcecode wird übersetzt. Das dauert ca. 30 Sekunden. Danach wird die Software auf den Arduino übertragen. Wenn der Upload fertig ist, ist auch schon alles erledigt. Der Arduino ist fertig programmiert.

Beschreibung der Software
Wiegand_Controller.ino
Enthält nicht viel. Initialisiert den seriellen Port und ruft die Initialisierungsroutinen der anderen Module. Enthält weiterhin die Grundschleife sowie die Debug Ausgabe für eingegebene Codes.

Wiegand_LowLevel.ino
Es gibt einige Wiegand Libraries für den Arduino von der Stange. Ich war mit keiner zufrieden (zu kompliziert & zu unflexibel). Deshalb habe ich meine eigenen Routinen aufgesetzt. Die Routinen WiegandD0 und WiegandD1 werden an die Interrupts für die Arduino Pins D2 und D3 bei einer fallenden Flanke gehangen. In diesen Routinen werden die empfangenen Bits gezählt (D0) und unterschieden, ob einen 1 oder 0 empfangen wurde (D1). Wenn 50ms lang keine Pulse mehr ankommen, geht der Code davon aus, dass die Wiegand Übertragung abgeschlossen ist; es gibt beim Wiegand Protokoll weder Anfang noch Ende. Irgendwann kommen Pulse und irgendwann sind sie halt wieder vorbei.
Die Routine WiegandDecode regelt die Umrechnung der empfangenen Bits in den Facility-Code und den Card-Code. Diese Routine ist die Stelle, an der man die Wiegand Dekodierung gegebenenfalls erweitern muss. Die Hersteller kochen öfters ein eigenen Süppchen mit eigenen Bitlängen und Aufteilungen auf Facility- und Card-Code. Mit einer passenen Ergänzung der switch/case Anweisung sollten andere Formate unterstützbar sein.

UI.ino
Hier wird das textbasierte Userinterface für die Arduino Software realisiert. Das ist ein einfaches Menü. Der Code ist nicht sonderlich kompliziert und sollte falls nötig leicht zu erweitern sein.

HandleCodes.ino
Hier ist der Kern des Codeschlosses realisiert. Am Anfang sind in den #define Statements die Pins für die jeweiligen Anschlüsse definiert. Die Längen für die Funksignale sind festgelegt. Ebenso wird festgelegt, wie oft hintereinander ein falscher Code eingegeben werden darf (ich habe 5 festgelegt) und wie lange das Codeschloss nach dieser Anzahl an Fehleingaben blockiert (3 Minuten).
Im Kern wird in diesem Softwareteil ein Array verwaltet, welches die korrekten Codes verwaltet. Jeder Code hat auch einen Realnamen, also z.B. Paul. Wenn Paul dann irgendwann nicht mehr rein darf oder seinen RFID verloren hat, ist der Code leicht zu identifizieren und zu löschen.
In der Setup Routine wir weiterhin das verfügbare RAM sowie der EEProm Speicher überprüft und entschieden, wieviele Codes gespeichert werden können. Auf einem Arduino Nano können 53 Codes gespeichert werden. Wer mehr braucht, kann darüber nachdenken, den #define MAXNAMESIZE zu reduzieren. Diesen habe ich auf 10 gestellt; jeder Code kann einen 10-1=9 Zeichen langen Realnamen haben.
Weiterhin wird in diesem Sofware Teil das Lesen & Speichern aus dem EEProm geregelt. Dies umfasst auch das sogenannte TamperFlag. Dieses Flag wird gesetzt und im EEProm gespeichert, wenn ein falscher Code eigegeben wird. Das Tamperflag wird nur gelöscht, wenn ein richtiger Code eingegeben wurde oder nachdem die Strafzeit von 3 Minuten nach 5 falschen Eingaben abgelaufen ist. Der Sinn des TamperFlags ist es, eine Sicherheitslücke durch die Manipulation der Stromversorgung zu verhindern. Sonst könnte man ja 4 Codes ausprobieren, dann kurz die Stromversorgung unterbrechen (kommt von der Klingel und ist vor der Tür per Schraubenzieher erreichbar) und dann wieder 4 Codes probieren. Dank des TamperFlags geht dies nicht: Ein falscher Code und die Unterbrechung der Stromversorgung wird mit 3 Minuten Pause geahndet.

Verwendung der Software
Wenn man den Arduino neu programmiert hat und das erste Mal startet, ist der EEProm noch unbeschrieben. Wenn man Pech hat (50% Chance) ist da Tamperflag gesetzt und man muss erst einmal 3 Minuten warten. Eine entsprechende Ausgabe erscheint, wenn man mit einem seriellen Monitor bzw Terminalprogramm auf die Ausgaben des Arduino lauscht. Die serielle Schnittstelle muss auf 9600 Baud, 8 Bit, N=keine Parität,1=ein Stopbit gesetzt werden. Ich nehme übrigens putty, weil man hier eine gute Copy/Paste Unterstützung hat.
Nach dem ersten Sart sollte man in etwa folgendes sehen – hier als Beispiel hat das Tamperflag zugeschlagen:

Wiegand Controller - S.T. 2014
RAM before Codelist allocation: 1645
EEProm size limits Codelist array.
RAM after Codelist allocation: 636
Codes that can be stored: 53
Codes loaded from EEProm: 0
TAMPERED?? - Restart with wrong-code counter active -> Go into wait mode.
Too many wrong codes entered. Will sleep this amount of seconds - also on serial: 180... Done.

Nach der Wartezeit von 3 Minuten kommt dann das Menü und als erstes löschen wir den EEProm:

***** MENU ****
<enter> -> print this menu
1 -> learn a code / paste csv-list of codes
2 -> delete a code
3 -> display all codes
7 -> reset tamper flag & reboot
8 -> save all codes to eeprom
999 -> delete ALL codes in eeprom
Notes: Name entries max 9 characters.
Action entries 1 for open, 0 for close.

>999
Erasing EEprom…
Codes saved to EEProm: 0

Nun kann man neue Codes anlegen. Oder auch einfach mal zum Test einen RFID vor das Codeschloss halten; der RFID Code erscheint dann im seriellen Fenster. Aber Achtung: Wenn man 5 falsche (weil noch nicht angelernte) RFID Codes hintereinander einliest, hat man wieder 3 Minuten Wartezeit gewonnen.

Mit der Eingabe 1 kann man einen Code anlernen oder auch eine komplette Codeliste in das Fenster des Terminalprogramms einfügen. Das Format für die Eingabe wird kurz vom Arduino genannt, dann können die Eingaben erfolgen. Eine Codeliste sieht z.B. so aus:

User1,0,1234,1
User2,0,246835,1
User3,0,9933,1
RFIDTag1,13,9384632,1
RFIDTag2,12,3834672,1
RFIDTag3,21,9287374,1
Close,0,0,0

In diesem Beispiel gibt es 3 Benutzer mit einem Pin zur Eingabe per Tastatur. User 2 muss 246835# auf der Tastatur eintippen. Daraufhin wird Kommando 1 ausgelöst; Kommando 1 ist Türe öffnen. Will man abschließen, so tippt man 0000# ein; hier ist eine 0 als Kommando hinterlegt.
Weiterhin sind 3 RFIDs angelert. Tag 1 hat den Facility Code 13 und den Card Code 9384632. Würde man bei RFIDTag1 die letzte 1 gegen eine 0 tauschen, so würde dieser RFID ab jetzt die Türe abschließen.
Nach der Eingabe die Liste mit Enter abschließen und die Codeliste mit 8 im EEProm speichern. Fertig.

Die restlichen Eingaben sollten selbsterklärend sein. So kann man mit 3 eine Liste aller angelernten Codes ausgeben. Diese ist so formatiert, dass man sie im Anlernmodus auch direkt wieder zum Einfügen verwenden kann.
Mit der Eingabe 2 kann man einen Code / RFID löschen. Dazu muss dann der Realname des Codes/RFIDs eingegeben werden. Falls man den nicht mehr so genau weiss, einfach vorher mittels 3 mal in die Liste schauen.

Falls jemand das vorgestellte Konzept nutzt oder erweitern, würde ich mich über einen Kommentar freuen.

Ergänzung (30.04.2015):
Hier geht es zum Teil 4 für die Version 1.1 mit einer breiteren Unterstützung von Wiegand Codeschlössern.

_________________________
Link für die in Kommentar Nr. 4 erwähnte Codeanpassung für einen Pin, der zuviel e falsche Codeeingaben nach außen signalisiert: Wiegand_Controller_WrongCodePin –> diese Änderung wurde auch in die Version 1.1 in Teil 4 übernommen.

73 Gedanken zu „Teil 3: Die Software – RFID Codeschloss für den Keymatic / Abus Funk Türschlossantrieb

  1. alfredo borlotti

    Besten Dank für diese – wie mir scheint – sehr gute Anleitung. Ich verwende seit 7 Jahren ein Keymatic-Türschloss und habe mir schon Gedanken über dessen Dauerhaftigkeit gemacht.

    Grundsätzlich könnte man sich den den Handsender ersparen, sofern man das Remote-Interface KM 300 RI (Ladegerät für Akku und als leitungsgebundener interner Türöffner einsetzbar) zum Schlossantrieb eingesetzt hat. Leider ist der Mikrostecker der Verbindungsleitung extrem unzuverlässig, sodass sich die Türe über diesen Weg oft nicht öffnen lässt.

    Antworten
    1. ST Beitragsautor

      Danke für die Rückmeldung. Das KM 300 RI sollte alternativ auch möglich sein. Der Abschluss sollte völlig analog zu dem umgebauten Handsender möglich sein; laut Datenblatt schalten die externen Taster 5V; passt also zu den Signalleveln des Arduino.
      Über die Zuverlässigkeit des RI kann ich nichts sagen. Es ist meines Wissens aber überall ausverkauft. Den Handsender bekommt man da und dort noch – und eigentlich sollte ja jeder mindestens einen haben 😉

      Antworten
  2. Daniel

    Hallo bin von deinem Projekt, seitdem ersten überfliegen, so begeistert das ich es kurzerhand gleich nachgebaut habe!
    Funktioniert 1A!!!
    Zusätzlich habe ich noch ein 8 Kanal Sendemodul von Homematic mitdrangehängt,
    so habe ich auch öffnen/schliessen/klingel protokolliert und kann meinen Mp3 Funkgong damit steuern!!
    Da ich aber keine Ahnung vom programmieren hab hätte ich noch eine bitte!?
    Ist es möglich den code nochso zu ändern das bei mehrmaliger Falscheingabe nicht nur gesperrt wird sondern auch noch ein Signal (5V 1s) auf einen noch freien Pin kommt?
    Dann könnte ich mir ne sms schicken lassen wenn jemand dran rumprobiert oder ne kamera aktivieren oder oder oder…
    Vielen Dank nochmal für die wirklich tolle Anleitung
    Mfg Daniel

    Antworten
    1. ST Beitragsautor

      Danke für die Rückmeldung und freut mich, dass es gut läuft.
      Der Wunsch bei 5 falschen Code Eingaben einen Pin auf high zu ziehen, habe ich mal umgesetzt und einen Link im Beitrag ganz unten deponiert.

      Ich hab’s nicht getestet. Es wird Pin 6 auf während der Sperrzeit von 3 Minuten auf high gezogen. Anhand der positiven Flanke kann eine externe Schaltung jetzt den Start der Sperrphase erkennen und an der negativen Flanke das Ende.
      Pins und Zeiten sind in der Datei HandleCodes.ino ganz am Anfang definiert und ggf auch ohne größere Kenntnisse änderbar.

      Antworten
  3. Stephan JAnßen

    Hallo. Ich bir gerade dabei mir über dieses Projekt gedanken zu machen.:: Die benötigten Teile habe ich mir besorgt, aber wenn ich das also richtig verstehe kann ich mit dem Rfid Sender die Tür von aussen nur öffnen??
    Ich habe eine Abus CFA Türöffneranlage mit Funksender wie von dir beschrieben. Damit kann ich auch abschließen. Brauche ich dann jetzt 2 Rfid Sender.? Einen zum Öffnen und den anderen zum Abschließen ?
    Oder versteht der Andurio die einzelnen Sender, so das egal welcher der programierten Sender zum einsatz kommt, der letzte Schaltzustand immer geändert wird ?. Sprich wenn ich abschließe, kann mein Frau dann aufschließen???

    Freunliche Grüße

    Antworten
    1. ST Beitragsautor

      Hallo,
      es gibt zwei Alternativen zum Abschließen. Man kann einen Code festlegen (z.B. 0000#) oder man kann einen RFID für das Abschließen kodieren. Es geht natürlich auch beides. Wer zwei RDIFs möchte, hat dann z.B. einen roten zum Abschließen und einen blauen zum Aufschließen.

      Ich schließe immer mit einem trivialen Code ab. Falls den dann jemand unberechtigterweise kennt, ist es ja auch nicht schlimm.

      Gruss Stefan

      P.S.: Prinzipiell könnte man den Code auf auf ein „Togglen“/“Schaltzustand ändern“ anpassen – sprich es wird immer alternierend abgeschlossen und wieder aufgeschlossen. Das ist aber m.E. nicht wirklich gut. Wenn man die Tür einfach nur zuzieht und dann den RFID ans Codeschloss hält wird erst mal abgeschlossen. Und dann wieder aufgeschlossen. Und wenn man per Abus Handsender abschließt, passt die Zustandsänderung auch nicht mehr.

      Antworten
      1. Stephan Janßen

        Ok Danke. Sobald ich alles zusammen habe werde ich mich da mal durchfuchsen. Im Moment ist die Programierung eines Arduino , Banana, oder Rasp. noch absolutes Neuland für mich.

        Wenn Fragen sind ….??? kann ich mich noch mal melden?

        Gruß
        Stephan

        Antworten
          1. Stephan Janßen

            Hallo . Nun habe ich alles zusammen und bekomme keinen USB treiber instaliert….. Kannst DU mir helfen. Er wir als USB 2.0 erkannt aber ich finde keine Treiber. Weder im WIN 7 XP mode noch auf meinem anderen WIN 7 Rechner
            Einen reellen XP rechner habe ich nicht.

            Beim Starten der Arduino 1.6 oder 1.5.1 versionen wir er zwar erkannt aber es gibt dann Probleme weil er in dem Gerätemanager nicht erfolgreich installiert wurde. Was soll ich tun ??

          2. Niels Jung

            Hallo ST, das Projekt klingt genau so wie ich es mir vorstelle. Nun habe ich einen Nano Clone mit einem ATMega 168PV bei ebay gekauft und den Code über Deine Links heruntergeladen. Leider bekomme ich schon beim Compilieren eine Fehlermeldung:
            Arduino: 1.6.12 (Windows 10), Board: „Arduino Nano, ATmega168“

            C:\Program Files (x86)\Arduino\arduino-builder -dump-prefs -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\niels\Documents\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega168 -ide-version=10612 -build-path C:\Users\niels\AppData\Local\Temp\arduino_build_952812 -warnings=none -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -verbose C:\Users\niels\Desktop\Funk Türschloss\Wiegand_Controller_V1.2_EQ3_RelayBoard\Wiegand_Controller\Wiegand_Controller.ino
            C:\Program Files (x86)\Arduino\arduino-builder -compile -logger=machine -hardware C:\Program Files (x86)\Arduino\hardware -tools C:\Program Files (x86)\Arduino\tools-builder -tools C:\Program Files (x86)\Arduino\hardware\tools\avr -built-in-libraries C:\Program Files (x86)\Arduino\libraries -libraries C:\Users\niels\Documents\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega168 -ide-version=10612 -build-path C:\Users\niels\AppData\Local\Temp\arduino_build_952812 -warnings=none -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Program Files (x86)\Arduino\hardware\tools\avr -verbose C:\Users\niels\Desktop\Funk Türschloss\Wiegand_Controller_V1.2_EQ3_RelayBoard\Wiegand_Controller\Wiegand_Controller.ino
            Using board ’nano‘ from platform in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr
            Using core ‚arduino‘ from platform in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr
            Detecting libraries used…
            „C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++“ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega168 -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR „-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino“ „-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs“ „C:\Users\niels\AppData\Local\Temp\arduino_build_952812\sketch\Wiegand_Controller.ino.cpp“ -o „nul“
            Generating function prototypes…
            „C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++“ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega168 -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR „-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino“ „-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs“ „C:\Users\niels\AppData\Local\Temp\arduino_build_952812\sketch\Wiegand_Controller.ino.cpp“ -o „C:\Users\niels\AppData\Local\Temp\arduino_build_952812\preproc\ctags_target_for_gcc_minus_e.cpp“
            „C:\Program Files (x86)\Arduino\tools-builder\ctags\5.8-arduino10/ctags“ -u –language-force=c++ -f – –c++-kinds=svpf –fields=KSTtzns –line-directives „C:\Users\niels\AppData\Local\Temp\arduino_build_952812\preproc\ctags_target_for_gcc_minus_e.cpp“
            Sketch wird kompiliert…
            „C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++“ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -flto -mmcu=atmega168 -DF_CPU=16000000L -DARDUINO=10612 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR „-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino“ „-IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs“ „C:\Users\niels\AppData\Local\Temp\arduino_build_952812\sketch\Wiegand_Controller.ino.cpp“ -o „C:\Users\niels\AppData\Local\Temp\arduino_build_952812\sketch\Wiegand_Controller.ino.cpp.o“
            C:\Users\niels\Desktop\Funk Türschloss\Wiegand_Controller_V1.2_EQ3_RelayBoard\Wiegand_Controller\Wiegand_Controller.ino: In function ‚void setup()‘:

            Wiegand_Controller:36: error: ‚SetupCodeHandling‘ was not declared in this scope

            Wiegand_Controller:37: error: ‚WiegandSetup‘ was not declared in this scope

            Wiegand_Controller:38: error: ‚SetupUI‘ was not declared in this scope

            Wiegand_Controller:46: error: ‚PrintMainMenu‘ was not declared in this scope

            C:\Users\niels\Desktop\Funk Türschloss\Wiegand_Controller_V1.2_EQ3_RelayBoard\Wiegand_Controller\Wiegand_Controller.ino: In function ‚void loop()‘:

            Wiegand_Controller:58: error: ‚WiegandAvailable‘ was not declared in this scope

            Wiegand_Controller:62: error: ‚WiegandBitCount‘ was not declared in this scope

            Wiegand_Controller:64: error: ‚WiegandFacilityCode‘ was not declared in this scope

            Wiegand_Controller:65: error: ‚WiegandCardCode‘ was not declared in this scope

            Wiegand_Controller:91: error: ‚HandleCode‘ was not declared in this scope

            Wiegand_Controller:126: error: ‚HandleCode‘ was not declared in this scope

            Wiegand_Controller:135: error: ‚WiegandReset‘ was not declared in this scope

            exit status 1
            ‚SetupCodeHandling‘ was not declared in this scope

            Der Nano hat allerdings auch noch keine Außenbeschaltung. Denke aber das hat mit den Fehlern nichts zu tun, da diese ja schon beim kompilieren auftreten.
            Als Arduino „dummy“ bin ich mit meinem Latein am Ende und auch Google Artikel zum Thema kann ich nicht wirklich verstehen.
            Kannst Du helfen bitte?

            Danke und Grüße aus der Pfalz Niels

          3. ST Beitragsautor

            Hallo Niels,

            Du hast nicht alle Dateien ausgepackt. Die zip Datei enthält mehrere Dateien. Alle in ein Verzeichnis spielen und nicht nur die .ino anklicken 😉

            Gruss Stefan

    1. ST Beitragsautor

      Ich gehe jetzt mal davon aus, dass Du einen Arduino Nano oder einen Nano Clone hast. Da kannst Du auf Vin 12V geben (und GND ist Masse). Der Arduino hat einen Festspannungsregler auf dem Board mit drauf, der sogar Peakspannungen bis 20V aushält.
      Bzgl. der USB Treiber: Es läuft alles unter Windows 7. Es kommt nur darauf an, welchen USB Chip Du auf dem Arduino hast. FTDI oder CH341? – Einfach mal von unten auf den Arduino schauen. USB Treiber gibt es auf den entsprechenden Herstellerseiten.
      FTDI: http://www.ftdichip.com/Drivers/VCP.htm
      CH340/341: http://wch.cn/downloads.php?name=pro&proid=5

      P.S.: bei FTDI besser die alte Version 2.10.00 installieren.

      Antworten
      1. Stephan Janßen

        Mein Arduino Nano hatte tatsächlich einen CH340 statt dem FTDI. VIELEN DANK für deine INFO. Ich wusste noch nicht das es da Unterschiede gibt. Windows konnte ihn mit den Treibern, die bei der Arduino Software mitgeliefert werden dann natürlich nicht erkennen. Dein Link zum Treiber war leider Chinesisch aber ich habe den noch auf der Seite shelvin gefunden. Das hat mir dann sehr geholfen.

        WARUM MUSS es immer so kompliziert sein …. menno….. DANKE

        Antworten
        1. ST Beitragsautor

          Den CH340 haben ja auch nur Arduino Clones (Clones sind bei Arduinos legal, weil Open HW und SW). Die FTDI Chips sind halt teurer und bei den typischen Clonepreisen von 2-4 Euro offenbar grenzwertig. Die CH340iger funktionieren aber prima, wenn der Treiber mal installiert ist.

          P.S.: Und nachdem sich FTDI mit der Treiberversion 2.12.00 einen echten Hammer erlaubt hat, kaufe ich nach Möglichkeit kein FTDI mehr. FTDI hat nämlich ihr Cloneproblem auf den armen kleinen Hobbyentwickler abgewälzt. Da nehme ich lieber CH340 und bin sicher, dass ich erst gar nicht in Probleme laufen kann.

          Antworten
          1. Stephan Janßen

            So läuft alles super dank deiner Anleitungen.

            Bitte gestatte mir noch eine Frage.
            Ich habe gesehen das Du bei deinem Benutzer Beispiel ganz am Ende geschrieben hast.
            Close,0,0,0
            was bedeutet das?
            Ich habe meine User und Rfidtag´s ganz normal programiert und aufs EEpromm geschrieben.
            Die User 1-4 hatten die funktion 0 zum schließen und die RFID´s die Funktion 1 zum öffnen.
            Ich verstehe die Funktion des Close,0,0,0 nur noch nicht.

            Lieben Gruß

          2. ST Beitragsautor

            Freut mich, dass es klappt.
            Close,0,0,0 heisst, dass man mit 0000# auf der Codetastatur abschließen kann.

            Konkret:
            Close ist der Name
            die erste 0 ist der Facility Code; der ist bei Tastatureingaben immer null
            die zweite 0 ist der Code, der per Tastatur eingegeben wird
            die dritte 0 heißt Abschließen.

            Close,0,1234,0 würde 1234# als Abschließcode setzen.

  4. Christoph

    Hallo, zuerst mal Danke für eine so gute Anleitung, bei mir hat alles funktioniert mit Transpondern, aber bei der Tastatureingabe über einen Code kommt es zu einer Fehlermeldung „Unknown Format. Cannot decode 4 bit Format“ bei jedem Tastendruck. Haben Sie eine Idee was ich falsch eingestellt habe, bei dem Codeschloß handelt es sich um ein „Sebury sTouch“. Besten Dank!

    Antworten
    1. ST Beitragsautor

      Da das Sebury Codeschloss einen 4-Bit codiertes Wiegand Format sendet, ist das Codeschloss vermutlich im falschen Modus. Man kann einstellen, ob einzelne Tastendrücke übertragen werden sollen oder komplette Codes. Das Projekt hier ist so gemacht, dass es die Übertragung kompletter Codes erwartet. War bei mir auch ab Werk so voreingestellt.
      Probier mal die Kodierung 73 0#
      Und dann noch das Wiegand Format auf 37 Bit mit 72 37#

      Antworten
  5. Freakofevil

    Hallo,

    dein Projekt ist ja GENIAL – und die Dokumentation – Herrlich …. weis gar nicht wie ich das noch loben soll.

    so nun mal zu meiner frage.
    ich möchte meine „zutrittskontrolle“ wie folgt aufbauen
    Selbstverriegelndes Antipanik Motorschloss (entweder EffEff 809 oder SVP 6000)
    außen I-Keys F 2-2 Fingerprint sensor inkl RFID-Leser
    nun hab ich von denen auch die ultra teuren türcontroller gefunden – un nach einger suche bin ich eben auf deine seite gestoßen – Zum Glück 😉

    Arduino LEONARDO hätte ich halt noch zuhuase rumliegen

    nun wollte ich mal wissen ob der Code so auf´n Leonardo übertragbar ist? hatte da mal problme bei einem anderen sketch.
    Die Einkupplung des Außendrückers ist ja meistens über einen potentialfreien relaiskontakt zu machen, da hab ich ein Relaismodul für´n arduino da, das würde ich schalten mit dem aufsperrbefehl
    Absperren ist unnötig bei den schlössern

    Hab ich das Überlesen? wie macht ihr das mit der verriegelung, was steuert ihr an?

    freu mich schon von dir/euch zu lesen

    Antworten
    1. ST Beitragsautor

      Freut mich wirklich, wenn Dir das Projekt gefällt.

      Zu Den Fragen:
      iKeys Fingerprint/RFID Leser: Sollte im Prinzip gehen. Die Frage ist am Ende, ob das selbe Wiegand Format genutzt wird. Vermutlich läuft es out-of-the-box. Es könnte aber auch sein, dass ein weiteres Bitformat eingepflegt werden muss. Das sollte aber nicht sehr schwer sein.

      Arduino Leonardo: Habe ich selbst noch nicht benutzt. Es sollte gehen, da ich keine Spezialitäten des Microcontrollers nutze. Der Leonardo hat ja einen 32u4; der Nano/Micro einen 328p. Einen Arduino Nano Clone gibt es bei Ebay für 3-5€. Das sollte ein lösbares Problem sein 🙂

      Verriegelung: Fällt bei einem Motorschloss nach meinem Verständnis weg. Bei den Keymatic Antrieben muss man explizit verriegeln. Das kann über einen Abschließcode erfolgen. Oder über einen Abschließ-RFID (z.B. grün für Aufschließen, rot für Abschließen).

      Antworten
      1. Freakofevil

        danke für deine schnelle antwort,

        es ist so, wenn ich den code kompiliere und auf den arudine upoade mekert er nicht wenn ich dann auf den arduino zugreife per putty (ach ja Flusstreuerung wie einstellen FLOWCONTROL) und z.b. enter drücke leuchtet am arduino die RX LED sonst passiert nichts – auch der serialmonitor von der software zeigt nichts – gebe ich in die zeile senden etwas ein und drücke senden leuchtet wieder die RX LED

        und du includierst die eeprom library so
        #include
        wenn ich die manuell per arduino software includiere macht er das so
        #include
        wenn ich deines durch meines ersetze bekomme ich
        beim kompielieren der HandleCodes dann aber folgende fehler
        HandleCodes.ino: In function ‚void LoadFromEEProm()‘:
        HandleCodes:60: error: ‚eeprom_read_block‘ was not declared in this scope
        HandleCodes.ino: In function ‚void SaveToEEProm()‘:
        HandleCodes:80: error: ‚eeprom_write_block‘ was not declared in this scope
        HandleCodes.ino: In function ‚void SetTamperFlag(bool)‘:
        HandleCodes:106: error: ‚eeprom_write_block‘ was not declared in this scope
        HandleCodes.ino: In function ‚bool GetTamperFlag()‘:
        HandleCodes:118: error: ‚eeprom_read_block‘ was not declared in this scope

        weißt du abhilfe? ich mein am arduino scheitert es nicht, aber ich würde gerne bastln mit meinem der hier rumflackt.

        ach ja, ich habe noch keinen codeleser angeschlossen hoffe das liegt jetzt nicht daran?

        meinst ich kann den Fingerprint scanner einfach bestellen und ich bring den schon ans laufen? oder doch liebe reinfach ein codeschloss? der Fingerprint mach glaub ich auch nicht mehr als 5oder6 abfragepunkte da kann ich mit dem codeschloss oder dongle eine „höhere“ sichereheit erreichen und die teile wären günstiger … Fingerprint schaut halt genial aus 😉 und man kann nur schwer den schlüssel verlieren 😉

        Antworten
        1. Freakofevil

          sorry scheinbar wurde der Include-teile bei den spitzklammer abgeschnitten, darum hier von mir nochmal ohne die Spitzklammern
          dein include-Befehl
          #include avr/eeprom.h

          So machts die Arduino-Software – macht mir das die Problem oder der fehlende Wiegand-Leser (welche-art auch immer)
          #include EEPROM.h

          Antworten
          1. ST Beitragsautor

            Zunächst mal zu dem Leonardo Thema:
            Du hast Probleme beim Übersetzen des Codes. Das hat nichts mit einem nicht angeschlossenen Codeschloss zu tun. Ich habe bei mir in der Arduino Entwicklungsumgebung mal den Leonardo als Board eingestellt. Der Code wird problemlos für dieses Board übersetzt.
            Ich würde mal die Arduino Entwicklungsumgebung auf den aktuellen Stand bringen. Falls es mit dem Leonardo nicht gehen sollte, gibt es wie schon zuvor erwähnt Arduino Nano Clones für 3-5€ in der Bucht.

            Dann zu dem Codeschloss. Laut Spezifikation sollte es gehen. Der Wiegand26 Modus sollte sofort gehen. Für den Wiegand34 Modus braucht man ggf 5 Codezeilen in der WiegandLowLevel.ino. Für Fragen stehe ich gerne zur Verfügung. Ich kann allerdings keine Garantien übernehmen. Das selbe wird die Firma i-keys nicht tun wollen. Da musst Du selbst entscheiden, ob Du Dich da rantraust oder nicht.

  6. Peter Barlage

    Hallo,
    ich habe gerade mit Bewunderung deine Schaltung nachgebaut. Alternativ zum Sebury- Codeschloss habe ich ein professionelles TDSI Optica RFID Codeschloss genommen. Das RFID lesen funktioniert, aber das Codeschloss funktioniert nicht, da ein HID 4 Bit format genutzt wird. Hättest du vielleicht lust, deinen Code
    anzupassen? Ich würde dir ein TDSI Leser überlassen, sofern du mir deine Adresse schickst und du kannst
    nach Lust und Laune rumbasteln.
    Gruß
    Peter

    Antworten
    1. ST Beitragsautor

      Hallo Peter,

      danke für die Rückmeldung und prima, dass der RFID schon mal funktioniert. Das HID 4Bit Format tritt auf, wenn jeder Tastendruck einzeln übermittelt wird. Kannst Du das Codeschloss umkonfigurieren, so dass komplette Codeeingaben übertragen werden? – Bei dem Sebury Codeschloss kann man den Modus wählen.
      Falls das nicht geht, wären tatsächlich größere Codeänderungen nötig und wir müßten tatsächlich einen komplexeren Weg gehen.

      Gruss Stefan

      Antworten
  7. Bernd

    Hallo,
    super Projekt!

    Ist es möglich, noch einen zusätzlichen PIN für Aktionen zu nutzen? z.B. 1 x öffnen, 1x zusperren, 1x öffnen für Gäste, dann könnte man die Gäste-PIN nur zu bestimmten Zeiten freigeben…

    Ich hätte Verwendung, dass z.B. der Nachbar einen eigenen PIN erhält, ich den aber nur während unseres Urlaubs freischalte, damit er die Blumen giesen kann… Das sollte aber dann nicht vor dem Urlaub im Arduinio geregelt werden, sondern in der dahinter hängenden Logik (Rasperry…)

    Oder Zeitsteuerung – Putzfrau erhält eigenen PIN, der nur wochentags von 18-20 Uhr funktioniert usw

    Ist sowas möglich? Wieviele PINs hat der Arduino Nano eigentlich für solche Aktionen frei?

    Antworten
  8. Bernd

    Oder was mir noch eingefallen wäre:

    Wenn man die Sperre nach 5 Fehlversuchen entfernt, könnte man auch 2 oder mehr Arduinos parallel an die Wiegand-Leitung hängen? Dann hätte man je Arduino 2 Kanäle und könnte so entsprechend mehr Dinge ansteuern.

    Antworten
    1. ST Beitragsautor

      Gehen wir Deine Punkte kurz einzeln durch:

      1. Pins / mehr Aktionen steuern
      Das ist kein Problem. Die Codeänderung ist sehr einfach. Mein Vorschlag wäre, die Aktionen von 0 (schließen) und 1 (öffnen) um 2,3,4,… zu erweitern und damit einfach andere Pins zu schalten. Auch der Arduino Nano hat Pins genug. Du kannst zum Beispiel noch A0..A7 nehmen und noch einige der freien D-Pins, um etwas anzusteuern.

      2. Gäste PIN / Putzfrau PIN
      Dau bräuchtest Du vermutlich einen Eingabe PIN. D.h. der PIN geht nur, wenn im Haus ein Schalter umgelegt ist. Geht (siehe 1.) auch; alle Pins sind Ein/Ausgabe. Codeänderung ist nicht wild aber da müßtest Du schon etwas mehr tun.

      3. Zeitsteuerung
      Wenn Du das machen willst, dann brauchen wir irgendwoher die echte Zeit. Der Arduino kennt von Haus aus erst mal nur seine interne Laufzeit. Um das zu realisieren müsste man eine RTC (real time clock) integrieren. Die Hardware kostet nicht viel. Es wären aber etwas größere Codeänderungen dazu nötig. Wenn Du kodieren kannst, kann ich Dich gerne etwas unterstützen und Dir sagen, wo Du hinfassen musst.

      4. mehrere Arduinos als Wiegand Controller
      Auch eine Lösung. Vermutlich aber Overkill (siehe 1. & 2.). Die für die Wiegand Kommunikation verwendeten Eingänge sind sehr hochohmig. Da sollten sich problemlos mehrere Arduinos kaskadieren parallel anklemmen lassen.

      Antworten
  9. Bernd

    Ok, ich hab mir jetzt mal soweit alles bestellt. Wird wohl ein paar Tage dauern, weil einiges aus China und Hongkong kommt…

    Kann man denn den Arduino einfach an ein Motorschloss hängen oder wie in diesem Fall direkt an die Keymatic-Fernbedienung? Muss da kein zusätzliches Relais dazwischen?

    Und wegen dem Relais für die Klingel: Ich hab wo anders gelesen, dass es fahrlässig ist, ein Relais direkt an einen Arduino anzuschließen – da sollte unbedingt ein Transistor als Treiber dazwischen. Ich kenn mich damit aber überhaupt nicht aus. Was hat das zu bedeuten? Muss da nun was dazwischen oder gehts auch so – Arduino direkt an Relais? Ein Relais mit 5V Eingang dürfte das richtige für den Arduino sein, oder?

    Antworten
    1. ST Beitragsautor

      Wegen des Motorschlosses:
      Ich vermute stark, dass da ein Relais dazwischen muss. Endgültig muss Dir das aber das Datenblatt des Motorschlosses beantworten. Das Ding wird ja einen Eingang, eine Spannung und eine Impedanz haben. Wenn es mit 5V und <20mA läuft und keine relevante Induktivität hat, dann kann man auch direkt an den Arduino. Wie gesagt: vermutlich Relais.

      Relais & Klingel: Ich verstehe Deine Frage nicht. Im Schaltplan (Teil 2) wird die Klingel über ein Relais geschaltet. Das 5V-Relais wird über einen Treibertransistor und inkl. Freilaufdiode abgesteuert. Und ja: Ich würde davon abraten ein Relais direkt an einen Arduino Pin zu hängen. Falls es ein 5V Relais ist, das einen maximalen Strom <<20mA hat, kann man das prinzipiell tun. Dann aber nur mit Freilaufdiode, weil das Relais ja eine nicht unbeträchtliche Induktivität hat. Du kannst jedenfalls diesen Teil des Schaltplans für die Klingel (also Transistor, Widerstand, Diode & Relais) so eins zu eins für Dein Motorschloss übernehmen.

      Antworten
  10. Freddy

    Hallo,
    ich finde das Projekt super und habe es gleich mal nachgebaut. Allerdings läßt sich mein RFID Leser nur auf Wiegand 26. Jetzt reagiert die Tastatureingabe nicht, wie weiter oben ebenfalls berichtet. Wie kann die Arduino Software entsprechend umgeschrieben werden ? Bin bei der Arduino Programmierung leider noch ganz am Anfang. Aber ich würde gerne dazu lernen oder versuchen den Code zu erweitern. Vielleicht kannst Du mir einen Tip geben ?

    Antworten
    1. ST Beitragsautor

      Was für einen Leser nimmst Du denn? – Und was kommt als Debug Ausgabe auf der Seriellen, wenn Du eine Taste drückst?
      Für 4-Bit Wiegand (also separate Tastendrücke) habe ich eine noch nicht freigegebene Modifikation.

      Antworten
          1. Fabi

            Hallo, wann hast du denn ungefähr vor die neue Version die auch die 4 Bit Codes unterstützt zu veröffentlichen? Habe nämlich selbst das gleiche Problem (jedoch anderer Reader). Kannst mir auch an die angegebene Mail senden 😉
            Vielen Dank schonmal
            Fabi

          2. ST Beitragsautor

            Ich bin gerade dienstlich unterwegs und komme an nichts heran. Die Version kommt am langen Wochenende in den Blog. Ich schreibe einen Teil 4.
            Welchen Reader willst Du denn anschließen?

          3. Fabi

            Was erwartet uns denn im Teil 4? Du spielst momentan öfters mit dem ESP8266 herum (ich auch ;D) – aktuell arbeitet mein System auch noch mit dem Standard CAC und einem RPi der die Türöffnung per Handy (inklusive App und Zugangsberechtigung per SIM Serial) via WLAN. Möchte aber dann auch sobald ich das neue System habe den RPi durch den ESP zusammen mit dem Arduino ablösen…
            Der Reader ist ein Chinateil, zu dem ich nichtmal wirklich ne Bezeichnung habe.. Kann später noch den Aliexpress Link raussuchen, dank Mittagspause ist das WLAN an gewissen Stellen in der Uni gerade überlastet

          4. ST Beitragsautor

            In Teil 4 wird es erst einmal um 4-Bit Support für eine breite Unterstützung von Wiegand Codeschlössern gehen sowie um eine kleine Modifikation für einen externen Alarm.
            Bei dem ESP8266 baue ich aktuell an einer WLAN Steuerung für unsere zwei Markisen. Bezüglich des Wiegand Interfaces hatte ich mal eine Konfiguration per WLAN angedacht. Öffnen könnte man dann darüber auch. Ich bin mir aber noch nicht sicher, ob ich meine Haustüre wirklich ins Hausnetz einbinden will.

  11. Freddy

    Hallo. Habe jetzt alles komplett verdrahtet und montiert. Läuft einwandfrei. Die einzelne Tasteneingabe (4 bit Eingabe) funktioniert super. Danke nochmal für die Programmerweiterung.

    Antworten
    1. ST Beitragsautor

      Hi Mexx,

      ich empfehle Dir die SW aus Teil 4 als Startpunkt zu nehmen. Dann schau in die WiegandLowLevel Datei. In der Routine WiegandDecode ist festgelegt, wie mit den verschiedenen Bitformaten umzugehen ist. Ich weiss nicht, wie bei Wiegand 34 der Facility- und der Cardcode festgelegt sind. Probier mal folgende Ergnzung; ggf musst Du die Bits anpassen:

      case 34: // 34 bit format – just a wild guess
      ilowfac = 2; ihighfac = 13;
      ilowcard = 13; ihighcard = 33;
      break;

      Viel Erfolg
      Stefan

      Antworten
  12. G. Hennig

    Hallo!
    Erstmal ein großes Lob für diese tolle und detaillierte Anleitung. Ich würde die Keymatic gerne über die CCU2 steuern und eine Funktasterschnittstelle an den Arduino anschließen, um dann auch noch weitere Funktionen steuern/auslösen zu können (Garage öffnen, Außenbeleuchtung schalten, etc.). Leider bin ich nicht so versiert, was Programmierung betrifft. Können Sie evtl. exemplarisch kurz erläutern, wie weitere Funktionen und die Ansteuerung weiterer Pins realisiert werden können? Das wäre super. Vielen Dank!
    MfG
    G. Hennig

    Antworten
    1. ST Beitragsautor

      Ich bin kein Experte für das ganze Homematic Zeug. Wenn ich das richtig verstehe, willst Du die Keymatic über eine CCU2 steuern. Soweit o.k. Dann willt Du weitere Aktivitäten mit der Funktasterschnittstelle auslösen. Also soll die CCU2 auf entsprechende Kommandos des Funktasters reagieren. Und der Funktaster soll am Arduino hängen, damit Du die Kommandos per Codeschloss von außen auslösen kannst, korrekt?

      Von der elektrischen Seite musst Du herausfinden, mit welchen Pegeln die Funktasterschnittstelle arbeitet. Vermutlich mit 3v, da eine 3V-Lithiumbatterie drin ist. Ob die Funktasterschnittstelle 5V fest ist, kann ich Dir nicht sagen. Also solltest Du aus den 5V an einem Arduino D oder A Pin per Spannungsteiler besser 3V machen. Wenn die Schnittstelle nur einen kleinen Strom über den Taster fließen lässt (was zu vermuten ist), solltest Du dann die Schnittstelle problemlos an den Arduino bekommen.

      Für weitere Kommandos, würde ich die SW so ändern, wie ich es in der Version 1.2 für das Klingeln gelöst habe. Du definierst eine weitere Aktivität (z.B. 4 für Garage öffnen). Dann suchst Du im Code in der HandleCodes.ino mal nach:
      if (pCodeList[iCodeListEntry].bAction == 3)
      An dieser Stelle im Code ist schon geprüft, ob ein valider Code eingegeben wurde. Hier wird gecheckt, ob die Aktion 3 vorliegt. Analog fragst Du nach Aktion 4 und steuerst die Pins, an denen Du die Schnittstelle angeschlossen hast.

      Viel Erfolg
      Stefan

      Antworten
      1. G. Hennig

        Hallo…

        …und vielen Dank erstmal für die Tipps. Das Projekt hat eine Zeit geruht, ist aber jetzt fertig und alles funktioniert einwandfrei. Trotz fehlender Programmierkenntnisse habe ich die Anpassungen hinbekommen. Wenn man die Syntax so halbwegs versteht ist das auch relativ unproblematisch.

        Das ganze ist jetzt so aufgebaut, dass am Arduino ein 4-Kanal Relais angeschlossen ist, an dem wiederum eine Homematic 4-fach Funk-Tasterschnittstelle hängt. Das Relais war erforderlich, da der Funk-Taster potentialfrei angesteuert werden muss. Dadurch, dass der Funk-Taster zwischen kurzem und langem Tastendruck unterscheidet, kann man also acht Funktionen definieren. Alle Funktionen werden über die CCU2 gesteuert/ausgelöst, so dass der Zentrale auch die Schalt-/Systemzustände bekannt sind und auch zeitgesteuerte Funktionen und/oder Kombinationen mit anderen Aktoren möglich sind (z.B. einschalten der Wegebeleuchtung beim verriegeln der Haustür nach Sonnenuntergang).

        Vielleicht ist dieser Aufbau ja auch hilfreich für User wie @Bernd, die verschiedene Zugangsberechtigungen (Reinigungskraft, Gäste,…) benötigen.

        MfG
        G. Hennig

        Antworten
  13. Manuel

    Hallo,
    erstmal herzlichen Dank für die Veröffentlichung von dem wirklich sehr gelungenem Adruino Sketch. Muss sagen das ganze läuft bei mir doch schon eine Zeit lang sehr ordentlich. Und das absolut ohne Ausfälle.

    Ich hätte jetzt nur noch eine Frage bzw. einen Punkt. Wäre es möglich, am Adruino einen Eingang zu definieren, so das wenn dieser geschalten wird ebenfalls Ausgang 1 betätigt wird und zugleich der Summer ertönt?

    Grund für diese Frage ist, ich öffne mein „Gehtürl“ zusätzlich über eine Logo, das Problem ist aber wenn jemand davor steht, bekommt dieser meist nicht mit das er schon andrücken kann, da mein Schloss kein Geräusch erzeugt.

    Bei Codeeingabe gibt es ja nach erfolgreichem Code den Beep.

    Vielleicht lässt sich da ja was machen!
    Sg

    Antworten
    1. ST Beitragsautor

      Danke für’S Lob. Nun weiss ich nicht, was eine Logo in diesem Zusammenhang ist. Egal. Ich gehe mal davon aus, dass Du einen Pin haben willst, der die Türe öffnet, als ob man einen korrekten Code eingegeben hätte. Ich habe es nicht ausprobiert; folgendes sollte aber klappen. Es wird der Pin D5 verwendet. Wenn der auf high geht, sollte das Schoss aufgehen und das Codeschloss piepen.

      In der Routine setup() in der Wiegand.ino
      pinMode(5, INPUT);

      Direkt vorne in der Routine loop() in der Wiegand.ino
      if (digitalRead(5)) { DoDoor(1); }

      Viel Erfolg
      Stefan

      Antworten
  14. Andreas Gerlach

    Hallo

    Material ist da, hab alles funktionsfähig zusammen. Klappt bestens. Jetzt hab ich einen Usercode, der mit einer 0 beginnt, die er mir aber abschneidet. Ich finde aber im Quellcode keine Definition für zulässige Zeichen. Verboten ist die 0 ja nicht, denn 0000# schließt ja die Tür. Oder ist die 0 dadurch blockiert?

    A.Gerlach

    Antworten
    1. ST Beitragsautor

      Eine Null ist im Code nicht verboten. In welchem Modus betreibst Du das Codeschloss? – Es gibt die Möglichkeit das Codeschloss im Wiegand 26/34 Modus zu betreiben. Dann liegt die Erzeugung eines 26 oder 24 Bit Codes in der Hand des Codeschlosses. Ob es dann eine führende Null am Code annimmt oder nicht, liegt in der Hand des Codeschlosses und seiner Firmware.
      Die meisten Codeschlösser kann man auch in einem 4Bit Modus betreiben. Dann wird jede Taste einzeln übertragen. Der Arduino Code unterstützt auch diesen Modus. Allerdings 0234# ist dann aber identisch mit 234#. Ich habe das so implementiert, dass mit Hilfe der Tastatureingaben einfach eine ganze Zahl zusammengebaut wird.

      Gruss Stefan

      Antworten
  15. Andreas Gerlach

    Hallo

    ok, das war bisschen wenig. Aber, warum auch immer, hab die Codes neu eingegeben und jetzt funktionierts. Ist übrigens ein Sebury sTouch wie in der Anleitung beschrieben und eingerichtet. Die einzige Änderung die ich gemacht hab, die Anzahl der Fehlversuche auf 3 reduziert. Ich muss mal schauen, ob ich da noch was ändere, aber das Schloss piept so laut, da wirds wohl ein Einbrecher nicht lange versuchen.

    A. Gerlach

    Antworten
  16. Stephan Janßen

    Hallo . Ich hatte mal ein funktionierendes Codeschloss mit deiner Anleitung gebaut…….
    Nur leider hatte ich einen Überspannungsschaden…

    Habe nun einen neuen Arduino und die gleiche Programierung angewendet.
    Nun habe ich aber das Problem , das mir ein :
    Unknown format : Cannot decode 11 bit bei einem RIFD Sender und
    bei 4 stelligen Pin: ( z.B. 9500#) Unknown format Cannot decode 7 bit oder
    bei 0000# Unknown format Cannot decode 1 bit ausgegeben wird. Kann es sein das daß Lesegerät von I-keys auch einen Schaden genommen hat?

    710# Wiegand Reader Modus
    72 26-37# Wiegandmodus 26-37 bit auf 37 bit eingestellt
    73 0# 4-6 Ziffern, Eingabe von Transpondernummer eingestellt

    Antworten
    1. ST Beitragsautor

      Das ist in der Tat komisch. Ist die Spannungsversorgung in Ordnung? – deine Beschreibung klingt irgendwie danach, dass das Tastenfeld doch noch geht. Entweder ist der Wiegand Ausgang wirklich hin oder das Netzteil erzeugt Störungen. Eine andere Ursache fällt mir auch nicht ein.
      Viel Erfolg!
      Gruss Stefan

      Antworten
  17. ST

    Ich habe das Sebury Tastenfeld auf 37 Bit Wiegand gestellt. Der Code unterstützt auch 26 Bit. Daran kann es eigentlich nicht liegen. 11 Bit als Format bei einem RFID macht keinen Sinn. 1 Bit als Reaktion auf eine Codeeingabe ist auch nicht sinnvoll.
    Es könnte also sein, dass das Tastenfeld von der Überspannung beschädigt wurde. Oder das Netzteil ist nicht mehr in Ordnung. Last but not least könnte eine fehlende oder mangelhafte Verbindung der Masse von Tastenfeld und Arduino solche Probleme verursachen.

    Viel Erfolg nochmal
    Gruss Stefan

    Antworten
  18. Stephan Janßen

    Hallo Stefan.

    Kann es sein das daß Nano Board nicht gleichzeitig mit 12 Volt und angeschlossenem USB Port betrieben werden darf? Auf der Unterseite bei Pin D12 ist ein Baustein bei meinem neuen Board verbrutzelt…

    Gruß Stephan

    Antworten
  19. Stephan Janßen

    Hallo an alle .

    Bin am verzweifeln. Habe einen neuen Sebury vom iKeys. Einen neuen Nano. Gleicher Aufbau wie vorher. Neues Netzteil 12 Volt gemessen. Masse auch angeschlossen…. Neuen Funksender gelötet. Gestestet mit der Batterie. Sender geht auch.

    Stelle ich den Sebury in 711# und halte einen RFID Key daran klickt ein Relais im Gerät. Also kann ich davon ausgehen das der neue von I-Keys auch funktioniert.
    Stelle ich auf 710# um und 72 auf 37 bit und 73 auf 0 (4-6 Ziffern) habe ich ein Cannot decode

    Habe im Programm einen Code angelernt . z.B. 1234. im Eeprom gespeichert. Wird mir auch angezeit.
    Gebe ich diesen Code nun im Tastenfeld ein bekomme ich Cannot decode 5 bit format.
    Halte ich einenRFID davor wird mir nur Cannot decode 17 bit format. Normalerweise sollte ich ja hier die WEG 34 des RFID stehen..
    Ich hatte das beim 1 mal vor ca einem Jahr so hinbekommen . Aber nun nicht mehr . Muss ich den Sebury erst in den Werkseinstellungen setzen und die RFID anlernen?
    Ich weiß nicht mehr weiter.

    Antworten
  20. ST

    Hallo Stephan,

    das klingt komisch. Ich habe noch einen EInfall: Kann es sein, dass Du D0 und D1 am Wiegand Eingang vertauscht hast?

    Gruss Stefan

    Antworten
  21. Andy

    Hallo,
    erstmal vielen Dank für die ganze Arbeit, der Sketch läuft soweit super!

    Probleme habe ich allerdings, die Codetabelle als ganze Liste zu übertragen… entweder nimmt er sie garnicht an, oder er erkennt immer nur die erste Zeile meiner Liste.

    Diese sieht wie folgt aus:

    User1,0,1234,1
    User2,0,2345,1
    User3,6,12345679,1
    Close,0,0,0

    usw…

    was mache ich falsch?!

    Gruß Andy

    Antworten
  22. Daniel

    Hi,
    erstmal vielen Dank für die Entwicklung, ein super Projekt.
    Ich habe das RFID Codschloss mit einem Uno zum laufen bekommen.
    Nun habe ich Probleme bei der Portierung auf einen wemos D1 mini oder auch einen UNO wifi.
    Es besteht das Problem die Daten in den eeprom zu schreiben. Mit dem verwendeten Code bekomme ich immer einen Fehler und versuche diesen so anzupassen das er auf dem wemos läuft scheitert bis jetzt immer.
    eeprom_read_block((void*)&iCodeListSize, (void*)addr, sizeof(iCodeListSize));

    Ich möchte gerne die Daten lokal auf dem eeprom Speichern und auf einer SQL Datenbank global loggen was auch funktioniert.
    Haben Sie dort eine Idee ?
    Über eine Hilfe wäre ich sehr dankbar.

    Gruß Daniel

    Antworten
    1. ST Beitragsautor

      Hallo Daniel,

      der Wemos D1 ist ja effektiv ein ESP8266. Da klappt das mit dem EEPROM leicht anders. Hier sind ein paar Codefragmente für die ESP8266. Damit sollte Dir die Umstellung gelingen:

      #include <EEPROM.h>
      
      // cfg ist hier ein struct vom typ configData_t
      
      // einlesen
        EEPROM.begin(sizeof(configData_t));
        EEPROM.get( 0, cfg );
        EEPROM.end();
      
      // schreiben
        EEPROM.begin(sizeof(configData_t));
        EEPROM.put( 0, cfg );
        delay(200);  // really needed?
        EEPROM.commit();
        EEPROM.end();
      

      Mit SQL Datenbanken habe ich mich nie wirklich beschäftigt.

      Gruss Stefan

      Antworten
  23. Ronald Löggow

    Hi,
    vielen Dank für diese tolle Arbeit, habe Alles nachgebaut und scheitere jetzt beim Anlernen der RFIDS, bekomme folgende Fehlermeldung:
    >1
    To add code/card enter: as list or just to cancel
    >Read 26 bits. FacilityCode,CardCode = 173,38398
    Resetting wrong code counter due to time-out.
    habe folgende RFIDS
    http://www.i-keys.de/de/Transponder/125-khz/EM4102-Uni/K694-Uni.html
    Das Anlernen von Usern ist kein Problem, das funktioniert.
    vielleicht habe ich verkehrte RFIDS ?
    woher bekomme ich den FacilityCode?

    für jegliche Hilfe wäre ich dankbar
    Gruss Ronald

    Antworten
      1. ST Beitragsautor

        Du hast die Nuss ja schon geknackt. Es gibt halt viele Varianten, den Wiegand Code zu notieren. Letztlich mache ich es immer so:
        – Mit dem Arduino verbinden, um das serielle Log zu sehen.
        – Neuen RFID an den Leser halten.
        – Es erscheint ein Fehler im Log, dass dieser Tag unbekannt ist. Dabei wird der Wiegand Code des neuen Tags angezeigt.
        – Diesen Code trage ich so ein, wie er geloggt wird.

        Antworten
  24. Ronald

    Hallo,
    vielen Dank für diese tolle Arbeit, habe Alles soweit nachgebaut und habe jetzt beim Einbinden der RFIDs Probleme. Erhalte folgende Fehlermeldung
    >1
    To add code/card enter: as list or just to cancel
    Read 26 bits. FacilityCode,CardCode = 173,38398
    Resetting wrong code counter due to time-out.

    RFIDs habe ich folgende
    https://www.i-keys.de/de/Transponder/125-khz/EM4102-Uni/K694-Uni.html

    vielleicht sind die ja falsch? woher bekomme ich den FacilityCODE?

    Das Anlegen von Usern funktioniert ohne Probleme.
    für jegliche Hilfe wäre ich dankbar
    LG Ronald

    Antworten
  25. Ronald

    Hi,
    und ich dachte ich wäre einigermaßen fit um das durchzuführen.
    nächstes Problem: habe eine neue keymatic HM-sec-key-s mit Fenbedienung HM-rc-4-3 und FernbedienungHM-rc-key4-3 an den Fernbedienungen ist Alles genau seitenverkehrt. Habe dann MP7 und MP8 gewähllt Fernbedienungen funktionieren solo eiwandfrei aber ansteuerung der Fernbedienungen über adruino funktioniert nicht. An MP7+8 liegt im Ruhezustand 3v + an drücke ich eine Taste der Fernbd. haben MP7 o. Mp8 0v.
    An Adruino D11 o. D12 legen im Ruhezustand 1,5v an halte ich ein RFID vor das Gerät fällt die Spannung jeweils ca 0,4v ab und das Komische ist wenn ich über die Tastatur User xyz und # eingebe fällt die Spannung auch an D11 o. D12 ca 0,4v ab bevor ich nach der # 1bzw 0 eingeben kann.
    wer kann mir helfen alleine komme ich nicht weiter
    LG Ronald

    Antworten

Schreibe einen Kommentar

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