Skip to main content
http://img.shields.io/pypi/v/sllurp.svg https://img.shields.io/pypi/pyversions/sllurp.svg https://github.com/sllurp/sllurp/actions/workflows/test.yml/badge.svg

sllurp is a Python library to interface with RFID readers. It is a pure-Python implementation of the Low Level Reader Protocol (LLRP).

These readers are known to work well with sllurp, but it should be adaptable with not much effort to other LLRP-compatible readers:

  • Impinj Speedway (R1000)

  • Impinj Speedway Revolution (R220, R420)

  • Impinj Speedway xPortal

  • Motorola MC9190-Z (handheld)

  • Zebra Fixed RFID Reader (FX7500, FX9600)

File an issue on GitHub if you would like help getting another kind of reader to work.

sllurp is distributed under version 3 of the GNU General Public License. See LICENSE.txt for details.

Quick Start

Install from PyPI:

$ python3 -m venv .venv
$ source .venv/bin/activate
$ pip install sllurp
$ sllurp inventory ip.add.re.ss

Run sllurp --help and sllurp inventory --help to see options.

Or install from GitHub:

$ git clone https://github.com/sllurp/sllurp.git
$ cd sllurp
$ python3 -m venv .venv
$ source .venv/bin/activate
$ pip install .
$ sllurp inventory ip.add.re.ss

If the reader gets into a funny state because you’re debugging against it (e.g., if your program or sllurp has crashed), you can set it back to an idle state by running sllurp reset ip.add.re.ss.

Reader API

sllurp spawn his own “thread” to manage network interaction with the reader. To make a connection, create a LLRPReaderClient and connect() it:

# 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()

Getting More Information From Tag Reports

When initializing LLRPReaderConfig, set flags in the tag_content_selector dictionary argument:

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,
    }
})

Logging

sllurp logs under the name sllurp, so if you wish to log its output, you can do this the application that imports sllurp:

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...

Vendor Extensions

sllurp has limited support for vendor extensions through LLRP’s custom message facilities. For example, sllurp inventory –impinj-search-mode N allows you to set the Impinj search mode to single target (1) or dual target (2).

Handy Reader Commands

To see what inventory settings an Impinj reader is currently using (i.e., to fetch the current ROSpec), ssh to the reader and

> show rfid llrp rospec 0

The “nuclear option” for resetting a reader is:

> reboot

If You Find a Bug

Start an issue on GitHub! Please follow Simon Tatham’s guide on writing good bug reports.

Bug reports are most useful when they’re accompanied by verbose error messages. Turn sllurp’s log level up to DEBUG, which you can do by specifying the -d command-line option to sllurp. You can log to a logfile with the -l [filename] option. Or simply put this at the beginning of your own code:

import logging
logging.getLogger('sllurp').setLevel(logging.DEBUG)

Known Issues

Reader mode selection is confusing, not least because most readers seem to conflate ModeIndex and ModeIdentifier. If you’re using sllurp inventory, use --mode-identifier N. Check your reader’s manual to see what mode identifiers it supports via the C1G2RFControl parameter, or run sllurp --debug inventory against a reader to see a dump of the supported modes in the capabilities description.

Contributing

Want to contribute? Here are some areas that need improvement:

  • Encode more protocol messages in the construct branch.

  • Write tests for common encoding and decoding tasks.

Authors

Much of the code in sllurp is by Ben Ransford, although it began its life in August 2013 as a fork of LLRPyC. Many fine citizens of GitHub have contributed code to sllurp since the fork, including Florent Viard, Bogdan-Marius Pradatu, Jonas Gröger, and Qifan Lu.

Release files for sllurp 3.0.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sllurp 3.0.5
File Size Uploaded
sllurp-3.0.5.tar.gz 71.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sllurp 3.0.5
File Interpreter ABI Platform
sllurp-3.0.5-py3-none-any.whl Python 3 none any Details

Total release size: 138.2 kB

Release files / sllurp-3.0.5.tar.gz

Download URL sllurp-3.0.5.tar.gz
Size 71.2 kB
Tags Source
SHA-256 checksum
How to use checksums
3360079a0804989e249f039fddb9ee9f9a32dec0bd77d48ca50a02382605d367
BLAKE2b-256 checksum
How to use checksums
60fc8bff260973854af03bc5e79afeb1e60c4b3def93b74b106c45ea76f13a63
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 20, 2026.

Transparency log

Release files / sllurp-3.0.5-py3-none-any.whl

Download URL sllurp-3.0.5-py3-none-any.whl
Size 67.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0c013b530e9759d9cc64f917b07ab72faf4c0e6eb1aa34ab77407ed8f00b7a08
BLAKE2b-256 checksum
How to use checksums
3a7767621db07a7793d82c43c5b8e6f9082edd0db70a45424e1e653d4bbd8571
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 20, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

3.0.5 This release

2 release files

3.0.2

2 release files

2.0.1

2 release files

0.6.0

2 release files

0.5.1

1 release file

0.5.0

1 release file

0.4.3

1 release file

0.4.2

1 release file

0.4.1

1 release file

0.4.0

1 release file

0.3.9

2 release files

0.3.8

2 release files

0.3.7

1 release file

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.9

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page