wake on lanの実現方法の一つ
背景
wake on lan(以降wol)を、機種変前のスマホを使って実現しようとしていたが外出中にスマホがスリープ?してしまい、外出先からwolが出来ない。そこでスマホを使わずraspberry pi(以降raspi)を使う別の方法を考えた。
前提条件
- raspiにsylpheedがインストール済み
- sylpheedから周期的にポーリング受信可能なメールアドレスあり(私の場合自宅サーバー上)
- raspiにwakeonlanがインストール済み
sylpheedでの設定
sylpheedでメッセージ受信したらコマンド実行 に一般設定で設定する
例:
/home/pi/tools/wolmail.sh
他に、2分ごとにメールをチェックする様にした。自宅サーバーでなければ、5分ごととかもう少し間隔を長めにした方が良いかもしれない。 起動までに時間がかかるが。
メール受信時に実行するシェル
wolmail.shを以下の様にした。試行錯誤で書いたものなので効率の良くないコードではあるが。
#!/bin/bash
ls -trl /home/pi/Mail/inbox | tail -1 >/home/pi/logs/wolsh.log
cat /home/pi/logs/wolsh.log | awk '{printf("/home/pi/Mail/inbox/%s\n",$9)}' >/home/pi/logs/woltemp
prefile=/home/pi/logs/woltemp
while read filename
do
cat $filename |awk -f /home/pi/tools/wolmail.awk
done < ${prefile}
wolsh.log、woltempは作業用のファイル
Pathは、念のためフルパスで記述。 sylpheedの受信メールはMail/inboxにあった。最新のものを使用。9番目のフィールドが該当メールのファイル名(数字)であった。
wakeonmailするためのawkスクリプト
awkスクリプトを、wolmail.awkとして下記の様に作成した。
BEGIN{
}
{
if (NF >=2 ) {
if ($1 == "wolkeyword") {
for (i=2;i<=NF;i++) {
if ($i=="aaaaa") system("/home/pi/tools/wol-aaaaa.sh")
if ($i=="bbbbb") system("/home/pi/tools/wol-bbbbb.sh")
if ($i=="ccccc") system("/home/pi/tools/wol-ccccc.sh")
}
}
}
}
END{
print "wol sent end" > "/home/pi/logs/wol_mail_status"
}
wol-xxxxx.shは、wakeonlanコマンドのためのシェル
また、上記は3台に対応
wol用のメール
subjectもしくは本文内に、wolkeyword xxxxx の様に記述してメールする事で良い
Leave a Comment