背景:
我正在10月举办一场大型活动,并计划通过一个系统来监控参加者以及人们在建筑物内的安全状况,该系统可读取我所在组织中的每个人都有的mifare卡片。为此,我找到了一个廉价的mifare读取器,它读取卡片的特定扇区并以十六进制形式返回数据,我可以将其转换为字符串然后发送到服务器进行处理和记录。到现在为止还挺好。然而,有近2万人参加此次活动,这意味着需要进行大量扫描,因此需要将许多mifare读取器连接到计算机上以读取数据并发送。理想情况下,我想将大约3或4个读者连接到一台机器上,其中大约有三到四个,每个入口/出口都有一个。
我需要帮助做什么:
我的读卡器在Windows和Android上充当通用键盘(我假设Linux,但我要检查一下),计算机本质上就好像它有多个键盘,所有键盘都可以同时输入数据,但只有一个程序(即屏幕上有一个插入符号)。如果同时扫描两张卡并且每张卡的击键“混合”并因此导致处理问题,则可能导致问题。
我想要做的是设置一个有多个插入符号的linux盒子,这样我就可以说四个命令行同时从一个读卡器中获取数据。
例如:如果John和Saira同时扫描,那么结果输入可能是:
j s o a h i n r a
我希望它是:
CLI 1:
约翰
CLI2:
秋刀鱼
等。 CLI3,CLI4
等我知道这一定是可能的,我看看有可能设置一个多席位的Linux发行版,但我觉得这将使用大锤解决问题,并创建一个新问题,因为它引入了需求监视器,鼠标等。
理想情况下,我希望整个系统尽可能简化,无论是运行笔记本电脑还是只需要插入的Linux机箱,启动并自动运行(无需显示器,鼠标或其他笨重的点点滴滴!)。
有没有人有这方面的经验或他们可以提供的建议?任何帮助将不胜感激!
谢谢,
的Dom
答案 0 :(得分:1)
再次来到这里。我现在使用Python很容易解决这个问题。如果您需要更多建议,请联系我,但基本要点是使用Python中的evdev模块直接访问硬件(在这种情况下,我已经设置了一个名为ActiveReader的类来处理每个读者)。然后,使用多处理模块设置不同的进程,分别处理每个读卡器。
处理位的代码如下 - 它是早期的代码,需要一些额外的工作,我在这里故意简短而甜蜜,作为尝试做类似事情的人的参考!
# imports etc
from evdev import InputDevice, categorize, ecodes
from ActiveReader import ActiveReader
from multiprocessing import Process
# for the reader
dev = InputDevice('/dev/input/event4')
def new_device_process(device_name):
print device_name
device = InputDevice (device_name)
print device.name
someDevice = ActiveReader(device)
if __name__ == "__main__":
# put in a process here to work on updating the database
# set this up with Monitoring module to detect when devices are plugged in/unplugged etc.
p1 = Process(target=new_device_process, args=('/dev/input/event4',))
p1.start()
p2 = Process(target=new_device_process, args=('/dev/input/event5',))
p2.start()