背景:
我将在10月份举办一场大型活动,并计划使用一个读取我所在机构每个人都有的麦克风卡的系统来监控谁参加以及大楼里的人在哪里,以确保安全。为了做到这一点,我找到了一个便宜的mifare阅读器,它读取卡的特定扇区,并以十六进制形式返回数据,我可以将其转换为字符串,然后发送到服务器进行处理和记录。到目前为止,一切都很好。然而,有近2万人参加了这次活动,这意味着要进行大量的扫描,因此需要大量的mifare阅读器,所有这些阅读器都需要连接到计算机上才能读取数据并发送。理想情况下,我想将大约3到4个阅读器连接到一台机器上,并在活动的每个入口/出口上安装大约3到四个阅读器。
我需要帮助做什么:
我的读卡器在Windows和Android上充当通用键盘(我假设是Linux,但我要检查一下),计算机本质上就像有多个键盘一样,所有键盘都可以同时输入数据,但只能输入一个程序(即屏幕上只有一个插入符号)。如果同时扫描两张卡,并且每张卡的按键"混合",这可能会导致处理问题。
我想做的是将一个linux盒子设置为具有多个插入符号,这样我就可以说有四个命令行同时从一个读卡器中获取数据。
例如:如果John和Saira同时扫描,那么此时产生的输入可能是:
jsoahinr a
而我希望它是:
CLI 1:
约翰·
CLI2:
赛拉
等等。CLI3、CLI4 等
我知道这一定是可能的,我曾考虑过可能建立一个多座位的linux发行版,但我觉得这将是用大锤来解决问题,并产生了一个新的问题,因为它引入了对监视器、鼠标等的需求。
理想情况下,我希望整个系统尽可能精简,要么在笔记本电脑上运行,要么只在linux盒子上运行,我可以插入、启动并让它自动运行(不需要显示器、鼠标或其他笨重的部件!)。
有人对此有任何经验或建议吗?任何帮助都将不胜感激!
谢谢,
Dom
Dom再次出现在此处。我现在已经使用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()