Skip to main content

# sllurp

Project description

[![Build Status](https://travis-ci.org/ransford/sllurp.svg?branch=master)](https://travis-ci.org/ransford/sllurp)

**IMPORTANT:** This is beta-quality software that changes frequently. Use at
your own risk.

This repository began in August 2013 as a snapshot of the dormant [LLRPyC
project][]'s [code][] on SourceForge. It has been updated to work with Impinj
Speedway readers (and probably still other readers), and to provide a simple
callback-based API to clients.

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)

File an issue on this GitHub project 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.

[LLRPyC project]: http://wiki.enneenne.com/index.php/LLRPyC
[code]: http://sourceforge.net/projects/llrpyc/

## Quick Start

$ virtualenv .venv
$ source .venv/bin/activate
$ pip install .
$ sllurp inventory ip.add.re.ss

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

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 relies on Twisted for network interaction with the reader. To make a
connection, create an `LLRPClientFactory` and hand it to Twisted:

```python
# Minimal example; see inventory.py for more.
from sllurp import llrp
from twisted.internet import reactor
import logging
logging.getLogger().setLevel(logging.INFO)

def cb (tagReport):
tags = tagReport.msgdict['RO_ACCESS_REPORT']['TagReportData']
print 'tags:', tags

factory = llrp.LLRPClientFactory()
factory.addTagReportCallback(cb)
reactor.connectTCP('myreader', llrp.LLRP_PORT, factory)
reactor.run()
```

[Twisted]: http://twistedmatrix.com/

## Getting More Information From Tag Reports

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

```python
llrp.LLRPClientFactory(tag_content_selector={
'EnableROSpecID': False,
'EnableSpecIndex': False,
'EnableInventoryParameterSpecID': False,
'EnableAntennaID': True,
'EnableChannelIndex': False,
'EnablePeakRRSI': 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...

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

You can dump the reader's entire configuration, including the current ROSpec,
to a set of files by running `bin/get_reader_config`.

The "nuclear option" for resetting a reader is:

> reboot

## Decoding EPC Data:
```sllurp.epc``` contains EPC decoding tools. [Read here for example usage](sllurp/epc/README.md).

## If You Find a Bug

Start an issue on this GitHub project!

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 if you're using the `inventory` or `reset` scripts. You
can log to a logfile with the `-l [filename]` option. Or simply put this at
the beginning of your own code:

import logger
sllurp_logger = logging.getLogger('sllurp')
sllurp_logger.setLevel(logging.DEBUG)

## Contributing

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

* Reduce redundancy in the `encode_*` and `decode_*` functions in
`llrp_proto.py`.
* Support the AccessSpec primitive (basis for tag read and write).
* Write tests for common encoding and decoding tasks.
* Make `get_reader_config` use the `fabric` library to connect to readers via
SSH.
* Generalize LLRP support beyond Impinj readers. Remove Impinj-specific
assumptions.

Home-page: https://github.com/ransford/sllurp
Author: Ben Ransford
Author-email: ben@ransford.org
License: GPLv3
Description: UNKNOWN
Keywords: llrp rfid reader
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sllurp-0.2.0.tar.gz (38.4 kB view details)

Uploaded Source

Built Distribution

sllurp-0.2.0-py2.py3-none-any.whl (46.9 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file sllurp-0.2.0.tar.gz.

File metadata

  • Download URL: sllurp-0.2.0.tar.gz
  • Upload date:
  • Size: 38.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for sllurp-0.2.0.tar.gz
Algorithm Hash digest
SHA256 65197dffb00ee72916cbc05025a4698fc46eaeb2b769b52d740e0c804d14e179
MD5 7c3127a11380669cc1b9c5149bc1e0aa
BLAKE2b-256 eba248573c0b5b82afb465993a735910a506a0c6c10163ea34ec92576923ccb7

See more details on using hashes here.

File details

Details for the file sllurp-0.2.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for sllurp-0.2.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 c0ef6fe59cb97f3bf88e8f59ed1e9eda3414afe8c5d00dca5d2e76351f4f4a50
MD5 9c47522eedcce23b42e70c8830e1fd21
BLAKE2b-256 607d5c78f61dadd4ec0831d54af02c5bd784e70bfc0ed099c7f595e5188c6476

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page