RFID读卡器控制库
项目描述
sllurp是一个用于与RFID读卡器交互的Python库。它是低级读卡协议(LLRP)的纯Python实现。
这些读卡器已知与sllurp配合良好,但应该可以不费太多力气适应其他LLRP兼容的读卡器
Impinj Speedway (R1000)
Impinj Speedway Revolution (R220, R420)
Impinj Speedway xPortal
Motorola MC9190-Z (手持式)
如果您想帮助另一种类型的读卡器工作,请在本项目 GitHub 上提交问题。
slurp 采用 GNU 通用公共许可证的第 3 版进行分发。有关详细信息,请参阅 LICENSE.txt。
快速开始
从 PyPI 安装
$ virtualenv .venv $ source .venv/bin/activate $ pip install sllurp $ sllurp inventory ip.add.re.ss
运行 sllurp --help 和 sllurp inventory --help 查看选项。
或者从 GitHub 安装
$ git clone https://github.com/ransford/sllurp.git $ cd sllurp $ virtualenv .venv $ source .venv/bin/activate $ pip install . $ sllurp inventory ip.add.re.ss
如果读者因为您正在对其进行调试而进入一个奇怪的状态(例如,如果您的程序或slurp崩溃),您可以通过运行 sllurp reset ip.add.re.ss 将其恢复到空闲状态。
阅读器 API
slurp 将为其与阅读器的网络交互创建自己的“线程”。要建立连接,创建一个 LLRPReaderClient 并调用其 connect() 方法
# Minimal example; see sllurp/verb/inventory.py for more.
from sllurp import llrp
from sllurp.llrp import LLRPReaderConfig, LLRPReaderClient, LLRP_DEFAULT_PORT
import logging
logging.getLogger().setLevel(logging.INFO)
def tag_report_cb (reader, tag_reports):
for tag in tag_reports:
print('tag: %r' % tag)
config = LLRPReaderConfig()
reader = LLRPReaderClient(host, LLRP_DEFAULT_PORT, config)
reader.add_tag_report_callback(tag_report_cb)
reader.connect()
# We are now connected to the reader and inventory is running.
try:
# Block forever or until a disconnection of the reader
reader.join(None)
except (KeyboardInterrupt, SystemExit):
# catch ctrl-C and stop inventory before disconnecting
reader.disconnect()
从标签报告中获取更多信息
初始化 LLRPReaderConfig 时,在 tag_content_selector 字典参数中设置标志
llrp.LLRPReaderConfig({
'tag_content_selector': {
'EnableROSpecID': False,
'EnableSpecIndex': False,
'EnableInventoryParameterSpecID': False,
'EnableAntennaID': True,
'EnableChannelIndex': False,
'EnablePeakRSSI': True,
'EnableFirstSeenTimestamp': False,
'EnableLastSeenTimestamp': True,
'EnableTagSeenCount': True,
'EnableAccessSpecID': False,
}
})
日志记录
slurp 使用 sllurp 名称进行日志记录,因此如果您希望记录其输出,可以在导入 slurp 的应用程序中这样做
sllurp_logger = logging.getLogger('sllurp')
sllurp_logger.setLevel(logging.DEBUG)
sllurp_logger.setHandler(logging.FileHandler('sllurp.log'))
# or .setHandler(logging.StreamHandler()) to log to stderr...
供应商扩展
slurp 通过 LLRP 的自定义消息功能有限地支持供应商扩展。例如,slurp inventory –impinj-search-mode N 允许您将 Impinj 搜索模式设置为单个目标(1)或双目标(2)。
有用的阅读器命令
要查看 Impinj 阅读器当前正在使用哪些库存设置(即获取当前 ROSpec),通过 ssh 连接到阅读器并
> show rfid llrp rospec 0
重置阅读器的“核选项”是
> reboot
如果您发现了一个错误
在 GitHub 上创建一个问题!请遵循 Simon Tatham 的 指南 编写良好的错误报告。
当错误报告附带详尽的错误消息时最有用。将 slurp 的日志级别提高到 DEBUG,您可以通过指定 sllurp 的 -d 命令行选项来实现。您可以使用 -l [filename] 选项将日志记录到日志文件。或者只需将此放在您自己的代码的开头
import logging
logging.getLogger('sllurp').setLevel(logging.DEBUG)
已知问题
阅读器模式选择是 令人困惑的,尤其是因为大多数阅读器似乎将 ModeIndex 和 ModeIdentifier 混淆。如果您正在使用 sllurp inventory,请使用 --mode-identifier N。检查您的阅读器手册,了解它通过 C1G2RFControl 参数支持哪些模式标识符,或者对阅读器运行 sllurp --debug inventory 以查看在功能描述中的支持模式列表。
贡献
想要贡献?以下是需要改进的一些领域
在 construct 分支中编码更多协议消息。
为常见的编码和解码任务编写测试。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。