一个简单的守护进程,用于在网络上公开USB条形码扫描仪数据。

barcode-server的Python项目详细描述


条形码服务器

一个从USB条形码扫描仪读取条形码的简单守护程序 并使用websocket API将它们公开给其他服务。在

asciicast

特点

如何使用

设备访问权限

请确保运行此应用程序的用户在正确的组中进行访问 输入设备(通常是input),如下所示:

sudo usermod -a -G input myusername

本地

^{pr2}$

码头工人

启动docker容器时,请确保通过输入设备:

docker run \
  --name barcode \
  --device=/dev/input \
  markusressel/barcode-server

注意:尽管条形码服务器将不断尝试检测新设备, 即使经过上面所示的/dev/input,也无法检测到新设备 因为docker的工作方式。如果需要实时检测设备,则必须使用 本土方法。在

您可以使用PUIDPGID环境变量指定用户id和组id。在

网络服务器

默认情况下,Web服务器将在端口9654上侦听127.0.0.1。在

授权

当在配置中指定时,需要一个API令牌来授权客户端,这必须 连接时使用X-Auth-Token头传递。因为条形码扫描仪不依赖于 持久性,则令牌在配置文件中指定,并且不能在运行时更改。在

Rest API

barcode server提供了一个简单的restapi来获取一些基本信息。 此API可以not用于检索条形码事件。要做到这一点,你必须使用 下面介绍的方法。在

EndpointDescription
^{}A list of all currently detected devices.

Websocket API

除了restapibarcode server还公开了/处的websocket,可以使用它 获取实时条码扫描事件。在

在此websocket上接收的消息是JSON格式的字符串,格式如下:

{"device":{"name":"BARCODE SCANNER BARCODE SCANNER","path":"/dev/input/event3","vendorId":"ffff","productId":"0035",},"barcode":"4250168519463"}

要测试连接,可以使用f.ex.websocat

> websocat ws://127.0.0.1:9654 --header "X-Auth-Token:EmUSqjXGfnQwn5wn6CpzJRZgoazMTRbMNgH7CXwkQG7Ph7stex"
{"device":{"name":"BARCODE SCANNER BARCODE SCANNER","path":"/dev/input/event3","vendorId":65535,"productId":53},"barcode":"D-t38409355843o52230Lm54784"}
{"device":{"name":"BARCODE SCANNER BARCODE SCANNER","path":"/dev/input/event3","vendorId":65535,"productId":53},"barcode":"4250168519463"}

HTTP请求

配置后,您可以让barcode scanner在 条形码被扫描,这提供了将条形码事件推送到不知道的服务器的能力 任何客户。请求的主体将包含与websocketapi示例中相同的JSON。在

为此,只需将以下部分添加到配置中:

barcode_server:[...]http:url:"https://my.domain.com/barcode"

查看example config以获得更多选项。在

MQTT发布

配置后,您可以让barcode scanner将条形码事件发布到MQTT代理。 消息的有效负载将包含与websocketapi示例中相同的JSON。在

为此,只需将以下部分添加到配置中:

barcode_server:[...]mqtt:host:"my.mqtt.broker"

查看example config以获得更多选项。在

统计学

barcode server公开一个prometheus导出器(默认为端口8000),以提供一些统计信息。在

常见问题解答

我可以将条形码扫描仪锁定到这个应用程序吗?在

是的。大多数条形码阅读器通常像键盘一样工作,结果是它们的输入由 系统,它可能会扰乱你的TTY或其他打开的程序。 barcode server将尝试grab输入设备,使其成为所有设备的唯一接收者 从这些设备传入的输入事件,这应该可以防止设备混乱 你的TTY。在

如果出于某种原因,这对您无效,请尝试以下方法:

创建文件/etc/udev/rules.d/10-barcode.rules

SUBSYSTEM=="input", ACTION=="add", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy", RUN+="/bin/sh -c 'echo remove > /sys$env{DEVPATH}/uevent'"
SUBSYSTEM=="input", ACTION=="add", ATTRS{idVendor}=="xxxx", ATTRS{idProduct}=="yyyy", DEVPATH=="*:1.0/*", KERNEL=="event*", RUN+="/bin/sh -c 'ln -sf /dev/input/$kernel /dev/input/barcode_scanner'"

idVendoridProduct值替换为条形码读取器的值(前导zer的4位十六进制值操作系统)。 您可以在barcode reader的日志输出中找到它们或使用连接到计算机的无线接收器的lsusb。在

使用以下方法重新加载udev规则:

udevadm control --reload

然后卸下并重新插入无线接收器。 您现在应该在/dev/input/barcode_scanner中有一个符号链接:

ls -lha /dev/input/barcode_scanner

可以在barcode server配置的device_paths部分中使用。在

来源:ThisThat

贡献

GitHub是用于社会化编码的:如果你想写代码,我鼓励贡献 通过来自这个存储库的forks的pull请求。为创建GitHub票证 bug和新功能,并对您感兴趣的功能进行评论。在

许可证

barcode-server is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何在java中使用REST/SOAP获取联邦快递的跟踪细节?   安卓将项目同步到github不会同步java源文件   JavaImpala通过jdbc使元数据无效   java如何在安卓中使用Chaquopy显示加载动画   java我应该使用void函数,但我不知道如何使用   java合并两个排序的ArrayList   通过点击ImageView在Android上生成java随机图像   java深度优先搜索错误   java在子类中初始化时设置泛型参数   java安卓:NFC意图在主项目所依赖的库中   java SSL错误证书错误   访问RadioButton数组时出现java Android NullPointerException   无法加载JNI共享库“C:\Program Files\Java\jdk1.7.0\U 40\bin\..\jre\bin\server\jvm.dll”   java如何检查jstl中是否存在hashmap值