Metadata-Version: 2.4
Name: zebra-llrp
Version: 0.1.0
Summary: Python driver for Zebra FX series RAIN RFID readers via LLRP
Project-URL: Documentation, https://github.com/kliskatek/driver-rain-py-zebra-llrp#readme
Project-URL: Issues, https://github.com/kliskatek/driver-rain-py-zebra-llrp/issues
Project-URL: Source, https://github.com/kliskatek/driver-rain-py-zebra-llrp
Author-email: Ibon Zalbide <ibon.zalbide@kliskatek.com>
License-Expression: MIT
License-File: LICENSE.txt
Keywords: epc,fx9600,llrp,rain,reader,rfid,sllurp,uhf,zebra
Classifier: Development Status :: 4 - Beta
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Requires-Python: >=3.8
Requires-Dist: sllurp
Provides-Extra: dev
Requires-Dist: pytest; extra == 'dev'
Description-Content-Type: text/markdown

# zebra-llrp

[![PyPI - Version](https://img.shields.io/pypi/v/zebra-llrp.svg)](https://pypi.org/project/zebra-llrp)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/zebra-llrp.svg)](https://pypi.org/project/zebra-llrp)

Python driver for Zebra FX series RAIN RFID readers via LLRP protocol (sllurp).

## Features

- Connect to Zebra FX9600 (and compatible) readers via LLRP (TCP 5084)
- Start/stop inventory with configurable antenna ports, TX power, RF mode, and session
- Real-time tag streaming with callback-based notifications
- Query reader capabilities (model, firmware, antenna count, TX power range, RF modes)
- EPC decoding with double-encoding detection (FX9600 quirk)
- TX power control by index or dBm

## Installation

```console
pip install zebra-llrp
```

## Quick Start

```python
from zebra_llrp import ZebraLlrp, ZebraLlrpTagReport

reader = ZebraLlrp()

def on_tag(report: ZebraLlrpTagReport):
    print(f"EPC: {report.epc}  RSSI: {report.peak_rssi_dbm} dBm")

reader.set_notification_callback(on_tag)
reader.connect("192.168.1.100")
reader.set_tx_power_dbm(25.0)
reader.set_rf_mode(1)
reader.start()

# ... tags arrive via callback ...

reader.stop()
reader.disconnect()
```

## API Reference

### `ZebraLlrp`

| Method | Description |
|--------|-------------|
| `connect(ip, port)` | Connect to reader via LLRP |
| `disconnect()` | Stop inventory and disconnect |
| `is_connected()` | Check connection status |
| `set_notification_callback(fn)` | Register tag report callback |
| `get_reader_info()` | Get model, firmware, antenna count, power limits, RF modes |
| `start()` | Start inventory |
| `stop()` | Stop inventory |
| `get_tx_power()` / `set_tx_power(index)` | Get/set TX power by index |
| `get_tx_power_dbm()` / `set_tx_power_dbm(dbm)` | Get/set TX power in dBm |
| `get_antenna_config()` / `set_antenna_config(list)` | Get/set active antenna ports |
| `get_rf_mode()` / `set_rf_mode(mode)` | Get/set LLRP mode identifier |
| `get_session()` / `set_session(n)` | Get/set inventory session (0-3) |

### `ZebraLlrpTagReport`

| Field | Type | Description |
|-------|------|-------------|
| `epc` | `str` | Tag EPC (hex string) |
| `antenna_port` | `int` | Antenna port number |
| `peak_rssi_dbm` | `int` | Peak RSSI in dBm |
| `last_seen_timestamp` | `int` | Last seen timestamp (microseconds UTC) |
| `tag_seen_count` | `int` | Number of times tag was seen |

### `ZebraLlrpReaderInfo`

| Field | Type | Description |
|-------|------|-------------|
| `manufacturer` | `str` | Device manufacturer |
| `model` | `str` | Reader model |
| `firmware_version` | `str` | Firmware version |
| `antenna_count` | `int` | Number of antenna ports |
| `min_tx_power_dbm` | `float` | Minimum TX power |
| `max_tx_power_dbm` | `float` | Maximum TX power |
| `rf_modes` | `list[dict]` | Available RF modes with miller, bdr, tari, pie |

## License

`zebra-llrp` is distributed under the terms of the [MIT](https://spdx.org/licenses/MIT.html) license.
