SheevaPlugのLEDを制御してGmailの新着件数を通知させてみる

SheevaPlugを常時稼働させておくなら、サーバー用途以外でも若干は実用的な機能が持たせられないかと構想したものです。
SheevaPlugには電源状態を示す緑色のLEDと用途がよくわからない青色のLEDが搭載されています。

今回は、この青色LEDを使ってGmailの新着件数を通知させることにました。

まず、LEDの制御方法です。コンソールから以下のコマンドを実行してみると一目瞭然です。

echo “none” > /sys/class/leds/plug\:green\:health/trigger (消灯)

echo “default-on” > /sys/class/leds/plug\:green\:health/trigger (点灯)

echo “heartbeat” > /sys/class/leds/plug\:green\:health/trigger (点滅)

あとは、Gmailの新着件数を取得して、条件分けをして上記コマンドのいずれかを実行すればいいことになります。
使用言語はPHPかPerlかRubyかと選択肢は豊富ですが、今までに扱ったことがない言語と言うことでPhytonに挑戦してみます。学習しながらなので、途中で無理そうなら慣れたPHPかPerlで書き起こせばいいでしょう。

PhytonもPHP並にいろいろなライブラリが充実しているようで、細かなコーディングをしなくても、かなり少ない工程数で考えていることぐらいは実装できそうです。

まず、Gmailサーバーへの接続は

poplib.POP3_SSL(‘pop.gmail.com’,995)

であっさり可能です。Gmailはセキュリティ対策されてから、SSLで接続しないといけないようです。ポート番号やサーバー名は自分のアカウントの環境ですから、場合によっては違うことがあるかもしれません。
ライブラリを追加すると、ヘッダのエンコードなどもいとも簡単に実装できます。便利です。

今回作成したコード
 

# -Copyright Chameleon 2010-
#!/usr/bin/env python
import poplib
import email
import email.Header
 
def count():
    login= "your_ID@gmail.com"
    code="your_PASS"
    gServer = poplib.POP3_SSL('pop.gmail.com',995)
    
#Login to gmail server
    gServer.user(login)
    gServer.pass_(code)
 
#Count the number of mail messages
    numMessages = len(gServer.list()[1])
###
    for myList in range(numMessages) :
        for msg in gServer.retr(myList+1)[1]:
            if msg.startswith('Subject'):
                print  unicode(email.Header.make_header(email.Header.decode_header(msg))).encode('shift_jis')
                break
    gServer.quit()
    return numMessages
 
def NoMail():
    f=file("/sys/class/leds/plug:green:health/trigger","w")
    f.write("none")
    f.close()
    print "none"
def SomeMail():
    f=file("/sys/class/leds/plug:green:health/trigger","w")
    f.write("default-on")
    f.close()
    print "deault-on"
def LotsOfMail():
    f=file("/sys/class/leds/plug:green:health/trigger","w")
    f.write("heartbeat")
    f.close()
    print "heartbeat"
def main():
    mailcount = count()
    print "The number of messages is %d ", % (mailcount)
    if mailcount == 0:
      NoMail()
    elif mailcount <3:
      SomeMail()
    else:
      LotsOfMail()
 
if __name__ == '__main__':
    main()

後は適当な名前で保存して、このファイルに実行権限を与えます。/usr/sbinに「led.py」として置きました。そして、cronにこのスクリプトを適当な間隔で実行するように登録します。今回は10分間隔での確認とします。

*/10 * * * * /usr/bin/env phyton /usr/sbin/led.py

こんな感じです。cronは直接、設定ファイルを編集せず、

crontab -e

で編集します。

新着0では消灯。
3件未満で常時点灯。
3件以上で点滅です。メールのカウント数の閾値は適当に変更可能です。
これで使途不明の青色LEDがGmailの通知ランプになりました。
phytonは相当、書きやすいスクリプトで感激しました。さすがに、SheevaPlugでコーディングは無理なので、Windows環境で開発できる、「PortablePython_1.1_py2.6.1」という処理系をダウンロードしました。

P.S.
メールでおたずねがあったので、追記しておきます。
print文での出力は、標準出力(普通はコンソールの画面)には出力されません。cronで実行した場合は、root宛のメール文中に出力されます。従って、print文の出力を確認するにはroot宛のメールが確認できる環境が必要です。
たとえば、

apt-get install postfix
apt-get install mailx

で、postfixやmailxをインストールして、mailコマンドが使えるようにしておきます。こうしておけば、cronの動作状態もroot宛のメールで確認できるので便利です。

Leave a Reply

XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>