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.


  1. Show incoming packets, and store them in the sqlite database cats-radio-node.db
  2. Allow the user to send custom packets
  3. Configure igate and other settings, stored in node-config.toml


To get cats-radio-node running on your raspberry pi

  1. Prepare an SD card with latest Raspberry Pi OS, and boot your pi with it
  2. using raspi-config, enable the SPI Interface
  3. mkdir cats-radio-node and cd cats-radio-node
  4. wget https://mpb.li/pv/cats-radio-node-20240128.tar.gz
  5. tar -xf cats-radio-node-20240128.tar.gz
  6. sudo ./cats-radio-node
  7. And connect to it through HTTP on port 3000

If you want to compile it yourself:

  1. Do sudo apt update, install git
  2. 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 the stable-arm-unknown-linux-gnueabihf toolchain. * You either have to log out and log in again or source the env as instructed by rustup to have the Rust compiler in your $PATH

  3. git clone https://mpb.li/git/cats-radio-node/

  4. cd cats-radio-node
  5. cargo build --bin cats-radio-node
  6. 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.


  • Nicer UI for presenting incoming packets. For now it just shows the Comment whisker.
  • igate integration
  • Regular beacon transmission

Additional tools


If no radio is available, frames can be sent and received over UDP for debugging. cats-radio-node receives on, and transmits to

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