メール着信を知らせるUBSガジェットで遊ぶ

以前から、画面の外で何かを表示するガジェットに興味があったので、dealextreamで面白そうなのを見つけた。
コメント欄を読むと、解析が進んでいてLEDの状態をプログラミングで操作できるらしい。
といわけで、買ってみた。1ドル83円換算で600円くらい。

多少割高だが、日本でも売ってるみたい。送料考えると遊べる値段じゃないが。
[rakuten:r35shop:10228586:detail]

数週間後、無事到着。付属のCDのアプリを無視して、早速プログラミング。
今回はpythonを使ったが、C#もつかえるみたい。プラットフォームもlinuxにも対応らしい。
今回、参考にしたページは
Assaf Nativ's Blog: CruiseControl Reporting, Attention & Posting (CRAP)
LED操作のメインのソースは
http://svn3.xp-dev.com/svn/USBEmailNotifier/
のcontrolMailLED.pyw。windowsのexe化を想定しているらしく、いろいろあるが無視。
その他に必要なライブラリは

easy_install pywinusb

で入った。んでテストはこんな感じ

python controlMailLED.pyw 1

さて、ここからどうしようか、ということでCPUの負荷でも表示させてみる。
CPU消費に関しての参考ページ
CPUとメモリ消費量の3次元グラフをぐりぐり動かす - ぶりとだいこん
ライブラリは

easy_install psutil

で、出来たソースがこれ

import time
import psutil
import sys
from pywinusb import hid

def lightEnvelope(color):
    # Evelop device
    devices = hid.HidDeviceFilter( vendor_id = 0x1294, product_id = 0x1320 ).get_devices()
    if 0 != len(devices):
        device = devices[ 0 ]
        if device is None:
            print "Device not found"
            sys.exit( 1 )
        device.open()
        report = device.find_output_reports()[ 0 ]
        report[ 0xff000001 ][ 0 ] = color
        report.send()
        device.close()

formercolor = 0
interValSec = 1

while True:
    cpu =  psutil.cpu_percent(interval=interValSec, percpu=False)
    if cpu < 20:
        color = 1 #blue
#        color = 0 #off
#        color = 4 #cyan
#        color = 5 #purple
#        color = 6 #yellow
#        color = 7 #white
    elif cpu < 50:
        color = 3 #green
    elif cpu <= 100:
        color = 2 #red

    if color != formercolor:
        lightEnvelope(color)
#    print cpu , color
    formercolor = color
    time.sleep(interValSec)

いちいちデバイスをcloseしてるのは必要ないかもだが、それほどの負荷でもないから、これでいいかな。

こんな感じで動いています

青は負荷ほぼゼロ

希望通りの動きはしてくれたのだが、それほどの感動が無い・・・。
あまり便利じゃないんだなこれが。