背景
自宅で動いているubuntu-server経由で任意の文字列をGoogle Homeに喋らせてみた の続きです
Google Homeを買ったはいいもの 家電の操作まではできていませんでした。
そこで声で家電を操作できるようにしました。
やりたいこと
グーグルホームで下記のことがやりたい
- "暖房つけて" -> エアコンの暖房がつく
- "エアコン消して" -> エアコンが消える
- "テレビつけて" -> テレビがつく
- "テレビ消して" -> テレビが消える
- "番組表" -> テレビの番組表が表示される
- "テレ東" -> テレ東が表示される
材料
- RM mini 3
- Rasberry Piや自宅サーバ等
- iOS と Homeアプリ
構成
タスク
1.まずはコマンドラインでRM mini 3を操作するコマンドを作り。セットアップ
2.HTTP経由で1のコマンドを叩ける用にする。
3.IFTTTを使ってGoogleHomeと接続
タスク1.コマンドラインでRM mini 3を操作するコマンドをセットアップ
コマンドをインストール
コマンドを作りましたので npm 経由でインストールします
npm i -g broadlinkjs-rm-cli
赤外線信号を調査
RM mini3(eRemote mini)とHomebridgeを使ってSiriでリモコン制御する
を参考に
- ペアリング
- RM mini3のIPアドレスとMACアドレスを探す
- homebridgeとプラグインをインストール
を上から順にこなし
リモコンの文字列(16進数列)をコピーするところまで進めてください
設定ファイル作成
broadlinkjs-rm-cliは $HOME/.broadlinkjs.config.js をデフォルトの設定ファイルとしていますのでそのファイルを作成します
先程調査した赤外線信号を下記のように記載してください
module.exports = {
"heat":"[エアコン暖房ボタンの赤外線信号]",
"cool":"[エアコン冷房ボタンの赤外線信号]",
"airoff":"[エアコンオフボタンの赤外線信号]",
"tv":"[テレビ電源の赤外線信号]" ,
"light":"[ライトの赤外線信号]"
};
使い方
下記のようにすると エアコンの暖房がつきます。
broadlinkjs-rm-cli 192.168.1.3 heat # 暖房をつける
操作できましたか?
タスク2.HTTP経由で1のコマンドを叩ける用にする。
前回でも登場しましたnginxのアクセスログを監視して、リクエストパスをコマンド実行するようなデーモンを使います
altd
インストール方法
npm i -g altd
使い方
下記のようにすると /var/log/nginx/access_logを
broadlinkjs-rm-cliとlsコマンドだけ許可した状況で監視しはじめます
altd /var/log/nginx/access_log -w broadlinkjs-rm-cli,ls
例えば
http://example.com/broadlinkjs-rm-cli/192.168.1.3/airoff
にアクセスすると
broadlinkjs-rm-cli 192.168.1.3 airoff
に変換され
エアコンが消えます
command airoff -> Device 192.168.1.3(11:22:33:44:55:66)
のようなアウトプットがコンソールに表示されます
nginx設定の注意点
IFTTTは200OKを返さないと 何回かトライするような動きをしています
OK
こちらを用意した上で
try_files $uri $uri/ /index.html;
例えば上記のような設定を入れて常に200 OKを返すようにしましょう
タスク3.IFTTTを使ってGoogleHomeと接続
1.IFTTTのmy appletページに行き
2."New Applet"をクリック
3."This"をクリック
4.検索ボックスに"google"と入力すると 結果の一番左側にGoogle Assistantがあるのでそれをクリック
5."Say a simple phrase"をクリック
6.下記の用に設定し完成させる
7.次は"That"をクリック
8.検索ボックスに"web"と入力すると 結果にWebhooksがあるのでそれをクリック
9.下記の用に設定し"Finish"
完成させたら Google Homeに早速話しかけてみましょう
注意事項
今の構成だと、セキュリティ的な防御はまったくなく、誰でも自宅の家電を操作出来てしまいます。
また、altdもホワイトリスト方式でコマンドを制限してますが、なんか怖いですよね^^;
あと、試してないですが みなさんが試されているようにRaspberry Piでも同じ構成で実現できるんじゃないかと思います。
また、下記どちらも何か有りましたらpull requestでFBいただけると幸いです
最後まで読んで頂きありがとうございました。