FC2ブログ
08-<< 123456789101112131415161718192021222324252627282930>>10-

Google HomeとAPEXの連携

2018-02-21
ちょっと今さらですがスマートスピーカーのGoogle Homeを購入してみましたので、どうせならとAPEXと連携できるようにしてみました
20180221_010.jpg

どんな感じになったかはとりあえずこの動画を見てみてください。ちょっと未来的な感じになってると思いますw


あとはこちらを見てみてください。
Google Homeで出来る22の事と使い方・音声コマンド例のまとめ(1/21更新)

単独でもそこそこ便利で結構多機能ですが、どうせならと水槽の機材やテレビ、照明、エアコンを操作できるようにしました
APEXでたまに照明等のOutletを個別操作しますが、戻し忘れが嫌ですし、意図せずAUTOで使うべきOutletを操作していたというのも怖いですよね。今回の方法では照明やVortech、スキマー等の特定の機材だけ操作できるようにしました。また、一定時間経過したらAUTOに戻すという機能も付けています。

実施方法は以下のサイトを参考にさせていただきました。先人達に感謝
Smart Homeさん
R2Rのこちらのスレッド

■はじめに…APEXの操作ってどうやるの?

APEXはAPEXのWeb画面にアクセスするか、APEX FUSIONからアクセスしてOutlet操作するのが基本です。Google Homeから操作するなら、このWeb画面の操作をせずに直接変更が必要になります
20180221_030.jpg

20180221_040.jpg


その直接操作のキモとなるUNIXコマンドはこれです。(R2Rのスレッドより)
curl -X POST --user admin:PASSWORD http://APEX_LOCAL_IP:APEX_PORT/status.sht?ATO_state=1&Update=Update

cURLはWebサイトにコマンドラインから手軽にアクセスする素敵ツールです。ここでは、自宅のネットワークにあるAPEXに対してOutletを操作しています。
ATO_stateはAPEXのOutletの名前、そのあとの=1がOFFにするって意味です。これが=0ならAUTO、=1ならOFF、=2ならONとなります。

なので例えばうちの環境なら
http://192.168.1.50:8081/status.sht?T5_FAN_state=2&Update=Update
とすると水槽のT5が点灯し、
http://192.168.1.50:8081/status.sht?T5_FAN_state=1&Update=Update
とすると水槽のT5を消すことができます

Google Homeに「水槽の照明をつけて」と言ったら、それに連動して上記のコマンドを発行してあげるようにしたら、Google Homeから水槽照明を操作できたってことになります

■連携イメージ

連携イメージはこんな感じです。クリックで拡大します
20180221_070.jpg

キモになるのは自宅サーバの部分です。ここから上のcurlコマンドを実行します
負荷が少ないのでFireTVのようなAndroidベースの動画プレイヤーで実現できます。小型で省エネですね。NetflixやYoutubeとかもサクサク見られるので便利ですよ
もちろん、Linux系のOS(Ubuntuとか)をパソコンに入れても良いですし、MacもBSD UNIXベースなのでそれでも良いです。Windows 10ならストアアプリにUbuntuがありますのでそれでもできます。でも24時間動かし続ける必要があるので、やはり小型の装置の方が良いですね。ラズベリーパイという学習用の小型PCもありますが、インストールに結構慣れが要ります

連携はインターネットのIFTTT(イフト)というサービスを使います。IFTTTは様々なネットサービス同士を連携できるサイトで、例えばTwitterのフォロワーが増えたらGmailを送るとか、Instagramで写真を投稿したら、Twitterにも同じ写真を掲載するといったことに使えます。ネットサービスの数が数百連携できるので非常に便利なサイトです
設定はこんな感じ
20180221_050.jpg

あとslackはビジネス向けのチャットサイトです
今回のケースでは、Google Homeに「水槽の照明を点けて」と話したら、slackで命令を話すという連携に使います。その命令を自宅のサーバーで受け取って連携する感じですね(hubotという、チャットボットが受け取ります)
20180221_060.jpg

slackを使うと何が良いかというと… R2Rの方法だと自宅サーバーのWebサイトを外部に公開(ルーターの設定変更)しないとできません。パスワードを設定するとは言えちょっとリスクがあります。slackを使うとルーターの設定変更せずに、命令を受け取ることができます

なお自宅のテレビ、照明、エアコンを連携させる方法はこんな感じです。eRemote mini(海外だとRM Mini3)はwifi付きの学習リモコンで、テレビとかの赤外線信号を学習して、それを発信する機能があります。学習リモコンは、赤外線リモコンなら何でも覚えてくれるので、赤外線を使っている機材ならどんなものでも操作できるようになりますね
20180221_020.jpg
※大きく見えますが実物は7cm程度と小さいです

構成はこんな感じなので、同じ仕組みでできます
20180221_080.jpg


■必要なもの
・水槽操作用:APEX
・声で操作用:Google Home(またはGoogle Home mini)
・赤外線操作用:eRemote mini(海外だとRM Mini3)
・赤外線学習用:テレビ、室内照明、エアコンのリモコン
・自宅サーバー用:FireTV BOX(FireTV Stickも可)や、UNIX/Linux系OSが動くもの

あると良いもの
・Chromecast(YoutubeやNetflix動画を見るときに)

■構築手順

手順はこんな感じです。順番に実施してください。順番にやっていくとeRemote mini(海外だとRM Mini3)の設定も一緒にできてしまいます。

Fire TV Stickをhubotサーバ化してRM Mini3を操作する

hubotの雛形の生成

hubotでRM Mini3を操作する

SlackでRM Mini3を操作する

Google HomeでRM Mini3を操作する

Rasberry Piの起動時にhubotも自動的に起動させる

ここまで来るとテレビ等の赤外線操作がGoogle Homeでできるようになっているはずです。

■APEXの操作下準備

APEXを操作するためにcurlコマンドを実行するシェルスクリプトを用意します
以下に示すのでコピペしてください。#!/bin/shのところが1行目で、apexconnect.shといった名前で保存してください
全て ~/homebot/bin 配下に格納して、chmod 755 ~/homebot/bin/*.sh で実行権限を付けてください

まずはcurlを発行するシェルスクリプトです
#!/bin/sh
OUTLET=$1
COMMAND=$2
(curl -X POST --user admin:PASSWORD http://APEX_LOCAL_IP:APEX_PORT/status.sht?${OUTLET}_state=${COMMAND}&Update=Update ) > /dev/null 2>&1
exit 0


※PASSWORDと、APEX_LOCAL_IP:APEX_PORTは環境に合わせて書き換えてください。

Outletを操作するためのシェルスクリプトです。重要なのは普段使っているモード以外を指定すると、一定時間後に戻すようになっているってことです。Outletが普段はAUTOで使っていて、Google HomeからONにしたけど1時間経過したら自動でAUTOに戻すって使い方になります。消したままトラブルなんてことはいやなので…
#!/bin/sh
# 対象のAPEX Outlet
TGT_OUTLET=$1
# 変更したいモード 0=Auto 1=OFF 2=ON
TGT_MODE=$2
# 普段使用しているモード 0=Auto 1=OFF 2=ON
DEF_MODE=$3
# 変更したモードを戻すまでの待ち時間(SLEEPへの引数)
WAIT=$4

if   [ "$TGT_MODE" = "$DEF_MODE" ]; then
	/home/myhubot/bin/apexconnect.sh $TGT_OUTLET $TGT_MODE
else
	/home/myhubot/bin/apexconnect.sh $TGT_OUTLET $TGT_MODE
	sleep $WAIT
	/home/myhubot/bin/apexconnect.sh $TGT_OUTLET $DEF_MODE
fi


そしてOutlet毎にスクリプトを定義します。ここではT5用です
#!/bin/sh
# T5照明

# 対象のAPEX Outlet
TGT_OUTLET=T5_FAN
# 変更したいモード 0=Auto 1=OFF 2=ON
TGT_MODE=$1
# 普段使用しているモード 0=Auto 1=OFF 2=ON
DEF_MODE=0
# 変更したモードを戻すまでの待ち時間(SLEEPへの引数)
WAIT=1h

/home/myhubot/bin/apexcontrol.sh $TGT_OUTLET $TGT_MODE $DEF_MODE $WAIT



こちらはスキマー用
#!/bin/sh
# Skimmer
TGT=Skimmer

# 対象のAPEX Outlet
TGT_OUTLET=Skimmer
# 変更したいモード 0=Auto 1=OFF 2=ON
TGT_MODE=$1
# 普段使用しているモード 0=Auto 1=OFF 2=ON
DEF_MODE=0
# 変更したモードを戻すまでの待ち時間(SLEEPへの引数)
WAIT=1h

/home/myhubot/bin/apexcontrol.sh $TGT_OUTLET $TGT_MODE $DEF_MODE $WAIT


こちらはフィードモード用です
#!/bin/sh
# FEED Mode A

# 対象のAPEX Outlet
TGT_OUTLET=V_Feednow
# 変更したいモード 0=Auto 1=OFF 2=ON
TGT_MODE=$1
# 普段使用しているモード 0=Auto 1=OFF 2=ON
DEF_MODE=1
# 変更したモードを戻すまでの待ち時間(SLEEPへの引数)
WAIT=30m

/home/myhubot/bin/apexcontrol.sh $TGT_OUTLET $TGT_MODE $DEF_MODE $WAIT



といった感じで用意します。

そのあと、hubotでコマンドを定義します。

cd ~/homebot
bin/hubot

homebot command apex:vortech bin/apex_vortech.sh "#"
homebot command apex:t5 bin/apex_t5.sh "#"
homebot command apex:led bin/apex_led.sh "#"
homebot command apex:skimmer bin/apex_skimmer.sh "#"
homebot command apex:wtchnow bin/apex_wtchnow.sh "#"
homebot command apex:feed bin/apex_feed.sh "#"
homebot command apex:ro bin/apex_ro.sh "#"

登録されたことはこれで確認します
homebot list

といった感じでコマンドとシェルスクリプトを関連付けます。
ここではVortechポンプ、T5、スポットLED、自動水換え、フィードモード、RO浄水器を制御できるようにしてあります

あとは
send apex:t5(2)
とhubotに指示すればT5が点き、
send apex:t5(1)
とすればT5が消え、
send apex:t5(0)
とすればT5が自動制御に戻ります

■IFTTT登録

ではIFTTTでどの日本語キーワードに反応するのかを定義していきます。もしExcelからインポートができたりすると楽なんですが、どうやら一個一個コピペしないとだめみたいですね…

登録方法は
Google HomeでRM Mini3を操作する
と全く同じです。
違うのはslackに渡す文字が
send apex:t5(2)
になるだけです。

ひとまず定義してあるのはこんな感じです。クリックで拡大します
APEXだけじゃ無く、半分から下側は赤外線で操作する家電たちです。多少言葉がぶれても良いようにキーワード多めに定義してあります。
20180221_100.jpg

具体的な登録内容はこんな感じ。こちらは日本語キーワード
20180221_110.jpg

こちらはslackに伝えるメッセージ内容です。指示内容はシンプルですね
20180221_120.jpg

これでGoogle Homeから操作できるはずです。うまくできたかGoogle Homeに話しかけて試してみてください

■なんか大変そう?
ここまで紹介してきましたが、これらのことがGoogle Homeでないとできないのか?というとそんなことはありません

スマートフォンなら、Google Assistantアプリ、iPhoneならSiri、
家で使うならAmazon Echo、Apple Homepodから同じようなことはできます(たぶん… IFTTTと連携させれば良いので…)
Google Home買う前にちょっと試したいと思ったら、Android スマートフォンでGoogle Assistantアプリを使ってみてください。
使い勝手は同じです

あと、eRemote mini(海外だとRM Mini3)を使うのに自宅サーバーが必須なのかというとそんなことはありません。実はGoogle Homeと直接連携できますので、Androidアプリから設定すればIFTTT無しで連携できます
今回のケースではAPEXと連携するためにIFTTTが必要なので、eRemote mini(海外だとRM Mini3)もついでに設定しています。また「テレビの音量を 3 あげて」と言った感じで n 上げる、下げる指示ができるのも良いところです。チャンネルも同じ感じでできます

これらの設定はちょっと大変ではありますが、やり遂げると家の中がちょっと未来的な感じになって楽しいです。ついでにLinuxの使い方も何となく判るのでお勧めですw

Neptune Systems社のAPEX FUSIONとGoogle Homeが直接連携してくれればここまで苦労しないのですが… そうなるまではこういった方法でしか連携できません
RadionやHydraとかのLED照明は単純なON/OFF制御じゃないのでできません。これもそれぞれEcoSmart LiveやmyAIのサイトと連携ができないとどうしようも無い感じ… 待ちましょう

■利用範囲を拡大
ここまで来たら色々とやってみたくなると思います。
例えば…
・Google Home miniを寝室にも置いて、寝室からでも操作できるようにする(アラームは寝室の方が良いですし、リビングのエアコンを事前に点けるとかもできますね)
・IFTTTでエアコンをタイマー起動する
・人感センサーで照明やテレビを自動で点けてみる
・壁のスイッチを小型ロボット操作
・スマートコンセントでタイマー&リモート操作
・Twitterでメッセージをもらったら、Google Homeに話してもらう
等々、組み合わせて色々とできちゃう世の中になってきています。便利になってきましたね

関連記事
スポンサーサイト


B!
★Neptune Apex★ | コメント:(0) | トラックバック:(0)
コメント:

管理者のみに表示

FC2 Blog Ranking Related Posts Plugin for WordPress, Blogger...