TEMPer(USB温度計)を使ってサーバルームの温度監視

Python
スポンサーリンク


データセンターやクラウド環境の温度監視は特にユーザが意識する必要はないけど自社のサーバールームの温度監視は自分たちで何とかするしかない。

毎朝サーバ達は元気にしているか様子を伺いに行くことが出来るのであればそれでも良いかもしれないが、私の場合は複数拠点を一人で見ているので勝手に温度監視してくれるものがあると大変助かります。

今回はUSB温度計を使って、設定した温度の閾値を超えた場合にアラートメールを送信する仕組みを簡単に作ってみます。

スポンサーリンク

準備するもの

今回使用するものは次の通りです。

使い古しのノートPC

以前、Windows7が動いていたPCを再利用して、OSはUbuntuをインストールしてあります。

24時間稼働させて使用するのでサスペンドは無効にしておきます。

【Ubuntu】ノートパソコンのサスペンドを無効にしてサーバとして使う
お役御免になったノートPCにLinuxをインストールして、ちょっとしたサーバとして再活用するケースがあると思います。 サーバとして利用する際にノートパソコンを閉じたままでもサスペンドしない設定にしておく方法をご紹介します。 試した環境...

ついでに普段使い慣れているPCからSSHで接続できるようにSSHも利用できるようにしておきます。

【Ubuntu】SSHサーバのインストールとWindowsからの接続
Ubuntuサーバへの接続ですが、VNCとかでGUIで接続しても良いのですが、基本的にCUIでも全て同じことができるので、貧弱なサーバに鞭打つのはやめてSSHで接続して作業をすることにしました。 試した環境 今回、試した環境です。 c...

TEMPer USB温度計

今回のメインアイテムですね。

Amazonで購入できるようです。
値段は1,380円(2021年9月確認)

私は中国在住なのでAmazonではなく、「淘宝」で購入しました。
32元(2021年9月時点のレートで550円くらい)

温度取得

Gitにある温度取得ツールを利用します。
Pythonで作られているので、サーバ(というか使い古しのノートPC)にPythonをインストールしておきます。

apt install python3-serial

Gitからツールを持ってきて、今回の作業フォルダ「/usr/local/src/chktemp」にtemper.pyをコピーします。
※作業フォルダは作成しておいてください。

# cd /usr/local/src
# git clone https://github.com/urwen/temper.git
# cd temper
# cp temper.py /usr/local/src/chktemp

あとこちらのサイトでも記載がありますが、なぜか温度が7℃高く取得されます。
temper.pyのソースを修正しておきましょう。

参考

USB温度計 TEMPer - note.nogisawa.net

アラートメール送信

サーバルームの室温が閾値を超えた場合にアラートメールを送信します。

※引数で取得した温度を取得しています。
※エラー処理は必要に応じて追加してください。
※ファイル名を「sendmail.py」で作成したと仮定します。
import smtplib
import sys
from email.mime.text import MIMEText
from email.utils import formatdate

' Microsoft Office 365の場合
' username、passwordは各自の環境に合わせて書き換え
smtp_host ='smtp.office365.com'
smtp_port = 587
username = 'user@example.com'
password = 'password'
from_address = 'from-user@example.com'
to_address = 'to-user1@example.com, to-user2@example.com'
to_list = to_address.split(',')

text = "ただ今の室温は" + sys.argv[1]
msg = MIMEText(text)
msg['Subject'] = 'メール件名を記入
msg['From'] = from_address
msg['To'] = to_address
msg['Date'] = formatdate()

smtp = smtplib.SMTP(smtp_host, smtp_port)
smtp.starttls()
smtp.login(username, password)
result = smtp.sendmail(from_address, to_list, msg.as_string()) 
smtp.close()

Shellで閾値判定

TEMPerの温度を取得して、閾値を超えていた場合、メール送信するようにします。

※室温の閾値を「25」に設定します。
※エラー処理は必要に応じて追加してください。
※ファイル名を「monitor.sh」で作成したと仮定します。
#!/bin/bash

LIMIT=25
TEMPER=`sudo /usr/local/src/chktemp/temper.py | head -n 1 | awk '{ print $7 }'` 

OLDIFS=$IFS
IFS='.'
set -- $TEMPER
wkTEMPER=$1
IFS=$OLDIFS

if [ $wkTEMPER -ge $LIMIT ]; then
  python3 /usr/local/src/chktemp/sendmail.py $TEMPER
fi

Cron設定

0:00、6:00、12:00、18:00に起動して、温度チェックするようにCron設定します。

crontab -e
00 00,06,12,18 * * * sh /usr/local/src/chktemp/monitor.sh

テストする場合は閾値を「0」など、明らかにサーバルームの室温より低い値に設定してみてください。