Frimurare/radex-mr107-reader
GitHub: Frimurare/radex-mr107-reader
从 RADEX MR107 氡气监测仪读取数据并通过 Web 仪表板或家庭自动化系统实现本地存储和可视化。
Stars: 0 | Forks: 0
# RADEX MR107 Linux Reader
从 Quarta-Rad RADEX MR107 氡气监测仪在 Linux 上读取氡气(Bq/m3)、温度和湿度数据 — **无需专有软件**。
支持 SQLite 存储、带有历史图表的 Web 仪表板、CSV 导出以及 Homey Pro 集成。
## 原因
RADEX MR107 仅附带 Windows 软件(Radex Data Center)。本工具可直接通过 USB 串口读取传感器,使您能够将氡气监测集成到基于 Linux 的家庭自动化系统中,如 **Homey Pro**、**Home Assistant** 或任何基于 MQTT 的设置。
## 功能
- **实时读数** — 氡气(Bq/m3)、温度(℃)、湿度(%),以及设备平均值/最小值/最大值
- **SQLite 数据库** — 所有读数的持久本地存储
- **Web 仪表板** — 使用 Chart.js 图表的深色主题仪表板,支持自动刷新和颜色编码的氡气等级
- **CSV 导出** — 下载所有历史数据以便在 Excel/Google Sheets 中分析
- **Homey Pro 集成** — 通过本地 API 将读数推送到 Homey Logic 变量
- **MQTT 支持** — 将 JSON 输出发送到任何 MQTT broker
- **冷启动检测** — 识别设备是否仍在预热中
- **Systemd 就绪** — 作为后台服务运行,支持自动重启
## 需求
- Python 3.6+
- `pyserial`(`pip install pyserial`)
- 通过 USB 连接的 RADEX MR107
- Linux(已在 Debian 13 和 Ubuntu 24.04 上测试)
## 安装
```
git clone https://github.com/Frimurare/radex-mr107-reader.git
cd radex-mr107-reader
pip install pyserial
```
### USB 权限
MR107 设备显示为 `/dev/ttyACM0`。将您的用户添加到 `dialout` 组:
```
sudo usermod -aG dialout $USER
# 注销并重新登录以使更改生效
```
验证设备已连接:
```
lsusb | grep ABBA
# 应显示:ID abba:a004 QUARTA-RAD MR107
```
## 使用方法
### 单次读数
```
python3 mr107_reader.py
```
输出:
```
[2026-04-04 16:35:00] Radon: 218.0 Bq/m3 | Temp: 21.0C | Humidity: 35.8% | Avg: 195.2 Max: 312.0 Min: 87.0
```
### JSON 输出
```
python3 mr107_reader.py --json
```
```
{
"radon_bq": 217.9,
"temperature_c": 20.9,
"humidity_pct": 35.8,
"radon_avg": 195.2,
"radon_max": 312.0,
"radon_min": 87.0,
"countdown_s": 3421,
"cold_start": false,
"timestamp": "2026-04-04 16:35:00"
}
```
### 带数据库的持续监控
```
python3 mr107_reader.py --loop 60 --db radon.db
```
这会每 60 秒轮询一次 MR107 并将每次读数存储到 SQLite 数据库中。
### 所有选项
| 选项 | 描述 | 默认值 |
|--------|-------------|---------|
| `--port` | 串口 | `/dev/ttyACM0` |
| `--loop N` | 每 N 秒轮询一次(0 = 单次读取) | `0` |
| `--json` | JSON 格式输出 | 关闭 |
| `--db PATH` | SQLite 数据库路径 | 无 |
| `--homey IP` | Homey Pro IP 地址 | 无 |
| `--homey-token TOKEN` | Homey API bearer 令牌 | 无 |
| `--homey-device ID` | Homey 虚拟设备 ID | 无 |
## Web 仪表板
内置 Web 仪表板,可在浏览器中查看氡气统计数据。
```
python3 dashboard.py --db radon.db --port 8088
```
然后在浏览器中打开 `http://YOUR_IP:8088`。
### 仪表板功能
- **实时传感器卡片** — 氡气、温度、湿度、设备平均值
- **颜色编码的氡气等级** — 绿色(<100)、黄色(100-200)、红色(>200 Bq/m3)
- **表情符号指示器** — 😊 安全、😬 升高、🧟 高
- **历史图表** — 可在 6 小时、24 小时、3 天、7 天、30 天之间切换
- **温度和湿度** — 双轴趋势图
- **统计数据** — 总读数、平均值、最小值/最大值
- **CSV 导出** — 将所有数据下载为 CSV 文件
- **数据库信息** — 显示数据库大小和总读数
- **自动刷新** — 每 60 秒更新一次
- **WHO 和瑞典指南** — 参考线位于 100 和 200 Bq/m3
### 仪表板选项
| 选项 | 描述 | 默认值 |
|--------|-------------|---------|
| `--db PATH` | SQLite 数据库路径 | `radon.db` |
| `--port N` | Web 服务器端口 | `8088` |
| `--bind ADDR` | 绑定地址 | `0.0.0.0` |
## 作为系统服务运行
创建两个 systemd 服务以实现 24/7 监控:
### 读取器服务
```
sudo tee /etc/systemd/system/radon-reader.service << 'EOF'
[Unit]
Description=RADEX MR107 Radon Reader
After=network.target
[Service]
Type=simple
User=YOUR_USER
ExecStart=/usr/bin/python3 /path/to/mr107_reader.py --loop 60 --db /path/to/data/radon.db
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
```
### 仪表板服务
```
sudo tee /etc/systemd/system/radon-dashboard.service << 'EOF'
[Unit]
Description=RADEX MR107 Radon Dashboard
After=network.target radon-reader.service
[Service]
Type=simple
User=YOUR_USER
ExecStart=/usr/bin/python3 /path/to/dashboard.py --db /path/to/data/radon.db --port 8088
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
```
### 启用并启动
```
sudo systemctl daemon-reload
sudo systemctl enable radon-reader radon-dashboard
sudo systemctl start radon-reader radon-dashboard
# 检查状态
sudo systemctl status radon-reader
sudo systemctl status radon-dashboard
```
## Homey Pro 集成
将氡气读数推送到您的 Homey Pro(2023 或更高版本)通过本地 REST API。无需自定义 Homey 应用 — 它使用内置的 Logic 变量,您可以在 Flows 中使用。
### 步骤 1:获取您的 Homey API 令牌
1. 访问 https://tools.developer.homey.app/
2. 使用您的 Athom 账户登录
3. 选择您的 Homey
4. 复制 API 令牌(Bearer 令牌)
### 步骤 2:使用 Homey 启动读取器
```
python3 mr107_reader.py --loop 60 --db radon.db \
--homey 192.168.1.50 \
--homey-token YOUR_API_TOKEN_HERE
```
将 `192.168.1.50` 替换为您的 Homey IP 地址(可在 Homey 应用中的设置 > 常规下找到)。
### 步骤 3:在 Homey 中验证
打开 Homey 应用并进入 **更多 > Logic**。您应该看到三个自动更新的变量:
| 变量 | 描述 |
|----------|-------------|
| `radon_bq` | 当前氡气水平,单位 Bq/m3 |
| `radon_temperature` | 温度,单位 ℃ |
| `radon_humidity` | 湿度,单位 % |
### 步骤 4:创建警报 Flows
示例:当氡气超过 200 Bq/m3(瑞典行动等级)时获取推送通知:
1. 打开 Homey 应用 > **Flows** > 创建新 Flow
2. **当...** > Logic > "数值变量更改" > 选择 `radon_bq`
3. **并且...** > Logic > "数字大于" > `200`
4. **那么...** > 通知 > "发送推送通知" > `"警告:氡气超过 200 Bq/m3!"`
其他有用的 Flow 创意:
- 当氡气 > 100 Bq/m3 时警报(WHO 指南)
- 当氡气 > 300 Bq/m3 时警报(危险等级)
- 每天 08:00 发送当前氡气水平的每日摘要
- 当氡气高时(通过智能插头)开启通风
### 带有 Homey 的 Systemd
将 Homey 标志添加到您的 systemd 服务:
```
ExecStart=/usr/bin/python3 /path/to/mr107_reader.py --loop 60 --db /path/to/data/radon.db --homey 192.168.1.50 --homey-token YOUR_API_TOKEN_HERE
```
### 虚拟设备模式 — Homey 仪表板磁贴(推荐)
要在 Homey 中获得正确的传感器磁贴(
标签:Chart.js, Home Assistant, Homebrew安装, Homey Pro, Python, radon monitor, SQLite, Systemd服务, USB设备, Web Dashboard, 串口通信, 传感器读取, 无后门, 智能家居, 氡气监测, 物联网, 环境监测, 网络调试, 自动化, 逆向工具