iT邦幫忙

2022 iThome 鐵人賽

DAY 11
0
IT管理

用UNRAID打造AIO全生態系列 第 11

自建智慧機櫃 - 自動控制風扇實作與開機自啟動

  • 分享至 

  • xImage
  •  

還沒了解本節用到的材料,先去看看昨天的介紹喔~

本節程式目標

可用樹梅派控制所有風扇,並在UNRAID主機容易發熱的磁碟陣列位置加裝排風扇

再做到主機開/關機時陣列風扇也能跟著開啟/關閉

由於這款Relay最多可接四個風扇,因此除了上置兩個原預留兩個安裝空間外
額外在磁碟陣列位置加裝排風扇的目的是為了讓壅擠的磁碟陣列保持適當溫度
畢竟在AIO環境中,硬碟一定會頻繁讀取
必須以降溫為優先考量

  • 機櫃安裝圖
    https://ithelp.ithome.com.tw/upload/images/20220925/20117399jOd3D23B4B.jpg

  • Relay電路圖(常閉接法)

自控陣列風扇

辛苦的接完電路後,要來實作程式了
開頭有講到目標是要"自控"機櫃內的陣列位置風扇
所以我們要讓樹梅派和主機處在一個網段下

讓數梅派去不斷驗證主機是否開機
如果開機就啟動陣列位置風扇,反之則不啟動

要達成此效果,我們要使用網路工具ping
讓樹梅派相隔已幾秒就驗證一下主機是否處在開機狀態(或網路是否連通)

以下是我自己寫的程式碼,請讀者依自身情況做修改:
(如有不懂詳讀註解或在留言區提問~)

#!/usr/bin/python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO 
import os,time

#ping 方法(method) 函式
#每做一次就會回傳一次主機(unraid)狀態
#0表示無回應(no response)或斷線(time out)
def autoctrl(host):
    response = os.system("ping -c 1 " + host)
    return response

#定義主機IP
#繼電器腳位預設22請自行修改
unraid ="<你的主機IP>"
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

#輸出主程式
if __name__ == '__main__':
	try:
		#每五秒就做一次ping函式
		while True:
			time.sleep(5)
			autoctrl(unraid)
			if autoctrl(unraid) == 0:
				GPIO.setup(22, GPIO.OUT, initial=GPIO.HIGH)
				GPIO.output(22, GPIO.HIGH)
				time.sleep(0.1)
				print("{} front fan is on".format(unraid))
			else:
				GPIO.setup(22, GPIO.OUT, initial=GPIO.HIGH)
				GPIO.output(22, GPIO.LOW)
				time.sleep(0.1)
				print("{} front fan is off".format(unraid))
	except:
		exit("exit")
	#中止程式時清除GPIO
	finally:
		GPIO.cleanup()
		exit("exit")

開機自動運行

最後來講講如何在樹梅派開機時自動運行程式
以免重開機後無法自動控制風扇

1.修改rc.local檔案

sudo nano /etc/rc.local

2.加入開機執行指令即可
小技巧
採用土法煉鋼法/images/emoticon/emoticon34.gif
由於開機當下python主程式一定還沒啟動
所以直接延遲個幾秒鐘即可~

sleep 20s &&
python3 /home/pi/Downloads/cmd/switch_autoctrl.py &

上一篇
自建智慧機櫃 - 散熱自動化
下一篇
Syslog Server 操作與設定
系列文
用UNRAID打造AIO全生態31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言