Identive SCL011 Contactless Reader Modul (nPA-Basisleser)

Hallo,

nachdem ich hier schon einige Zeit mitlese und vieles aus diesem Forum lernen konnte, möchte ich nun auch mal was zurückgeben.

Ich habe ein Modul für den Identive SCL011 Contactless Reader (auch bekannt als nPA-Basisleser) geschrieben. Das Lesegerät gabs (gibts?) in Deutschland ja praktisch geschenkt (zumindest auf Ebay sehr billig) und eignet sich hervorragend als sicherer Schalter in der Hausautomatisierung (bei mir an der Haustüre zur Anwesenheitssteuerung bzw. Aktivierung/Deaktivierung der Alarmanlage).

Funktion:
Der SCL011 muss per USB am IP-Symcon Rechner angeschlossen und der entsprechende PC/SC Treiber muss installiert sein. Das Modul greift auf über den PC/SC Treiber auf das Lesegerät zu und meldet bei Anlegen einer entsprechenden Karte deren UID. Es besteht die Möglichkeit, die interne LED anzusteuern (optional). Es handelt sich prinzipiell um einen Multiformat-Reader. Es besteht aber optional auch die Möglichkeit, die Suche auf bestimmte Kartentypen einzuschränken (Funktion direkt in der Firmware). Vorerst funktioniert das Modul mit einem angeschlossenen Reader am System schon ganz gut. Ich habe eine Struktur mit eingebaut, die es erlauben sollte auch mehrere Leser über mehrere Instanzen in IP-Symcon anzusprechen. Mangels mehrerer Reader konnte ich das aber noch nicht wirklich testen.

Einbindung in IP-Symcon:

  • scl011.dll in das modules Verzeichnis kopieren
  • Dienst neu starten
  • Instanz hinzufügen
  • „RFID“ -> „SCL011“
  • Hinzufügen abschließen
  • Reader anstecken (wenn nicht schon dran)
  • Karte auflegen (das ist notwendig, da durch die Treiberfunktionalität auf Readereinstellungen auch nur zugegriffen werden kann, wenn eine Karte aktiviert ist
  • Bei der ersten Initialisierung eines Lesegerätes nach Erstellen der Instanz wird die Seriennummer des Lesegeräts übernommen. Nachfolgend funktioniert die entsprechende Instanz nur noch mit genau diesem Lesegerät. Soll das zurückgesetzt werden -> Instanz löschen / neu erzeugen oder siehe PHP-Funktionen
  • Immer wenn IP-Symcon neu gestartet wird, muss die Initialisierung neu durchlaufen werden. Das passiert normalerweise mit dem ersten Auflegen einer Karte automatisch (erst dann springt ReaderStatus von -1 auf 1)

Statusvariablen:
CardState: Aktueller Kartenzustand
–> -1 = Fehler
–> 0 = Keine Karte
–> 1 = Lesefehler / Unbekannte Karte
–> 2 = Karte angelegt
–> 3 = Karte aktiviert (shared)
–> 4 = Karte aktiviert (exclusive)
Im Normalbetrieb sollte diese Variable auf 0 stehen, wenn keine Karte im Lesebereich ist, bzw. auf 3, wenn sich eine Karte im Lesebereich befindet und identifiziert wurde.

CardUID: UID (Seriennummer) der Karte - Hexcodiert
Immer wenn eine Karte neu gelesen wird, wird diese Variable aktualisiert. Scripte, die auf Leseereignise reagieren sollen verwenden am besten diese Variable als Trigger.

ReaderState: Aktueller Zustand des Lesegeräts
–> -3 = Nicht unterstütztes Lesegerät (kein SCL011) - wird ignoriert
–> -2 = Unbekanntes Lesegerät (SCL011 mir unbekannter Seriennummer) - wird ignoriert
–> -1 = Lesegerät noch nicht Initialisiert --> Karte auflegen
–> 0 = Kein Lesegerät erkannt
–> 1 = Lesegerät OK

PHP Funktionen:

  • SCL011_setLedState(InstanceID:integer, bLedOn:boolean):integer
    –> LED aus/einschalten
    –> Dafür muss LedControlByFw auf false stehen
    –> Liefert 0 bei Erfolg / -1 bei Fehler
  • SCL011_getLedState(InstanceID:integer):integer;
    –> Zustand LED
    –> Liefert -1 wenn LedControlByFw auf true steht
    –> Liefert 0 bei LED aus / 1 bei LED ein
  • SCL011_getSerialPnp(InstanceID:integer):string
    –> Liefert die PNP Info (aufgeblasene Seriennummer) des Readers
  • SCL011_setSerialPnp(InstanceID:integer, sSerialPnp:string);
    –> Erlaubt Änderung der PNP Info
    –> Handling von mehreren Lesegeräten -> ungetestet
  • SCL011_getCntlessType(InstanceID:integer):integer;
    –> Kartentypen für die Suche (Einschränkung)
    –> 0 --> alle unterstützen Kartentypen (FeliCa, Typ A, Typ B)
    –> 1 --> nur Typ A (Mifare)
    –> 2 --> nur Typ B
    –> 3 --> Typ A und B
    –> 4 --> Nur FeliCa
    –> 5 --> FeliCa und Typ A
    –> 6 --> FeliCa und Typ B
  • SCL011_setCntlessType(InstanceID:integer, iCntlessType:integer);
    –> Einstellen der Katzentypen für die Suche (Nummern siehe oben)
    –> Ob das wirklich spürbare Vorteile in der Reaktionszeit bringt weiß ich noch nicht
    –> Es muss danach jedenfalls eine Neuinitialisierung durchgeführt werden (IP-Symcon Neustart oder Lesegerät aus-/anstecken)
  • SCL011_getLedControlByFw(InstanceID:integer):boolean;
    –> LED per FW (true) oder aus IP-Symcon (false) steuern?
  • SCL011_setLedControlByFw(bLedControlByFw:boolean);
    –> LED per FW (true) oder aus IP-Symcon (false) steuern?
    –> Es muss danach jedenfalls eine Neuinitialisierung durchgeführt werden (IP-Symcon Neustart oder Lesegerät aus-/anstecken)
  • SCL011_getReaders(InstanceID:integer):string;
    –> Liefere Liste der angeschlossenen Reader mit Positionsnummern
    –> Handling von mehreren Lesegeräten -> ungetestet
  • SCL011_getReaderPosition(InstanceID:integer):integer;
    –> Liefere Positionsnummer des aktuellen Readers in der oben genannten Liste
  • SCL011_setReaderPosition(InstanceID:integer, iReaderPos:integer);
    –> Ändere Positionsnummer für den Zugriff auf einen Reader
    –> Handling von mehreren Lesegeräten -> ungetestet
    –> Es muss danach jedenfalls eine Neuinitialisierung durchgeführt werden (IP-Symcon Neustart oder Lesegerät aus-/anstecken)

Das ist die erste Version, die gerade eben fertig wurde. Die Grundfunktionalität sollte schon ganz gut klappen. Fehler sind natürlich nicht auszuschließen und ich würde mich über entsprechende Rückmeldungen freuen, sodass ich darauf reagieren kann. Ich übernehme natürlich keinerlei Haftung für Schäden die direkt oder indirekt im Zusammenhang mit dem Einsatz des Moduls stehen.

Featurewünsche können hier natürlich auch gerne diskutiert werden.

Schöne Grüße
EmJay

Danksagungen:
SCM Microsystems Inc. für die offene Delphi-Demo zum PC/SC-Treiberzugriff
Thomas Dreßler für die hilfreiche Doku zur IP-Symcon Modulerstellung
Symcon GmbH für IP-Symcon und das SDK

scl011.zip (323 KB)

Mann in e Tünn,
sagt man hier in Schl-Holstein. Das ist ja genial.

Passt er also auch dafür?

Vielen Dank

Gruß Helmut

Hallo,

es wäre gut möglich dass die Standardfunktion (UID lesen) auch mit dem ReinerSCT nPA funktioniert. Gerätespezifische APDUs lassen sich dann aber sehr wahrscheinlich nicht verwenden (LEDs, Kartentyp). Ich finde auf die schnelle auch kein Datenblatt zum ReinerSCT, in dem die APDUs (insbesondere Escape commands) beschrieben sind.

Ich werde zum Ausprobieren bei nächster Gelegenheit ein Parallelmodul erstellen, das nur die UID liest. Hast du diesen Reader? Dann könntest du das dann ausprobieren.

Schöne Grüße,
EmJay

Hallo,

danke dafür - werde dafür sicherlich Anwendungen finden und kann meinen in der Schublade verstaubenden BasicReader sinnvoll reaktivieren. :slight_smile:

Hallo EmJay,

tolle Arbeit. Das ist 100%ig genau das, was ich gebraucht habe. Ich habe sofort dein Modul ausprobiert und meine „Frickellösung“ (JavaProgramm zum horchen auf den Leser und über Json an IPS übergeben) abgelöst.

Es funktioniert wunderbar und ist optimal in IPS integriert.:loveips: Meine Bewunderung!

Viele Grüße

bumaas

Hallo bumaas,
das Modul habe ich installiert, den Leser mit seine Meldungen hat er auch, aber die ATR der Karte nicht.

Ich könnte Dir den Leser mal schicken, wenn es hilft.

Gruß Helmut

Hallo,

Danke für eure Rückmeldungen! Freut mich wenn es funktioniert - das motiviert weiterzumachen.

@Helmut: Danke für dein Angebot! Ich denke vorerst nicht, dass ich den Reader brauche. Ich lade bis zum Wochennde ein Update hoch in dem ein zweites Modul PCSC Generic steckt. Damit sollten dann auch andere Reader funktionieren. Was meinst du mit ATR? Answer-to-Reset? Die wird hier nicht angezeigt sondern die UID (so heißt die Nummer zumindest bei Mifare). Weißt du zufällig welche Kartentype du hast?

Im kommenden Update habe ich auch den Direktzugriff auf den SCL011 Reader geschafft sodass keine Karte mehr für die Initialisierung aufgelegt werden muss.

Bis bald,
EmJay

Naja,
war ein Perso.
Ich denke, das ist die KartenNr., gelesen mit der Software AusweisAPP von der „Regierung“.
Gruß Helmut

Hallo,

im Anhang findet ihr die neue Version meines Projekts. Ich habe die Library jetzt auf PCSC umbenannt und ein Generic Modul hinzugefügt mit dem auch andere PCSC kompatible Geräte angesprochen werden können. Im Test mit meinem Uralt-ReinerSCT Smartcard Reader hat das schon ganz gut funktioniert. Der Befehl zum Auslesen der Seriennummer hat dort allerdings im Versuch mit meiner Bankomatkarte fehlgeschlagen. Keine Ahnung ob es auf der Bankomatkarte eine einfach auslesbare ID gibt. Mit Geräten wie dem ReinerSCT RFID (nPA) sollte das aber klappen, wenn die richtigen Karten verwendet werden.

Im SCL011 Modul funktioniert nun der Direktzugriff auf den Reader sodass keine Karte mehr für die Initialisierung aufgelegt werden muss.

@Helmut: Mit dem Personalausweis als Token wird die Sache mit der UID (wie sie aktuell ausgelesen wird) wahrscheinlich schwierig. Selber hab ich keinen aber ich habs mal mit dem Reisepass probiert. Der läuft mit random UID - liefert also jedesmal eine zufällige Nummer - und ist damit nicht brauchbar. Hast du eine andere Karte die du probieren kannst?

Die ATR ist auch nicht zwingend gut als ID zu gebrauchen. Enthält hauptsächlich Infos über die Karte und deren Funktionen. Die ID der Karte ist dabei je nach Kartentyp enhalten oder auch nicht.

Eine Doku habe ich dem Paket beigelegt.

Über Rückmeldungen freue ich mich natürlich!

Schönen Abend,
EmJay

pcsc.zip (569 KB)

You are a hero;-)

Perso wird gelesen, die Karte, die bei diesem Leser dabei war. Super!!

Gruß Helmut

Cool :cool:

Hallo EmJay,

nach der Umstellung auf Version 2.6 kommt beim Starten die folgende Fehlermeldung im Logbuch:

„Fehler beim Laden der Bibliothek: scl011.dll, Fehler: Inkompatible Bibliothek: SCL011 Contactless Reader, Erstellt für Kernel: 2.50, Aktuell: 2.60“

Hier gibt es wohl eine Abhängigkeit.

Könntest du dir das bitte bei nächster Gelegenheit einmal ansehen?

Dein Modul arbeitete bislang super:loveips:

Gruß

Burkhard

externe Module werden nicht mehr geladen, bei mir gleicher Fehler

Nun scheinbar will Enray die Dll nicht an die neue Version anpassen. Hat jemand eine Lösung welche auch nach Updates funktioniert. Vielleicht eine Log-Software welche eine Datei schreibt die man mit IPS lesen kann?

Du hast eine PN.

Gruß

Burkhard

Hallo,

es gibt eine angepasste Version für 2.6, die aber nicht optimal funktioniert (nach dem Start von IP Symcon muss der Leser einmal neu angesteckt werden). Wer daran Interesse hat meldet sich einfach bei mir. Ich werde versuchen das Problem in den nächsten Wochen in den Griff zu bekommen und dann das Modul auch wieder öffentlich zur Verfügung zu stellen.

Schöne Grüße

Hallo,

es gibt eine komplett überarbeitete Version für IP-Symcon 2.7 mit erweitertem Funktionsumfang und hoffentlich besserer Stabilität.

Kurzbeschreibung:

PC/SC Modulbibliothek für IP-Symcon. Erlaubt die Einbindung von PC/SC-kompatiblen Geräten (Smart Card Reader für kontaktlose und kontaktbehaftete Karten).

Module:

PCSC_Generic
Zur Verwendung mit beliebigen PC/SC-kompatiblen Geräten.

PCSC_SCL011
Zur Verwendung mit dem SCL011 Contactless Reader von Identive. Zusätzliche Unterstützung von gerätespezifischen Funktionen (z.B. Ansteuerung der LED).

PCSC_ACR122
Zur Verwendung mit dem ACR122 Contactless Reader von ACS. Zusätzliche Unterstützung von gerätespezifischen Funktionen (z.B. Ansteuerung LED/Buzzer).

Modul und vollständige Doku im Anhang.

Schöne Grüße,
EmJay

PCSC Library 2.7.0.0.zip (638 KB)

Da habe ich extra Aufgrund dieses Threads auf eBay einen SCL011 geschossen und dann sagt der mir nur einen Socketerror 10054, wenn ich eine Instanz hinzufüge. Der Thread ist zwar etwas alt, aber ich denke das gehört am besten hier hin.
Ich würde mich sehr um Lösungsvorschlage freuen!

Die DLL ist im Module-Ordner? Welche IPS-Version?

Gruß Helmut

Hallo,

Versionen von IP-Symcon und der Library wären interessant zu wissen. Treiber für den SCL011 sind installiert (d.h. der Leser kann mit anderer Software verwendet werden)?

Schöne Grüße