Skip to content

joergschultzelutter/mpad

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mpad

License: GPL v3 Code style: black CodeQL

Multi-Purpose APRS Daemon (Gollum might also call it My Precious APRS Daemon)

Python implementation of a multi-purpose APRS daemon (WX/METAR/TAF/CWOP reports, satellite & other celestial data, find the nearest repeater to my position, user coordinates & distance etc. ...)

Supported features

  • Worldwide daily/hourly weather forecast for address / zip code / lat,lon / maidenhead / ...
  • METAR/TAF data for IATA/ICAO codes or the nearest airport to a user's position
  • CWOP data for a given CWOP station (or the nearest one)
  • Sunrise/sunset and moonrise/sunset for a given callsign (or the station's callsign)
  • Extensive position data for your own callsign or a different callsign (human readable address, MGRS, Maidenhead, UTM, DMS, distance between the two users, altitude)
  • Satellite transit data (provides e.g. the next transit of the ISS, based on the callsign position of the transmitter). Can distinguish between visible and non-visible passes.
  • Finds the nearest repeater to your position with optional query parameters on band and mode, e.g. 2m/70cm, c4fm/dstar
  • Provides uplink/downlink frequencies for a specific satellite
  • Find a place of interest nearby, e.g. fuel station, supermarket
  • Send a message to a DAPNET user
  • Magic 8 Ball predictions
  • Send an extensive APRS position report for your call sign's location to an email address via SMTP
  • Radiosonde landing predictions
  • Deutscher Wetterdienst WX warning broadcasts (for German users)
  • Can be easily extended with additional functions and keywords

Program specifics

  • Very low cpu/traffic footprint thanks to APRS filters and local data caches.
  • Pretty printing of APRS messages. Rather than splitting up the content after a max message len of 67 bytes, the program tries to split the text in a readable way which will keep the logical context of the message intact.
  • Human-friendly parser that supports both keyword and also non-keyword commands
  • Auto-detection of the user's system of units. Callsigns from the USA, Liberia and Myanmar will receive their data in imperial format (Miles, Fahrenheit, Feet etc), while for the rest of the world the metric system is preset. This auto-setting can be overriden with a separate keyword.
  • Supports APRS msg acknowledgments, beacons, etc.
  • Automatic detection of incoming duplicate / delayed APRS message requests
  • Full UTF-8 support for incoming messages. For outgoing APRS messages, the configuration can be set to either 'plain ASCII' (default) or UTF-8. Email messages are not affected by this restriction

MPAD on YouTube

Thank you Jason/KM4ACK for your kind video review! MPAD on YouTube

Sample dialogue with MPAD

Screencast

Usage and command syntax

Usage information and the command keywords:

Example requests and responses

see EXAMPLES

Dependencies and external data sources

see DEPENDENCIES

Install your own MPAD instance

see INSTALLATION

Add your own keywords

see EXTENSIONS

Technical Details and known issues

see TECHNICAL_DETAILS

MPAD Live Instance

(also known as 'I just want to use the damn thing')

My MPAD instance runs on a Raspberry Pi 4 which also hosts my Pi-Hole server. I have tested MPAD on other less-performant Linux-/Mac-based hardware. If you are a tad patient, you can even run MPAD on a Raspberry Pi Zero W.

The fine print

  • If you intend to host an instance of this program, you must be a licensed radio amateur. BYOP: Bring your own (APRS-IS) passcode. If you don't know what this is, then this program is not for you.
  • Some program routines borrow logic from KI6WJP's WxBot, whose source code was immensely helpful in getting a better understanding of how to process an APRS message. If the code works, give Martin kudos. If it doesn't work, I'm the one who screwed up.
  • APRS is a registered trademark of APRS Software and Bob Bruninga, WB4APR.