0

背景

我在 10 月份举办了一个大型活动,并计划使用一个读取我组织中每个人都拥有的 mifare 卡的系统来监控谁参加以及人们在大楼中的位置以确保安全。为此,我找到了一个廉价的 mifare 阅读器,它可以读取卡的特定扇区并将数据以十六进制形式返回,我可以将其转换为字符串,然后发送到服务器进行处理和记录。到目前为止,一切都很好。然而,将近 20,000 人参加了这个活动,这意味着需要大量的扫描和大量的 mifare 阅读器,所有这些都需要连接到计算机才能读取数据并将其发送出去。理想情况下,我想将大约 3 或 4 个读卡器连接到一台机器上,其中大约有 3 或 4 个,在活动的每个入口/出口上都有一个。

我需要帮助做什么:

我的读卡器在 Windows 和 Android 上充当通用键盘(我假设是 Linux,但我要检查一下),计算机本质上就像它有多个键盘一样,所有键盘都可以同时输入数据,但只有到一个程序(即,屏幕上永远只有一个插入符号)。如果同时扫描两张卡并且来自每张卡的击键“混合”并因此导致处理问题,这可能会导致问题。

我想要做的是设置一个 linux 机器有多个插入符号,这样我就可以说四个命令行都同时从一个读卡器获取数据。

例如:如果 John 和 Saira 同时扫描,此时结果输入可能是:

j s o a h i n

而我希望它是:

命令行 1:

约翰

CLI2:

赛拉

CLI3、CLI4 等

我知道这一定是可能的,我考虑过潜在地设置一个多席位 Linux 发行版,但我觉得这将使用大锤来解决问题,并产生一个新问题,因为它引入了对监视器、鼠标的需求, ETC。

理想情况下,我希望整个系统尽可能精简,可以在笔记本电脑上运行,也可以只是一个我可以插入、启动并自动运行的 linux 盒子(不需要显示器、鼠标或其他笨重的部件和件!)。

有没有人有这方面的经验或可以提供的建议?任何帮助将非常感激!

谢谢,

多姆

4

1 回答 1

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()
于 2013-08-25T21:25:00.123 回答