Raspberry Pi Zero 2 W + DVSwitch Dashboard「Hardware Info → Platform」を正しく表示する!


✅ 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.inidisable_functionsを確認
  • 権限問題sudo -u www-data /usr/local/sbin/platformDetect.shで確認
  • dashで失敗 → この版はPOSIX互換なのでOK!

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です