毕达什
Raspberry Pi 5的全屏KPI仪表板,使用 LVGL Redis。 显示多个实时健康、遥测、活动、回购状态和财富消息 客户端机器——Linux和Windows。
注意:这个项目的核心是构建我想要的仪表板;这不是 “通用仪表板创建工具”。我有一台RPi 5和一台备用4K 监视器和我想浏览的具体信息。 也就是说,我确实认为这对其他想做的人来说有一些好处 类似的东西。..决定在RPi上放置Redis服务器并使用 这对我来说是一个巨大的胜利。
仪表板布局
┌─────────────────────────────────────────────┐
│ Client cards (health LED, CPU/RAM/disk) │
├────────────────────┬────────────────────────┤
│ Activities │ Repo Status │
├────────────────────┴────────────────────────┤
│ Fortune │
└─────────────────────────────────────────────┘快速启动
1.克隆
git clone --recurse-submodules
cd kpidash2.Pi 5的交叉编译
# Install cross toolchain (Ubuntu/Debian)
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu cmake pkg-config
# Sync Pi sysroot (replace rpi53 with your Pi hostname/IP)
SYSROOT=$HOME/pi5-sysroot && mkdir -p $SYSROOT
rsync -avz --rsync-path="sudo rsync" ken@rpi53:/lib/aarch64-linux-gnu $SYSROOT/lib/
rsync -avz --rsync-path="sudo rsync" ken@rpi53:/usr/lib/aarch64-linux-gnu $SYSROOT/usr/lib/
rsync -avz ken@rpi53:/usr/include $SYSROOT/usr/
# Build
cmake -B build-pi -DCMAKE_TOOLCHAIN_FILE=cmake/aarch64-toolchain.cmake
cmake --build build-pi --target kpidash -j$(nproc)
# Deploy
rsync -az build-pi/kpidash ken@rpi53:~/kpidash3.在Pi 5上运行
# DRM requires root (or video group membership); -E preserves REDISCLI_AUTH
export REDISCLI_AUTH=yourpassword
sudo -E ./kpidash4.启动客户端守护进程(Linux或Windows)
cd clients/kpidash-client
uv sync # Python 3.13 venv, see .python-version
uv run kpidash-client daemon start看 客户端/kpidash客户端/README.md 用于配置文件设置。
______________________________________________________________________
配置(仪表板)
| 环境变量 | 默认值 | 描述 |
|---|---|---|
KPIDASH_REDIS_HOST | 127.0.0.1 | Redis主机 |
KPIDASH_REDIS_PORT | 6379 | Redis端口 |
REDISCLI_AUTH | (无) | Redis密码-- 必须 使用时处于env中 sudo -E |
KPIDASH_DRM_DEV | /dev/dri/card1 | DRM设备(卡1=Pi 5上的vc4 GPU) |
KPIDASH_MAX_CLIENTS | 16 | 最大跟踪客户数 |
KPIDASH_ACTIVITY_MAX | 10 | 显示的最大活动数 |
KPIDASH_LOG_FILE | /var/log/kpidash/kpidash.log | 写入Redis的日志路径 |
KPIDASH_PRIORITY_CLIENTS | (无) | 逗号分隔的主机名;按列出的顺序显示在第一位,从未从注册表中删除 |
______________________________________________________________________
本机单元测试(无需硬件)
cmake -B build-tests -DTESTS_ONLY=ON
cmake --build build-tests
ctest --test-dir build-tests -V
# 133 tests: config env-var parsing + Redis JSON parsing______________________________________________________________________
Python客户端
这两个包都通过以下方式进行管理 紫外线 并固定到Python 3.13。
______________________________________________________________________
项目结构
kpidash/
├── CMakeLists.txt # CMake 3.22+, hiredis, cJSON, libdrm, LVGL
├── lv_conf.h # LVGL configuration
├── cmake/
│ └── aarch64-toolchain.cmake # Cross-compile toolchain for Pi 5
├── fonts/
│ ├── generate.sh # lv_font_conv: Montserrat Bold 14-48px + NF icons
│ ├── lv_font_custom.h # Extern declarations for generated bold fonts
│ ├── lv_font_montserrat_bold_*.c # Generated font sources (7 sizes)
│ └── ttf/ # Source TTF files (Montserrat-Bold, SymbolsNerdFont)
├── src/
│ ├── main.c # Entry: config, LVGL init, DRM, poll timers
│ ├── config.{h,c} # Environment variable parsing
│ ├── registry.{h,c} # In-memory client state (mutex-protected)
│ ├── redis.{h,c} # hiredis poll cycle + cJSON parsing
│ ├── status.{h,c} # Status message FIFO queue
│ ├── fortune.{h,c} # fortune popen + pushed-fortune override
│ ├── ui.{h,c} # Screen layout + Redis error overlay
│ ├── protocol.h # Redis key macros + compile-time constants
│ └── widgets/
│ ├── client_card.{h,c} # Per-client arc gauge card (CPU/RAM/GPU/disks)
│ ├── activities.{h,c} # Activity table with live elapsed timers
│ ├── repo_status.{h,c} # Repo card grid (branch/dirty/age indicators)
│ ├── fortune.{h,c} # Fortune text label
│ ├── status_bar.{h,c} # Bottom status bar
│ ├── dev_grid.{h,c} # Pixel grid overlay (dev command)
│ ├── dev_textsize.{h,c} # Font size reference panel (dev command)
│ └── dev_graph.{h,c} # 5-series time-series chart (dev command)
├── tests/
│ ├── test_config.c # ctest: config env-var parsing
│ └── test_redis_json.c # ctest: Redis JSON parsing helpers
├── clients/
│ ├── kpidash-client/ # Python 3.13 daemon + CLI
│ └── kpidash-mcp/ # Python 3.13 MCP server
├── scripts/
│ └── load_test.py # 8-client concurrent write stress test
├── lib/
│ └── lvgl/ # LVGL v9.2.2 (git submodule)
├── specs/
│ ├── 001-mvp-dashboard/ # Spec, plan, tasks, contracts, data model
│ └── 002-exploration-sprint/ # Spec, plan, tasks (widget redesign, dev tools)
└── docs/
├── ARCHITECTURE.md # System design and component diagram
├── CLIENT-PROTOCOL.md # Redis key/value schema reference
└── HANDOFF-CROSSCOMPILE.md # Cross-compilation guide需求
- Pi 5:Debian 13(Trixie),Redis 7.x,
fortune包裹 - Pi包:
libdrm-dev libpng-dev libcjson-dev libhiredis-dev libfreetype-dev libinput-dev libxkbcommon-dev redis-server fortune - 交叉编译主机:Ubuntu 22.04+x86_64,GCC aarch64工具链,CMake 3.22+
- Python客户端:Python 3.13通过 紫外线
