一个简单的守护进程,用于在网络上公开USB条形码扫描仪数据。
barcode-server的Python项目详细描述
条形码服务器
一个从USB条形码扫描仪读取条形码的简单守护程序 并使用websocket API将它们公开给其他服务。在
特点
- [x] 动态自动检测条形码扫描仪设备
- [x] 通过REST API请求服务器信息
- [x] 使用订阅条形码事件
- [x] Websocket API
- [x] 使用推送条形码事件
- [x] HTTP requests
- [x] MQTT messages
- [x] 通过普罗米修斯导出器获取statistics
如何使用
设备访问权限
请确保运行此应用程序的用户在正确的组中进行访问
输入设备(通常是input
),如下所示:
sudo usermod -a -G input myusername
本地
^{pr2}$码头工人
启动docker容器时,请确保通过输入设备:
docker run \
--name barcode \
--device=/dev/input \
markusressel/barcode-server
注意:尽管条形码服务器将不断尝试检测新设备,
即使经过上面所示的/dev/input
,也无法检测到新设备
因为docker的工作方式。如果需要实时检测设备,则必须使用
本土方法。在
您可以使用PUID
和PGID
环境变量指定用户id和组id。在
网络服务器
默认情况下,Web服务器将在端口9654
上侦听127.0.0.1
。在
授权
当在配置中指定时,需要一个API令牌来授权客户端,这必须
连接时使用X-Auth-Token
头传递。因为条形码扫描仪不依赖于
持久性,则令牌在配置文件中指定,并且不能在运行时更改。在
Rest API
barcode server提供了一个简单的restapi来获取一些基本信息。 此API可以not用于检索条形码事件。要做到这一点,你必须使用 下面介绍的方法。在
Endpoint | Description |
---|---|
^{ | 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'"
将idVendor
和idProduct
值替换为条形码读取器的值(前导zer的4位十六进制值操作系统)。
您可以在barcode reader的日志输出中找到它们或使用连接到计算机的无线接收器的lsusb
。在
使用以下方法重新加载udev规则:
udevadm control --reload
然后卸下并重新插入无线接收器。
您现在应该在/dev/input/barcode_scanner
中有一个符号链接:
ls -lha /dev/input/barcode_scanner
可以在barcode server配置的device_paths
部分中使用。在
贡献
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/>.
- 项目
标签: