
夏休みに自室のスマートルーム化を目指して、セルフ実装合宿を決行。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を使って外部ネットワークから家電操作可能にしましたが、それは次回紹介しようと思う。