Skip to content

Releases: JamesM92/Nodebot

v0.3.2

25 May 23:10

Choose a tag to compare

What's changed

Fixes

  • MeshCore reconnect — fixed silent hang after unplug/replug (auto_reconnect=False lets disconnects propagate to the retry loop)
  • LXMF delivery — switched from DIRECT to OPPORTUNISTIC so replies work without a pre-established path
  • Meshtastic node name — node name no longer permanently skipped when setOwner fails on first connect

Logging improvements

  • short_name added 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
  • +N hops format parsed and displayed
  • Address truncation threshold corrected (>12 chars, not >8)

CI/CD

  • GitHub Actions added: ruff lint + syntax check on push/PR
  • Weekly security audit: pip-audit CVE scan + bandit SAST

v0.3.1

03 May 16:25

Choose a tag to compare

Changes

  • installer/lxmf_pages/: NomadNet page templates extracted from install_lxmf.sh heredocs into proper template files; directory now mirrors the NomadNet pages/ layout (nodebot/ subdir, index.mu at root)
  • install_lxmf.sh: replaced hardcoded heredocs with a find-based deploy loop that walks installer/lxmf_pages/ and preserves relative paths
  • scripts/: reassign_usb.sh and uninstall_lxmf.sh moved from installer/installer/ is now purely setup scripts

v0.3.0 — Package restructure, radio settings reference, installer improvements

03 May 15:57

Choose a tag to compare

What's new

Project structure

  • Moved from flat src/ layout to proper nodebot/ Python package with relative imports
  • runbot.py moved to project root; announce.sh and chanlisten moved to scripts/
  • Removed References/ directory (superseded by docs/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.toml instead 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 version command — reports NodeBot v0.3.0
  • pyproject.toml description updated

Upgrading

Re-run the base installer to update the systemd service paths:

bash installer/install_nodebot.sh

If 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

03 May 02:26

Choose a tag to compare

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.service so driver binding survives reboots

MeshCore GPS

  • adv_loc_policy set to 1 on every connect — GPS now appears in network adverts (device default is 0)
  • send_advert() called after set_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.sh to set an admin password if upgrading from v0.1.0
  • Re-run install_meshtastic.sh if your Meshtastic device has corrupted USB IDs

V0.1.0

22 Apr 22:58

Choose a tag to compare

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