Network configuration tool for HW-VX6330K / HW-VX6346KL serial-to-Ethernet modules
Project description
hw-vx-config
Network configuration tool for HW-VX6330K / HW-VX6346KL serial-to-Ethernet modules on Linux. Sends UDP packets directly to the device — no DLLs, no runtime dependencies, pure stdlib.
Accepts a device IP or discovers via broadcast; reads and writes all network, serial, and advanced settings over the HW-VX UDP protocol (port 65535).
Note: This tool has only been tested on Linux. While it may work on other platforms, no guarantees are made for macOS or Windows.
Table of Contents
- Requirements
- Quick Start
- CLI Reference
- Interactive Menu
- Examples
- Troubleshooting
- Development
- Protocol
- Documentation
- Uninstall
- License
Requirements
- Python 3.10 or later
- Linux (uses
SO_BROADCAST; port 65535 requires no root) - Device reachable on the local network (same subnet or routed UDP)
Quick Start
pip install hw-vx-config
# Discover all readers on the network
hw-vx-config search
Or install with pipx for isolated CLI usage:
pipx install hw-vx-config
CLI Reference
All operations take the current device IP as the first positional argument.
# Discover all readers via broadcast
hw-vx-config search
# Print full configuration for a device
hw-vx-config config <ip>
# Change static IP and reboot
hw-vx-config set-ip <current-ip> <new-ip>
# Enable or disable DHCP and reboot
hw-vx-config dhcp <ip> on|off
# Send reboot command
hw-vx-config reboot <ip>
# Launch interactive menu
hw-vx-config interactive
hw-vx-config # same — interactive is the default
RFID Reader Commands
These commands use the UHF RFID binary protocol (UHFReader18) over TCP.
The <port> is the device's configured TCP port (from network settings).
# Get reader information (address, firmware, power, etc.)
hw-vx-config reader-info <ip> <port>
# Set reader address from 0 to 1
hw-vx-config set-reader-addr <ip> <port> 1
# Set reader address when current address is not 0
hw-vx-config set-reader-addr <ip> <port> 5 --adr 1
Interactive Menu
The interactive menu (hw-vx-config with no arguments) provides a numbered prompt:
╔══════════════════════════════════════════════════════╗
║ HW-VX6330K / HW-VX6346KL Network Config Tool ║
║ Linux Edition — ported from C# Demo v2.11 ║
╚══════════════════════════════════════════════════════╝
╔══════════════════════════════════════════════════════╗
║ 1. Search for readers ║ ← broadcast discovery, select from results
║ 2. Connect to specific IP ║ ← skip discovery, target a known address
╠══════════════════════════════════════════════════════╣
║ 3. Show current configuration ║
║ 4. Change IP address ║
║ 5. Enable/Disable DHCP ║
║ 6. Change remote server ║ ← Remote IP, Remote Port, Work Mode
╠══════════════════════════════════════════════════════╣
║ 7. Edit & save full configuration ║ ← field-by-field editor, confirm before write
║ 8. Reboot reader ║
╠══════════════════════════════════════════════════════╣
║ 9. RFID reader info ║ ← address, firmware, power (TCP binary)
║ 10. Set RFID reader address ║ ← change reader Adr (0–254)
╠══════════════════════════════════════════════════════╣
║ q. Quit l. List menu ║
╚══════════════════════════════════════════════════════╝
Option 2 is useful when the device is on a different subnet and broadcast cannot reach it.
Examples
The examples/ directory contains companion scripts.
| File | Description |
|---|---|
server_uhf.py |
TCP server that receives RFID tag data from the reader on port 2077. Run this alongside the reader when Work Mode is set to Client and Remote Port is 2077. |
library_usage.py |
Shows how to use HwVxDevice and HwVxNetworking directly in Python code — discover, read config, change settings, and quick operations. |
rfid_usage.py |
Shows how to use RfidClient to get reader info and change the reader address via the binary protocol. |
python examples/server_uhf.py
# Listening on 0.0.0.0:2077
Troubleshooting
| Problem | Possible cause | Fix |
|---|---|---|
search returns nothing |
Firewall blocks UDP 65535 | Open UDP 65535 inbound/outbound (sudo ufw allow 65535/udp) |
| Device on a different subnet | Use hw-vx-config interactive → option 2 (connect by IP) |
|
| Broadcast not reaching device | Ensure host and device share the same L2 network / VLAN | |
Timeout on config / set-ip |
Device IP changed or unreachable | Verify with ping <ip>; re-discover with search |
Permission denied on socket |
Rare kernel policy | Run with sudo or check sysctl net.ipv4.ip_unprivileged_port_start |
Development
Install with dev extras, then use the standard toolchain:
pip install -e ".[dev]"
# Lint and format
ruff check --fix src/ tests/
ruff format src/ tests/
# Type check
mypy src/
# Run tests
pytest
# Tests with coverage
pytest --cov=hw_vx_config --cov-report=term-missing
Tests live in tests/ and mock the UDP socket — no device needed to run them.
Protocol
UDP port 65535 (device config) and TCP port 2077 (RFID tag push). Full details → docs/api/protocol.md and docs/DOCUMENTATION.md.
Further Reading
docs/api/— per-module API reference and RFID binary protocoldocs/DOCUMENTATION.md— full UHFReader18 manual (EPC C1G2 / ISO18000-6B command set, status codes, tag memory)
Uninstall
pip uninstall hw-vx-config
# or if installed with pipx:
pipx uninstall hw-vx-config
Tested with
- Hardware: HW-VX6330K, HW-VX6346KL
- Protocol: UDP port 65535, ASCII request/reply
- OS: Linux (Ubuntu 22.04+)
License
MIT — see PyPI page for the published package.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hw_vx_config-1.0.1.tar.gz.
File metadata
- Download URL: hw_vx_config-1.0.1.tar.gz
- Upload date:
- Size: 32.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
43e8d149c980ae1dc9b1ceade300acade3d89b2c47fda5b6e97940117d14ad75
|
|
| MD5 |
80002e5a935b18b58d2faee3c950f340
|
|
| BLAKE2b-256 |
8f9b1add4487600103ec9eb3a4bd8dbb45d9ce07524d7b2918919262de3a3a2e
|
Provenance
The following attestation bundles were made for hw_vx_config-1.0.1.tar.gz:
Publisher:
publish.yml on xynogen/hw-vx-config
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hw_vx_config-1.0.1.tar.gz -
Subject digest:
43e8d149c980ae1dc9b1ceade300acade3d89b2c47fda5b6e97940117d14ad75 - Sigstore transparency entry: 2123561595
- Sigstore integration time:
-
Permalink:
xynogen/hw-vx-config@b3a6d7eed4053100ed23de02547c4134fc2d68a3 -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/xynogen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b3a6d7eed4053100ed23de02547c4134fc2d68a3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file hw_vx_config-1.0.1-py3-none-any.whl.
File metadata
- Download URL: hw_vx_config-1.0.1-py3-none-any.whl
- Upload date:
- Size: 23.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7c87c693b5d2032f1c7b30476a22571d142d64f6552070e474c7b190fd2131f9
|
|
| MD5 |
c6904edb593ebc7891814d28b1b17608
|
|
| BLAKE2b-256 |
d81643bea3f6e5d9e77fd02685fd5d950526a1306a939384fff191d86e54c6b1
|
Provenance
The following attestation bundles were made for hw_vx_config-1.0.1-py3-none-any.whl:
Publisher:
publish.yml on xynogen/hw-vx-config
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hw_vx_config-1.0.1-py3-none-any.whl -
Subject digest:
7c87c693b5d2032f1c7b30476a22571d142d64f6552070e474c7b190fd2131f9 - Sigstore transparency entry: 2123561637
- Sigstore integration time:
-
Permalink:
xynogen/hw-vx-config@b3a6d7eed4053100ed23de02547c4134fc2d68a3 -
Branch / Tag:
refs/tags/v1.0.1 - Owner: https://github.com/xynogen
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b3a6d7eed4053100ed23de02547c4134fc2d68a3 -
Trigger Event:
push
-
Statement type: