| LICENSE | ||
| README.md | ||
| README_ENG.txt | ||
| README_ITA.txt | ||
| rns_sig_bot.py | ||
📡 LXMF Signal Echo Bot
LXMF Bot for Reticulum — Echo, Signal Stats & Network Info
Author: F (Reticulum Italia) — Based on MeteoBot v1.0 GitHub: github.com/fr33n0w/meteobot
📖 Description
Signal Echo Bot is an LXMF bot for the Reticulum network offering:
| Command | Description |
|---|---|
| 🔁 ECHO | Echoes back the received message with latency and hops |
| 📶 SIG | Shows RSSI, SNR and Link Quality (with RNode LoRa) |
| 📊 STATUS | Full report with all available information |
| ❓ HELP | Command guide |
The bot automatically creates a persistent RNS identity (saved to disk) and listens on Reticulum as an LXMF peer reachable from any compatible client.
🧩 Requirements
- 🐍 Python 3.7+
- 📡 Reticulum Network Stack (RNS) already installed and configured
- ✉️ LXMF (included with RNS or installable separately)
Install dependencies:
pip install rns
If LXMF is not included:
pip install lxmf
⚠️ Note: the bot requires Reticulum to be already configured on the system (config files in
~/.reticulumor/etc/reticulum). For RNode LoRa, configure the interface in the Reticulum configuration file.
⚙️ Installation
1. Create the directory and copy the file:
mkdir ~/rns_sig_bot
cd ~/rns_sig_bot
# copy rns_sig_bot.py here
2. Verify RNS is installed:
python3 -c "import RNS; print(RNS.__version__)"
3. Verify LXMF is available:
python3 -c "import LXMF; print('OK')"
🚀 Launch as User (Interactive Mode)
Launch the bot in interactive mode with guided setup:
cd ~/rns_sig_bot
python3 rns_sig_bot.py
The bot will show an intro screen and ask for:
- 🏷️ Bot display name
- ⏱️ Auto-announce interval (seconds)
- 💰 Incoming message stamp cost (
0= free)
Finally it will display the bot's LXMF address, visible to all clients on the Reticulum network.
🛑 To exit: press
Ctrl + C
🤖 Launch as User (Service Mode, No Prompts)
To launch the bot without interaction (e.g. from screen, tmux, or a script):
cd ~/rns_sig_bot
python3 rns_sig_bot.py --service --display_name "Signal Echo Bot" --announce_time 300 --stamp_cost 0
Available parameters
| Parameter | Description |
|---|---|
--display_name "Bot Name" |
Display name on the network |
--announce_time 300 |
Seconds between auto-announces |
--stamp_cost 0 |
Stamp cost (0-256, 0 = disabled) |
--identity ./rns_sig_bot_identity |
Path to persistent identity file |
--storage ./tmp_rns_sig_bot |
LXMF storage path |
--service |
Enable service mode (no prompts) |
🖥️ Launch as systemd Service (Auto-Start on Boot)
1. Create the service file:
sudo nano /etc/systemd/system/rns_sigbot.service
2. Paste the following content (adjust User and WorkingDirectory):
[Unit]
Description=LXMF Signal Echo Bot
After=network.target
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/rns_sig_bot
ExecStart=/usr/bin/python3 /home/pi/rns_sig_bot/rns_sig_bot.py --service --display_name "Signal Echo Bot" --announce_time 300 --stamp_cost 0
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
3. Reload systemd and enable the service:
sudo systemctl daemon-reload
sudo systemctl enable rns_sigbot
sudo systemctl start rns_sigbot
4. Check status:
sudo systemctl status rns_sigbot
sudo journalctl -u rns_sigbot -f
5. Useful commands:
sudo systemctl stop rns_sigbot # Stop the service
sudo systemctl restart rns_sigbot # Restart the service
sudo systemctl disable rns_sigbot # Disable auto-start
💬 Available Commands
From any LXMF client (Sideband, NomadNet, Terminal, etc.) send:
| Command | Alias | Action |
|---|---|---|
echo <text> |
e <text> |
🔁 Echo the message |
sig |
s |
📶 Signal statistics |
status |
st |
📊 Full report |
help |
h |
❓ Command guide |
ℹ️ Note: the remote client can be any LXMF-compatible application, not just Sideband. Works with NomadNet, custom LXMF clients, etc.
📶 Signal Stats (RSSI / SNR / Q)
Signal values are available ONLY when the bot is connected to Reticulum via an RNode LoRa interface. On TCP/IP, AutoInterface or other non-radio interfaces, values will be N/A.
The displayed signal is INBOUND to the bot: how the bot "hears" the remote node that sent the message.
📁 Generated Files
| File / Directory | Description |
|---|---|
rns_sig_bot_identity |
Persistent identity private key |
./tmp_rns_sig_bot/ |
LXMF storage (messages, cache, etc.) |
🛠️ Troubleshooting
| Issue | Solution |
|---|---|
ModuleNotFoundError: No module named 'RNS' |
➡️ pip install rns |
ModuleNotFoundError: No module named 'LXMF' |
➡️ pip install lxmf |
RSSI/SNR always N/A |
➡️ Normal without RNode LoRa. Connect an RNode via USB/serial. |
Hops = Unknown |
➡️ Normal if sender is direct or no transport is active. |
| Bot does not appear in clients | ➡️ Verify Reticulum is running (rnsd or master instance). Verify announce_time is > 0. |
📜 License
Based on LXMF Meteo Bot v1.0 by F, Reticulum Italia. Open source code. Modify and distribute freely. 🆓
Made with ❤️ for the Reticulum network 📡