- Add
msgfilterargument to GNSSReader - will only parse GNSS messages where msgid is in msgfilter. msgid is string type for NMEA, otherwise integer. - Enhance
parsingargument to GNSSReader - permissible values:PARSE_NONE(0) - No message parsing, raw output onlyPARSE_FULL(1) - Full parsing of all message attributes (the default)PARSE_META(2) - Parse only basic metadata from messages (protocol, identity and length). Outputs a new genericGNSSMessageobject. Approximately 100x faster than full parsing, but individual data attributes will no longer be available.
- Further enhancements and bug fixes to RINEX conversion routines.
- Extend support for raw almanac message parsing.
DEPRECATION NOTICE:
- Since u-blox discontinued their Thingstream PointPerfect L-Band and MQTT encrypted SPARTN services in October 2025, the SPARTN Configuration Panel panel and 'gnssmqttclient' module are redundant. These facilities and their associated package dependencies (including 'paho-mqtt') will be removed in the next version of pygnssutils (provisionally 1.2.7). The NTRIP Client facility will continue to support unencrypted SPARTN NTRIP streams.
- Further enhancements and bug fixes to RINEX conversion routines.
- Add support for SBAS L1CA, QZSS LNAV/CNAV, IRNSS (NAVIC) LNAV.
- Further enhancements and bug fixes to RINEX conversion routines.
- Add support for GLONASS L1OF.
- Further enhancements and bug fixes to RINEX conversion routines.
FIXES:
- Fix incorrect rinex subframe scaling factors.
CHANGES:
- Various enhancements to rinex conversion routines.
- Add support for GAL FNAV, INAV and BDS D1 subframes.
FIXES:
- Restore (nested) pynmeagps dependency in pyproject.toml. Fixes #136
- Fix blank RINEX meteorology output file error. Fixes #138
CHANGES:
- Updates to experimental RINEX conversion to add support for GPS CNAV and RINEX version 4.02.
CHANGES:
-
Add preliminary support for RINEX bulk data conversion.
NB: This ALPHA release is limited to the following functionality:
- RINEX version 3.05
pyrinexconvCLI RINEX conversion utility - typepyrinexconv -hfor help- RinexConverter - common RINEX conversion Python class. Data sources limited to those which can be parsed by
GNSSReaderand its underlying Python message parsers (i.e. NMEA0183, UBX, RTCM3, SBF, QGC, UNI). - RinexConverterObservation (OBS) subclass converts binary UBX RXM-RAW or RXM-RAWX message log to RINEX Observation text format.
- RinexConverterNavigation (NAV) subclass converts UBX RXM-SFRBX (GPS LNAV 1C, 2L frames only) and RTCM3 Ephemerides messages (1019, 1020, 1041-1046) to RINEX Navigation text format (Clock, Ephemeris, Integrity (CEI)).
- RinexConverterMeteorology (MET) subclass converts NMEA0183 MWD (wind speed and direction) and XDR (pressure and temperature) sensor data to RINEX Meteorology text format.
- RawNav utility class facilitates the acquisition and conversion of raw NAV subframe data from a variety of proprietary data sources (e.g. UBX RXM-SFRBX), based on a series of NAV subframe data definition dictionaries derived from the corresponding GNSS Interface Control Document (ICD). Currently supports GPS LNAV 1C, 2L frames only but is readily extensible.
Further RINEX versions and conversion functionality will be added in future releases, as and when time permits.
CONTRIBUTORS WELCOME:
CHANGES:
- GNSSReader - Add support for Unicore UNI binary data output messages via
pyunigps>=0.1.2.
CHANGES:
- Add CLI arguments for
tlspempathandtlscrtpathto gnssserver and gnssntripclient; will default to paths set in environment variablesPYGNSSUTILS_PEMPATHandPYGNSSUTILS_CRTPATH. Used for TLS encrypted socket server and NTRIP connections which use self-signed TLS certificates. - Add CLI argument
ntriprtcmstrtognssserverandsocket_server, containing RTCM message type(rate) sourcetable entry for NTRIP caster mode (was originally 'hard-wired' for ZED-f9P, but pygnssutils now supports a wider range of base station receivers). - Enhance type hints and docstrings.
- Update VSCode actions & workflow.
FIXES:
- Fix to gnssreader to return
GNSSStreamErrorrather thanValueErrorfor unrecognised protocol. - Fix typo in gnssntripclient CLI args.
ENHANCEMENTS:
-
Add support for TLS connections in SocketServer. Introduces two alternative client request handler classes - ClientHandler (HTTP) or ClientHandlerTLS (HTTPS). TLS operation requires a suitable TLS certificate/key pair (in pem format) to be located at a path designated by environment variable
PYGNSSUTILS_PEMPATH- the default path is $HOME/pygnssutils.pem. See Sphinx documentation for details.A self-signed pem file suitable for test and demonstration purposes can be created thus:
openssl req -x509 -newkey rsa:4096 -keyout pygnssutils.pem -out pygnssutils.pem -sha256 -days 3650 -nodes
ENHANCEMENTS:
- Add gnssreader class.
- Add support for Quectel QGC protocol.
- Update minimum versions of pyubx2 and pynmeagps to cater for various fixes and new message types.
FIXES:
- Fix gnssntripclient inappropriate critical error for socket.timeout in Python<3.9 Fixes #118
CHANGES:
- Min versions of pyubx2 and pysbf2 updated.
FIXES:
- gnssstreamer Fix allow_reuse_addr setting Fixes #115
ENHANCEMENTS:
- Add support for SBF (Septentrio Binary Format) protocol in GNSSStreamer.
FIXES:
- Fix issue in GNSSNTRIPClient with parsing some NTRIP responses (missing sourcetable elements).
CHANGES:
- GNSSMQTTClient add explicit LBand Frequencies topic (
"/pp/frequencies/Lb") argument (rather than defaulting to yes if mode is LBand). - New global variable
RTCMTYPESlisting message types and rates output in NTRIP caster mode.
FIXES:
- GNSSStreamer default input handler updated - Fixes #111
CHANGES:
- Inherit SocketWrapper from pynmeagps.
ENHANCEMENTS:
- Minor improvements to SSLError exception handling in gnssmqttclient.
CHANGES:
- Update minimum versions of pyubx2 (1.2.51), pynmeagps (1.0.49), pyrtcm (1.1.5) and certifi (2025..) to ensure latest fixes and enhancements are included in UBX, NMEA and RTCM3 processing.
- No other functional changes.
FIXES:
- Fix
IndexError: list index out of rangeerror informat_connon platforms with no IP6 support.
CHANGES:
- ubx CLI utilities moved to
pyubxutils-ubxsave,ubxload,ubxcompare,ubxsetrate,ubxsimulator. For the time being,pyubxutilswill remain a dependency ofpygnssutilsand will be installed alongside it via pip, andfrom pygnssutils import UBXSimulatorwill still work as an import statement, but these will be removed altogether in v1.2.0.
ENHANCEMENTS:
- gnssmqttclient updated to support
pyspartn>=1.0.5(see pyspartn Release Notes for new functionality).
ENHANCEMENTS:
- gnssntripclient will now tolerate an NTRIP 1.0 response to an NTRIP 2.0 request if the caster only supports NTRIP 1.0, or vice versa.
- gnssstreamer now supports both NTRIP 1.0 and NTRIP 2.0 clients via the
-rtkntripversionflag (previously it assumed NTRIP 2.0).
FIXES:
- Remove print() statement.
ENHANCEMENTS:
- Enhance gnssntripclient exit and exception handling - Fixes #98.
ENHANCEMENTS:
- Fix UnicodeDecodeError in gnssntripclient - Fixes #93.
- Fix occasional
ubxload'lockups' - Fixes #48. - Update
ubx...utilities to use common logging provisions. - Drop active support for Python 3.8 - End of Life as at October 2024.
- Update min pyubx2 version to 1.2.47.
ENHANCEMENTS:
- Refactor gnssserver keyword arguments to facilitate code completion hints.
FIXES:
- Fix #90
- Minor fix to verbosity setting passthrough to lower modules e.g.
pyubx2. - Minor fix to stream validation in gnssstreamer.
ENHANCEMENTS:
gnssstreamer(akagnssdump) completely refactored to support bidirectional communications with GNSS datastream via args--cliinput,--inputand--clioutput,--output. CLI utility is now namedgnssstreamerbut the deprecatedgnssdumpwill continue to work until at least v1.1.3.
Supported --clioutput values are:
- 0 = terminal (default)
- 1 = binary file
- 2 = serial port
- 3 = TCP socket server
- 4 = evaluable Python (lamba) expression
- 5 = text file
Supported --cliinput values are:
- 0 = none (default)
- 1 = RTK NTRIP RTCM
- 2 = RTK NTRIP SPARTN
- 3 = RTK MQTT SPARTN
- 4 = serial port (e.g. SPARTN RTK data from D9S L-Band receiver)
- 5 = binary file (e.g file containing UBX configuration commands)
- Improved test coverage.
ENHANCEMENTS:
- gnssntripclient now supports chunked transfer-encoded NTRIP datastreams.
- gnssntripclient improved handling of NTRIP 1.0 casters.
- gnssserver now supports NTRIP version 1.0 or 2.0 in NTRIP mode via arg
--ntripversion.
ENHANCEMENTS:
- Add configuration file option to all CLI utilities via
-Cor--configargument. Default location of configuration file can be specified in environment variable{utility}_CONFe.g.gnssstreamer_CONF,GNSSNTRIPCLIENT_CONF, etc. Config files are text files containing key-value pairs which mirror the existing CLI arguments, e.g.
gnssstreamer -C gnssstreamer.confwhere gnssstreamer.conf contains...
filename=pygpsdata-MIXED3.log
verbosity=3
format=2
clioutput=1
output=testfile.bin
is equivalent to:
gnssstreamer --filename pygpsdata-MIXED3.log --verbosity 3 --format 2 --clioutput 1 --output testfile.bin- Streamline logging. CLI usage unchanged; to use pygnssutils logging within calling application, invoke
logging.getLogger("pygnssutils")in calling module. - Internal enhancements to experimental UBXSimulator to add close() and in_waiting() methods; recognise incoming RTCM data.
- GGA message sent to NTRIP Caster in GGALIVE mode will include additional live attributes (siv, hdop, quality, diffage, diffstation). Thanks to @yydgis for contribution.
FIXES:
- gnssntripclient - update HTTP GET request for better NTRIP 2.0 compliance
- issue with delay on gnssntripclient retry limit
ENHANCEMENTS:
- Minor internal enhancements to logging support - add explicit CRITICAL log level (verbosity = -1).
- Add logging to socket_server.py module.
ENHANCEMENTS:
- Add automated network connection timeout and retry to gnssntripclient - new CLI arguments --retries, --retryinterval, --timeout. See gnssntripclient -h for help.
- Add multi-client TCP socket server output option to gnssntripclient and gnssmqttclient - new CLI argument --cliout 3.
- Refactor utilties to use standard Python logging module - --verbosity arguments are now mapped to logging levels (0 low => error, critical; 1 medium => warning; 2 high => info; 3 debug => debug).
--logtofileCLI argument now contains fully qualified path to logfile, or "" to log to stderr;--logpathargument removed. - Refactor utilities to use separate *_cli.py module for command line argument parsing.
Use -h for help.
ENHANCEMENTS:
- Add --clioutput CLI option to gnssntripclient - supports output types of binary file or Serial port
ENHANCEMENTS:
- Fix waittime in ubxload - thanks to @hugokernel for contribution.
ENHANCEMENTS:
- Add
ubxcompareCLI utility.
FIXES:
- Update SPARTN decryption argument names - Fixes no
decodesetting error.
ENHANCEMENTS:
- Add SPARTN payload decrypt option to gnssnmqqclient.
- Minor internal streamlining.
FIXES:
- Further fixes to socket_server NTRIP caster to return properly formatted HTTP header with RTCM3 data stream.
FIXES:
- Fix to socket_server NTRIP caster source table HTTP response which was causing some NTRIP clients to timeout. Fixes #60
ENHANCEMENTS:
- Add support for u-blox PointPerfect NTRIP SPARTN service in gnssntripclient.
ENHANCEMENTS:
- Add SSL support to gnssntripclient.
FIXES:
- Fix simvector function in ubxsimulator.
CHANGES:
- Add support for paho-mqtt v2.0.0.
- Update min pyubx2 version to 1.2.38.
- Add support for pyubx2 SETPOLL msgmode (auto-detect input message mode SET or POLL)
ENHANCEMENTS:
- Add experimental UBX Simulator.
CHANGES:
- Update min pyubx2 version to 1.2.37.
CHANGES:
- Internal enhancements to IP6 address handling.
- Update min pyubx2 version to 1.2.35
CHANGES:
- Update min pyubx2 version to 1.2.32
ENHANCEMENTS:
- GNSSMQTTClient updated to support SPARTN MQTT L-Band Topics (including
/pp/frequencies/Lb) in addition to IP. - Add MQTTMessage container class for any MQTT topics which contain JSON payloads, e.g.,
<MQTT(/PP/FREQUENCIES/LB, frequencies_us_current_value=1556.29, frequencies_eu_current_value=1545.26)>
CHANGES:
- GNSSNTRIPClient amended to output sourcetable and closest mountpoint to designated output medium, if
--outputargument is notNoneand--mountpointargument is blank. Previously only output RTCM3 data.
CHANGES:
- Add settings.setter methods to GNSSNTRIPClient and GNSSMQTTClient (to support saving settings in
PyGPSClient>=1.4.1json configuration file). No functional changes to command line clients.
CHANGES:
- Add
ntripuserandntrippasswordkeyword arguments toSockerServer,GNSSSockerServerandGNSSNTRIPClientclasses for use in NTRIP Caster authentication. If not supplied, these will default to environment variablesPYGPSCLIENT_USERandPYGPSCLIENT_PASSWORDor, failing that, "anon" and "password". NB: these arguments were previously nameduserandpasswordinGNSSSockerServerandGNSSNTRIPClientclasses - any scripts instantiating either of these classes will require updating. - Updated minimum version dependency for pyubx2 (1.2.29)
CHANGES:
- Updated minimum version dependencies for pyubx2 (1.2.28) and pyspartn (0.1.10). No functional changes.
- Python 3.7 is officially end of life on 27 June 2023. This change removes Python 3.7 from workflows and documentation.
- No other functional changes.
FIXES:
- Fix error when cycling log files #29
ENHANCEMENTS:
- Add IPv6 support in gnssserver, gnssstreamer and gnssntripclient.
- Add
on_disconnectcallback tognssmqttclient.pyand enhance exception reporting back to calling app. - Minor enhancements to SPARTN and NTRIP client exception handling.
CHANGES:
- Add bandit security analysis to workflows.
- Other internal updates to VSCode and GitHub Actions workflows
- Update min pyubx2 and pyspartn versions.
- imports sorted using isort and black.
No functional changes.
CHANGES:
- superfluous haversine helper, latlon2dms and latlon2dmm methods removed - use pynmeagps helpers instead
- Minimum pyubx2 version updated to 1.2.23
- Minimum pyspartn version updated to 0.1.4
- Minor updates to VSCode tasks and GitHub actions for pyproject.toml build framework
FIXES:
- Fix gnssserver crash - Fixes #17
ENHANCEMENTS:
- Enhance gnssstreamer.py msgfilter functionality to include periodic filtering = thanks to @acottuli for contribution.
FIXES:
- Add omitted dependency for paho-mqtt.
ENHANCEMENTS:
GNSSMQTTClientSPARTN MQTT client class and command line utility added - see README for details
CHANGES:
-
All CLI utilities amended to use standard Python
argparselibrary for parsing input arguments. For example:- Previously:
gnssstreamer port=/dev/tty.usbmodem1101 baud=115200 timeout=5 - Now:
gnssstreamer --port /dev/tty.usbmodem1101 --baudrate 115200 --timeout 5 - For all CLI utilities, type
-hfor help. Refer to README for other examples. - The
kwargsfor the underlying Class constructors are unchanged.
- Previously:
ENHANCEMENTS:
- Add two new CLI utilities
ubxloadandubxsavewhich allow user to save and reload the current configuration of a Gen 9+ UBX GNSS device. Theubxsaveutility works by polling a complete set of CFG-VALGET keys from the UBX Configuration Database, converting the responses to CFG-VALSET commands and saving these as binary UBXMessages. Theubxloadutility loads these CFG-VALSET messages from a file and uploads them to the receiver's volatile memory (RAM) memory layer. The two utilities provide an easy way to copy configurations between compatible devices.
CHANGES:
- First post-beta release; some internal streamlining.
- Add
ubxsetrateCLI utility to set message rates on u-blox receivers.
FIXES:
- Fix error in
gnssntripclientwhich was causingHTTP 403 Forbiddenerrors from some NTRIP casters (e.g. UNAVCO).
FIXES:
- Fix gnssntripclient issue #6 arising from blank lines in HTTP sourcetable responses.
ENHANCEMENTS:
- NTRIP client enhancement.
ggamodekeyword argument added tognssntripclient- allows user to select GGA position source; 0 = live position from receiver, 1 = fixed reference position. Default is 0.
FIXES:
- Fix to NTRIP V2 HTTP GET Header - thanks to @polytopes-design for contribution.
CHANGES:
pyubx2.UBXReaderclass used in place ofpygnssutils.GNSSReaderto eliminate code and test duplication.
ENHANCEMENTS:
- Outfile option added to gnssstreamer. See README and
gnssstreamer -hfor details.
FIXES:
- Fix typo error in formatGGA routine in gnssntripclient.py.
- Fix \examples\rtk_example.py.
CHANGES:
- Min versions of pyubx2 and pynmeagps updated to 1.2.14 and 1.0.14 respectively.
ENHANCEMENTS:
- NTRIP Client class
GNSSNTRIPClientand CLI utilitygnssntripclientadded. See README for details.
CHANGES
- Output handler processing simplified.
- Documentation updated.
FIXES:
- JSON output now correct for all output handler types (not just stdout and File)
ENHANCEMENTS:
- JSON added to range of available output formats in gnssstreamer.
- 'allhandler' protocol handler option added to gnssstreamer; Use same external protocol handler for all protocols. Will override any individual protocol handlers (ubxhandler etc.)
- Context management added to GNSSStreamer and GNSSServer modules.
- Documentation updated.
CHANGES:
GNSSServerclass renamed toGNSSSocketServerfor clarity.- Test coverage extended.
- Cosmetic documentation tidy up.
- Initial public release of combined Python 3 GNSS utility library which consolidates the common capabilities of three existing GNSS libraries:
pynmeagps(NMEA),pyubx2(UBX) andpyrtcm(RTCM3) pynmeagps,pyubx2andpyrtcmwill continue to be developed as independent libraries for their respective GNSS protocols, but functionality which is common to all three - as well as other useful generic GNSS functions - will be incorporated intopygnssutils.