Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
Der LBS kann keine Verbindung aufbauen, daher liefert fsockopen() ein FALSE und daher auch die Fehlermeldung bei fgets().
Wie haste den NPORT denn konfiguriert? Am besten Screenshot von der Konfiguration im Webinterface machen.
Der Port bei Local TCP Port ist der Port, den du im LBS angeben musst. Alles andere kannst du vermutlich so konfigurieren wie in diesem Screenshot.
Bevor du das ganze in EDOMI testest, kannst per telnet testen, ob du den NPORT erreichen kannst.
Am besten als root auf dem EDOMI Server in einer Shell folgenden eingeben:
Code:
[root@edomi-development ~]# [COLOR=#FF0000][B]telnet 192.168.0.222 4001[/B][/COLOR]
Trying 192.168.0.222...
Connected to 192.168.0.222.
Escape character is '^]'.
Wenn du dann ein "Connected" siehst, dann weißt du, dass die Verbindung funktioniert. Du musst natürlich beim telnet Befehl IP und Port entsprechend anpassen.
[root@edomi ~]# telnet 192.168.2.38 4001
Trying 192.168.2.38...
Connected to 192.168.2.38.
Escape character is '^]'.
Eine Verbindung scheint er ja herzustellen, aber am LBS sollte man ja wenigstens an A2 etwas kommen.
Kann ich sonst irgendwie über telnet oder so den Datenverkehr sehen?
Vielleicht ist es ja normal, aber wenn ich das kleine Windowsprogramm öffne mit dem man die Codes lesen kann, so muss ich dort immer erst "Connect" und dann den COM Port wählen. Vorher sehe ich am Moxa auch die Tx/Rx Led nicht leuchten wenn Daten übertragen werden. Für das Programm muss ich Real Com Mode wählen.
Konfiguriere ich den Moxa als TCP Server dann sehe ich die Tx/Rx Led gar nicht leuchten. Ist so als würde der Leser auf eine Aufforderung oder so warten.
was genau machst du denn unter Windows? Geht das dann auch über den Moxa?
Und was für eine Schnittstelle hat der Reader? RS232?
Sind die o.g. Fehler denn weg?
Was ist das für ein kleines Windows Programm? Vom Moxa?
Und wo wählst du real com?
EDIT: Und was genau empfängst du, wenn der Reader erfolgreich liest?
Das sind kleine Windows Programme die man sich bei Priority1, dem Hersteller des Lesers runterladen kann.
Diese Programme liefen auch über den Moxa, wie gesagt dann im Real Com Mode.
Real Com Mode habe ich im Moxa Programm eingestellt.
Was genau davon ist denn EIN Code?
Ich sehe da keinen Delimiter.
Sieht für mich danach aus, dass es 10 Bytes sind, die sich dann ohne ein Trennzeichen wiederholen.
Um wieviele unterschiedliche Transponder (Katzen) gehts denn letztendlich?
EDIT: Sorry, habs jetzt erst gelesen, den Code hattest du ja oben erwähnt.
Der eigentliche Code wird wohl 16 Bytes lang sein, den Code den ich gerade auslese ist von einem Anhänger den man zu einer Mikrochipkatzenklappe von Sureflap mit dazu bekommt. Den Anhänger kann der Leser auch lesen. Hätte am besten mal einen richtigen Chip der normalerweise implantiert wird bestellen sollen zum Testen. Meine 2 haben heute schon genug Versuchskaninchen spielen müssen.
Delimiter....ist das das "Endzeichen"?? Das stand in der Anleitung:
EM4100 transponder Output
The output format for a read of an EM4100 transponder
is a simple string of 10 ASCII coded Hexidecimal
characters followed by the ASCII code $0D
(carriage return) as a string end marker.
For example, when reading a EM4100 compatible card
with the Version Number of $06, and a card data of
This LBS integrates the RSS-Systems RFID reader (http://www.rss-systems.de/sr28.pdf) Prerequisites: TCP/IP connection to RFID reader via ser2net or an RS485/232-IP Adapter With E5/E6 you can add/delete RFID transponder IDs. E4 defines a MASTER Trandponder ID. When the reader reads the MASTER transponder, the LBS switches in MASTER mode for 15 seconds. While in MASTER mode and reading another transponder ID, this ID will be added to authorized transponder list, if it does not exists already. Otherwise it will be deleted from the list of authorized transponders. Sending a 1 on E7 will generate a list of all authorized transonders on A7. E8 specifies the grace period in seconds. After that time receiving the same transponder ID as before is recognized as a new authorization. All identical IDs before that time period are recognized as duplicates and will be ignored.
E1: Start (1) / Stop (0) RFID Reader E2: IP Adress of ser2net or RS485/IP Adapter E3: Port used by ser2net or RS485/IP Adapter E4: ID of Master key, which can be used to add/delete transponder E5: 10 byte code to be added to list of authorized transponder E6: 10 byte code to be deleted from authorized transponder list E7: 1 on this inputs generated a full list of authorized codes on A7 E8: Grace period after which a transponder triggers a second event E9: specifies the length of the RFID tag identifier in bytes E10: specifies the character to identify the start of RFID tag identifier (default: space) E11: Enable Logging (0-none|1-emerg|2-alert|3-crit|4-err|5-warning|6-notice|7-info|8-debug)
A1: Status of Reader: 0-Stopped | 1-Normal Operation | 2-Master Mode A2: Last transponder ID received A3: Timestamp when last transponder ID was received A4: Authentication successfull (1) => This signal should trigger e.g. the door opener A5: Authenticated transponder ID A6: Time of last authentication A7: List of valid transponder IDs [[name][ID]][[name][ID]]...[[name][ID]] A8: Last error code (1-mysql connection error)
V1 : Indicator whether LBS is running (1) or not (0) V2 : message queue ID
V100: Version of LBS V101: LBS Number V102: Name of Custom Log V103: used to store Loglevel
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Prerequesite before using this LBS !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- Install php-process
Install php-process extension: ============================== Login in as root to your EDOMI Server and execute the following command:
yum install php-process
Changelog: ========== v0.1: Initial version v0.2: LBS extended by two inputs to specify length of RFID Code (E9) and delimiter byte to identify start of RFID code (default: space)
while (getSysInfo(1) && ! feof($sock)) { // main loop (will be left when EDOMI ends or STOP usleep(5000);
// read next message if avaiable if ($result = msg_receive($msg_queue, 1, $msgtype, 4096, $command, true, MSG_IPC_NOWAIT, $msg_error)) { // handle message received from LBS $cmd = $command[0]; logging($id, 'Starting command execution: ' . $cmd);
switch ($cmd) { case "STOP": // setLogicLinkAusgang($id,1,0); logging($id, 'Stopping RFID Reader daemon'); break (2); case "READ": $list = ''; foreach ($rfid_tags as $name => $key) $list .= "[[$name][$key]]"; setLogicLinkAusgang($id, 7, $list); logging($id, 'RFID tag list: ' . $list);
break; case "ADD": $key = $command[1]; // add key to known keys if not exists if (array_search($key, $rfid_tags) === FALSE) { array_push($rfid_tags, $key); addTagToDB($key); logging($id, 'Added RFID tag: ' . $key); } break; case "DEL": $key = $command[1]; if (array_search($key, $rfid_tags) !== FALSE) { unset($rfid_tags[array_search($key, $rfid_tags)]); deleteTagFromDB($key); logging($id, 'Deleted RFID tag: ' . $key); } break; case "MASTER": $key = $command[1]; $master = $key; logging($id, 'New Master RFID tag defined: ' . $key); break; default: break; } } // read next char $char = fgets($sock); // $char = fgetc($sock); if ($char === FALSE) { usleep(5000); continue; } $data = $char; // else { // // remember read time $read_time = time(); // if ($read_time - $last_read_time > 1) { // $i = 0; // $last_read_time = $read_time; // }
// // continue loop until 12 chars have been read starting with an space char // $str[$i] = $char; // if ($str[0] != $keyDelimiter) // continue; // $i = ($i + 1) % $keyLength; // if ($i != 0) // continue; // }
// 12 chars have been read => start evaluation // $data = implode($str); unset($key); $key = trim($data); logging($id, "RFID ID received (HEX/ASC): " . bin2hex($data) . " / " . $key); setLogicLinkAusgang($id, 2, $key); setLogicLinkAusgang($id, 3, $read_time);
unset($tag);
if ($key === $master) { // handle master event logging($id, "MASTER RFID ID recognized"); if (! $masterMode) { // set master mode $masterMode = true; setLogicLinkAusgang($id, 1, 2); $masterStartTime = time(); logging($id, "MASTER mode enabled"); } } elseif (array_search($key, $rfid_tags) !== FALSE) { // handle known tags $tag = array_search($key, $rfid_tags); if ($masterMode) { // delete tag from allowed tags unset($rfid_tags[array_search($key, $rfid_tags)]); deleteTagFromDB($key); $masterMode = false; $masterStartTime = 0; setLogicLinkAusgang($id, 1, 1); logging($id, 'Deleted tag: ' . $key); logging($id, 'Master Mode ended'); } else { $access_time = time(); if (($tag != $last_access_tag) || ($access_time - $last_access_time) > $gracePeriod) { $last_access_tag = $tag; $last_access_time = $access_time; setLogicLinkAusgang($id, 4, 1); setLogicLinkAusgang($id, 5, $key); setLogicLinkAusgang($id, 6, $access_time); logging($id, "Access granted to RFID key (Name/Key): " . $tag . '/' . $key); } else logging($id, "Duplicate Transponder ID received (Name/Key): " . $tag . '/' . $key); } } else { // handle unknown tags if ($masterMode) { // add new tag to allowed tags array_push($rfid_tags, $key); addTagToDB($key); $masterMode = false; $masterStartTime = 0; setLogicLinkAusgang($id, 1, 1); logging($id, 'Added tag: ' . $key); logging($id, 'Master Mode ended'); } else { logging($id, "Access DENIED to unknown RFID key: " . $key); } } if ($masterMode && (time() - $masterStartTime) > 10) { $masterMode = false; $masterStartTime = 0; setLogicLinkAusgang($id, 1, 1); logging($id, 'Master Mode ended due to timeout (10 seconds)'); } } }
function createDB() { global $id; // connect to mysql server $db = mysqli_connect('localhost', 'root', ''); if (mysqli_connect_errno()) { setLogicLinkAusgang($id, 8, 1); return false; }
// create database $query = "CREATE DATABASE IF NOT EXISTS RFID"; logging($id, 'Executing SQL Query: ' . $query); mysqli_query($db, $query);
function addTagToDB($key) { global $id; // connect to mysql server and select database $db = mysqli_connect('localhost', 'root', '', 'RFID'); if (mysqli_connect_errno()) { setLogicLinkAusgang($id, 8, 1); return false; }
function deleteTagFromDB($key) { global $id; // connect to mysql server and select database $db = mysqli_connect('localhost', 'root', '', 'RFID'); // define query $query = "DELETE IGNORE FROM `tags` WHERE `id`=`" . $key . "`;"; logging($id, 'Executing SQL Query: ' . $query); // execute query mysqli_query($db, $query); // close connection mysqli_close($db); }
function readTagsFromDB() { global $id; // connect to mysql server and select database $db = mysqli_connect('localhost', 'root', '', 'RFID'); if (mysqli_connect_errno()) { setLogicLinkAusgang($id, 8, 1); return false; }
Werde mir morgen nochmal die Anleitung nochmal versuchen zu verstehen. http://www.priority1design.com.au/rfidrw-e-232.pdf
Da der Leser scheinbar nach einer Stromunterbrechung auf die zu lesende Einstellung welchen RFID Code er lesen soll eingestellt werden muss habe ich eventuell noch ein Problem....Schaue ich mir aber morgen mal an.
Nur das "Select Tag Type" wird bei Stromunterbrechung zurückgesetzt. Das "Set Default Transponder" nicht.
D.h. wenn du einmal mit "Set Default Transponder" deinen Transpondertyp konfiguriert hast, müsste diese Einstellung erhalten bleiben.
War denn jetzt auf A2 ein richtiger 10 byte Code? Oder nur Datenmüll?
Auf dem Anhänger steht der Code 010BC61A84 drauf
Die Zahlen kommen drin vor aber der gelesene Code scheint immer etwas verschoben zu sein.
Ich werde morgen weiter machen wenn ich die Augen auf bekommen (leider ne Bindehautentzündung), aber vieeeeelen Dank schonmal für deine Hilfe. Hoffe wir lesen und Morgen.
Gerade mal eine kleine Visuseite erstellt zur besseren Übersicht. Hatte gestern etwas an den Einstellungen vom NPort verstellt, deshalb verschob sich immer der Code um 1. Stelle. Jetzt mit der richtigen Einstellung funktioniert es mit dem RFID Anhänger perfekt.
Mal schauen wie es mit dem implantierten Chips klappt, die haben ja 15 Bytes und ich muß den Leser auf FDX-B umstellen.
Habe mir aber mal über Ebay Chips zum probieren bestellt. Muß ich ja eh haben zwecks Einbau der ganzen Geschichte in die Katzenklappe.
Wie muß ich überhaupt den Code Time verstehen bzw. umrechnen?
Ist es nur möglich über 3 Chips (Master, Add und Delete) die Codes in den LBS zu bekommen?
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar