Repository navigation
Releases: vukovicvl/hamq
Release list
HamQ 0.1.1
Maintenance release of HamQ, ready for the official QGIS plugin repository: the plugin zip passes every check of the plugins.qgis.org automatic scan with no findings (Bandit, detect-secrets, Flake8, file checks, Qt6 check), and two small fixes in how stored QSOs keep their own position.
Install: download hamq-0.1.1.zip below, then in QGIS Plugins › Manage and Install Plugins › Install from ZIP. Works with QGIS 3.34 to 4.x (Qt5 and Qt6); no extra Python packages. Upgrading from 0.1.0 keeps your log and settings.
Instalacija (srpski): preuzmite hamq-0.1.1.zip, pa u QGIS-u Plugins › Manage and Install Plugins › Install from ZIP. Nadogradnja sa 0.1.0 zadržava log i podešavanja. Uputstvo je u README-u.
Tested on QGIS 4.2, 4.0, 3.44, 3.40 and 3.34 (full test suite) and scanned with scripts/qgis_repo_scan.py and the QGIS Qt6 checker.
Changed
- The plugin zip passes every check of the plugins.qgis.org automatic scan with no
findings, run with the site's tools and rules: Bandit with its 74 rules,
detect-secrets, Flake8 with its codes (and with E203 and E501 at 120 characters),
the file checks and the Qt6 check (pyqt5_to_pyqt6.py). The SQL statements of the GeoPackage storage were audited
(table and column names are quoted identifiers, values are bound parameters) and
marked for Bandit with the reason.scripts/qgis_repo_scan.pyruns the same scan
on a plugin zip, and CI runs it on every push and pull request. - The plugin description (
aboutinmetadata.txt) says that WSJT-X, JTDX and
Hamlib are separate programs: the live QSOs need WSJT-X or JTDX running, the radio
and rotator features need Hamlibrigctld/rotctldrunning. metadata.txtno longer setscategory=Plugins, which is not one of the values
the QGIS documentation allows (Raster, Vector, Database, Mesh, Web); HamQ stays in
the Plugins menu.
Fixed
- A QSO with MY_LAT/MY_LON and no MY_GRIDSQUARE gets the locator of that position
asmy_gridsquare. It got the station's QTH locator, which Recalculate
distances and DXCC data then changed while the path stayed at MY_LAT/MY_LON. - Recalculate distances and DXCC data lets the position of a 2-character
locator yield to the cty.dat position inside that field, as the import does.
HamQ 0.1.0
First experimental release of HamQ, a QGIS plugin for radio amateurs: Maidenhead locators and grid, ADIF log on the map with geodesic paths, DXCC statistics, live QSOs from WSJT-X / JTDX, Hamlib radio and rotator control, and an English / Srpski (latinica) / Српски (ћирилица) interface switch.
Install: download hamq-0.1.0.zip below, then in QGIS Plugins › Manage and Install Plugins › Install from ZIP. Works with QGIS 3.34 to 4.x (Qt5 and Qt6); no extra Python packages. See the README for WSJT-X and Hamlib setup.
Instalacija (srpski): preuzmite hamq-0.1.0.zip, pa u QGIS-u Plugins › Manage and Install Plugins › Install from ZIP. Uputstvo na srpskom je u README-u.
Tested on QGIS 4.2, 4.0, 3.44, 3.40 and 3.34 (full test suite in CI) and installed from this zip into clean QGIS 4.2.1 and 3.44.15 desktop profiles.
First release, experimental.
Added
- QGIS plugin for QGIS 3.34 to 4.x (Qt5 and Qt6) without third-party packages:
the Plugins > HamQ menu (panel, Import ADIF, Listen to WSJT-X, Log QSO, Point
antenna on map, Azimuthal map, Maidenhead grid, Locator to point, Recalculate
distances and DXCC data, Download cty.dat, Settings, Language, About), the HamQ
toolbar with the locator search and the EN / SR / СР switch, the HamQ panel and
the Processing providerhamqwith four algorithms. At the first start, hints in
the message bar offer to download cty.dat and to set the QTH locator. One
compatibility layer for QGIS 3.34 to 4.x, typed settings, a packaging script for
plugins.qgis.org and CI. Unloading or upgrading the plugin releases all of its
modules, so an update takes effect without stale code (M0, INT-01). - Maidenhead locators with 2 to 8 characters: conversion both ways, cell bounds
and centre, validation. Processing algorithms Locator to point and
Generate Maidenhead grid (field to extended square, any extent CRS,
antimeridian and poles). Locator search in a compact toolbar field centres the
map and highlights the cell (M1). - ADIF (
.adi) import that tolerates real-world logs: character- or
byte-counted field lengths, latin-1 fallback, BOM, missing<EOH>/<EOR>,
wrong lengths. Tested with sample logs in the formats of WSJT-X, N1MM, Log4OM,
QRZ.com, LoTW and Xlog (M2). - QSO normalization: validation, band from frequency; one QSO for the duplicate
check however a logger wrote its mode (FT4 asMODE=FT4orMFSK/FT4, SSB
with or without its sidebandUSB/LSBor asMODE=USB,PSK31/PSK,
JT65B/JT65and the other ADIF submode variants); position from LAT/LON,
then the locator, then cty.dat (a 2-character locator yields to the cty.dat
position inside that field); path origin from MY_LAT/MY_LON, then
MY_GRIDSQUARE, then my QTH, where a coarse MY_GRIDSQUARE such as the WSJT-X
"My Grid"KN04is refined to myKN04ft(M2). - GeoPackage log (schema 2) with deduplicated inserts and geodesic QSO paths
split at the antimeridian. Deleting a QSO, in QGIS or in any other program,
deletes its path; saved edits of the HamQ layers refresh the layers and the
statistics. Import ADIF: re-importing a file adds nothing, bad records are
skipped and reported, files above 200 MB or with more than 10 000 records per
MB of that limit are refused (advanced parameter Largest ADIF file to read
(MB)), and so is anything that is not a regular file. Recalculate distances
and DXCC data for a new QTH or a new cty.dat; QSOs imported without
MY_GRIDSQUARE follow a changed QTH locator. A read-only GeoPackage or folder is
reported with what to check. 10 000 QSOs import in about 3 s (M2, M3). - HamQ layer group with translated layer names, field aliases and legend labels,
colour-blind aware styles by band, azimuthal equidistant map centred on my QTH
with distance rings and azimuth lines; a project saved with the azimuthal map
on opens with it again, without a question about temporary layers when QGIS
closes (M3). - DXCC entity, continent, CQ and ITU zone from the callsign with AD1C cty.dat
and cty.csv (exact calls, portable prefixes, WAE entities counted as their
DXCC entity). The files are downloaded with one click (offered at the first
start, refreshed from the menu or the settings), cached in the QGIS profile and
never bundled; without an internet connection the message says that the server
cannot be reached (M4). - Statistics panel: QSOs, DXCC entities, unique callsigns, grid squares, the
longest QSO, the first and the last QSO, and counts and shares by continent,
band and mode, computed in the background after every change of the log (M4). - WSJT-X and JTDX live: UDP listener (unicast or multicast) on the address set
in HamQ, started from the toolbar or the panel, or when QGIS starts; logged QSOs
are saved and appear on the map within about a second with a "New QSO" message,
and the panel shows the dial frequency, mode and DX call. A busy port or an
address that is not one of this computer is explained (M5). - Interface in English, Srpski (latinica) and Српски (ћирилица), switched from
the toolbar, the menu or the settings without restarting QGIS: menus,
tooltips, panel, dialogs, calendar month names, Processing algorithms, layer
names, field aliases and legend labels (M6). - Hamlib: rigctld client (frequency and mode, set from the panel), rotctld
client (azimuth on a compass, turn, stop, long path), map tool that turns the
antenna toward a clicked point with a beam line (first use confirmed with
Turn / Cancel), rotator ranges such as 0-450 degrees, and manual QSO entry
with frequency and mode taken from the radio. Connection errors say what to do
(start rigctld or rotctld, check the address and port), the clients reconnect
by themselves, and a QGIS that was busy for a few seconds does not cause a
false disconnect (M7). - Settings dialog: station, storage, WSJT-X, Hamlib, language and cty.dat
download; decimal numbers accept a decimal point or comma. - Documentation: README in English and Serbian with screenshots, the release
procedure (docs/RELEASING.md), a fictional demo log (docs/demo/demo_log.adi,
150 QSOs from KN04ft to six continents, made byscripts/make_demo_log.py) and
scripts/make_screenshots.py, which takes the README screenshots with the real
QGIS desktop.
Security
- The WSJT-X listener binds the address set in HamQ, by default 127.0.0.1, so
only programs on this computer can add QSOs to the log; listening on the
network takes0.0.0.0, a LAN address, multicast or broadcast in the
settings. The UDP socket never goes through a proxy. - Callsigns, countries, client names and error texts from log files and the
network are shown as plain text in the panel and in the message bar, never as
HTML or links.
Known limitations
- Checked with datagrams captured from a real WSJT-X 2.7.0 and with the Hamlib 4.6
dummy radio and rotator, not yet on the air with real radios, rotators and a
running WSJT-X or JTDX. - A log written in Windows-1250 is read as Latin-1, so Š, Ž, Č, Ć and Đ in names
come out wrong; save such a log as UTF-8 before importing it. - HamQ waits 2 s for each answer of rigctld and rotctld; a radio or rotator that
needs longer for one command keeps reconnecting. - After a language switch, a problem already shown in the panel keeps the language
it was shown in until it changes, and an open Processing dialog keeps its texts
until it is opened again. - Not yet supported: ADX (XML) logs, exporting ADIF, IPv6 addresses for WSJT-X.
Tested
- QGIS 4.2 and 4.0 (Qt6), 3.44, 3.40 and 3.34 (Qt5): CI on 3.34, 3.44, 4.0 and
4.2,scripts/test_qgis.shlocally, and the whole QGIS test suite on 3.40
before the release; pure-Python core on Python 3.9 to 3.14. - The QGIS desktop application (4.2 on Linux, 3.44 in Docker), offscreen with a
clean profile: menus, toolbar, panel, a WSJT-X QSO on the map in 0.1 s (the first
one on 3.44 in 1.1 s), the language switch, the Hamlib dummy daemons, the cty.dat
download, and unloading and loading the plugin again.
SHA-256 of hamq-0.1.0.zip: 37e22097da801b28394ed108e5be900d4e9fbcf5c928c3f55f394bc538fb9f39