python で gainer


GAINER


LL Tiger でフィジカルコンピューティングのセッションをやってたので。。昔書いたのを、書いておこう。
発表していたかたは Funnel を Actionscript 経由で操作してたけど。python で直接操作します。

http://www.slideshare.net/biscuitjam/lightweight-language-tiger-2010-4885267

ローカルの MacBook に USB で gainer を接続。
最終的にはサーバの USB 端子に gainer つないでリレーで商用電源が On/Off できるなぁと思ったのですが、リレー動かすにはの電力が足らない&信頼性に欠ける。(ルータの電源を入り切りしようとしてた)とかあって放置してました。

MacBook ( apache ) <- USB ケーブル-> gainer で確認したけど、MacBook がサーバでも変わらない。(はず)


サーバに index.cgi として置いておいてアクセスすると『On』『Off』ボタンを押すとリレーが動きます。


#!/usr/bin/python
# -*- coding: utf-8 -*-
html = '''Content-Type: text/html
<html>
<head>
  <title>どのボタンが押されたか取得する</title>
</head>
<body>
<h1>テストです。</h1>
<p>押されたボタンは、「%s」です。</p>
<p>status : %s </p>
<form action="index.cgi" method="post">
  <input type="submit" name="btn1" value="ON" />
  <input type="submit" name="btn2" value="OFF" />
</form>
</body>
</html>
'''
import cgi
import serial
import time
ser = serial.Serial(
    '/dev/cu.usbserial-A4004QiO',
    baudrate = 38400,
    timeout=0,
    )
ser.write("KONFIGURATION_1*")
time.sleep(0.5)
msg = ser.readline()
f = cgi.FieldStorage()
if f.getfirst('btn1'):
	ser.write('H0*')
	btn = 'ON'
	time.sleep(0.5)
	msg = ser.readline()
elif f.getfirst('btn2'):
	ser.write("L0*")
	btn = 'OFF'
	time.sleep(0.5)
	msg = ser.readline()
else:
	btn = ''
	msg = ser.readline()
print html %(btn,msg,)
ser.close()


昔の写真あった!
じつは Perl でやろうとして出来なくて python でできたのでした。