0

githubのリポジトリ数が100超えた

去年のゴールデンウィークの増井研合宿でgithubの使い方を山プルギス氏に教えてもらってから18ヶ月、ついに公開リポジトリ数が100個に達した。


ぜんぜんgithub上で他人のプロジェクトに首を突っ込んだりしていなかったので、100個のうちほぼ全てが自分で開始したプロジェクトという事になる。だいたい週1つのペースでリポジトリが増えていったわけか


100個目のプロジェクトは、notify-lightだった。
これは家の電灯が点いているかどうかを明るさのセンサーで監視して、Skypeのshokai_botというアカウントが俺に通知してくれるシステム。便利である。防犯的な意味で。
60行ぐらいのRubyスクリプト1ファイルだけで実装されている。


botからSkypeのグループチャットでこういうのが来る。


センサーを使うのもSkypeへの通知も、すでに便利なツールが作ってあって全部HTTPでできる。
ruby notify-light.rb -light http://localhost:8783/ -skype http://localhost:8787/
という風に実行すればセンサーを定期的に監視してSkypeに送信できる。


■しくみ
CdSという明るさが検出できるセンサーをArduino等に適当に接続し、シリアル通信してMacやLinuxに送る。
serial-http-gatewayというプロジェクトを以前作ってあるので、これを使うとシリアルポートから受信したデータを溜めてjson形式で吐き出すHTTPサーバーが作れる。


読んだjsonにはタイムスタンプとセンサーの値(明るさが)入っているので、一定時間内の平均値を計算してノイズを消し、Skypeに通知する。

Skypeへの通知は先日作ったskype-chat-gatewayというのを使っている。
1年ぐらい前にskype-socket-gatewayというのを作ったけどwindows用だったのでもう使わなくなったし、socketよりもhttpから使えたほうが便利なのと、chat_idという概念がわかりにくいので1チャット1プロセス1portが対応するように作りなおした。
また、MacとLinuxでSkype APIを使う仕組みが違うので、それぞれ別々に実装した。

Linux版はまだちょっと微妙なんだけど、Mac版は出来がよくてWebブラウザからSkype Chatができるサーバーとかも付いているので便利です。

0

serial-http-gateway作った

シリアルポートをhttpで使えるツールを作った。
ブラウザでhttp://localhost:8783を開くとデータが読める。POSTでデータを送ると書き込める。

webブラウザでロボットを操作する部分がある、OB降臨システムというのを作っているのでその部品として作った。

githubに全部置いた。



■インストールと起動
git clone git://github.com/shokai/serial-http-gateway.git
cd serial-http-gateway
gem install serialport eventmachine eventmachine_httpserver json ArgsParser


Arduino等をMacに接続すると/dev/tty.usb〜〜という名前になる。引数に渡して起動する。
./serial-http-gateway --help
./serial-http-gateway /dev/tty.usbserial-A7006Rqn
port 8783で起動する。引数-portで変更できる。



gemが全て入っていれば実行ファイル単体で動くので、適当なパスが通っている場所にコピーして置くと便利。
sudo cp serial-http-gateway /usr/local/sbin/



■使う
HTTP POSTでシリアルポートに書き込める。
% curl -d 'testtest' 'http://localhost:8783'


HTTP-GETでシリアルポートからのデータが読める。
最近100件の受信データが保存してあって配列で返ってくる。timeに時間が入っている。
curl 'http://localhost:8783'


時間はミリ秒でunixtimeなので、1000で割れば普通のunixtimeになる
[{"data":287,"time":1296767483756},{"data":288,"time":1296767483253},{"data":291,"time":1296767482751},{"data":293,"time":1296767482246},{"data":292,"time":1296767481743},{"data":293,"time":1296767481238},{"data":294,"time":1296767480736},{"data":299,"time":1296767480233},{"data":303,"time":1296767479729},{"data":305,"time":1296767479226},{"data":307,"time":1296767478721},{"data":312,"time":1296767478219},{"data":321,"time":1296767477714},{"data":332,"time":1296767477211},{"data":344,"time":1296767476709},{"data":359,"time":1296767476204},{"data":"\u0000390","time":1296767475701}]


eventmachine_httpserver便利だなー