Releases: semuconsulting/PyGPSClient
v1.5.18
What's Changed
- Rc 1.5.18 by @semuadmin in #220
ENHANCEMENTS:
-
Add TTY Config button to main Settings Panel and remove SPARTN Config button (SPARTN Config can still be accessed via Menu..Options..SPARTN Configuration but is now deprecated). TTY Config uses traditional TTY (ASCII) commands to configure devices such as the Septentrio Mosaic X5.
-
UBX, NMEA and TTY user-defined preset configuration settings
"ubxpresets_l","nmeapresets_l"and"ttypresets_l"are now pre-populated with an initial set of commands on startup. Once saved to a *.json configuration file, these initial commands can be removed, amended or supplemented in accordance with the user's preferences.To reinstate the initial set of user-defined presets at a later date, insert the item
"INIT_PRESETS"at the top of the"ubxpresets_l"."nmeapresets_l"or"ttypresets_l"configuration setting.In the case of UBX, these initial commands replace the existing 24 'hard-coded' UBX commands (some of which are now out of date). NOTE the initial UBX
CFG-VALSETcommands supplied all take effect in the volatile RAM memory layer - to persist these configurations, select 'Save Configuration to BBR' (or other non-volatile memory). -
Allow self-sign certification for TLS (HTTPS) connections (requires
pygnssutils>=1.1.19) - previously these would have been rejected with an SSL error. Self-sign certificate/key location can be set via environment variablePYGNSSUTILS_PEMPATH; default is$HOME/pygnssutils.pem. A self-signed pem file suitable for test and demonstration purposes can be created interactively thus:openssl req -x509 -newkey rsa:4096 -keyout pygnssutils.pem -out pygnssutils.pem -sha256 -days 3650 -nodes
-
Update list of 'recognised' GNSS receiver serial port designators to include
IOUSBHostDevice(Sparkfun ZED-X20P breakout) andUSB Dual_Serial(Sparkfun Flex Breakout).
FIXES:
- Fix "SQLError Database not open" issue on initialisation.
- Fix issue where TTY Console would not refresh immediately if Echo was enabled.
- Fix issue where ValueError (unknown protocol) from GNSSReader would cause streaming to terminate (requires
pygnssutils>=1.1.20). - Fix issue with some ZED-X20P configuration commands not taking effect with firmware HPG 2.02.
- Fixed issue which prevented some warning messages being shown during initialisation.
Full Changelog: v1.5.17...v1.5.18
v1.5.17
What's Changed
- RC 1.5.17 by @semuadmin in #219
- As of October 2025, u-blox have discontinued their MQTT SPARTN service (having previously discontinued their L-Band SPARTN service earlier in the year) so SPARTN Client functionality is now effectively redundant and has been disabled by default in PyGPSClient in this release. It may be removed altogether in a subsequent release. It can be re-enabled by manually editing the
lband_enabled_bconfiguration setting. - Add provisional support for Quectel QGC binary message protocol (requires pyqgc>=0.1.2). Currently only Quectel LG290P / LG580P / LG680P RAW and LU600 IMU QGC message types are implemented, but this may be enhanced in future releases (contributions welcome).
- Utilise
pygnssutils.GNSSReaderclass to allow seamless selection of streamed protocols- supports NMEA, RTCM3, UBX (u-blox), SBF (Septentrio), QGC (Quectel), TTY (ASCII) - UBX and SBF are no longer mutually exclusive. - Streamline IMU widget; add additional NMEA message sources.
- Various minor enhancements to GUI performance.
- Active support for Python 3.9 dropped, 3.14 added (3.9 EOL as at 31 October 2025).
Full Changelog: v1.5.16...v1.5.17
v1.5.16
What's Changed
- fix About Check For Updates homebrew check by @semuadmin in #218
-
"Check for Updates" function in Menu..About panel updated to cater for potential critical segmentation errors caused by some Homebrew Python installations when executing shell subprocesses.
NB: if the user has already installed PyGPSClient==1.5.15, it may be necessary to install the update to 1.5.16 via the command line rather than via the Menu..About..Check for Updates function. Subsequent updates will work as expected.
Fixes # Issue with spurious "Function unavailable under Homebrew" message on About..Update function.
Full Changelog: v1.5.15...v1.5.16
v1.5.15
What's Changed
- Rc 1.5.15 by @semuadmin in #215
ENHANCEMENTS:
- Add support for Quectel LC29H base station configuration in NTRIP Caster mode.
- Enhance support for Quectel PAIR commands in NMEA configuration panel.
- Minor refinements to UI on lower resolution screens.
FIXES:
- Fix GPX add trackpoint exception handling - Fixes #213
- Send NTRIP (RTCM) and SPARTN data via socket connection as well as serial connection - Addresses #214.
Full Changelog: v1.5.14...v1.5.15
v1.5.14
What's Changed
- Add spatial database recording facility by @semuadmin in #209
FIXES:
- Fix Chart update issue #210
- Fix Exit button not invoking on_exit() clean up routines (causing any in-progress GPX track recording to be unterminated).
- Fix
IndexErrorwhen loading GPX tracks with no<time></time>elements - a synthetic timestamp sequence wil be used instead.
ENHANCEMENTS:
-
Add facility to write gnss status data to a spatialite (sqlite3 with spatial extension) database, which can be utilised by many standard GNSS visualisation and analysis applications e.g. QGIS, GDAL, GRASS, GeoPandas etc. The facility may be enabled via a new 'Database' checkbox on the Settings panel. The default database path is
$HOME/pygpsclient.sqlite. A single tablepygpsclientis populated with all the information displayed in PyGPSClient's banner panel, with lat/lon/hmsl available as a POINTZ (3D) geometry. Note that, when first created, the database spatial metadata will take a few seconds to initialise (up to a minute on ARM-based SBC platforms like RPi).NB: This optional facility is subject to the following Python environmental pre-requisites:
- The Python environment must support the loading of sqlite3 extensions i.e. it must have been compiled with the
--enable-loadable-sqlite-extensionsoption. This is true by default for most Windows and Linux platforms but NOT for most MacOS platforms. - The mod_spatialite module (.so, .dll or .dylib) must be installed and in
PATH(orLD_LIBRARY_PATHon Linux). - The 'About' dialog displays a new Spatial version/status - 'No ext' signifies the platform's Python does not support sqlite3 extensions; 'No m_s' signifies Python does support extensions but mod_spatialite is not installed or cannot be found in
PATHorLD_LIBRARY_PATH.
On MacOS platforms, it may be necessary to install (e.g. via Homebrew) a custom version of Python with the
--enable-loadable-sqlite-extensionsflag set and thelibspatialitepackage installed e.g.brew install [email protected] libspatialiteOn Linux platforms which do not support sqlite3 extensions out of the box, it may be possible to compile from source a suitable version of Python and/or libspatialite.
- The Python environment must support the loading of sqlite3 extensions i.e. it must have been compiled with the
-
Enhance elevation profile and metadata rendering in GPX track viewer.
-
Add support for Quectel proprietary $PAIR NMEA commands in NMEA Configuration dialog (Quectel LC29H/LC79H) - requires pynmeagps>=1.0.53.
-
Various minor improvements to file exception handling.
-
BSD 3-Clause license attribution clarified in all modules.
Fixes: #210
Full Changelog: v1.5.13...v1.5.14
v1.5.13
What's Changed
- RC 1.5.13 by @semuadmin in #206
ENHANCEMENTS:
- Internal streamlining and rationalisation of map handling across all dialogs and widgets which display maps (Mapview widget, GPX Track Viewer dialog, Import Custom Map dialog).
- Location-centered zooming is now available for both offline and online maps (previously only online maps could be zoomed via MapQuest API). For offline maps, the minimum and maximum viable zoom levels will depend on the resolution and extents of the imported geo-referenced image(s).
- For both online and offline maps, each zoom level (1-20) corresponds to a pre-calculated lat/lon bounding box. If you see black borders around an offline map, this signifies that the geo-referenced image does not extend to the current zoom level bounds - try increasing the zoom level until the map fills the canvas.
- A new boolean configuration setting
mapzoom_disabled_bgoverns the location-centered zoom behaviour for offline maps. To enable zoomable custom maps, set this to0(the default). To revert to the previous map-centered static handling, set this to1. - NB: the MapCanvas class can only display one offline image at a time - it cannot 'tile' multiple images to form a single larger image on the canvas. The largest single image the map viewer can handle is around 150 million pixels (roughly 430 MB), though one would need an extremely high resolution screen (8K) to take advantage of images of such resolution.
- 'Map Type', 'Zoom' and 'Show Track' options moved from settings panel to mapview widget, allowing these to be altered even if the settings panel is hidden.
- A new boolean configuration setting
transient_dialog_b(default1) governs whether Toplevel dialogs are 'transient' (i.e. always on top of main application dialog) or not. A setting of0allows pop-up dialogs to be minimised independently of the main application window, but be mindful that some dialogs may end up hidden behind others e.g. "Open file/folder" dialogs. If a file open button appears unresponsive, check that the "Open file/folder" panel isn't already open but obscured. Applies to all Toplevel dialogs (UBX Configuration, NMEA Configuration, NTRIP Client, SPARTN Client, About, GPX Viewer, Import Custom Map, TTY Presets).
Full Changelog: v1.5.12...v1.5.13
v1.5.12
What's Changed
- Rc 1.5.12 by @semuadmin in #205
FIXES:
- Fix GPX Custom map loading error.
Full Changelog: v1.5.11...v1.5.12
v1.5.11
What's Changed
- Rc 1.5.11 by @semuadmin in #203
FIXES:
- Clarify interpretation of SPARTN decryption basedate integer values in *.json configuration file;
-1signifies 'use current datetime' (basedate=None);0signifies 'use gnssTimeTag from incoming SPARTN data stream' (basedate=pyspartn.TIMEBASE); any other integer value represents an explicit gnssTimeTag value. - Fix minor bugs in GPX Viewer custom map handling.
ENHANCEMENTS:
- Make all Toplevel dialogs scrollable and resizeable, depending on effective screen resolution. Applies to: UBX Config, NMEA Config, NTRIP Client, SPARTN Client, Display GPX Track, Import Custom Map, TTY Commands. This allows the dialogs to be usable on low resolution screens( 600 <= width <= 1024 pixels).
- Make SPARTN L-Band configuration panel optional - disabled by default (ublox PointPerfect SPARTN L-Band service was discontinued in May 2025, though the panel can still be used for other generic L-Band modem configuration purposes). Panel can be re-enabled by setting lband_enabled_b to 1.
- Make
cryptographylibrary dependency optional (it is only required to decrypt encrypted MQTT SPARTN payloads). If thecryptographylibrary is not installed, the "Decode SPARTN in console" option will be greyed out in the SPARTN MQTT Client dialog. - Allow datalogging and track recording to be enabled or disabled while connected (previously only available while disconnected).
- Update minimum pyubx2, pysbf2 and pygnssutils versions to take onboard latest fixes and enhancements.
Full Changelog: v1.5.10...v1.5.11
v1.5.10
What's Changed
- Rc 1.5.10 by @semuadmin in #197
- Fix type formatting issue by @davidtlascelles in #200
FIXES:
- Fix issue with type formatting in banner_frame.py #202 - thanks to @davidtlascelles for contribution.
- Fix issue which would cause console to flicker between fixed and dynamic fonts when filtering data.
- Fix issue with reset widget layout menu option not updating stored configuration.
ENHANCEMENTS:
- Add support for Septentrio Mosaic X5 Base Station configuration in NTRIP Caster mode (supplementing the existing u-blox ZED-F9P/X20P and Quectel LG290P options). Note that the Mosaic X5 is configured via ASCII TTY commands - to monitor the responses, set the console protocol to "TTY" (remember to set it back to "RTCM" to monitor the RTCM3 output). Note also that the input (ASCII command) UART port may be different to the output (RTCM3) port - ensure you select the appropriate port(s) when configuring the receiver and monitoring the RTCM3 output.
- Add base station location update - automatically updates NTRIP CASTER Survey-in base station location from RTCM 1005/6 message.
- Chart Plot widget streamlined to reduce memory footprint and simplify CSV cut-and-paste (double-right-click) function.
- Minor enhancements to
ubx2preset()andnmea2preset()helper functions; added\examples\convert_ubx_preset.pyexample. - Dependency versions updated to incorporate latest fixes and enhancements.
Fixes: #202
New Contributors
- @davidtlascelles made their first contribution in #200
Full Changelog: v1.5.9...v1.5.10
v1.5.9
What's Changed
- update to 1.5.9 by @semuadmin in #192
FIXES:
- Fixes MON-SPAN RF3 spectrum offset issue #193.
ENHANCEMENTS:
- Add support for Septentrio SBF binary GNSS protocol (via the underlying
pysbf2library). If SBF protocol is selected, the console can now display parsed SBF data e.g. from Septentrio Mosaic X5.- NB: At present, either UBX or SBF protocols can be selected, but not both at the same time.
- NB: At present, with the exception of the SBF PVTGeodetic message, SBF data is not used to update the various user-selectable PyGPSClient widgets. This functionality may be enhanced in future releases.
- NB: Serial connection must be disconnected before switching between SBF, UBX or TTY protocols.
- Enhancements to TTY Command mode - will now work with a wider variety of TTY-configured devices, including Septentrio Mosaic X5 (see example tty_console.png screenshot) and Feyman IM19.
- Delay checkbox added to TTY Preset Commands dialog - if checked, inserts small delay between individual TTY commands.
Fixes #193
Full Changelog: v1.5.8...v1.5.9