FT-991A控制包
](https://badge.fury.io/py/ft991a-control) ](https://pypi.org/project/ft991a-control/) 
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--设置频率ft991a-cli mode set--更改模式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硬件设置
必需
- 雅苏FT-991A 带USB-A到USB-B电缆
- Linux主机 (在Ubuntu 22.04上测试)
- 收音机菜单→ 031 猫费率→ 38400波特
- 将用户添加到
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控制业余无线电*
