HorvathAndreas/satpi
GitHub: HorvathAndreas/satpi
satpi 是一个用于树莓派的自主天气卫星接收管道,自动化卫星数据获取和处理流程。
Stars: 22 | Forks: 4
# satpi
用于树莓派的自主、配置驱动的天气卫星接收管道。
satpi 是一个无头自动化天气卫星接收工作流。它下载并过滤 TLE 数据,预测过境,为每次过境生成 systemd 计时器,运行 SatDump 进行实时接收,存储结构化的接收元数据,渲染接收图表,将过境指标导入 SQLite,上传成功的结果,并可以发送通知邮件。
## 功能特性
• 无头、自主的工作流
• 配置驱动的设置
• 每颗卫星独立配置
• 基于 Skyfield 的过境预测
• 基于 systemd 的调度
• SatDump 实时接收与解码
• 每次过境输出结构化的 reception.json
• 自动生成天空图和时序图
• 基于 SQLite 的接收数据库
• 接收分析与优化工具
• 可选通过 rclone 上传
• 可选通过 msmtp 发送通知
## 快速开始
运行基础安装脚本:
复制示例配置并创建本地活动配置:
手动运行一次工作流:
检查活动的计时器:
## 要求
### 硬件
• 树莓派 4 或树莓派 5
• 兼容 RTL-SDR 的接收器
• 适用于天气卫星接收的合适天线及射频设置
### 软件
• Raspberry Pi OS Lite 64位
• Python 3
• systemd
• SatDump
• python3-skyfield
• python3-numpy
• python3-matplotlib
• sqlite3
• rclone
• msmtp
## 工作流程
1. update_tle.py
下载最新的 TLE 数据并过滤至配置文件中指定的卫星。
2. predict_passes.py
为配置好的地面站计算即将到来的过境。
3. schedule_passes.py
为所有相关的未来过境生成独立的 systemd 服务和计时器单元。
4. receive_pass.py
执行一次已调度的过境,启动 SatDump,记录结构化的接收数据,将指标导入 SQLite,渲染图表,解码结果,上传输出,并可选发送通知邮件。
5. generate_refresh_units.py
创建更高级别的刷新服务和计时器,用于定期更新系统的整体规划状态。
## 项目结构
## 文件概述
### lib/read_config.py
加载、解析并验证中心配置文件 config.ini。它根据 paths.base_dir 解析相对项目路径,并将配置值转换为有类型的 Python 数据结构。
### bin/update_tle.py
从配置的源下载当前的 TLE 数据并进行过滤,以便本地 TLE 文件中仅保留此安装使用的卫星。
### bin/predict_passes.py
基于过滤后的本地 TLE 文件,为配置好的地面站计算即将到来的卫星过境。
### bin/schedule_passes.py
读取预测的过境数据,并为每个仍应被接收的未来过境生成一个 systemd 服务和一个 systemd 计时器。
### bin/receive_pass.py
从头到尾执行一次已调度的过境。它准备过境特定的输出目录,启动 SatDump,将结构化的接收数据记录到 reception.json 中,将指标导入 SQLite,通过 plot_reception.py 渲染图表,触发解码,复制结果,并可选发送通知邮件。
### bin/plot_reception.py
直接从 SQLite 接收数据库创建图表。
• 使用 --pass-id 参数时,生成单次过境的天空图和时序图
• 不使用 --pass-id 参数时,根据选定的过滤器生成所有过境的组合天空图
• 过滤器支持卫星以及数据库中存储的接收设置字段
### bin/init_reception_db.py
初始化用于接收历史记录和分析的 SQLite 数据库架构。
### bin/import_to_db.py
将过境级别的指标和设置信息从 reception.json 导入到 SQLite 接收数据库。
### bin/query_reception_db.py
查询 SQLite 接收数据库以进行分析和报告。
### bin/optimize_reception.py
分析来自 SQLite 的记录接收数据,并比较几何相似的过境以评估接收性能。
### bin/generate_refresh_units.py
创建并启用刷新服务和计时器,用于定期运行更高级别的规划链。
### config/config.example.ini
用于新安装的公共示例配置文件。首次使用前,请将此文件复制到 config/config.ini。
### config/config.ini
在运行系统上由 satpi 脚本使用的活动本地配置文件。此文件是本地专用的,不应提交。
### scripts/install_base.sh
针对 Raspberry Pi OS 的交互式基础安装脚本。它安装所需的软件包,应用基础操作系统设置,准备目录结构,并构建所需的 SatDump 二进制文件。
### systemd/satpi-refresh.service
执行定期 satpi 刷新工作流的 systemd 服务。
### systemd/satpi-refresh.timer
定期触发 satpi-refresh.service 的 systemd 计时器。
### systemd/generated/
包含由 schedule_passes.py 创建的已生成的过境独立 systemd 服务和计时器文件。
## 配置
从示例创建活动配置文件:
### 最低必要调整
在运行 satpi 之前,您至少应在 config/config.ini 中审查并调整这些设置:
• [station]
• name
• timezone
• [qth]
• latitude
• longitude
• altitude_m
• [paths]
• base_dir (如果您的安装路径不同)
• satdump_bin (如果 SatDump 安装在其他位置)
• mail_bin (如果 msmtp 安装在其他位置)
• python_bin (如果您的 Python 路径不同)
• [hardware]
• source_id
• gain
• sample_rate
• bias_t
• [satellite.*]
• enabled
• min_elevation_deg
• frequency_hz
• bandwidth_hz
• pipeline
• [copytarget]
• enabled
• rclone_remote
• rclone_path
• [notify]
• enabled
• mail_to
• mail_subject_prefix
• [systemd]
• service_user
• [reception_setup]
• antenna, SDR, feedline, host, and power-supply 描述字段应与您的实际设置匹配
如果您只想先运行基本的接收管道,最重要的项目是:
• 站点和 QTH
• 路径
• 硬件
• 卫星定义
• systemd 服务用户
### 路径处理
所有本地项目路径都在 [paths] 部分配置。
base_dir 是项目根目录。config.ini 中的大多数项目特定路径都存储为相对于 base_dir 的路径,例如:
• results/passes/passes.json
• results/passes
• results/tle/weather.tle
• results/database/reception.db
系统二进制文件路径保持绝对路径:
• satdump_bin
• mail_bin
• python_bin
## 安装说明
基础安装脚本会准备操作系统并构建 SatDump:
之后,通常仍需要两项手动集成。
### 配置 rclone
### 配置 msmtp
创建邮件配置文件:
示例结构:
测试邮件发送:
在安装过程中出现蓝色的“配置 msmtp”对话框时,对于 AppArmor 支持请选择“否”。
### systemd 集成
生成刷新单元:
这将创建并链接:
• satpi-refresh.service
• satpi-refresh.timer
刷新计时器运行规划链:
1. 更新 TLE
2. 预测过境
3. 调度过境计时器
检查结果:
## 典型用法
手动更新 TLE 数据:
手动预测过境:
手动生成过境计时器:
手动刷新单元:
将所有接收 JSON 文件导入 SQLite:
从所有记录的过境创建组合天空图:
为特定卫星创建组合天空图:
为一次特定过境创建图表:
手动运行接收优化器:
## 输出
### 过境结果
特定过境的接收结果写入:
results/passes/
每个过境都有自己的目录,例如:
results/passes/2026-04-10_16-07-30_METEOR-M2_4/
一个过境目录可能包含:
• reception.json
• skyplot_.png
• timeseries_.png
• .cadu
• 解码后的图像产品
• MSU-MR/
• dataset.json
• telemetry.json
### 规划结果
预测和规划产物写入:
results/passes/
此目录仅用于规划相关文件,例如:
• passes.json
### 数据库
接收历史记录和派生的过境指标存储在:
results/database/reception.db
### 报告与组合图表
组合图表和报告写入:
results/reports/
典型示例:
• skyplot_METEOR-M2_4.png
• skyplot_METEOR-M2_4_and_others.png
• skyplot_filtered.png
### 优化输出
优化器报告写入:
results/optimization/
### 运行日志
常规脚本日志写入:
logs/
### 结构化接收数据
对于每个记录的过境,receive_pass.py 会将一个 reception.json 文件写入 results/passes/ 下的过境目录。
此文件包含:
• 过境标识符和计时
• 射频设置
• 接收设置元数据
• 带时间戳的 SNR / BER / 同步状态样本
• 方位角和仰角样本
此 JSON 文件是以下操作的基础:
• 数据库导入
• 可追溯的过境元数据存储
• 需要时可重新导入
图表本身是从 SQLite 数据库生成的,而不是直接从 JSON 文件生成。
## 绘图逻辑
plot_reception.py 使用 SQLite 数据库作为数据源。
### 单过境模式
如果给出了 --pass-id,脚本将为该特定过境创建:
• 一个天空图
• 一个时序图
### 组合模式
如果未给出 --pass-id,脚本将根据选定的过滤器,为所有匹配的过境创建一个组合天空图。
过滤器支持:
• --satellite
• 接收设置字段,例如:
• --antenna-type
• --antenna-location
• --antenna-orientation
• --lna
• --rf-filter
• --feedline
• --sdr
• --raspberry-pi
• --power-supply
• --additional-info
重复使用相同的过滤器选项在该参数内起“或”作用。不同参数之间是“与”关系。
## 上传与通知
如果在 config.ini 中启用,satpi 可以:
• 通过 rclone 上传结果
• 创建共享链接
• 通过 msmtp 发送通知邮件
## 文档
安装指南:
docs/INSTALL.md
## 版本
当前文档记录的版本:v1.4.0
v1.4.0 亮点:
• 支持 Celestrak GP JSON 格式 (tle_format = GP_JSON) — 无需 API 密钥
• 修复 first_deframer_sync_delay_seconds 始终返回 0 的问题
• 修复偶数长度样本集的中位数 SNR/BER 计算
• reception.json 现在包含过境几何信息(AOS/LOS 方位角、方向、调度时间)
• generate_refresh_units.py 现在支持 HOURLY 调度频率
• INSTALL.md:包含 TLE 源选择指南和 Celestrak 连接性测试
• config.example.ini:记录了所有三种 TLE 源选项
v1.3.0 亮点:
• 在 plot_reception.py 中统一绘图
• 单过境图表现在从 SQLite 读取,而不是直接从 JSON 读取
• 组合图表和单过境图表使用相同的数据库支持的工作流
• 接收设置数据现在包括数据库架构和导入路径中的 sdr
## 作者
Andreas Horvath
info[at]andreas-horvath.ch
WhatsApp: +41 79 249 57 12
## 项目
用于树莓派的自主、配置驱动的天气卫星接收管道。
标签:DNS解析, Linux系统, Python, Raspberry Pi, TLE数据, 业余无线电, 代码示例, 元数据管理, 内存执行, 单板计算机, 卫星接收, 图表生成, 天气卫星, 实时接收, 射频技术, 嵌入式系统, 工作流, 开源项目, 数据分析, 数据库, 文件上传, 无后门, 物联网, 系统调度, 网络调试, 自动化, 过境预测, 逆向工具, 遥感, 邮件通知, 配置驱动