2016年1月4日

トイレにRESTfulなAPIを実装してみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

あけましておめでとうございます。
プライバシーも一緒に流れるトイレから3年経ちましたが、皆様いかがお過ごしでしょうか。

お正月の三が日、昨今のIoTブームに乗るべく、私もIoTで真に豊かになるものは何かと一生懸命考えた結果、3年前と同じ部屋に辿り着いたことをご報告いたします。

前回はウォシュレットの使用状況をTwitterに投稿するというシステムでしたが、今回はウォシュレットにRESTfulなAPIを付与することで様々な機器から操作することを可能にするシステムを制作しました。


使用したのは巷で話題のESP-WROOM-02(ESP8266)と赤外線LED、上記写真のボードはオリジナルのもの。
(赤外線LEDの足がJST-PHコネクタに吸い込まれているように見えますが、良い子はLEDの足にJSTコンタクトピンを圧着したりしないように。)

このデバイスを電源に接続すると...


http://toilet.local にアクセスし、ウォシュレットを操作可能になります。


API

http://toilet.local/washlet に対して、Key cに以下のValueを設定してPOSTすると、それぞれの動作が実行されます。

Value 動作
rear おしり
soft おしりやわらか
bidet ビデ
stop 停止

また、DELETEメソッドでc=bigとすると流す(大)、c=smallとすると流す(小)が実行されます。
(DELETEなのはお察し)

仕組み

まず、3年前の時に取得した赤外線リモコンコードでは正しく動作しなかったので、改めて取り直し、トイレのリモコンがどのような送信を行っているのかを再検証しました。
リモコンコードはArduino UNOに赤外線受信モジュールを接続して、IRremote Arduino Libraryのサンプルを実行して取得。
結果、流す以外の動作は2回に分けてコードを送信していることが判明。
約6ms、2.9msの送信開始リーダ部の後は、1.5msで1, 0.5msで0のデータ部が続いているのは3年前に調べたのと同じ。






あとは、この通りに38kHzで変調して赤外線LEDを発光してあげるようなコードを書いてESP-WROOM-02に焼けばOK.

コードはこちら
GitHub : 9SQ/RESTful-Toilet

上記リモコンコードのデータもリポジトリに放り込んでいますので、TOTO製トイレリモコン赤外線で遊びたい方は参考にしてください。→ washlet_command.csv

これで、トイレ中にスマホが手放せない人でも、スマホからウォシュレットの操作が可能になりました!

番外編

トイレ引き籠もりのプロに、このシステムについて伺ったところ「ライブ中にタスク切り替えしてブラウザを開くのは厳しい」とのご感想を頂いたので、これについてAndroidアプリを制作することで対処しました。


もちろん、通知領域からボタンひとつで操作可能です。


デレステ中も快適なトイレライフが実現できます。



コードはこちら
GitHub : 9SQ/RESTful-Toilet-App

実際の動作

流石にトイレに座っているお見苦しい姿を晒すわけにはいかないので、流す動作だけ...


このシステムの脆弱性として、トイレの外から使用中の人に物理的な攻撃が可能になるという問題が発見されていますが、今後修正の予定が無いことを予めここに記しておきます。

最後に、今年1年が素敵なIoT(Internet of Toilet)の年になりますよう、お祈り申し上げます。