利用小米Homeassistant控制NAS风扇转速达到温度和噪音的平衡
使用Homeassistant联动米家PWM风扇来达到为unraid外置硬盘降温脚本
hello大家好,这次给大家带来关于unraid的硬盘温度控制问题解决方案,集成到Homeassistant
目的:为了降低DIY的NAS风扇转速所产生的噪音问题

我的NAS:
24盘位NAS(机柜头+开放式机箱)以前只能外接暴力风扇的,设置一个固定的转速,为了高负载的散热就会很吵,不够智能化
本次折腾购买的配件如下
米家的PWM控制器
支持外部PWM的暴力风扇电源
购买的:小米的PWM的控制模块,红线是一路PWM,黑线是接地的GND
小米PWM控制器
暴力风扇控制外部PWM控制版本我的NAS硬盘散热只有用三个接口,没有找到合适的,后期自己设置一个三口的PWM风扇试试
这是一个大概的连接方式

在Homeassistant中,做两件事
创建一个用于unraid脚本能访问的长期令牌——复制
找到PWM风扇的实体标识符——复制
创建令牌

来到unraid中,使用User Scripts插件 新建一个用于PWM风扇调速的定时脚本
脚本功能如下
跳过休眠硬盘,防止频繁唤醒
跳过nvme加速盘,不在一个阵列里面
发送Homeassistant发送PWM占比,修改转速
脚本代码如图只要根据自己的实际,修改最下面的
调用 Home Assistant API 调节设备亮度
Homeassistant API 秘钥
实体标识符
Homeassistant的IP
就可以完成,完成代码如下
#!/bin/bash # 只获取类型为 disk 的 sd* 设备 ATA_DISKS=$(lsblk -ln -o NAME,TYPE | awk '$1 ~ /^sd/ && $2 == "disk" {print "/dev/" $1}') # 初始化最高温度 MAX_TEMP=0 # 检测硬盘温度函数 detect_temp() { local disk=$1 # 使用 hdparm 检查硬盘状态 STATE=$(hdparm -C "$disk" 2>/dev/null | awk -F: '/drive state is/ {gsub(/^[ t]+|[ t]+$/, "", $2); print $2}') if [ "$STATE" = "standby" ]; then # 硬盘处于休眠状态,跳过 smartctl 测试以免唤醒 echo "设备: $disk 当前状态: standby(跳过测温)" return fi # 非 standby 状态下,检测温度 TEMP=$(smartctl -A "$disk" 2>/dev/null | grep -i "Temperature_Celsius" | awk '{print $10}') if [ -z "$TEMP" ] || ! [[ "$TEMP" =~ ^[0-9]+$ ]]; then echo "设备: $disk 温度: 无法检测" else echo "设备: $disk 温度: $TEMP°C" if [ "$TEMP" -gt "$MAX_TEMP" ]; then MAX_TEMP=$TEMP fi fi } for disk in $ATA_DISKS; do detect_temp "$disk" done # 输出最高硬盘温度 echo "最高硬盘温度: $MAX_TEMP°C" # 根据最高温度设置 PWM 值 if [ "$MAX_TEMP" -gt 45 ]; then PWM=100 elif [ "$MAX_TEMP" -ge 40 ]; then PWM=$(( (MAX_TEMP - 40) * 10 + 50 )) elif [ "$MAX_TEMP" -ge 35 ]; then PWM=$(( (MAX_TEMP - 35) * 10 + 30 )) elif [ "$MAX_TEMP" -ge 30 ]; then PWM=$(( (MAX_TEMP - 30) * 4 + 10 )) else PWM=10 fi echo "设置PWM值: $PWM%" # 调用 Home Assistant API 调节设备亮度 curl -X POST -H "Authorization: Bearer HomeassistantAPI秘钥" -H "Content-Type: application/json" -d "{"entity_id": "实体标识符", "brightness_pct": $PWM}" http://Homeassistant的IP:8123/api/services/light/turn_on
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
