{"id":22931176,"url":"https://github.com/ajxv/rrhfoem04-lib","last_synced_at":"2026-03-11T15:02:45.518Z","repository":{"id":266066928,"uuid":"896028486","full_name":"ajxv/rrhfoem04-lib","owner":"ajxv","description":"Python Library for interfacing with the RRHFOEM04 RFID Reader","archived":false,"fork":false,"pushed_at":"2025-03-17T08:37:55.000Z","size":99,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-17T09:37:17.134Z","etag":null,"topics":["hid","iso14443a","iso15693","mifare-classic","mifare1k","nfc-card-reader","nfc-reader","python-nfc","python-rfid","python3","rapidradio","rfid","rfid-reader","rfid-tags","rrhfoem04","rrhfoem04-api","rrhfoem04-lib"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ajxv.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-29T11:59:24.000Z","updated_at":"2025-01-26T17:17:19.000Z","dependencies_parsed_at":"2024-12-30T05:17:35.340Z","dependency_job_id":"9c42c258-1f3d-4092-9a39-08f7888ddf48","html_url":"https://github.com/ajxv/rrhfoem04-lib","commit_stats":null,"previous_names":["ajxv/rrhfoem04-lib"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ajxv%2Frrhfoem04-lib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ajxv%2Frrhfoem04-lib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ajxv%2Frrhfoem04-lib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ajxv%2Frrhfoem04-lib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ajxv","download_url":"https://codeload.github.com/ajxv/rrhfoem04-lib/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246679068,"owners_count":20816402,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hid","iso14443a","iso15693","mifare-classic","mifare1k","nfc-card-reader","nfc-reader","python-nfc","python-rfid","python3","rapidradio","rfid","rfid-reader","rfid-tags","rrhfoem04","rrhfoem04-api","rrhfoem04-lib"],"created_at":"2024-12-14T10:35:48.440Z","updated_at":"2026-03-11T15:02:45.512Z","avatar_url":"https://github.com/ajxv.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RRHFOEM04 Python Library\n[![PyPI](https://img.shields.io/pypi/v/rrhfoem04-lib?label=pypi)](https://pypi.org/project/rrhfoem04-lib/)\n[![License](https://img.shields.io/pypi/l/mkdocs-badges)](https://github.com/ajxv/rrhfoem04-lib/blob/main/LICENSE)\n\nThis Python library provides an interface to interact with the RRHFOEM04 RFID/NFC reader. The library supports multiple RFID protocols including ISO15693 and ISO14443A, allowing for various card operations such as inventory scanning, reading, and writing.\n\n## Features\n\n| Capability | Description |\n|------------|-------------|\n| Multi-Protocol | ISO15693, ISO14443A \u0026 Mifare operations |\n| Inventory \u0026 Tag Ops | Single-slot \u0026 16-slot inventory, select, read, write |\n| Robust Timing | Command pacing, retries, non-blocking HID reads |\n| Structured Results | All ops return `RRHFOEM04Result(success, message, data)` |\n| Error Handling | Custom exception hierarchy + logged context |\n| Optional File Logging | `log_to_file=True` adds `rrhfoem04.log` handler |\n\n## Installation\n\n```bash\npip install rrhfoem04-lib\n```\n\nSystem packages (Linux) sometimes required for `hidapi`:\n```bash\nsudo apt-get update \u0026\u0026 sudo apt-get install -y libhidapi-hidraw0 libhidapi-libusb0\n```\n\nUpgrade:\n```bash\npip install -U rrhfoem04-lib\n```\n\n## Requirements\n\n- Python \u003e= 3.12\n- USB access to RRHFOEM04 device\n\n### Device Permissions (Linux)\nInstead of running Python with `sudo`, consider adding a udev rule (example):\n```\nSUBSYSTEM==\"hidraw\", ATTRS{idVendor}==\"vvvv\", ATTRS{idProduct}==\"pppp\", MODE=\"0666\"\n```\nReplace `vvvv`/`pppp` with the reader's vendor/product IDs, reload with `udevadm control --reload \u0026\u0026 udevadm trigger`.\n\n## Usage\n\nHere's a simple example to get started with the RRHFOEM04 reader:\n\n``` python\nfrom rrhfoem04 import RRHFOEM04\n\n# Initialize the reader and connect\nreader = RRHFOEM04(auto_connect=True)\n\n# Activate the buzzer\nif reader.buzzer_on().success:\n    print(\"Buzzer activated\")\n\n# Get reader information\nresult = reader.getReaderInfo()\nprint(f\"getReaderInfo result: {result}\")\n\n# Perform an ISO15693 inventory scan\nresult = reader.ISO15693_singleSlotInventory()\nprint(f\"ISO15693_singleSlotInventory result: {result}\")\n\n# Close the reader connection\nreader.close()\n```\n\n\u003e **Note:**\n\u003e\n\u003e The `hidapi` module may require additional system libraries or device permissions. Prefer udev rules over running entire scripts with sudo.\n\n### Context Manager Example\n```python\nfrom rrhfoem04 import RRHFOEM04\n\nwith RRHFOEM04(auto_connect=True) as reader:\n    inv = reader.ISO15693_singleSlotInventory()\n    if inv.success:\n        print(\"Tags:\", inv.data)\n```\n\n### Result Object\nEvery high-level call returns `RRHFOEM04Result`:\n```python\nres = reader.getReaderInfo()\nif res.success:\n    print(res.data)\nelse:\n    print(res.message)\n```\n\n\n## Contributing\n\nContributions are welcome! See the [Contributing Guide](docs/CONTRIBUTING.md). For deeper internals and extension guidelines consult the [Maintainers Guide](docs/MaintainersGuide.md).\n\n## Documentation\n\n- [Maintainers Guide](docs/MaintainersGuide.md) – architecture, extension, release \u0026 support practices.\n- [Protocol Reference](docs/RRHFOEM04_ProtocolReference.md) – frame formats, flags, command tables.\n- [Publishing to PyPI](docs/PublishingToPyPI.md) – step-by-step release instructions.\n\n## License\n\nThis project is licensed under the MIT License.\n\n## Contact\n\nFor any inquiries or support, please open an issue on the [GitHub repository](https://github.com/ajxv/rrhfoem04-lib).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fajxv%2Frrhfoem04-lib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fajxv%2Frrhfoem04-lib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fajxv%2Frrhfoem04-lib/lists"}