Files
pigway-device-agent/README.md
T

186 lines
5.9 KiB
Markdown
Raw Normal View History

2026-09-26 16:36:45 +08:00
# Pigway Pi Control v3.3.0 P0 System Health
2026-09-26 13:57:33 +08:00
2026-09-26 16:36:45 +08:00
Raspberry Pi 4B + 配套 128×32 OLED / 风扇 / RGB 散热扩展板的本机硬件监控 Agent。
2026-09-26 13:57:33 +08:00
2026-09-26 16:36:45 +08:00
v3.3.0 的目标不是增加 Web/API,而是先把 **P0 本地检测、事件状态、日志、诊断和关机收尾**补完整,为后续多机 NAS 监控 API 打基础。
2026-09-26 13:57:33 +08:00
2026-09-26 16:36:45 +08:00
## 已有核心功能
2026-09-26 13:57:33 +08:00
2026-09-26 16:36:45 +08:00
- SSD1306 128×32 OLED,四行固定主页
- CPU / 内存 / 温度 / 磁盘监控
- Wi-Fi RSSI / Ethernet 链路速率
- 当前默认路由与 IP 同步切换
- 风扇自动温控、回差防抖
- RGB:颜色表示故障对象,闪烁速度表示严重程度
- systemd 服务与普通进程监控
- Raspberry Pi PWR / ACT 运行时 Dark Mode
2026-09-26 13:57:33 +08:00
2026-09-26 16:36:45 +08:00
主页示例:
2026-09-26 13:57:33 +08:00
```text
CPU 18.6% MEM 16.2%
TMP 46.3C FAN OFF
2026-09-26 16:36:45 +08:00
DSK 22.4% WIF -32
2026-09-26 13:57:33 +08:00
IP4 192.168.89.130
```
2026-09-26 16:36:45 +08:00
## v3.3.0 P0 新增
2026-09-26 13:57:33 +08:00
2026-09-26 16:36:45 +08:00
### 1. 供电与降频健康
2026-09-26 13:57:33 +08:00
2026-09-26 16:36:45 +08:00
周期读取:
2026-09-26 13:57:33 +08:00
```bash
2026-09-26 16:36:45 +08:00
vcgencmd get_throttled
2026-09-26 13:57:33 +08:00
```
2026-09-26 16:36:45 +08:00
区分:
- 当前欠压:立即 `POWER LOW / UNDERVOLT` 告警
- 当前 CPU throttled / frequency capped:立即告警
- 本次启动历史上曾欠压/降频:只写一次历史事件日志,不持续 RGB 告警
- 状态恢复:写 `RECOVERED` 类事件
注意:这里检测的是 **Pi 的供电质量**,不是 UPS 电池百分比。
### 2. 文件系统健康
检测根文件系统 `/` 是否被内核切成只读。如果出现只读状态,产生严重告警:
2026-09-26 13:57:33 +08:00
```text
2026-09-26 16:36:45 +08:00
FILESYSTEM RO
ROOT READ ONLY
CHECK STORAGE
2026-09-26 13:57:33 +08:00
```
2026-09-26 16:36:45 +08:00
### 3. 本机诊断信息
内部维护:
- uptime
- load average
- CPU 当前频率
- 当前/历史 throttled flags
- 当前主网络接口 / IP
- 根文件系统只读状态
- sensor / network / service / health 最近成功时间
- 主循环异常计数
- I²C相关异常计数基础字段
### 4. DisplayController、OLED 与 RGB
2026-09-26 22:24:43 +08:00
2026-09-26 23:01:15 +08:00
每个当前故障都是 DisplayController 中的一个 active request,包含稳定 ID、priority、severity、OLED 显示数据、首次发现时间、最后变化时间和元数据。监控只提交或清除 request,同一轮采样作为一个原子批次,全部更新后只仲裁一次。DisplayController 始终只选一个 owner,OLED 和 RGB 同步表达该 owner;`NORMAL_HOME` 是 priority 0 的常驻 request,有任何故障 owner 时不会抢回显示权。同优先级新 request 排队而不抢占,owner 恢复后按 priority、first_seen、ID 重新仲裁。历史 power flags 只进入 diagnose 和一次性 Journal 记录。
2026-09-26 22:24:43 +08:00
2026-09-26 22:35:23 +08:00
### 5. RGB 告警引擎
RGB 模式的唯一来源是 current Display Owner 的 severity。Warning 为黄色 3 秒呼吸,Critical 为橙红色 1.5 秒呼吸,Emergency 为纯红快速频闪;`NORMAL_HOME` 为 owner 时 OFF。呼吸最低亮度为 5%,默认每 80ms 更新。owner 变化但 RGB mode 相同时不关闭、不重置相位、不重写初始化序列。动画帧不写日志,owner 变化记录 `DISPLAY_OWNER`,实际模式变化才记录 `RGB_MODE`。
2026-09-26 22:35:23 +08:00
### 6. 结构化事件日志
2026-09-26 16:36:45 +08:00
日志继续交给 systemd journal,不额外制造长期 `.log` 文件。
只在 **状态发生变化** 时记录关键事件,避免每秒刷屏。例如:
```text
level=INFO event=START version=3.3.0
level=INFO event=NET_SWITCH old_if=eth0 new_if=wlan0 ...
level=WARN event=NETWORK_DOWN ...
level=INFO event=NETWORK_RECOVERED ...
level=WARN event=WATCH_DOWN name=AWESUN ...
level=INFO event=WATCH_RECOVERED name=AWESUN ...
level=WARN event=POWER_LOW raw=0x1
level=INFO event=POWER_RECOVERED raw=0x0
level=WARN event=ALERT_ACTIVE alert=TEMP_HIGH ...
level=INFO event=ALERT_RECOVERED ...
```
实时查看:
2026-09-26 13:57:33 +08:00
```bash
2026-09-26 16:36:45 +08:00
journalctl -u pigway-pi-control -f
2026-09-26 13:57:33 +08:00
```
2026-09-26 16:36:45 +08:00
只看本次启动:
2026-09-26 13:57:33 +08:00
```bash
2026-09-26 16:36:45 +08:00
journalctl -u pigway-pi-control -b --no-pager
2026-09-26 13:57:33 +08:00
```
2026-09-26 16:36:45 +08:00
搜索某类事件:
```bash
journalctl -u pigway-pi-control --no-pager | grep 'event=POWER'
```
2026-09-26 22:35:23 +08:00
### 7. 诊断命令
2026-09-26 16:36:45 +08:00
```bash
sudo /usr/local/sbin/pigway-pi-control --diagnose
```
2026-09-26 17:10:53 +08:00
输出 Agent 版本、系统 uptime、配置路径、load、CPU 频率、根文件系统、全部当前/历史 power 位、主网络接口、完整 IP 和 Internet 状态,以及所有 service/process watch 状态。
诊断使用与运行时相同的配置和检查函数;仅以 I²C receive-byte 读取探测 MCU 0x0D / OLED 0x3C,失败显示 MISSING/ERROR,不初始化或写入风扇、RGB、OLED。独立诊断进程无法获取正在运行的服务的内存计数,故 loop_errors / i2c_errors 明确标记 UNAVAILABLE;服务退出的 STOP 事件包含该次运行计数。
RGB 保留 v3.2.0 已验证的 MCU 寄存器协议与 R/G/B 写入顺序。RC5 只在实际 RGB mode 切换时停止旧模式,动画帧仅完整写 selector/R/G/B,避免每帧反复触发 OFF 寄存器。
2026-09-26 16:36:45 +08:00
2026-09-26 22:35:23 +08:00
### 8. 关机收尾
2026-09-26 16:36:45 +08:00
收到 systemd SIGTERM / 系统关机时:
1. 写 STOP 日志
2. RGB OFF
3. 风扇 OFF
4. OLED 清屏并 Display OFF
5. 关闭 I²C handle
Pi 红色 PWR 灯关机后恢复硬件默认亮起的行为不强行修改,可作为“系统已关机但 UPS 仍供电”的直观提示。
## 用户配置
正式配置只有一个:
```text
/etc/pigway-pi-control.conf
```
编辑:
```bash
sudo nano /etc/pigway-pi-control.conf
sudo systemctl restart pigway-pi-control
```
配置文件内已经写明每项用途、单位和修改方式。
## 安装 / 升级测试分支
2026-09-26 13:57:33 +08:00
```bash
sudo ./install.sh
```
安装器会:
2026-09-26 16:36:45 +08:00
- 安装必要依赖
- 检查 I²C
- 禁用旧 `temp-control.service`
- 安装字体、程序、配置和 systemd unit
2026-09-26 17:10:53 +08:00
- 完整保留用户现有配置(包括所有 section、用户值和注释),新选项使用运行时默认值
2026-09-26 16:36:45 +08:00
- 启动服务
- 执行版本、OLED、UI、P0健康监控和诊断入口自检
2026-09-26 13:57:33 +08:00
2026-09-26 16:36:45 +08:00
## 常用命令
2026-09-26 13:57:33 +08:00
```bash
systemctl status pigway-pi-control --no-pager -l
journalctl -u pigway-pi-control -f
sudo systemctl restart pigway-pi-control
2026-09-26 16:36:45 +08:00
sudo /usr/local/sbin/pigway-pi-control --diagnose
2026-09-26 13:57:33 +08:00
```
2026-09-26 16:36:45 +08:00
## 版本路线
2026-09-26 13:57:33 +08:00
2026-09-26 16:36:45 +08:00
- v3.2.0:主网络接口 / Wi-Fi RSSI / ETH速率 / 双网切换
- **v3.3.0:P0 System Health,本地检测与日志完善**
- 后续:只读 `/api/v1/...` Agent API,再由 NAS 统一汇总多台设备