最初にまとめ
・「OK Google システム起動」と話せばPCの電源が入るようにした。
・IFTTTでGoogle Assistantをトリガーに Webhookで自宅のサーバーにHTTPリクエストを送信、外部コマンドの実行でehter-wakeコマンドを実行してPCの電源を入れている。
・セキュリティがガバいので検討が必要
IFTTTのレシピ
使っているのは Google Assistantの「Say a simple pharase」と Webhookの「Make a Web request」です。Webhookのリクエスト先はパブリックにさらされることになるのですが、とりあえずのセキュリティ対策として、オレオレ証明書でhttps化、ポートの変更、POSTでトークンを送ってチェックをするようにしています。
受け側のコード
POSTで送られてくるtokenをチェックして予め指定したコマンド(ether-wake)を実行するだけですね。tokenが違う場合は404を返すようにしています。実行コマンドを引数で受け取るようなこともできそうですが、変なことできないように静的に書いておくほうが良いかなと思いここに記述しています。
ハマったところと課題
今回受け側はCentOS上に組んだのですが主にLinuxのセキュリティ周りの理解が足りずに苦戦した部分が多かったです。
1.httpdの実行ユーザーのsudo設定
今回利用している ether-wakeの実行にsudoが必要なのですが、phpのexec関数からキックするために visudoでapacheユーザーのether-wakeをパスワードなしで実行できるように設定が必要でした。
apache ALL=(ALL) NOPASSWD:
/sbin/ether-wake
2.SELinuxって何それ?
こっちのほうは課題ですね。アクセス制御の仕組みらしく、監査ログでsudoを止めに入っていそうというところまでは分かったのですが、とりあえず動かしたい衝動に駆られオフにしてしまいました。。勉強して使いこなせるようにしようと思います。
最後にまとめ
GoogleHome+IFTTTは面白いですね。言葉をキーに何かが動くって本当魔法みたいだなーと。