无线电控制包

FT-991A控制包是一个用于通过LCARS主题的Web界面、命令行工具和MCP服务器控制Yaesu FT-991A无线电收发器的AI集成工具。

  • by heliosarchitect
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 heliosarchitect/lbf-ham-radio

使用说明

FT-991A控制包

AI可控Yaesu FT-991A收发器接口 LCARS主题web GUI, 命令行工具,以及 MCP服务器 用于AI集成。

🤖 人工智能助理: 此包通过MCP(模型上下文协议)公开FT-991A业余无线电控制。使用 ft991a-mcp 启动MCP服务器,然后通过标准化的MCP工具控制频率、模式、功率、PTT和监测S表读数。

特性

🌐 LCARS Web GUI(星际迷航主题)

  • 10+标签式界面 --VFO控制、音频/瀑布、频带扫描仪、存储通道、系统、配置、状态、诊断
  • 音频瀑布 --通过PCM2903B USB CODEC+浏览器端FFT实时频谱图
  • 频谱分析仪 --叠加渐变填充、网格线、中心频率标记
  • 5个调色板 --收音机(默认)、琥珀色、蓝色、绿色、灰色,带有预先计算的颜色LUT
  • 直列VFO调谐器 --单击以键入频率输入、UP/DN按钮、步长选择器(10 Hz–1 MHz)、箭头键调谐
  • S仪表历史图表 --最后120个读数,带有峰值/平均值标签和颜色梯度
  • 带状扫描仪 --使用可配置的步长和静噪功能扫描频率范围,点击调整结果,CSV导出
  • 内存通道管理器 --列出、召回、存储和清除渠道001-099
  • 天线自动调谐 --ATU控制按钮(AC001/AC002 CAT命令)
  • SDR适配器 --通过SDRplay RSP2pro(SoapyDDR)实现宽带瀑布
  • 音频流 --直接在浏览器中收听广播音频
  • WebSocket实时更新 --实时频率、模式、S表、TX状态
  • 移动响应 --手机/平板电脑的水平可滚动标签栏

🖥️ CLI工具

  • ft991a-cli status --获取收音机状态
  • ft991a-cli freq set <hz> --设置频率
  • ft991a-cli mode set <mode> --更改模式
  • ft991a-cli cw encode/decode/send --莫尔斯电码操作

🤖 MCP服务器(AI集成)

  • 通过模型上下文协议实现完全无线电控制
  • 与Claude、GPT和其他支持MCP的助手兼容

📡 CAT协议

  • 完成Yaesu CAT命令的实施
  • 频率、模式、功率、PTT、S表、频带切换
  • 存储器通道读/写(MR/MC/MW命令)
  • 天线调谐器控制(AC命令)
  • VFO交换,A→B拷贝
  • TX锁定安全

快速安装

# Install from PyPI
pip install ft991a-control

# Launch LCARS web GUI
ft991a-web --host 0.0.0.0 --port 8000 --radio-port /dev/ttyUSB0

# Launch MCP server for AI
ft991a-mcp

# Direct CLI control
ft991a-cli status

硬件设置

必需

  1. 雅苏FT-991A 带USB-A到USB-B电缆
  2. Linux主机 (在Ubuntu 22.04上测试)
  3. 收音机菜单→ 031 猫费率→ 38400波特
  4. 将用户添加到 dialout 组: sudo usermod -a -G dialout $USER

推荐

  • USB音频编解码器 (例如PCM2903B)用于音频瀑布图
  • SDRplay RSP2pro (或兼容的SoapyDR设备)用于宽带泛适配器

Udev规则(稳定设备路径)

# /etc/udev/rules.d/99-ft991a.rules
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea70", \
  ATTRS{bInterfaceNumber}=="01", SYMLINK+="ft991a-cat"

然后使用 --radio-port /dev/ft991a-cat 无论USB枚举顺序如何,都能稳定访问。

建筑

┌─────────────────┐    WebSocket     ┌─────────────────┐
│   Web Browser   │◄────────────────►│   FastAPI        │
│   LCARS GUI     │  Real-time       │   Web Server     │
│                 │  Audio/FFT       │   (ft991a-web)   │
└─────────────────┘                  └────────┬─────────┘
                                              │
┌─────────────────┐                          │
│   AI Assistant  │◄── MCP Protocol ─────────┤
│   (Claude, etc) │                          │
└─────────────────┘                          │
                                              │
┌─────────────────┐    ┌─────────────────┐   │
│   SDRplay       │    │   USB Audio     │   │
│   RSP2pro       │    │   CODEC         │   │
│   (SoapySDR)    │    │   (PCM2903B)    │   │
└────────┬────────┘    └────────┬────────┘   │
         │ IQ Data              │ PCM Audio  │
         └──────────────────────┴────────────┤
                                              │
                    ┌─────────────────────────┴───────────┐
                    │         FT991A CAT Library          │
                    │         (ft991a.cat)                │
                    └─────────────────┬───────────────────┘
                                      │ USB Serial
                                      │ 38400 baud, 2 stop bits
                                      ▼
                                ┌─────────────────┐
                                │  Yaesu FT-991A  │
                                │  Transceiver    │
                                └─────────────────┘

Web GUI选项卡

选项卡 说明
VFO控制 频率显示、模式按钮、频带预设、电源滑块、VFO交换/复制、ATU
音频 音频瀑布图、频谱分析仪、内联调谐器、S表历史记录、收听按钮
软件定义无线电 通过SDRplay实现宽带泛适配器瀑布图(点击调谐,带宽选择器)
扫描仪 带预设波段、自定义范围、步长、静噪阈值的波段扫描仪
记忆 内存通道管理器——列表、调用、存储、清除通道001-099
系统 音频设备配置、WebSocket状态、连接信息
配置 串口设置、波特率、连接测试
状态 直播电台状态、VFO-A/B、模式、功率、S表、SWR
诊断 错误日志、原始CAT命令测试、系统健康状况

CI/CD

GitHub Actions在版本标签推送时自动发布到PyPI:

# Bump version in pyproject.toml and __init__.py, then:
git tag v0.6.2
git push github main --tags
# → GitHub Actions builds and publishes to PyPI

配置

串口设置

ft991a-web --radio-port /dev/ft991a-cat --radio-baud 38400 --host 0.0.0.0 --port 8000

收音机菜单设置

  • 菜单031 (猫费率): 38400 (或匹配 --radio-baud)
  • 菜单032 (猫): 10分钟 或更长
  • 菜单033 (猫RTS): 启用

安全

⚠️ 重要提示:

  • 发射前务必验证天线连接是否正确
  • 不主动传输时使用TX锁定
  • 确保业余无线电频率/模式的许可特权
  • 从低功率(5-10W)开始进行测试
  • 未经许可的运营商在场,不得进行传输

🔒 内置安全:

  • 频率范围验证(30 kHz–470 MHz)
  • 功率限制(5-100W)
  • TX锁定开关
  • 按频率进行模式验证
  • 串行超时保护

Python API

from ft991a import FT991A, Mode

radio = FT991A(port="/dev/ft991a-cat", baudrate=38400)
radio.connect()

# Read status
status = radio.get_status()
print(f"Frequency: {status.frequency_a} Hz")
print(f"Mode: {status.mode}")
print(f"S-Meter: {status.s_meter}")

# Tune
radio.set_frequency_a(14_250_000)  # 20m SSB
radio.set_mode(Mode.USB)

# Antenna tuner
radio.tuner_start()  # Auto-tune

# Memory channels
radio.recall_memory(1)
radio.store_memory(5)

REST API

端点 方法 描述
/api/status GET 无线电状态(频率、模式、S表、TX)
/api/frequency/a POST 设置VFO-A频率
/api/frequency/b POST 设置VFO-B频率
/api/mode POST 设置操作模式
/api/power POST 设置TX功率
/api/tuner/start POST 开始天线自动调谐
/api/tuner/on POST 打开ATU
/api/tuner/off POST 关闭ATU
/api/vfo/swap post 交换拐角处的vfo;vfo-
/api/vfo/a-to-b 发布 复制vfo-s→vfo-s
/api/scan POST 开始频带扫描
/api/scan/stop POST 停止扫描
/api/memory/list GET 列出内存通道
/api/memory/recall POST 调用内存通道
/api/memory/store POST 存储到内存通道
/api/memory/clear POST 清除内存通道
/ws WebSocket 实时状态更新
/ws/audio WebSocket 音频FFT流
/ws/sdr WebSocket SDR宽带FFT流

贡献

git clone https://github.com/heliosarchitect/lbf-ham-radio.git
cd lbf-ham-radio
pip install -e .[dev]
pytest tests/

许可证

MIT许可证——见 许可证.

链接

  • PyPI: https://pypi.org/project/ft991a-control/
  • GitHub: https://github.com/heliosarchitect/lbf-ham-radio
  • Gitea: https://gitea.fleet.wood/Helios/lbf-ham-radio

KO4TUV的73! 📡 LCARS风格的AI控制业余无线电