LoginSignup
12
11

More than 5 years have passed since last update.

Google HomeとIFTTTと自宅のサーバ(Rasberry Piでもok)で簡単家電操作

Last updated at Posted at 2017-12-24

背景

自宅で動いているubuntu-server経由で任意の文字列をGoogle Homeに喋らせてみた の続きです
Google Homeを買ったはいいもの 家電の操作まではできていませんでした。
そこで声で家電を操作できるようにしました。

やりたいこと

グーグルホームで下記のことがやりたい

  • "暖房つけて" -> エアコンの暖房がつく
  • "エアコン消して" -> エアコンが消える
  • "テレビつけて" -> テレビがつく
  • "テレビ消して" -> テレビが消える
  • "番組表" -> テレビの番組表が表示される
  • "テレ東" -> テレ東が表示される

材料

  • RM mini 3
  • Rasberry Piや自宅サーバ等
  • iOS と Homeアプリ

構成

自宅の環境をざっくり説明するとこんな感じで考えています。
Google HomeとIFTTTと自宅のサーバ(Rasberry Piでも多分できる)で簡単家電操作.jpg

タスク

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 をデフォルトの設定ファイルとしていますのでそのファイルを作成します
先程調査した赤外線信号を下記のように記載してください

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を返さないと 何回かトライするような動きをしています

/usr/share/nginx/example.com/index.html
OK

こちらを用意した上で

/etc/nginx/sites-available/example.com.conf
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.下記の用に設定し完成させる
airoff.png
7.次は"That"をクリック
8.検索ボックスに"web"と入力すると 結果にWebhooksがあるのでそれをクリック
9.下記の用に設定し"Finish"
airoffhook.png

完成させたら Google Homeに早速話しかけてみましょう

注意事項

今の構成だと、セキュリティ的な防御はまったくなく、誰でも自宅の家電を操作出来てしまいます。
また、altdもホワイトリスト方式でコマンドを制限してますが、なんか怖いですよね^^;
あと、試してないですが みなさんが試されているようにRaspberry Piでも同じ構成で実現できるんじゃないかと思います。
また、下記どちらも何か有りましたらpull requestでFBいただけると幸いです
- broadlinkjs-rm-cli
- altd

最後まで読んで頂きありがとうございました。

12
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11