最近入手了一款6盘位矿渣:
15833398652603.png
它前面有一个LCD屏幕,用以显示硬盘信息以及风扇转速。LCD是1.8寸的z180sn009,由stm32f030控制,从cp2102转到usb接主机。所以理论上可以通过重新编程来实现任何想要的效果,不过太麻烦了
在移除了自带的系统后,没有相应的驱动程序,屏幕的硬盘状态信息显示功能就失效了,因此需要编写脚本向stm32传输所需的数据。好在这个数据格式已经有大佬解析出来了:

"@QRC,$qrcode,${disk_num[5]},${disk_num[4]},${disk_num[3]},${disk_num[2]},${disk_num[1]},${disk_num[0]"

其中@QRC为二维码标识符,qrcode为二维码信息,后面的为硬盘图标颜色信息,用以改变对应硬盘图标的颜色。
大佬同时也编写了脚本,此脚本可以显示硬盘的安装状态:

#!/bin/bash

lcd_ctl(){
  lcd_port=$(ls /dev/ttyUSB* |head -n1)
  scsi_port=($(ls -l /sys/class/scsi_disk |egrep -v usb |awk '{print $9}' |grep -oE '[0-9].*'|cut -d: -f1))
  qrcode=$(ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:" |xargs)
  #qrcode=$(date)
  stty -F $lcd_port speed 115200
  disk_num=( 0 0 0 0 0 0 )
  for ((i=0;i<${#scsi_port[@]};i++));do
    num=$(( 5 - ${scsi_port[i]} ))
      disk_num[$num]=3
  done
  diskinfo="${disk_num[5]},${disk_num[4]},${disk_num[3]},${disk_num[2]},${disk_num[1]},${disk_num[0]}"
  echo "@QRC,$qrcode,$diskinfo*" > $lcd_port
}

while true;do
  lcd_ctl
  sleep 5
done

不过对于已经6个硬盘全部装满的我来说实在是没啥卵用,考虑到unraid可以实现硬盘单独休眠,因此想要实现如下功能:硬盘未安装、硬盘休眠、硬盘运行三个状态用不同的颜色表示。为了实现此功能,需要获取硬盘的运行状态,经查找,以下命令可以输出对应硬盘的状态:

smartctl -n standby $disk

$disk为硬盘路径。
最终修改的脚本如下:

#!/bin/bash

lcd_ctl(){
  # 获得LCD的USB端口
  lcd_port=$(ls /dev/ttyUSB* |head -n1)
  # 设置波特率
  stty -F $lcd_port speed 115200
  
  qrcode="10.0.0.4"

  # 获取所有scsi硬盘路径
  scsi_disk=("$(smartctl --scan | cut -b 1-8 | sed ':a ; N;s/\n/ / ; t a ; ')")
  # 初始化硬盘状态(未安装)
  disk_status=( 0 0 0 0 0 0 )
  process_num=0
  for disk in $scsi_disk
  do
    # 检测硬盘状态
    if [[ $(smartctl -n standby $disk) =~ "ACTIVE" ]];then
      disk_status[$process_num]=3 # 运行中
    elif [[ $(smartctl -n standby $disk) =~ "STANDBY" ]];then
      disk_status[$process_num]=1 # 已休眠
    fi
    let process_num+=1
    echo $process_num
  done

  diskinfo="${disk_status[5]},${disk_status[4]},${disk_status[3]},${disk_status[2]},${disk_status[1]},${disk_status[0]}"
  # 输出到LCD
  echo "@QRC,$qrcode,$diskinfo*" > $lcd_port
}

while true;do
  lcd_ctl
  sleep 30
done

参考文章:
399全新6盘NAS测评与升级
UNRAID利用python获取硬盘信息(休眠状态+温度)