From 3fcd588d026e6e1b971d06255e0fdab3a58ce209 Mon Sep 17 00:00:00 2001 From: SpudGunMan Date: Wed, 30 Jul 2025 10:05:04 -0700 Subject: [PATCH] bugs and docs Consolidated Tide with MWX fixed up readme and cleaned up rlist in help --- README.md | 168 +++++++++++++++++++++++----------------------- config.template | 2 +- modules/system.py | 20 ++++-- 3 files changed, 99 insertions(+), 91 deletions(-) diff --git a/README.md b/README.md index 41e17d4..b3c9b95 100644 --- a/README.md +++ b/README.md @@ -72,23 +72,97 @@ Welcome to the Mesh Bot project! This feature-rich bot is designed to enhance yo ## Getting Started This project is developed on Linux (specifically a Raspberry Pi) but should work on any platform where the [Meshtastic protobuf API](https://meshtastic.org/docs/software/python/cli/) modules are supported, and with any compatible [Meshtastic](https://meshtastic.org/docs/getting-started/) hardware. For pico or low-powered devices, see projects for embedding, [buildroot](https://github.com/buildroot-meshtastic/buildroot-meshtastic), also see [femtofox](https://github.com/noon92/femtofox). 🥔 Please use responsibly and follow local rulings for such equipment. This project captures packets, logs them, and handles over the air communications which can include PII such as GPS locations. -### Installation - +### Quick Setup #### Clone the Repository If you dont have git you will need it `sudo apt-get install git` ```sh git clone https://github.com/spudgunman/meshing-around ``` -The code is under active development, so make sure to pull the latest changes regularly! - -#### Quick setup - **Automated Installation**: `install.sh` will automate optional venv and requirements installation. - **Launch Script**: `launch.sh` only used in a venv install, to launch the bot and the report generator. -#### Docker Installation +## Full list of commands for the bot + +### Networking +| Command | Description | ✅ Works Off-Grid | +|---------|-------------|- +| `ping`, `ack` | Return data for signal. Example: `ping 15 #DrivingI5` (activates auto-ping every 20 seconds for count 15) | ✅ | +| `cmd` | Returns the list of commands (the help message) | ✅ | +| `history` | Returns the last commands run by user(s) | ✅ | +| `lheard` | Returns the last 5 heard nodes with SNR. Can also use `sitrep` | ✅ | +| `motd` | Displays the message of the day or sets it. Example: `motd $New Message Of the day` | ✅ | +| `sysinfo` | Returns the bot node telemetry info | ✅ | +| `test` | used to test the limits of data transfer `test 4` sends data to the maxBuffer limit (default 220) | ✅ | +| `whereami` | Returns the address of the sender's location if known | +| `whoami` | Returns details of the node asking, also returned when position exchanged 📍 | ✅ | +| `whois` | Returns details known about node, more data with bbsadmin node | ✅ | + +### Radio Propagation & Weather Forcasting +| Command | Description | | +|---------|-------------|------------------- +| `ea` and `ealert` | Return FEMA iPAWS/EAS alerts in USA or DE Headline or expanded details for USA | | +| `hfcond` | Returns a table of HF solar conditions | | +| `rlist` | Returns a table of nearby repeaters from RepeaterBook | | +| `riverflow` | Return information from NOAA for river flow info. Example: `riverflow modules/settings.py`| | +| `solar` | Gives an idea of the x-ray flux | | +| `sun` and `moon` | Return info on rise and set local time | ✅ | +| `tide` | Returns the local tides (NOAA data source) | | +| `valert` | Returns USGS Volcano Data | | +| `wx` | Return local weather forecast, NOAA or Open Meteo (which also has `wxc` for metric and imperial) | | +| `wxa` and `wxalert` | Return NOAA alerts. Short title or expanded details | | +| `mwx` | Return the NOAA Coastal Marine Forcast data | | + +### Bulletin Board & Mail +| Command | Description | | +|---------|-------------|- +| `bbshelp` | Returns the following help message | ✅ | +| `bbslist` | Lists the messages by ID and subject | ✅ | +| `bbsread` | Reads a message. Example: `bbsread #1` | ✅ | +| `bbspost` | Posts a message to the public board or sends a DM(Mail) Examples: `bbspost $subject #message`, `bbspost @nodeNumber #message`, `bbspost @nodeShortName #message` | ✅ | +| `bbsdelete` | Deletes a message. Example: `bbsdelete #4` | ✅ | +| `bbsinfo` | Provides stats on BBS delivery and messages (sysop) | ✅ | +| `bbslink` | Links Bulletin Messages between BBS Systems | ✅ | +| `email:` | Sends email to address on file for the node or `email: bob@test.net # hello from mesh` | | +| `sms:` | Send sms-email to multiple address on file | | +| `setemail`| Sets the email for easy communciations | | +| `setsms` | Adds the SMS-Email for quick communications | | +| `clearsms` | Clears all SMS-Emails on file for node | | + +### Data Lookup +| Command | Description | | +|---------|-------------|- +| `askai` and `ask:` | Ask Ollama LLM AI for a response. Example: `askai what temp do I cook chicken` | ✅ | +| `messages` | Replays the last messages heard, like Store and Forward | ✅ | +| `readnews` | returns the contents of a file (news.txt, by default) via the chunker on air | ✅ | +| `satpass` | returns the pass info from API for defined NORAD ID in config or Example: `satpass 25544,33591`| | +| `wiki:` | Searches Wikipedia and returns the first few sentences of the first result if a match. Example: `wiki: lora radio` | + +### CheckList +| Command | Description | | +|---------|-------------|- +| `checkin` | Check in the node to the checklist database, you can add a note like `checkin ICO` or `checkin radio4` | ✅ | +| `checkout` | Checkout the node in the checklist database, checkout all from node | ✅ | +| `checklist` | Display the checklist database, with note | ✅ | + +### Games (via DM) +| Command | Description | | +|---------|-------------|- +| `blackjack` | Plays Blackjack (Casino 21) | ✅ | +| `dopewars` | Plays the classic drug trader game | ✅ | +| `golfsim` | Plays a 9-hole Golf Simulator | ✅ | +| `hamtest` | FCC/ARRL Quiz `hamtest general` or `hamtest extra` and `score` | ✅ | +| `hangman` | Plays the classic word guess game | ✅ | +| `joke` | Tells a joke | ✅ | +| `lemonstand` | Plays the classic Lemonade Stand finance game | ✅ | +| `mastermind` | Plays the classic code-breaking game | ✅ | +| `videopoker` | Plays basic 5-card hold Video Poker | ✅ | + +## Other Install Options + +### Docker Installation - handy for windows See further info on the [docker.md](script/docker/README.md) -#### Manual Install +### Manual Install Install the required dependencies using pip: ```sh pip install -r requirements.txt @@ -149,8 +223,10 @@ lat = 48.50 lon = -123.0 UseMeteoWxAPI = True -pzzEnabled = False # NOAA Coastal Waters Forecasts Enable NOAA Coastal Waters Forecasts (PZZ) +# NOAA Coastal Data Enable NOAA Coastal Waters Forecasts (PZZ) and tide cmd +pzzEnabled = False pzzZoneID = 132 # My Forecast Zone ID, https://www.weather.gov/marine select location and then look at the 'Forecast-by-Zone Map' and select PZZ zone +pzzForecastDays = 3 # number of data points to return, default is 3 ``` ### Module Settings @@ -395,82 +471,6 @@ There is no direct support for MQTT in the code, however, reports from Discord a ~~There also seems to be a quicker way to enable MQTT by having your bot node with the enabled [serial](https://meshtastic.org/docs/configuration/module/serial/) module with echo enabled and MQTT uplink and downlink. These two~~ -## Full list of commands for the bot - -### Networking -| Command | Description | ✅ Works Off-Grid | -|---------|-------------|- -| `ping`, `ack` | Return data for signal. Example: `ping 15 #DrivingI5` (activates auto-ping every 20 seconds for count 15) | ✅ | -| `cmd` | Returns the list of commands (the help message) | ✅ | -| `history` | Returns the last commands run by user(s) | ✅ | -| `lheard` | Returns the last 5 heard nodes with SNR. Can also use `sitrep` | ✅ | -| `motd` | Displays the message of the day or sets it. Example: `motd $New Message Of the day` | ✅ | -| `sysinfo` | Returns the bot node telemetry info | ✅ | -| `test` | used to test the limits of data transfer `test 4` sends data to the maxBuffer limit (default 220) | ✅ | -| `whereami` | Returns the address of the sender's location if known | -| `whoami` | Returns details of the node asking, also returned when position exchanged 📍 | ✅ | -| `whois` | Returns details known about node, more data with bbsadmin node | ✅ | - -### Radio Propagation & Weather Forcasting -| Command | Description | | -|---------|-------------|------------------- -| `ea` and `ealert` | Return FEMA iPAWS/EAS alerts in USA or DE Headline or expanded details for USA | | -| `hfcond` | Returns a table of HF solar conditions | | -| `rlist` | Returns a table of nearby repeaters from RepeaterBook | | -| `riverflow` | Return information from NOAA for river flow info. Example: `riverflow modules/settings.py`| | -| `solar` | Gives an idea of the x-ray flux | | -| `sun` and `moon` | Return info on rise and set local time | ✅ | -| `tide` | Returns the local tides (NOAA data source) | | -| `valert` | Returns USGS Volcano Data | | -| `wx` and `wxc` | Return local weather forecast (wxc is metric value), NOAA or Open Meteo for weather forecasting | | -| `wxa` and `wxalert` | Return NOAA alerts. Short title or expanded details | | -| `mwx` | Return the NOAA Coastal Marine Forcast data | | - -### Bulletin Board & Mail -| Command | Description | | -|---------|-------------|- -| `bbshelp` | Returns the following help message | ✅ | -| `bbslist` | Lists the messages by ID and subject | ✅ | -| `bbsread` | Reads a message. Example: `bbsread #1` | ✅ | -| `bbspost` | Posts a message to the public board or sends a DM(Mail) Examples: `bbspost $subject #message`, `bbspost @nodeNumber #message`, `bbspost @nodeShortName #message` | ✅ | -| `bbsdelete` | Deletes a message. Example: `bbsdelete #4` | ✅ | -| `bbsinfo` | Provides stats on BBS delivery and messages (sysop) | ✅ | -| `bbslink` | Links Bulletin Messages between BBS Systems | ✅ | -| `email:` | Sends email to address on file for the node or `email: bob@test.net # hello from mesh` | | -| `sms:` | Send sms-email to multiple address on file | | -| `setemail`| Sets the email for easy communciations | | -| `setsms` | Adds the SMS-Email for quick communications | | -| `clearsms` | Clears all SMS-Emails on file for node | | - -### Data Lookup -| Command | Description | | -|---------|-------------|- -| `askai` and `ask:` | Ask Ollama LLM AI for a response. Example: `askai what temp do I cook chicken` | ✅ | -| `messages` | Replays the last messages heard, like Store and Forward | ✅ | -| `readnews` | returns the contents of a file (news.txt, by default) via the chunker on air | ✅ | -| `satpass` | returns the pass info from API for defined NORAD ID in config or Example: `satpass 25544,33591`| | -| `wiki:` | Searches Wikipedia and returns the first few sentences of the first result if a match. Example: `wiki: lora radio` | - -### CheckList -| Command | Description | | -|---------|-------------|- -| `checkin` | Check in the node to the checklist database, you can add a note like `checkin ICO` or `checkin radio4` | ✅ | -| `checkout` | Checkout the node in the checklist database, checkout all from node | ✅ | -| `checklist` | Display the checklist database, with note | ✅ | - -### Games (via DM) -| Command | Description | | -|---------|-------------|- -| `blackjack` | Plays Blackjack (Casino 21) | ✅ | -| `dopewars` | Plays the classic drug trader game | ✅ | -| `golfsim` | Plays a 9-hole Golf Simulator | ✅ | -| `hamtest` | FCC/ARRL Quiz `hamtest general` or `hamtest extra` and `score` | ✅ | -| `hangman` | Plays the classic word guess game | ✅ | -| `joke` | Tells a joke | ✅ | -| `lemonstand` | Plays the classic Lemonade Stand finance game | ✅ | -| `mastermind` | Plays the classic code-breaking game | ✅ | -| `videopoker` | Plays basic 5-card hold Video Poker | ✅ | - # Recognition I used ideas and snippets from other responder bots and want to call them out! diff --git a/config.template b/config.template index 9fefad7..1b6dace 100644 --- a/config.template +++ b/config.template @@ -150,7 +150,7 @@ NOAAalertCount = 2 # use Open-Meteo API for weather data not NOAA useful for non US locations UseMeteoWxAPI = False -# NOAA Coastal Waters Forecasts Enable NOAA Coastal Waters Forecasts (PZZ) +# NOAA Coastal Data Enable NOAA Coastal Waters Forecasts (PZZ) and tide cmd pzzEnabled = False # My Forecast Zone ID, https://www.weather.gov/marine select location and then look at the 'Forecast-by-Zone Map' and select PZZ zone pzzZoneID = 132 diff --git a/modules/system.py b/modules/system.py index 3e58ca7..963d73b 100644 --- a/modules/system.py +++ b/modules/system.py @@ -71,11 +71,17 @@ if enableCmdHistory: trap_list = trap_list + ("history",) #help_message = help_message + ", history" +# repeater list Configuration +if repeater_enabled: + from modules.locationdata import * # from the spudgunman/meshing-around repo + trap_list = trap_list + ("rlist", ) + help_message = help_message + ", rlist" + # Location Configuration if location_enabled: from modules.locationdata import * # from the spudgunman/meshing-around repo - trap_list = trap_list + trap_list_location # items tide, whereami, wxc, wx - help_message = help_message + ", whereami, wx, wxc, rlist" + trap_list = trap_list + trap_list_location # items tide, whereami, wx + help_message = help_message + ", whereami, wx" if enableGBalerts and not enableDEalerts: from modules.globalalert import * # from the spudgunman/meshing-around repo logger.warning(f"System: GB Alerts not functional at this time need to find a source API") @@ -87,23 +93,25 @@ if location_enabled: # Open-Meteo Configuration for worldwide weather if use_meteo_wxApi: + trap_list = trap_list + ("wxc",) + help_message = help_message + ", wxc" from modules.wx_meteo import * # from the spudgunman/meshing-around repo else: # NOAA only features - help_message = help_message + ", wxa, tide" + help_message = help_message + ", wxa" # NOAA alerts needs location module if wxAlertBroadcastEnabled or emergencyAlertBrodcastEnabled or volcanoAlertBroadcastEnabled: from modules.locationdata import * # from the spudgunman/meshing-around repo # limited subset, this should be done better but eh.. - trap_list = trap_list + ("wx", "wxc", "wxa", "wxalert", "ea", "ealert", "valert") + trap_list = trap_list + ("wx", "wxa", "wxalert", "ea", "ealert", "valert") help_message = help_message + ", wxalert, ealert, valert" # NOAA Coastal Waters Forecasts PZZ if pzzEnabled: from modules.locationdata import * # from the spudgunman/meshing-around repo - trap_list = trap_list + ("mwx",) - help_message = help_message + ", mwx" + trap_list = trap_list + ("mwx", "tide",) + help_message = help_message + ", mwx, tide" # BBS Configuration if bbs_enabled: