CATS Radio Node
This project contains a web user interface for controlling a CATS Radio device, consisting of a Raspberry Pi with a RF4463 hat.
Goals
- Show incoming packets, and store them in the sqlite database
cats-radio-node.db
- Allow the user to send custom packets
- Configure igate and other settings, stored in
node-config.toml
Installation
To get cats-radio-node running on your raspberry pi
- Prepare an SD card with latest Raspberry Pi OS, and boot your pi with it
- using
raspi-config
, enable the SPI Interface mkdir cats-radio-node
andcd cats-radio-node
wget https://mpb.li/pv/cats-radio-node-20240128.tar.gz
tar -xf cats-radio-node-20240128.tar.gz
sudo ./cats-radio-node
- And connect to it through HTTP on port 3000
If you want to compile it yourself:
- Do
sudo apt update
, installgit
-
Install most recent rust compiler with rustup:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
* Careful when installing Rust on a Raspberry Pi with a 64-bit kernel running a 32-bit userland:rustup
will want to install the aarch64 toolchain, but that one doesn't work! * If that happens, be sure to install thestable-arm-unknown-linux-gnueabihf
toolchain. * You either have to log out and log in again or source the env as instructed byrustup
to have the Rust compiler in your $PATH -
git clone https://mpb.li/git/cats-radio-node/
cd cats-radio-node
cargo build --bin cats-radio-node
sudo target/debug/cats-radio-node
Current state of the project
Configuration read/write through UI is done.
RF4463 integration, message decoding and presentation, UI to send messages.
Tunnel IP packets through Arbitrary whiskers, using TUN.
Live update of incoming packets using WebSocket, in the 'Chat' window.
TODO:
- Nicer UI for presenting incoming packets. For now it just shows the Comment whisker.
- igate integration
- Regular beacon transmission
Additional tools
fake-radio
If no radio is available, frames can be sent and received over UDP for debugging. cats-radio-node receives on 127.0.0.1:9073, and transmits to 127.0.0.1:9074.
The fake-radio
binary can be used to inject frames for that, and decodes those sent by cats-radio-node.
Build with cargo build --bin fake-radio