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:
@@ -55,6 +55,8 @@ Over TCP / GSCP — a docked **A/B antenna-switch** widget:
|
|||||||
|
|
||||||
Configure the host / password in Settings → Antenna Genius.
|
Configure the host / password in Settings → Antenna Genius.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Relay boards (Station Control)
|
## Relay boards (Station Control)
|
||||||
|
|
||||||
Relay boards for antenna/accessory switching, with named buttons in Station
|
Relay boards for antenna/accessory switching, with named buttons in Station
|
||||||
@@ -68,11 +70,139 @@ Control:
|
|||||||
web page — a factory board needs neither.
|
web page — a factory board needs neither.
|
||||||
- **Denkovi** USB (4/8 relays, FT245) and generic **CH340 / LCUS** USB-serial
|
- **Denkovi** USB (4/8 relays, FT245) and generic **CH340 / LCUS** USB-serial
|
||||||
boards.
|
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
|
## Station Control
|
||||||
|
|
||||||
The Station Control tab is a dashboard of fixed-width panels that wrap to fill
|
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 window — amplifier(s), tuner, relays, rotator, power supply, Ultrabeam…
|
||||||
the grip on its left edge to reorder; the order is remembered.
|
Drag a panel by the grip on its left edge to reorder; the order is remembered.
|
||||||
|
A column-count selector (Auto / 1–6) caps how many sit side by side.
|
||||||
|
|||||||
@@ -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 /
|
**Rescan** re-pulls the logbook and recomputes — it picks up fresh LoTW / QRZ /
|
||||||
eQSL confirmations (see [[QSL Management]]).
|
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.
|
||||||
|
|||||||
@@ -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.
|
||||||
@@ -56,3 +56,20 @@ A **DXHunter** remote-call UDP packet fills the callsign, and when it carries
|
|||||||
[[Settings and Data]] for the UDP configuration.
|
[[Settings and Data]] for the UDP configuration.
|
||||||
|
|
||||||
See also: [[Maps and Antennas]] for turning the beam to a spot.
|
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.
|
||||||
|
|||||||
@@ -23,14 +23,41 @@ portable contacts. No API key.
|
|||||||
## Rotators
|
## Rotators
|
||||||
|
|
||||||
An azimuthal-equidistant **click-to-turn** compass; the current heading and
|
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.
|
**Two rotors** can be configured (two towers, or a Rotator Genius driving two).
|
||||||
- **microHAM ARCO** — native, over LAN or USB: set the ARCO's CONTROL PROTOCOL
|
A Rotor 1 / 2 selector appears on the compass; OpsLog turns and displays the
|
||||||
to *Yaesu GS-232A*.
|
one you pick.
|
||||||
- **GS-232A (generic)** — any GS-232A controller, ERC (Easy Rotor Control)
|
|
||||||
included; serial speed selectable. Set an ERC to GS-232 emulation, not
|
### Types (Settings → Rotator)
|
||||||
Hy-Gain DCU-1.
|
|
||||||
|
| 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)
|
## Motorized antennas (Ultrabeam / SteppIR)
|
||||||
|
|
||||||
|
|||||||
@@ -51,3 +51,13 @@ This is also what powers [[Multi-Operator Live Status]].
|
|||||||
Optional **database + ADIF backup at shutdown** (Settings → Backup). Regardless,
|
Optional **database + ADIF backup at shutdown** (Settings → Backup). Regardless,
|
||||||
copying the `data/` folder backs up your settings and local logbook. See
|
copying the `data/` folder backs up your settings and local logbook. See
|
||||||
[[Settings and Data]].
|
[[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.
|
||||||
|
|||||||
@@ -34,6 +34,38 @@ auto-refreshes the **award** stats.
|
|||||||
- **LoTW upload** goes through **TQSL** (ARRL's signer) — set the TQSL path and
|
- **LoTW upload** goes through **TQSL** (ARRL's signer) — set the TQSL path and
|
||||||
station location in Settings.
|
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
|
## E-mail eQSL
|
||||||
|
|
||||||
Right-click a QSO → **Send eQSL by e-mail** via the configured SMTP account. The
|
Right-click a QSO → **Send eQSL by e-mail** via the configured SMTP account. The
|
||||||
|
|||||||
+117
-10
@@ -2,29 +2,64 @@
|
|||||||
|
|
||||||
## The Recent QSOs grid
|
## The Recent QSOs grid
|
||||||
|
|
||||||
The main log table. Double-click a row to edit; right-click for bulk actions
|
The main log table. Double-click a row to edit; **right-click** for everything
|
||||||
(see [[Logging Basics]]). Columns are configurable — click **Columns** to choose
|
else (see [The right-click menu](#the-right-click-menu) below). Columns are
|
||||||
which are visible; widths, order and hidden columns are saved (per profile),
|
configurable — click **Columns** to choose which are visible; widths, order and
|
||||||
with a separate layout for the narrower Main-tab pane.
|
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 /
|
- The selected-row count is always visible at the top, and a **Select all /
|
||||||
Unselect all** button takes every displayed row.
|
Unselect all** button takes every displayed row.
|
||||||
- QSL and upload status columns are coloured: **Y** green, **N** red, **R**
|
- 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
|
- A **Distance (km)** column (also in Worked-before) is computed from the QSO's
|
||||||
own locator pair.
|
own locator pair.
|
||||||
- There are **no per-column header filters** — they only ever searched the rows
|
- 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
|
on screen, which made a QSO further back in the log look missing. Use the
|
||||||
advanced filter, which queries the whole logbook.
|
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
|
### Award columns
|
||||||
|
|
||||||
Each defined award can show a column with the reference the QSO counts for.
|
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.
|
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
|
## 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*.
|
- Add one or more **conditions**: *field · operator · value*.
|
||||||
- Operators: equals, not-equal, contains, starts/ends with, greater/less
|
- 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,
|
- Fields include every confirmation **status and date** (sent / received,
|
||||||
before / after) for paper QSL, LoTW, eQSL, Club Log, HRDLog and QRZ.com.
|
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.
|
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).
|
- Save named **presets** (they travel with the `data/` folder).
|
||||||
|
|
||||||
A filter shows **every** match (the on-screen row limit only applies to the
|
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:
|
unfiltered log (safety cap 10 000).
|
||||||
**selected rows** or the **whole filtered view** → ADIF or Cabrillo.
|
|
||||||
|
### 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
|
## Worked-before matrix
|
||||||
|
|
||||||
|
|||||||
@@ -76,3 +76,40 @@ selectable, with a copy button.
|
|||||||
|
|
||||||
Open an issue (or *Send log to F4BPO*) with: what you did, what happened, your
|
Open an issue (or *Send log to F4BPO*) with: what you did, what happened, your
|
||||||
radio/model, and the relevant log lines.
|
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.
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
- [[Contest Logging]]
|
- [[Contest Logging]]
|
||||||
- [[Net Control]]
|
- [[Net Control]]
|
||||||
- [[Multi-Operator Live Status]]
|
- [[Multi-Operator Live Status]]
|
||||||
|
- [[Connections]]
|
||||||
|
|
||||||
**QSL & Awards**
|
**QSL & Awards**
|
||||||
- [[Awards]]
|
- [[Awards]]
|
||||||
|
|||||||
Reference in New Issue
Block a user