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数据, 业余无线电, 代码示例, 元数据管理, 内存执行, 单板计算机, 卫星接收, 图表生成, 天气卫星, 实时接收, 射频技术, 嵌入式系统, 工作流, 开源项目, 数据分析, 数据库, 文件上传, 无后门, 物联网, 系统调度, 网络调试, 自动化, 过境预测, 逆向工具, 遥感, 邮件通知, 配置驱动