Releases: JamesM92/Nodebot
v0.3.2
What's changed
Fixes
- MeshCore reconnect — fixed silent hang after unplug/replug (
auto_reconnect=Falselets disconnects propagate to the retry loop) - LXMF delivery — switched from
DIRECTtoOPPORTUNISTICso replies work without a pre-established path - Meshtastic node name — node name no longer permanently skipped when
setOwnerfails on first connect
Logging improvements
short_nameadded to announce database and activity feed display- DM log now includes protocol preset (MF/LF) and sender name
- MeshCore channel messages now show full 12-char sender pubkey prefix (resolved from contacts) instead of the 1-byte text-embedded prefix
- MeshCore announces now capture GPS coordinates from advertisement RF log packets
Activity feed (NomadNet)
- Channel line parser rewritten to correctly split name/hops from message text
+Nhops format parsed and displayed- Address truncation threshold corrected (>12 chars, not >8)
CI/CD
- GitHub Actions added:
rufflint + syntax check on push/PR - Weekly security audit:
pip-auditCVE scan +banditSAST
v0.3.1
Changes
- installer/lxmf_pages/: NomadNet page templates extracted from
install_lxmf.shheredocs into proper template files; directory now mirrors the NomadNetpages/layout (nodebot/subdir,index.muat root) - install_lxmf.sh: replaced hardcoded heredocs with a
find-based deploy loop that walksinstaller/lxmf_pages/and preserves relative paths - scripts/:
reassign_usb.shanduninstall_lxmf.shmoved frominstaller/—installer/is now purely setup scripts
v0.3.0 — Package restructure, radio settings reference, installer improvements
What's new
Project structure
- Moved from flat
src/layout to propernodebot/Python package with relative imports runbot.pymoved to project root;announce.shandchanlistenmoved toscripts/- Removed
References/directory (superseded bydocs/radio_settings/)
Radio settings reference (docs/radio_settings/)
- New developer reference docs for all three protocols:
reticulum_rnode.md,meshcore.md,meshtastic.md - Consistent section structure across all three files: Physical Layer Facts, Configuration Reference, Sync Word / Channel Frequency Formula, Regional Presets, Cross-Protocol Comparison (US), CAD / Scanning Timing
- New
docs/radio_settings/presets.toml— machine-readable single source of truth for installer preset menus
Installer improvements
- install_lxmf.sh: Region/frequency presets now loaded from
presets.tomlinstead of hardcoded bash arrays; udev rule fixed to override weewx GROUP conflict - install_meshcore.sh: Presets loaded from
presets.toml; region menu now shows full config per region (freq/BW/SF/CR); community defaults corrected to SF=7 / BW=62.5 kHz; manual entry prompts for all four RF parameters - reassign_usb.sh: Probe ordering (assigned protocol tested first), Meshtastic timeout/DTR reset handling, weewx udev fix, NomadNet stop/start
Bot
- New
versioncommand — reportsNodeBot v0.3.0 pyproject.tomldescription updated
Upgrading
Re-run the base installer to update the systemd service paths:
bash installer/install_nodebot.shIf using LXMF or MeshCore, re-run their installers to pick up the new preset menu (functional behaviour is unchanged; the preset data is now sourced from docs/radio_settings/presets.toml).
V0.2.0 Fresh install test
What's new in v0.2.0
Meshtastic transport
- Full Meshtastic serial transport — responds to DMs, logs public channel traffic
- Auto-detects CP210x devices with corrupted USB IDs (0000:0000) and registers the cp210x driver
- Creates
cp210x-meshtastic.serviceso driver binding survives reboots
MeshCore GPS
adv_loc_policyset to 1 on every connect — GPS now appears in network adverts (device default is 0)send_advert()called afterset_coords()so position updates broadcast immediately
Installer improvements
- install_nodebot.sh: admin password prompt (min 8 chars); completion screen lists all protocol installers with plug-in-first reminder
- install_meshtastic.sh: detects 0000:0000 CP210x in sysfs before port scan; creates
cp210x-meshtastic.service; fixed regex that was overwriting the MeshCore port with/dev/meshtastic0 - install_lxmf.sh: RNS patch applied before NomadNet restart (ordering bug fix); corrected rnodeconf flags in firmware downgrade instructions
Engine
- First-message greeting: new users who send an unrecognised message receive the help menu automatically
Removed
- WeeWX plugin removed (unused)
Upgrade notes
- Re-run
install_nodebot.shto set an admin password if upgrading from v0.1.0 - Re-run
install_meshtastic.shif your Meshtastic device has corrupted USB IDs
V0.1.0
NodeBot v0.1.0 — Initial Release
NodeBot is a multi-protocol mesh network chatbot for Raspberry Pi. It runs as a systemd daemon and bridges commands and messages across LXMF/Reticulum, Meshtastic, and MeshCore networks simultaneously.
What's included
-
Multi-transport architecture — LXMF (via Reticulum/NomadNet), Meshtastic, and MeshCore adapters run in parallel. Each transport self-manages its connection and reconnects automatically on failure.
-
Hot-reload plugin system — drop a .py file into src/plugins/ and it becomes active within seconds, no restart needed.
-
Cross-network relay — bridge messages between protocols with relay proto:address . Supports chaining through multiple NodeBot hops, session-based auto-forwarding, delivery confirmation, loop detection, and session TTL expiry.
-
Admin system — password-protected admin login, lockdown mode, per-user cooldowns, status and session inspection commands.
-
MeshCore public channel monitor — chanlisten utility streams public channel traffic to your terminal with buffered history and live follow mode.
-
Automated installers — individual shell installers for the base bot and each transport handle udev rules, stable device symlinks, systemd service setup, and radio configuration.
Tested and confirmed working
-
LXMF, Meshtastic, and MeshCore adapters connecting and receiving commands
-
Cross-network relay including multi-hop chaining and delivery callbacks
-
Hot-reload plugin system
-
Admin commands
-
chanlisten
-
Meshtastic LoRa configuration (region, modem preset, hop limit, TX power) with reboot-safe state persistence
Programmed but not yet confirmed
-
GPS position sharing — coded and integrated across all three transports (manual coordinates, gpsd, and serial NMEA modes), but has not been tested against real hardware.
-
Environmental telemetry — Meshtastic telemetry broadcast (static values, external script, and WeeWX database modes) is implemented but untested.
Requirements
-
Raspberry Pi (any model with USB)
-
Python 3.13+
-
One or more supported radios: rNode-compatible LoRa device (LXMF), Meshtastic radio, MeshCore radio