d.sunnyone.org
sunnyone.org

ページ

2012-12-02

自室の照明をスマートフォンからOn/Offする

寝たいんだけど、電気消しに行くのめんどくさくて寝れない。そんなことありませんか?今回はそんな人向けのソリューション。でも、うまく動かなくて勝手についたり、チカチカしちゃったりしても自己責任でお願いします。

ちなみに、おおかたの期待を裏切り、今回はハードウェア工作はナシ。既製品だけ。

仕組み

「電気を消したいだけなのに複雑だ」と言われたので絵にしてみた。


複雑だろうか?ちなみに、結構昔からある方法。

使った物

  1. 天井照明器具専用 リモコンスイッチOCR-04 (\1,500くらい)
  2. パソコン用学習リモコン PC-OP-RS1 (\4,500くらい)
  3. Debian GNU/Linuxの入った箱:今回は玄箱PRO (\不明:今ならGuruPlug (\20,000くらい)や、Raspberry Pi (\4,000くらい)がいいかも)
OCR-04以外は家にあったものなのでかかったのは1,500くらいだけ。

作り方

Step1. OCR-04を設置する

OCR-04はこんな形をしたもの。箱に書いてある通り、照明器具と天井の引っ掛けシーリングの間に受信部をセットするだけ。元々のスイッチはOnにしっぱなしにしないと使いものにならないので、ついてきたリモコンは、スイッチがあったところの隣に置いておく。

Step2. Linux boxとPC-OP-RS1をつなぐ

今回はNASとして稼動していた玄箱PROを使ってしまったが、USBがついたLinuxの箱ならなんでもいいはず。LinuxからPC-OP-RS1は、USBシリアルデバイスとして認識できるが、VendorID/ProductIDが登録されていないので、指示してあげる必要がある。コマンドは以下の通り。
# modprobe ftdi_sio vendor=0x0411 product=0x00b3
これで/dev/ttyUSBXができたらひとまずOK。再起動しても認識される&あとで使うための権限が調整できるよう、以下の設定を行う。

まずvid/pidの設定。

/etc/modprobe.d/remosta.conf作成
alias remosta ftdi_sio
options ftdi_sio vendor=0x0411 product=0x00b3

起動時にロードされるようにする。

/etc/modules追記
remosta

このデバイスが使える人のグループを作る。
# groupadd remosta

このデバイスを/dev/remostaXにし、グループを変更する。

/etc/udev/rules.d/92-remosta.rules作成(92なのは91でこのデバイスのグループ変更がされていたから)
KERNEL=="ttyUSB*", ACTION=="add", \
  ATTRS{idVendor}=="0411", ATTRS{idProduct}=="00b3", \
  MODE="0660", GROUP="remosta", NAME="%k", SYMLINK="remosta%n"
ここの設定は間違えるとOSが起動しなくなるから注意!(一回やってHDD抜き出した…)

再起動して、以下の状態になっていればOK。
$ ls -al /dev/remosta* /dev/ttyUSB0
lrwxrwxrwx 1 root root         7 Nov 23 20:58 /dev/remosta0 -> ttyUSB0
crw-rw---- 1 root remosta 188, 0 Dec  1 22:59 /dev/ttyUSB0

Step3. コマンドラインで送受信してみる

Rubyでスクリプトを書いたので、それを使う。

Ruby/serialportが必要なので、インストールしておく。
# apt-get install libserialport-ruby

あとはこのスクリプトをダウンロードして、以下の通りで動く。

受信
$ ruby remosta.rb recv
Receiving. →ここでPC-OP-RS1に対して、リモコンで送ってみる
fffff070000e03fc07f80f.... →受信した信号
Received.

送信
$ ruby remosta.rb send fffff070000e03fc07f80f....(信号)
Sending.
Sent.

これで「A」と書いてあるほうの黄色いシールがついてるLEDから信号が発信される。

Step3. Web UIをつける

凝るほどでもないので、レガシーにRuby/CGIでWebを作った。
https://github.com/sunnyone/lightremo

スクリプトを/var/www/lightremoに配置したら、以下の感じで設定する。
<Directory /var/www/lightremo>
            AddHandler cgi-script .cgi
            AllowOverride None
            Options +ExecCGI
        </Directory>
今回は自宅の無線LANでしか接続できないところに置いたから、CGIとしてはとくに認証もしていないけど、必要ならかける。

www-dataを"remosta"グループに所属させるのを忘れない。

Apacheの設定をリロードして、http://[SERVER]/lightremo/lightremo.cgiにアクセスすれば以下の画面がでてくるはず。


onやoffを押して実際に照明がOn/Offされたら成功!





0 件のコメント:

コメントを投稿