【Self Summer Camp】Home Automation

夏休みに自室のスマートルーム化を目指して、セルフ実装合宿を決行。Raspberry Pi(ホームサーバ兼赤外線コントローラ)とSiriを使って「Hi Siri, I'm Home」で部屋の家電が全て起動、「Hi Siri, Bye-bye」で部屋の家電を全て停止を実現。毎日使ってるけど、かなり便利。まずは第一歩。FlaskとRaspberry Pi、IoT、Voice User Interface周りのいい勉強になった。
実装物¶
"Hi Siri, I'm Home" → TV、ライト、エアコン起動
"Hi Siri, Bye-Bye" → TV、ライト、エアコン停止
仕組み¶
仕組みは非常にシンプルで、ホームサーバとしてRaspberry Piを設置。Raspberry Piには赤外線コントローラが接続されており、ホームサーバ上で走らせているFlaskのAPIを叩くと対応した家電が操作できる。
赤外線コントローラ¶
自作しようと思ったが、時間がかかりそうなので、Raspberry Piに直接接続できる学習リモコン基板を購入。学習モードで10個のボタンにそれぞれ赤外線コントローラの信号を覚えさせる。信号の学習には特に、プログラミングは必要なく、スイッチを切り替えて基板上のボタンを押しながら、赤外線リモコンのボタンを押すだけ。
基板は以下のサイトから購入。詳しい使用方法も以下のサイトから確認できる。基板はRaspberry PiのGPIOを繋がっているので、ボタンに対応するピンに電気を流せば、Raspberry Piから赤外線をコントロールできる。基板上では10個のボタンがあり、各ボタンに信号を記憶することができるが、それより多い場合は、信号をRaspberry Piに取り込み保存し、操作時に赤外線LEDに流す必要がある。その機能も搭載されているみたいだが、今回はまだ実装していない。
ホームサーバ¶
Raspberry Pi と Flaskで実装。同じネットワークに接続しているデバイスから、APIを叩くと、デバイスのON/OFFを操作できる。
Raspberry Piの起動じにサーバも同時に自動起動する場合、サービスとして登録必要がある。登録のところで少しコケたのでメモ。まず、/etc/systemd/systemに適当なファイル(今回は、home-ir.serviceにする)作り、今の内容を記述する。注意点は、コマンドまでのフルパスを使うことと、外部からアクセス可能にするには、Flaskサーバの起動に、--host='0.0.0.0'を指定する必要がある。
[Unit]
Description=Home IR
[Service]
User=pi
EnvironmentFile=/etc/sysconfig/home-ir
WorkingDirectory=/home/pi/Development/IR
ExecStart=/home/pi/.pyenv/shims/flask run --host='0.0.0.0' --port=5000
Restart=always
Type=simple
RestartSec=10
KillSignal=QUIT
[Install]
WantedBy=multi-user.target
サービスの起動は、
sudo systemctl start home-ir
停止は、
sudo systemctl stop home-ir
システム立ち上げ時に自動起動するなら
sudo systemctl enable home-ir
Siri¶

Siriのショートカット機能を使って特定のフレーズ時に、家電コントール用のAPIを叩ける。「URL」と「Get Contents of URL」というウィジェットがあるので、それを組み合わせればAPIを叩ける。
最後に¶
簡単に部屋に家電操作基盤を作ってみました。APIさえできれば応用は色々できそう。さらにこのAPI+MQTTを使って外部ネットワークから家電操作可能にしましたが、それは次回紹介しようと思う。