TokyuRuby会議09でIoT×RubotyについてLTしてきた #tqrk09
— いずみん (@izumin5210) August 29, 2015
恒例のLT駆動開発した.
資料
スライド
動画
RSpec::LedFormatter from Masayuki IZUMI on Vimeo.
副産物
内容
最初作りたかったのは,「CIの結果を物理世界でリアルタイム通知する」やつ. それをどんな構成で実現するかを考えてるときに,Rubotyを経由させることを思いついた.LTの2日前に.
Herokuを経由しているのは,RasPiサーバを外に公開する方法がよくわからなかったから.
レンタルしてるルータ/モデムの設定の問題だとは思うんだけど,1日試行錯誤してよくわからなかったのでとりあえず諦めた.
ローカルマシン(Tokyo) → Heroku(Virginia) → RasPi(Tokyo)
みたいなあたまの悪いルートを通ってしまうので,なんとかRasPiに直接はいれるようにしたい.
RSpecのFormatterではexampleごとにサーバにGETリクエスト飛ばしているだけなので,CI上でも動作する. CIのmasterのテストだけ通知するようにしたら職場に緊迫感とかでて便利.
RasPi × Ruboty
exampleの結果をRuboty内のWebSocketクライアントで受け取ってRasPiのGPIOを操作しているんだけど,これが重複コードだらけで鬱陶しかったのでgem化した.
Rubotyにreply送るだけでGPIO弄れるので超便利. 例ではwriteしかしてないけど,readも出来るように作ってある.
> @ruboty help ruboty /get gpio value (?<pin>\d{,2})/ - Get GPIO value ruboty /set gpio mode (?<pin>\d{,2}) (?<mode>in|out)/ - Set GPIO mode ruboty /set gpio value (?<pin>\d{,2}) (?<value>high|low)/ - Set GPIO value ruboty /unexport gpio (?<pin>\d{,2})/ - Unexport GPIO
reply受けたらセンサ値を読み取って返す みたいな機能ならruboty-alias等をうまく使ってやれば簡単に利用できるようになる. ruboty-cronとの組み合わせもおもしろいかもしれない.
Rubotyの設計思想めっちゃ好きなので,それに全力で乗っかっていきたいと思っている.
好きなGemを組み合わせて君だけの最強のBotをつくろう。