Yet Another ROC. Radio Online Control for orienteering and other sports that use SportIdent timing (trail running, MTB enduro).
It's as if ROC and jSh.radio had a baby.
- Very low latency, very low bandwith. Using a fast medium such as Wi-Fi or LTE allows for latencies around 100 to 200 milliseconds. Bandwidth used during one competition is well bellow 1 MB for each YAROC forest unit. This allows you to use cheap IoT SIM cards.
- Supports multiple physical layers: radio (LoRa), NB-IoT, LTE, Wi-Fi, LAN. Low power technologies such as NB-IoT and LoRa are the best solution for remote sport events. The other 3 (LTE, Wi-Fi and LAN) offer minimum latency.
- Simple integration via USB recognizable by most orienteering softwares. Just plug in a Raspberry Pi in the finish area, connect it to internet and you are done!
- ROC-compatible mode. If you own a ROC device, you can use YAROC instead and it will work almost the same (some features missing).
- Generator of fake SportIdent punches: very useful for load testing of the system, for example to determine the right LoRa settings respecing duty cycle limits.
- Radio mesh. When using LoRa, the LoRa devices create a mesh network and transmit punches using other LoRa nodes to the finish area. The mesh can connect to the internet via LTE, so placing one node on a hill makes the whole mesh online.
- Run everywhere: Linux, Windows, Raspberry Pi, microcontrollers. We're searching for the right hardware for NB-IoT but in principle this is just a matter of time when it happens.
- Open-source
YAROC is pronounced phonetically as "jarok", which is Slovak for a small ditch. Thus the ISOM map symbol of YAROC is 108 Small erosion gully. Symbol 108 will be the logo of the project once I have some time to create one.
Install from TestPyPi. The package will be published to the main PyPi in winter/spring of 2025.
python -m venv .venv
source .venv/bin/activate
pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple yaroc
First, create a send-punch.toml
file where you configure punch sources and clients for sending the punches.
log_level = "info"
[punch_source.usb]
enable = true
[punch_source.fake]
enable = true
interval = 8
[client.mqtt]
enable = true
With a config file present, we are able to run send-punch
:
source .venv/bin/activate
send-punch
TODO: add meshtastic info
First, create a mqtt-forwarder.toml
file where you configure the MAC addresses to receive the punches from as well as all the clients that should receive the punches: ROC, SIRAP, serial, etc.
TODO: full list of clients
log_level = "info"
[mac-addresses]
spe01 = "b827eb78912f"
[client.sirap]
enable = true
ip = "192.168.1.10"
port = 10000
[client.roc]
enable = true
With a config file present, we are able to run mqtt-forwarder
:
source .venv/bin/activate
mqtt-forwarder
In order to start developing, install also the dev
dependencies:
source .venv/bin/activate
pip install ".[dev]"
pip install -e .
The last line installs the package in edit mode, so you can test each file modification immediately.
To use LSPs, also run the following:
pip install ".[lsp]"