Raspberry Pi Zero 2 W + DVSwitch Dashboard「Hardware Info → Platform」を正しく表示する!
2025年12月5日
2025年12月12日
✅ Raspberry Pi Zero 2 W + DVSwitch Dashboard
「Hardware Info → Platform」を正しく表示する!
🎯 なぜ正しく表示する必要があるの?
DVSwitch Dashboardの「Hardware Info → Platform」は、機器の識別と保守性の要です。\ ここが「Unknown ARM based System」のままだと…
- 🔍 トラブルシュートが難しい:機種特定できず、原因切り分けに時間がかかる
- 🛠 保守性が低下:温度管理や性能差に気づきにくい
- 📦 構成管理が不正確:複数台運用時に混乱しやすい
原因:古い判定スクリプトが最新Raspberry Pi(Zero 2 Wなど)を認識できないため。\ 解決策:Raspberry Piが提供する Device Treeのモデル情報を使って、確実に表示!
✅ 対象環境
- Raspberry Pi Zero 2 W(ARMv7)
- OS:Debian GNU/Linux 11 (bullseye)
- DVSwitch Dashboard(
/var/www/html/include/system.php) - Webサーバ:lighttpd
🚀 手順(バックアップから表示確認まで)
STEP 1:既存スクリプトをバックアップ
sudo cp /usr/local/sbin/platformDetect.sh /usr/local/sbin/platformDetect.sh.bak.$(date +%F)
例:
platformDetect.sh.bak.2025-12-04
STEP 2:新しいスクリプトを作成
sudo nano /usr/local/sbin/platformDetect.sh.new
以下をコピペして保存(POSIX sh互換・安全版):
#!/bin/sh
#
# platformDetect.sh - Return the board/platform name for DVSwitch Dashboard
# Safe POSIX-sh version (no bash-only features)
#
# --- Armbian: prefer BOARD_NAME if available ---
BOARD_NAME=""
if [ -r /etc/armbian-release ]; then
. /etc/armbian-release
fi
if [ -n "$BOARD_NAME" ]; then
echo "$BOARD_NAME"
exit 0
fi
# --- 1) Try device-tree model (most reliable on Raspberry Pi); handle NUL-termination ---
for p in /sys/firmware/devicetree/base/model /proc/device-tree/model; do
if [ -r "$p" ]; then
# remove NULs and trailing spaces
dt_model=$(tr -d '\0' < "$p" | sed 's/[[:space:]]\+$//')
if [ -n "$dt_model" ]; then
echo "$dt_model"
exit 0
fi
fi
done
# --- 2) Try /proc/cpuinfo Model line ---
model_line=$(grep -m1 -E '^Model[[:space:]]*:' /proc/cpuinfo 2>/dev/null | sed 's/^Model[[:space:]]*:[[:space:]]*//')
if [ -n "$model_line" ]; then
echo "$model_line"
exit 0
fi
# --- 3) Fallback: use Hardware field with minimal mapping ---
hardware_field=$(grep -m1 -E '^Hardware[[:space:]]*:' /proc/cpuinfo 2>/dev/null | sed 's/^Hardware[[:space:]]*:[[:space:]]*//')
# Known SBCs
echo "$hardware_field" | grep -qi '^ODROID' && { echo "Odroid XU3/XU4 System"; exit 0; }
if echo "$hardware_field" | grep -qi 'sun8i'; then
if [ -n "$BOARD_NAME" ]; then
echo "$BOARD_NAME"
else
echo "sun8i based Pi Clone"
fi
exit 0
fi
echo "$hardware_field" | grep -qi 's5p4418' && { echo "Samsung Artik"; exit 0; }
# --- Important: BCM2710 -> Raspberry Pi Zero 2 W ---
echo "$hardware_field" | grep -qi 'BCM2710' && { echo "Raspberry Pi Zero 2 W"; exit 0; }
# --- 4) Legacy Raspberry revision mapping (best-effort) ---
model_name=$(grep -m1 'model name' /proc/cpuinfo 2>/dev/null | sed 's/.*: //')
echo "$model_name" | grep -q '^ARM' && {
board_rev=$(grep -m1 'Revision' /proc/cpuinfo 2>/dev/null | awk '{print $3}' | sed 's/^100//')
case "$board_rev" in
*0002) echo "Model B Rev 1.0 (256MB)"; exit 0;;
*0003) echo "Model B Rev 1.0 + ECN0001 (no fuses, D14 removed) (256MB)"; exit 0;;
*0004) echo "Model B Rev 2.0 (256MB)"; exit 0;;
*0005) echo "Model B Rev 2.0 (256MB)"; exit 0;;
*0006) echo "Model B Rev 2.0 (256MB)"; exit 0;;
*0007) echo "Model A Mounting holes (256MB)"; exit 0;;
*0008) echo "Model A Mounting holes (256MB)"; exit 0;;
*0009) echo "Model A Mounting holes (256MB)"; exit 0;;
*000d) echo "Model B Rev 2.0 (512MB)"; exit 0;;
*000e) echo "Model B Rev 2.0 (512MB)"; exit 0;;
*000f) echo "Model B Rev 2.0 (512MB)"; exit 0;;
*0010) echo "Model B+ Rev 1.0 (512MB)"; exit 0;;
*0011) echo "Compute Module 1 Rev 1.0 (512MB)"; exit 0;;
*0012) echo "Model A+ Rev 1.1 (256MB)"; exit 0;;
*0013) echo "Model B+ Rev 1.2 (512MB)"; exit 0;;
*0014) echo "Compute Module 1 Rev 1.0 (512MB)"; exit 0;;
*0015) echo "Model A+ Rev 1.1"; exit 0;;
*900021) echo "Model A+ Rev 1.1 (512MB)"; exit 0;;
*900032) echo "Model B+ Rev 1.2 (512MB)"; exit 0;;
*900092) echo "Pi Zero Rev 1.2 (512MB)"; exit 0;;
*900093) echo "Pi Zero Rev 1.3 (512MB)"; exit 0;;
*9000c1) echo "Pi Zero W Rev 1.1 (512MB)"; exit 0;;
*9020e0) echo "Pi 3 Model A+ (512MB) - Sony, UK"; exit 0;;
*920092) echo "Pi Zero Rev 1.2 (512MB)"; exit 0;;
*920093) echo "Pi Zero Rev 1.3 (512MB)"; exit 0;;
*900061) echo "Compute Module 1 Rev 1.1"; exit 0;;
*a01040) echo "Pi 2 Model B (1GB) - Sony, UK"; exit 0;;
*a01041) echo "Pi 2 Model B (1GB) - Sony, UK"; exit 0;;
*a02082) echo "Pi 3 Model B (1GB) - Sony, UK"; exit 0;;
*a020a0) echo "Compute Module 3 Rev 1.0 (1GB)"; exit 0;;
*a020d3) echo "Pi 3 Model B+ (1GB) - Sony, UK"; exit 0;;
*a21041) echo "Pi 2 Model B (1GB) - Embest, CH"; exit 0;;
*a22042) echo "Pi 2 Model B (1GB) - Embest, CH"; exit 0;;
*a22082) echo "Pi 3 Model B (1GB) - Embest, CH"; exit 0;;
*a220a0) echo "Compute Module 3 Rev 1.0 (1GB)"; exit 0;;
*a32082) echo "Pi 3 Model B (1GB) - Sony, JPN"; exit 0;;
*a52082) echo "Pi 3 Model B (1GB) - Stadium"; exit 0;;
*a22083) echo "Pi 3 Model B (1GB) - Embest"; exit 0;;
*a02100) echo "Compute Module 3+ Rev 1.0 (1GB)"; exit 0;;
*a03111) echo "Pi 4 Model B (1GB) - Sony, UK"; exit 0;;
*b03111) echo "Pi 4 Model B (2GB) - Sony, UK"; exit 0;;
*c03111) echo "Pi 4 Model B (4GB) - Sony, UK"; exit 0;;
*b03112) echo "Pi 4 Model B Rev 1.2 (2GB) - Sony, UK"; exit 0;;
*c03112) echo "Pi 4 Model B Rev 1.2 (4GB) - Sony, UK"; exit 0;;
*d03114) echo "Pi 4 Model B Rev 1.4 (8GB)"; exit 0;;
esac
}
# --- 5) Final fallback: generic arch label ---
echo "Generic $(uname -m) class computer"
exit 0
STEP 3:権限を付与
sudo chmod 0755 /usr/local/sbin/platformDetect.sh.new
STEP 4:動作確認
/usr/local/sbin/platformDetect.sh.new
# → Raspberry Pi Zero 2 W Rev 1.0
sudo -u www-data /usr/local/sbin/platformDetect.sh.new
# → 同じ結果ならOK
STEP 5:置き換え
sudo mv /usr/local/sbin/platformDetect.sh.new /usr/local/sbin/platformDetect.sh
STEP 6:Webサーバ再起動
sudo systemctl restart lighttpd
STEP 7:Dashboardをハードリロード
- ブラウザで Ctrl+F5
- 「Hardware Info → Platform」に\ ✅ Raspberry Pi Zero 2 W Rev 1.0 が表示されれば成功!
🔍 トラブルシュート
- PHPの
exec()が無効 →php.iniでdisable_functionsを確認 - 権限問題 →
sudo -u www-data /usr/local/sbin/platformDetect.shで確認 - dashで失敗 → この版はPOSIX互換なのでOK!
