Wavelog 中的 MQTT 集成

Wavelog 中的 MQTT 集成(MQTT Integration in Wavelog)

目录

每当记录一次 QSO 或 CAT(电台控制)状态发生变化时,Wavelog 都可以向 MQTT 代理(broker)发布实时事件。这样外部应用——仪表盘、家庭自动化系统、显示屏、脚本——无需轮询 Wavelog API 即可对业余无线电活动做出反应。

MQTT 支持是可选的。即使不启用,应用也能正常运行。发布采用 QoS 0 的「即发即忘」方式;如果代理不可达,Wavelog 会记录错误并继续运行,不受影响。


配置

所有 MQTT 设置都位于 application/config/config.php。这些选项默认均不存在——只添加你需要的项。

配置键 类型 默认值 说明
mqtt_server string (空) MQTT 代理的主机名或 IP 地址。设置此项即启用 MQTT。
mqtt_port int 1883 代理的 TCP 端口。
mqtt_username string|null null 用于代理认证的用户名。
mqtt_password string|null null 用于代理认证的密码。
mqtt_prefix string wavelog/ 会在每个主题前加上的前缀。

最小示例

$config['mqtt_server'] = 'broker.example.com';

完整示例(含认证与自定义前缀)

$config['mqtt_server']   = 'broker.example.com';
$config['mqtt_port']     = 1883;
$config['mqtt_username'] = 'wavelog';
$config['mqtt_password'] = 'secret';
$config['mqtt_prefix']   = 'wavelog/';

TLS/SSL: 底层的 phpMQTT 库支持 TLS。默认使用标准明文 TCP。如需使用 TLS,请调整端口(通常为 8883)并相应配置你的代理。


主题

所有主题都带有 mqtt_prefix 的值作为前缀(默认 wavelog/)。因此订阅者看到的完整主题是 {prefix}{topic}。

通过界面记录的 QSO

wavelog/qso/logged/{user_id}

每当通过 Wavelog Web 界面保存一条新通联时发布。

通过 REST API 记录的 QSO

wavelog/qso/logged/api/{user_id}

每当通过 Wavelog REST API 保存一条新通联时发布(例如来自 Log4OM、经桥接的 WSJT-X 等记录软件)。

CAT(电台控制)状态更新

wavelog/cat/{user_id}

每当 Wavelog 从已连接的电台控制应用收到 CAT 更新(频率、模式、功率、卫星数据)时发布。


载荷

所有载荷都是 JSON 编码的 UTF-8 字符串。

QSO 事件载荷

载荷沿用内部使用的 ADIF 字段名。某次 QSO 未设置的字段可能缺省或为 null。

{
  "COL_CALL": "DL1ABC",
  "COL_BAND": "40m",
  "COL_FREQ": "7.074",
  "COL_MODE": "FT8",
  "COL_RST_SENT": "599",
  "COL_RST_RCVD": "599",
  "COL_TIME_ON": "2026-03-14 14:23:00",
  "COL_TIME_OFF": "2026-03-14 14:23:30",
  "COL_NAME": "Hans",
  "COL_COUNTRY": "GERMANY",
  "COL_DXCC": "230",
  "COL_CQZ": "14",
  "COL_ITUZ": "28",
  "COL_PROP_MODE": null,
  "COL_SAT_NAME": null,
  "COL_TX_PWR": "50",
  "COL_ANT_PATH": null,
  "COL_GRIDSQUARE": "JN48",
  "COL_MY_GRIDSQUARE": "JN49",
  "COL_STATION_CALLSIGN": "DK0TU",
  "COL_MY_DXCC": "230",
  "COL_MY_COUNTRY": "GERMANY",
  "COL_MY_CQ_ZONE": "14",
  "COL_MY_ITU_ZONE": "28",
  "COL_COMMENT": "",
  "COL_NOTES": "",
  "user_name": "admin",
  "user_id": "1"
}

记录过程中填充的所有标准 ADIF 字段都会包含在内。两个非 ADIF 的附加字段为:

字段 说明
user_name 台站所有者的 Wavelog 用户名
user_id 台站所有者的 Wavelog 数字用户 ID

CAT 事件载荷

{
  "prop_mode": null,
  "sat_name": null,
  "timestamp": "2026-03-14 14:25:00",
  "power": "100",
  "frequency": "14074000",
  "mode": "FT8",
  "frequency_rx": null,
  "mode_rx": null,
  "radio": "IC-7300",
  "user_id": "1",
  "operator": "DK0TU",
  "user_name": "admin"
}
字段 说明
frequency 发射频率,单位 Hz
mode 发射模式(例如 FT8、SSB、CW)
frequency_rx 接收/下行频率,单位 Hz(卫星);单工通信为 null
mode_rx 接收/下行模式(卫星);单工通信为 null
power 发射功率,单位 W
prop_mode 传播模式(例如 SAT、EME);未设置时为 null
sat_name 卫星名称;非卫星 QSO 时为 null
timestamp 该次更新的 UTC 时间戳(Y-m-d H:i:s)
radio CAT 应用发送的电台标识字符串
operator 操作员呼号
user_id Wavelog 数字用户 ID
user_name Wavelog 用户名

频率格式: CAT 事件中的频率单位为 Hz(整数字符串)。QSO 事件中的频率(COL_FREQ)遵循 ADIF 约定,单位为 MHz(小数字符串,例如 "14.074")。


订阅——快速示例

mosquitto_sub(命令行)

# All Wavelog events
mosquitto_sub -h broker.example.com -t 'wavelog/#' -v

# Only newly logged QSOs (all users)
mosquitto_sub -h broker.example.com -t 'wavelog/qso/logged/#' -v

# CAT updates for user 1 only
mosquitto_sub -h broker.example.com -t 'wavelog/cat/1' -v

故障排查

现象 可能原因
已配置但未发布任何事件 Web 服务器无法访问代理主机名;请检查防火墙与 DNS
日志中出现 Error while trying to connect to MQTT 主机/端口错误,或凭据被代理拒绝
事件到达但载荷为空/格式错误 确认 mqtt_prefix 不含非法的主题字符
只出现部分用户的事件 检查主题中的 user_id——每个用户发布到自己独立的子主题

启用 CodeIgniter 调试日志即可查看每条已发布的消息:

// application/config/config.php
$config['log_threshold'] = 2;  // 1 = errors only, 2 = errors + debug

已发布的消息显示如下:

DEBUG - published wavelog/qso/logged/1 -> {...} to MQTT broker
Wavelog 手册(中文版) / Wavelog 中的 MQTT 集成 0 字 0 行 bg8lng
2026-10-21T12:42:36.457040100Z 2026-10-21T12:44:09.899272752Z