利用小米Homeassistant控制NAS风扇转速达到温度和噪音的平衡

2024-12-27 12:30:37 5点赞 34收藏 0评论

使用Homeassistant联动米家PWM风扇来达到为unraid外置硬盘降温脚本

hello大家好,这次给大家带来关于unraid的硬盘温度控制问题解决方案,集成到Homeassistant

目的:为了降低DIY的NAS风扇转速所产生的噪音问题

利用小米Homeassistant控制NAS风扇转速达到温度和噪音的平衡

我的NAS:

24盘位NAS(机柜头+开放式机箱)24盘位NAS(机柜头+开放式机箱)

以前只能外接暴力风扇的,设置一个固定的转速,为了高负载的散热就会很吵,不够智能化

本次折腾购买的配件如下

  • 米家的PWM控制器

  • 支持外部PWM的暴力风扇电源

购买的:小米的PWM的控制模块,红线是一路PWM,黑线是接地的GND

小米PWM控制器小米PWM控制器暴力风扇控制外部PWM控制版本暴力风扇控制外部PWM控制版本

我的NAS硬盘散热只有用三个接口,没有找到合适的,后期自己设置一个三口的PWM风扇试试

这是一个大概的连接方式

利用小米Homeassistant控制NAS风扇转速达到温度和噪音的平衡

在Homeassistant中,做两件事

  1. 创建一个用于unraid脚本能访问的长期令牌——复制

  2. 找到PWM风扇的实体标识符——复制

创建令牌创建令牌利用小米Homeassistant控制NAS风扇转速达到温度和噪音的平衡利用小米Homeassistant控制NAS风扇转速达到温度和噪音的平衡

来到unraid中,使用User Scripts插件 新建一个用于PWM风扇调速的定时脚本
脚本功能如下

  1. 跳过休眠硬盘,防止频繁唤醒

  2. 跳过nvme加速盘,不在一个阵列里面

  3. 发送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


作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
34
扫一下,分享更方便,购买更轻松