docs(wiki): cover the recent work, with worked examples

Asked for the wiki to catch up, and to be explicit — examples rather than
descriptions. New page and six rewritten sections.

Recent QSOs and Filters, the page named in the request: the right-click menu is
now a table of what every entry does, and the filter builder has five worked
multi-criteria filters written out field by field, each ending in what you then
do with the result. Including the distinction that prompted it — "export
selected" takes the highlighted rows, "export filtered view" takes every QSO the
filter matched, and after building a filter it is the second one you want. Plus
the traps: ADIF date format, and "is empty" not being "equals N".

Connections (new): the page for a settings section that had none. What OpsLog
listens to and sends, which outbound row another logger actually wants — a
logger asking for "WSJT-X UDP" discards a bare ADIF record — the custom-message
triggers with their placeholder lists, three worked examples, and the port-clash
warning that produced this week's CAT-drop report.

Amplifiers and Switches: the generic HTTP relay in full — per-relay URLs, the
pattern form, {relay}, {relay-1} and {value} with what each one sends — relay
automatic control with a four-relay antenna-switch example, and the bench power
supply including why OpsLog writes only its output.

Rotators: the two new native types (SPID with the Rot1Prog/Rot2Prog choice,
DCU-1), two-rotor setups, and that Test only reads the heading on the types
where it does.

Awards: the US county database, and the difference between the automatic fill
(blanks only) and the right-click re-derive (replaces) — with the Connecticut
planning regions, which is the case that needs it.

QSL Management: QSL_VIA against QSL_SENT_VIA/QSL_RCVD_VIA, why an import shows E
on every Log4OM record, and that V counts as confirmed.

Troubleshooting: the three field reports of the last few days, by symptom.

Every [[link]] checked to resolve.
This commit is contained in:
2026-08-16 14:07:38 +02:00
parent 191e92ad62
commit 99599458ff
10 changed files with 574 additions and 20 deletions
+133 -3
View File
@@ -55,6 +55,8 @@ Over TCP / GSCP — a docked **A/B antenna-switch** widget:
Configure the host / password in Settings → Antenna Genius.
---
## Relay boards (Station Control)
Relay boards for antenna/accessory switching, with named buttons in Station
@@ -68,11 +70,139 @@ Control:
web page — a factory board needs neither.
- **Denkovi** USB (4/8 relays, FT245) and generic **CH340 / LCUS** USB-serial
boards.
- **HTTP relay (home-made / generic)** — see below.
A Test-connection button and detection feedback live in the setup panel.
### HTTP relay (home-made / generic)
For any box that switches on a plain HTTP GET: an ESP8266 with a web page, a
Shelly, a Sonoff on third-party firmware, a qro.cz board, a home-brew switch.
Pick the relay count, name the relays, and give the addresses.
There is **no Host field and no connection test**. This device type has no
address of its own — each relay carries its own full URL, and they need not
even be on the same box. Nothing is read back either: OpsLog remembers what it
commanded, so after a restart each managed relay is re-commanded once.
**Two ways to give the addresses**, and you can mix them.
**A — one URL per relay.** The reason this type exists: a hand-made switch
often has addresses with nothing in common between channels.
| Relay | ON URL | OFF URL |
|---|---|---|
| 1 | `http://192.168.1.9/FF0101` | `http://192.168.1.9/FF0100` |
| 2 | `http://192.168.1.9/relay2/on` | `http://192.168.1.9/relay2/off` |
**B — one pattern for the whole board**, with the relay number filled in:
```
ON pattern: http://192.168.1.9/relay?n={relay}&state=on
OFF pattern: http://192.168.1.9/relay?n={relay}&state=off
```
#### Substitutions
| In a URL or a pattern | Becomes |
|---|---|
| `{relay}` | the relay number, 1-based |
| `{relay-1}` | the relay number counting **from zero** — for boards whose channels are 0, 1, 2… |
| `{value}` | **that relay's label**, from the *Relay labels* row below |
`http` may be left off — it is assumed. `https` works and is used as typed.
`{value}` is for a switch addressed by antenna name rather than by channel
number. Name relay 1 **Ant1**, and:
```
Per-relay ON URL for relay 1: http://10.10.10.100/relay?on={value}
Sent: http://10.10.10.100/relay?on=Ant1
```
Rename the antenna and the address follows it — the name on the button and the
name on the wire cannot drift apart, because they are the same text. A label
with a space or an accent is percent-encoded automatically. A relay whose URL
uses `{value}` **must have a label**; the editor warns you while you type.
A per-relay URL always wins over the pattern, so you can write a pattern for
the seven ordinary channels and one full URL for the odd one out.
### Manual switching
Every relay is a button in **Station Control** — click to toggle. The generic
HTTP board is never greyed out (there is no connection to wait for); the other
types are enabled once the board answers.
---
## Relay automatic control
Settings → **Relay automatic control** turns relays by frequency or band, the
equivalent of PstRotator's automatic control. Each relay of each configured
board gets a rule:
| Mode | Meaning |
|---|---|
| **Off** | OpsLog never touches this relay. |
| **Band** | ON while the current band is one of the bands you tick. |
| **Frequency** | ON while the frequency is inside a kHz range you type. |
Example — a three-way antenna switch on a KMTronic board:
| Relay | Label | Mode | Setting |
|---|---|---|---|
| 1 | Beam 20-10 | Band | 20m, 17m, 15m, 12m, 10m |
| 2 | 40 m dipole | Band | 40m |
| 3 | 80 m inverted-V | Band | 80m, 160m |
| 4 | 6 m preamp | Frequency | 50000 54000 kHz |
Rules to know:
- A relay is only switched when it is **not already** in the wanted position.
On the first evaluation after launch OpsLog reads the boards' live state, so
a relay already correct is left alone rather than clunking.
- An **unknown** frequency or band changes nothing. When CAT disconnects the
frequency reads zero, and treating that as "out of range" would switch every
relay off.
- The rules follow **your radio**. Changing band in the QSO entry strip drives
the rig, the rig reports back, and the relays follow. **Without a CAT
connection** the Band selector itself is the band change, and the relays
follow that instead — unless the band or frequency 🔒 is on, which means the
entry is deliberately decoupled from the rig (logging an old contact) and no
hardware should move.
For a switch driven by a URL or a UDP message rather than by a relay board, see
[[Connections]].
---
## Bench power supply
Settings → **Power supply**. A programmable supply on a serial port speaking
**Modbus RTU** — BSIDE, Wanptek and the other supplies that use function codes
03 and 06.
Give the COM port. The other two fields are the factory settings and only need
changing if you changed them on the supply: **9600 baud**, **Modbus address 1**
(8 data bits, no parity, 1 stop bit).
A card appears in **Station Control**: an **Output** on/off button, the measured
volts / amps / watts, and — in small type — the voltage and current the supply
is *set* to. That pairing is the useful part: `13.80 V set` beside `0.020 A`
says at a glance that the supply is on and the radio is drawing nothing.
> **OpsLog only ever writes the output on/off.** The supply's register map also
> exposes the voltage and current set points and the three protection trip
> levels, and none of them belong to a logbook — a wrong value there is 30 V
> where a radio expected 13.8. They are read and displayed, never changed.
> Set them on the supply's own front panel.
If the protection has tripped, the card says so with the supply's status word.
---
## Station Control
The Station Control tab is a dashboard of fixed-width panels that wrap to fill
the window — amplifier(s), tuner, relays, rotator, Ultrabeam… Drag a panel by
the grip on its left edge to reorder; the order is remembered.
the window — amplifier(s), tuner, relays, rotator, power supply, Ultrabeam…
Drag a panel by the grip on its left edge to reorder; the order is remembered.
A column-count selector (Auto / 16) caps how many sit side by side.
+37
View File
@@ -163,3 +163,40 @@ built-in award without fear of a future release overwriting it.
**Rescan** re-pulls the logbook and recomputes — it picks up fresh LoTW / QRZ /
eQSL confirmations (see [[QSL Management]]).
---
## US counties (CQ USA-CA)
A county award needs a county on every US QSO, and most logs do not have one:
neither the callsign nor the prefix carries it, and few operators send it.
**Settings → US counties** downloads the FCC **ULS** database — every US
amateur licence with its address — and builds a local index of callsign →
county + grid. It is a few hundred megabytes to fetch and takes a few minutes;
once built it works offline and needs no key.
With it downloaded:
- A **new US QSO** gets its county (and grid, if you have none) filled in
automatically — **only where the field is empty**. A value you or QRZ
supplied is never overwritten: the ZIP-derived county is about 98 % right and
the one you logged is usually better.
- **Right-click → Update US county from the ULS database** re-derives the
county of the selected contacts and **replaces** what is stored. That is the
deliberate opposite of the automatic pass, and it is the way to correct
counties already in the log — see the Connecticut note below. Contacts
outside the US, and callsigns the database does not hold, are left alone.
The entry only appears once the database is downloaded.
### Connecticut
Connecticut **abolished its eight counties** for statistical purposes in 2022;
the Census Bureau replaced them with nine **planning regions**. CQ USA-CA still
uses the old county names, so OpsLog maps a Connecticut address back to its
legal county.
If your database was built by an older OpsLog, the Settings panel says so and
offers a refresh — a download date alone cannot show it, because a database
fetched yesterday by an older version still holds the wrong Connecticut
counties. After refreshing, use the right-click update on your CT contacts.
+156
View File
@@ -0,0 +1,156 @@
# Connections
Settings → **Connections** is where OpsLog talks to other programs and to
hardware over the network: what it **listens** to, what it **sends**, and
messages you write yourself.
It was called *UDP* until it grew a second transport — a row can now send an
**HTTP GET** instead of a datagram, which is what most home-made antenna
switches understand.
Each row has a name, a direction, a service type, a port, and an on/off switch.
**Everything sent and received is written to the application log**, so a row
that does not work can be diagnosed rather than guessed at — see
[[Troubleshooting]] for where the log lives.
---
## Inbound — what OpsLog listens to
| Service | Sends it | Use |
|---|---|---|
| **WSJT-X / JTDX / MSHV** | those programs, port 2237 | Log their QSOs automatically, follow the DX call being worked, and show their decodes. Multicast is normal here. |
| **ADIF over UDP** | JTAlert, GridTracker, FLDIGI | A text ADIF record per logged QSO. |
| **N1MM Logger+** | N1MM | Its XML contact record. |
| **Remote callsign** | DXHunter and similar | A callsign — and optionally a frequency and mode — to load into the entry form and tune to. |
### Multicast or unicast?
WSJT-X and MSHV normally broadcast to a **multicast group** (usually
`239.255.0.1`) so several programs can hear them at once. Tick *Multicast* and
give the group. A program sending to one address only needs unicast — leave it
unticked.
> **Do not put an inbound row and an outbound row on the same port.** OpsLog
> then receives its own messages, and something it publishes can come back as a
> command. It says so in the log when it spots the arrangement:
> *"X sends on port 2241 and Y listens on it — OpsLog will receive its own
> messages there; give one of the two another port."*
---
## Outbound — what OpsLog sends
| Service | Format | Fires on |
|---|---|---|
| **ADIF message** | a plain ADIF record | each QSO logged |
| **WSJT-X logged QSO** | the same ADIF wrapped in a WSJT-X datagram | each QSO logged |
| **PstRotator frequency** | `<PST><FREQUENCY>` | frequency change |
| **N1MM RadioInfo** | N1MM's RadioInfo XML | frequency or mode change |
| **Custom message** | whatever you write | a trigger you pick |
### Which one for another logger?
If a logger says it accepts "WSJT-X UDP", it wants the **WSJT-X logged QSO**
row — it listens on the WSJT-X interface and silently discards a bare ADIF
record. Logger32 is the usual case. A logger that documents a plain ADIF
listener wants the **ADIF message** row instead. They are two rows because they
are two different things on the wire; enable the one your logger asks for, not
both, or the QSO arrives twice.
---
## Custom messages
The general case: **you choose when it fires, what it says, and how it leaves.**
This is how a home-made antenna switch, a relay box or a home-automation server
gets told what the station is doing.
### 1. Pick the trigger
| Trigger | Fires when |
|---|---|
| **QSO logged** | a contact is saved |
| **Band change** | the radio changes band — or, on a station with no CAT, the Band selector in the entry strip |
| **Rotator command** | the antenna is told to turn (compass, SP/LP buttons, a spot click) |
| **Lookup done** | a callbook lookup returns |
### 2. Write the message
Anything in `{braces}` is replaced. What is available depends on the trigger:
| Trigger | Placeholders |
|---|---|
| QSO logged | `{call}` `{band}` `{band_m}` `{mode}` `{grid}` `{name}` `{country}` `{rst_s}` `{rst_r}` `{comment}` `{date}` `{time}` `{freq_hz}` `{freq_mhz}` `{dxcc}` |
| Band change | `{band}` `{band_m}` `{mode}` `{freq_hz}` `{freq_mhz}` |
| Rotator command | `{az}` `{el}` `{path}` (`SP`, `LP` or empty) |
| Lookup done | `{call}` `{name}` `{grid}` `{country}` `{qth}` `{state}` `{dxcc}` |
`{band}` is `20m`; `{band_m}` is just `20`, because an antenna switch usually
wants the number and nothing else.
### 3. Choose the transport
- **UDP** — a datagram to an address and port. You choose the line ending.
- **URL** — an HTTP GET. Values are URL-encoded automatically.
### Examples
**Turn an antenna switch on every band change, over HTTP:**
```
Trigger: Band change
Transport: URL
URL: http://192.168.1.50/set?band={band_m}
```
20 m → `http://192.168.1.50/set?band=20`
**Tell a rotator display where the antenna is going:**
```
Trigger: Rotator command
Transport: UDP → 192.168.1.77:8100
Message: <AZIMUT>{az}</AZIMUT><PATH>{path}</PATH>
```
**Announce each QSO to a shack dashboard:**
```
Trigger: QSO logged
Transport: URL
URL: http://homeassistant.local:8123/api/webhook/qso?call={call}&band={band}&mode={mode}
```
> Credentials in a URL are sent as typed — this is meant for a LAN. Passwords
> are **redacted in the log** so a log file can be shared safely.
### When a band change is a band change
The Band-change trigger follows **the radio**, because an antenna switch should
follow the radio and not what is being typed. Changing band in the entry strip
drives the rig, the rig reports the new band, and the trigger fires from that.
On a station whose rig OpsLog does not control there is nothing to report back,
so the **Band selector itself** counts as the band change. The 🔒 lock on Band
or Frequency suppresses it: a lock means the entry is deliberately decoupled
from the rig, and nothing should move for a contact logged from last year.
---
## Diagnosing a row that does nothing
The log names every message. In order, check:
1. **Is the row enabled?** The list shows it.
2. **`udp: Reload done — N server(s) running`** at startup, and one
`cfg id=… name=… dir=… service=… port=…` line per row. A row that failed to
start is listed with its error.
3. **Outbound:** `udp: [NAME] sent N bytes to ADDRESS (service)` for a datagram,
or the URL for an HTTP row.
4. **A message that renders empty is skipped** and the log says so — usually a
placeholder that the trigger does not provide.
5. **`a QSO was logged but no outbound "ADIF message" row is enabled`** — the
answer to "why does my other logger get nothing".
See also: [[Amplifiers and Switches]] for relay boards and their own automatic
control, and [[DX Cluster and Spots]] for spot sources.
+17
View File
@@ -56,3 +56,20 @@ A **DXHunter** remote-call UDP packet fills the callsign, and when it carries
[[Settings and Data]] for the UDP configuration.
See also: [[Maps and Antennas]] for turning the beam to a spot.
## When the list looks empty
If spots are arriving and none are shown, the panel says so, names the filters
responsible and offers a button to clear them all. The two easiest to forget are
the **band and mode locks** (🔒), because they follow the radio rather than a
click — with the rig on 20 m SSB and both locked, a hundred spots on other bands
show nothing.
Filter selections are remembered between sessions; a fresh installation starts
with none set.
## Spotting
When you send a spot, the comment carries the mode and then the **award
references you have assigned** to that contact — the ones on the QSO, not the
ones OpsLog would compute for it.
+34 -7
View File
@@ -23,14 +23,41 @@ portable contacts. No API key.
## Rotators
An azimuthal-equidistant **click-to-turn** compass; the current heading and
target are shown. Three rotator types (Settings → Rotator):
target are shown. The needle follows a turning antenna smoothly — OpsLog polls
faster while the position is changing and backs off once it is parked.
- **PstRotator** — via its UDP interface.
- **microHAM ARCO** — native, over LAN or USB: set the ARCO's CONTROL PROTOCOL
to *Yaesu GS-232A*.
- **GS-232A (generic)** — any GS-232A controller, ERC (Easy Rotor Control)
included; serial speed selectable. Set an ERC to GS-232 emulation, not
Hy-Gain DCU-1.
**Two rotors** can be configured (two towers, or a Rotator Genius driving two).
A Rotor 1 / 2 selector appears on the compass; OpsLog turns and displays the
one you pick.
### Types (Settings → Rotator)
| Type | Connection | Notes |
|---|---|---|
| **PstRotator** | UDP | Enable PstRotator's UDP listener (Setup → Communication → UDP). |
| **Rotator Genius** (4O3A) | TCP, port 9006 | Native. *Rotator #* picks which of the two the box drives; *Two rotors* adds the second as its own rotor. |
| **microHAM ARCO / GS-232A** | LAN or USB | Set the controller's CONTROL PROTOCOL to *Yaesu GS-232A*. An **ERC** must be in GS-232 emulation, **not** Hy-Gain DCU-1. |
| **Hy-Gain DCU-1** | COM port or serial-over-IP | RotorCard DXA, Idiom Press Rotor-EZ, Green Heron. Azimuth only. A DCU-1 is 4800 baud; others may differ — match the controller. |
| **SPID / AlfaSpid** | COM port | Native, so PstRotator is not needed in between. See below. |
### SPID / AlfaSpid
Pick the dialect to match the controller — they are not interchangeable:
- **Rot2Prog** — RAS, BIG-RAS/HR, MD-01, MD-02. Azimuth **and** elevation.
600 baud.
- **Rot1Prog** — the older azimuth-only controllers (RAK, RAU). 1200 baud.
The two use different frame lengths, so a wrong choice shows up at once: the
**Test** button reports a reply of the wrong length rather than leaving you to
find out when the antenna turns oddly.
Two towers means two controllers, each on its own COM port and each a separate
rotor in OpsLog.
> **The Test button on a SPID, an ARCO or a DCU-1 only READS the heading** — it
> confirms the port, the speed and the dialect without moving anything, and
> says so. (PstRotator and a Rotator Genius are instead sent a move to 0°.)
## Motorized antennas (Ultrabeam / SteppIR)
+10
View File
@@ -51,3 +51,13 @@ This is also what powers [[Multi-Operator Live Status]].
Optional **database + ADIF backup at shutdown** (Settings → Backup). Regardless,
copying the `data/` folder backs up your settings and local logbook. See
[[Settings and Data]].
## What follows the active profile
Every setting is per profile, station hardware included. Switching profile
reconnects the **CAT link**, the **amplifiers**, the **motorized antenna**, the
**Antenna Genius** and the **tuner** using the new profile's settings — so an
operator with, say, an SPE on COM9 for HF and another on COM10 for 6 m gets the
right one by switching profile, with no visit to Settings.
The Winkeyer is deliberately left alone: you connect it explicitly.
+32
View File
@@ -34,6 +34,38 @@ auto-refreshes the **award** stats.
- **LoTW upload** goes through **TQSL** (ARRL's signer) — set the TQSL path and
station location in Settings.
## Paper QSL: sent, received, and how
The QSL Manager's paper form sets four things on a batch at once — the sent
status and date, the received status and date — plus **how the card travelled**,
in each direction.
Two ADIF fields are involved and they are **not** the same thing:
| Field | Holds | Example |
|---|---|---|
| `QSL_VIA` | the **manager's callsign** | `M0OXO` |
| `QSL_SENT_VIA` / `QSL_RCVD_VIA` | **how the card travelled** — an enumeration | `B` bureau · `D` direct · `E` electronic |
Some loggers write the routing into the manager field, and OpsLog's own older
versions wrote the words "Bureau" / "Direct" / "Electronic" there too. If your
log has a mixture, OpsLog offers a **repair** — it tells you how many QSOs are
affected **before** it changes anything, and it only moves values that are
unmistakably a routing method (a manager is a callsign, never one of those six
words).
On **import**, the two fields are kept apart and nothing is invented: a file
without a routing gives an empty routing. If you see `E` on every imported QSO
it came from the file — Log4OM writes `QSL_SENT_VIA:E` on every record whether
a card was ever sent. To clear them, filter the imported QSOs and use
**Bulk edit field** with an empty value ([[Recent QSOs and Filters]]).
## Confirmed means Y or V
A LoTW confirmation can come back as **V** (verified) rather than **Y**. Both
count as confirmed — in the awards, the band/mode matrix, the slot statistics,
the row colours and the QSL Info tab alike.
## E-mail eQSL
Right-click a QSO → **Send eQSL by e-mail** via the configured SMTP account. The
+117 -10
View File
@@ -2,29 +2,64 @@
## The Recent QSOs grid
The main log table. Double-click a row to edit; right-click for bulk actions
(see [[Logging Basics]]). Columns are configurable — click **Columns** to choose
which are visible; widths, order and hidden columns are saved (per profile),
with a separate layout for the narrower Main-tab pane.
The main log table. Double-click a row to edit; **right-click** for everything
else (see [The right-click menu](#the-right-click-menu) below). Columns are
configurable — click **Columns** to choose which are visible; widths, order and
hidden columns are saved (per profile), with a separate layout for the narrower
Main-tab pane.
- The selected-row count is always visible at the top, and a **Select all /
Unselect all** button takes every displayed row.
- QSL and upload status columns are coloured: **Y** green, **N** red, **R**
blue.
blue, **V** (verified) green — a LoTW contact marked *V* counts as confirmed
everywhere, like *Y*.
- A **Distance (km)** column (also in Worked-before) is computed from the QSO's
own locator pair.
- There are **no per-column header filters** — they only ever searched the rows
on screen, which made a QSO further back in the log look missing. Use the
advanced filter, which queries the whole logbook.
A QSO logged from **WSJT-X, MSHV, JTDX or a net** appears here immediately, not
when its auto-upload eventually goes out. That matters if you use a *delayed*
upload to leave yourself time to correct a contact before it is sent.
### Award columns
Each defined award can show a column with the reference the QSO counts for.
These columns are **hidden by default** and opt-in from the Columns picker.
---
## The right-click menu
Select one or more rows, right-click, and the menu acts on **the whole
selection**. Right-clicking a row that is not selected selects it first, so a
single right-click on one QSO always does what it looks like it will.
| Entry | What it does |
|---|---|
| **Fix country & zones from cty.dat** | Re-derives DXCC, continent, CQ and ITU zones from the prefix database. Use after a cty.dat update, or on QSOs imported without zones. |
| **Update from the callsign databases** | Re-queries QRZ.com / HamQTH per QSO. A network round trip each — a progress bar appears. |
| **Update from ClubLog (exceptions)** | Applies Club Log's exception list: callsigns whose real entity is not what the prefix says. |
| **Update US county from the ULS database** | Re-derives the county of US contacts and **replaces** what is stored. Only appears once the county database is downloaded — see [[Awards]]. |
| **Send OpsLog QSL by e-mail** | Renders the [[QSL Card Designer]] card for that QSO and mails it. |
| **Bulk edit field…** | One field, one value, on every selected QSO. Leaving the value **empty clears** the field. |
| **Export selected to ADIF / Cabrillo** | Just the rows you picked. |
| **Export selected — choose fields…** | Same, but you pick which ADIF fields go in the file. |
| **Export filtered view to ADIF / Cabrillo** | **Every QSO the current filter matches** — not only the rows on screen, and with no row limit. |
| **Send to QRZ / Club Log / HRDLog / eQSL / LoTW** | Uploads the selection now, whatever the automatic upload mode is. |
| **Delete…** | With a confirmation naming the count. |
> **Exporting a filtered search is two different entries.** *Export selected*
> takes the rows you highlighted. *Export filtered view* takes the whole result
> of the filter, including the QSOs scrolled off the bottom. When you have just
> built a filter and want the lot, it is the second one.
---
## Advanced filter builder
Click the filter button to open the **QSO filter builder** (Log4OM-style):
Click the filter button to open the **QSO filter builder** (Log4OM-style).
- Add one or more **conditions**: *field · operator · value*.
- Operators: equals, not-equal, contains, starts/ends with, greater/less
@@ -32,12 +67,84 @@ Click the filter button to open the **QSO filter builder** (Log4OM-style):
- Fields include every confirmation **status and date** (sent / received,
before / after) for paper QSL, LoTW, eQSL, Club Log, HRDLog and QRZ.com.
Field names stay in English — they are ADIF names, a standard vocabulary.
- Join conditions with **ALL (AND)** or **ANY (OR)**.
- Join the conditions with **ALL (AND)** or **ANY (OR)**.
- Save named **presets** (they travel with the `data/` folder).
A filter shows **every** match (the on-screen row limit only applies to the
unfiltered log; safety cap 10 000). The filtered view can be exported:
**selected rows** or the **whole filtered view** → ADIF or Cabrillo.
A filter shows **every** match the on-screen row limit only applies to the
unfiltered log (safety cap 10 000).
### Worked examples
Each of these is a few clicks in the builder. The point of the last column is
what you then do with the result.
**1. Everything worked on 20 m in FT8 that is still unconfirmed on LoTW**
| Join | Field | Operator | Value |
|---|---|---|---|
| ALL | `band` | equals | `20m` |
| | `mode` | equals | `FT8` |
| | `lotw_qsl_rcvd` | is empty | |
→ right-click → **Export filtered view to ADIF**, and you have the file to
re-upload or to check against LoTW.
**2. Paper cards sent but never answered, older than a year**
| Join | Field | Operator | Value |
|---|---|---|---|
| ALL | `qsl_sent` | equals | `Y` |
| | `qsl_rcvd` | is empty | |
| | `qso_date` | less than | `20250816` |
→ select all → **Bulk edit field** to mark them for a bureau chase, or export
them for a follow-up list.
**3. Every contact with one entity, on any band, in a date range**
| Join | Field | Operator | Value |
|---|---|---|---|
| ALL | `dxcc` | equals | `291` |
| | `qso_date` | greater or equal | `20260101` |
| | `qso_date` | less or equal | `20261231` |
→ this is the shape for an award submission. Save it as a **preset** so next
year is one click and a date change.
**4. Anything that might be a duplicate of tonight's run**
| Join | Field | Operator | Value |
|---|---|---|---|
| ALL | `call` | contains | `DL` |
| | `band` | equals | `40m` |
| ANY | `qsl_sent` | equals | `Y` |
| | `lotw_qsl_sent` | equals | `Y` |
Note the mix: the **ALL** block narrows to the contacts you care about, the
**ANY** block accepts a QSO confirmed by either route.
**5. US contacts with no county recorded**
| Join | Field | Operator | Value |
|---|---|---|---|
| ALL | `dxcc` | equals | `291` |
| | `cnty` | is empty | |
→ select all → right-click → **Update US county from the ULS database**.
### Tips
- **Dates are ADIF dates**: `YYYYMMDD`, no separators. `20260816`, not
`16/08/2026`.
- **`is empty` is not the same as `equals N`.** A QSL that was never sent is
empty; one explicitly marked *not sent* holds `N`. Filters on confirmation
usually want *is empty*.
- To find what a field is called, show its column in the grid: the Columns
picker and the filter builder use the same ADIF names.
- A preset saves the conditions, not the results — it re-runs against the log
as it is today.
---
## Worked-before matrix
+37
View File
@@ -76,3 +76,40 @@ selectable, with a copy button.
Open an issue (or *Send log to F4BPO*) with: what you did, what happened, your
radio/model, and the relevant log lines.
## The rig disconnects during digital transmissions
Symptom: with WSJT-X or JTDX set to **Fake It** split, the CAT link drops on
every over. Fake It shifts the dial for each transmission instead of using
split, so it changes the radio state twice per cycle.
Check that **no inbound Connections row shares a port with an outbound one**.
If it does, OpsLog receives what it publishes, and its own frequency broadcast
can come back as a command to re-tune — a loop that fires on every dial shift.
The log names the clash at startup. Give one of the two rows another port.
## A motorized antenna does not follow the rig
Look for this line in the log:
antenna: steppir connected, but TRACKING IS OFF in Settings — it will not
follow the rig, and only moves when you tune it by hand
That is not a fault. Tracking is a setting (Settings → Antenna), and with it off
the antenna only moves when you tune it yourself.
If the antenna genuinely stops answering, the log says so and reconnects on its
own:
steppir: status query failed, reconnecting: read status: timed out …
steppir: reconnected after 2 failed attempt(s)
## A rotator turns the wrong way
On a **SPID**, check the dialect first: **Rot1Prog** for the azimuth-only
controllers (RAK, RAU) and **Rot2Prog** for the RAS / BIG-RAS / MD-01 / MD-02.
They use different frame lengths, and the wrong one is the usual cause of a
heading that reads correctly while every commanded move goes the long way round.
Test with a **small** move first — from 45° to 50°, not to 180° — so a wrong
result cannot wrap the coax at the top of the tower.
+1
View File
@@ -27,6 +27,7 @@
- [[Contest Logging]]
- [[Net Control]]
- [[Multi-Operator Live Status]]
- [[Connections]]
**QSL & Awards**
- [[Awards]]