Edited at

Google Home からSmartでない家電を動かす

More than 1 year has passed since last update.

長かったのでの頭の整理と備忘録として。


0.1 やりたいことはこれ

Google Homeに声で命令して、Macを通して家電を操作。

(Macじゃなくラズパイでもいいんだけど、MacからiTunesも流したかったので、Macにした。)



参考にしたのはここらへん(ここのをまとめただけw)

https://qiita.com/azipinsyan/items/e5395e5b1dc7254bbbbd

https://jaxx2104.info/homekit-irmagician/

http://www.omiya-giken.com/?page_id=1196


0.2 大体の流れ


  1. MacでirMagicianのセットアップ

  2. MacにHome Assistantのセットアップ

  3. IFTTTでGoogle HomeとHome Assistantを繋げる

  4. OK Google!

*Google AssistantとHome Assistantは別物です。


0.3 必要なもの

Google Home, Mac, irMagician, 赤外線で動く家電とリモコン

前提条件

・Google Home セットアップ済み

・MacでPythonが動く

・ネットに繋がる環境

*もしかしたら、モバイルルータじゃ動かないかもしれないです。


1 irMagicianのセットアップ


1.1

irMagicianを接続して、

$ls /dev/ | grep cu.usbmodem

僕の環境だと

tty.usbmodem0121

これで認識できてなかったら、1.2を試す。


1.2 ドライバのインストール

irMagician販売元の大宮技研さんサイトを参考

http://www.omiya-giken.com/?page_id=1196

ドライバは大宮技研さんのとこから持ってきてください。

解凍したものをここに上書き(バックアップは任せます)。そしてMacを再起動。

/System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns

権限の変更必要みたいです。

$cd /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns

$sudo chown -R root:wheel AppleUSBCDC.kext

$sudo chown -R root:wheel AppleUSBCDCACMControl.kext

$sudo chown -R root:wheel AppleUSBCDCACMData.kext


1.3 irMagicianの学習

大宮技研さんのコードをベースにしたリモコンの学習と制御用のコード irm.py があったので活用しました。

ここ(11行目くらい)を1.1で見つけたものに変える。

ir_serial = serial.Serial("/dev/tty.usbmodem0121", 9600, timeout = 1)

オプション付きでpythonを走らせると以下のような動きができます。

①赤外線のキャプチャ

$python irm.py -c

このコマンドした後に、irMagicianの頭に向けてリモコンを発射で、赤外線の信号を学習。

②赤外線発射

$python irm.py -o

①の後にこのコマンドを打つと、キャプチャした赤外線の信号が送れます。

③キャプチャしてバッファに保存されている信号をこれでjsonデータに書き出せます。

$python irm.py -s -f 適当な名前.json

④保存した信号をjsonから読みだして赤外線発射

$python irm.py -p -f 適当な名前.json


2 Home Assistantの準備

基本的にここに法ってます。

https://qiita.com/azipinsyan/items/e5395e5b1dc7254bbbbd


2.1 Homeassistantのインストール

$sudo pip3 install homeassistant

以下のコマンドで、Home Assistant起動し、UIがブラウザで開きます。デフォルトでは特に面白くないです。

$hass --open-ui

こちらがブラウザで開きます。

http://localhost:8123/


2.2 設定ファイルの修正

下記ファイルを修正します。

/Users/ユーザ名/.homeassistant/configuration.yaml


configuration.yaml

http:

# Secrets are defined in the file secrets.yaml
api_password: YOURPASSWORD #この行の先頭のコメントアウトを外して、任意のパスワードを設定する
# Uncomment this if you are using SSL/TLS, running in Docker container, etc.
# base_url: example.duckdns.org:8123

また、下記のように「switch」とそれに属する命令を適当な場所(一番下とか)に追加します。

terminalへの指示が直接書き込めます。


configuration.yaml

switch:

platform: command_line
switches:
light:
command_on: "python2 /Users/ユーザー名//Documents/SmartHome/script/py/irm.py -p -f スイッチつける.json"
command_off: "python2 /Users/ユーザー名//Documents/SmartHome/script/py/irm.py -p -f スイッチ消す.json"
# command_itunes: "osascript /Users/ユーザー名/Documents/SmartHome//script/as/itunestest.scpt"

この例だと、command_onが実行されると、pythonファイルが走りますので、ここにirMagicianの命令のpythonを指定すればいいです。

command_itunesは、itunestest.scpt(apple script)が走り、iTunesのプレイリスト「トップ 25」が再生されるようになってます。


itunestest.sc

tell application "iTunes"

play playlist "トップ 25"
end tell


3 IFTTTの準備

IFTTTはGoogleHomeとHomeAssistantを繋ぐサービスです。

https://ifttt.com/discover


3.1 ルータのポート開放

192.168.1.1とかにアクセスして、ポートを開放してください。

Home Assistantのデフォルトだと、8123番ですが、適当に変えてもらってOKです。

ルータ(モデム)によって設定が異なると思うんで、ルータ名+「ポート開放」とかでググってください。

ただし、モバイルルータの場合は、クライアントに192.168.1.100~以降が割り当てられていると思います。

その場合、ポートが開放できないようです。困ってますので、アイデアありませんか?

僕のMacはVPNで固定のネットワークと繋がってるのでできました。


3.2 IFTTTの設定

home assistantのconfiguration.yamlファイルで設定したパスワード使います。


request.py

from requests import get

url = 'http://グローバルIP:開放したポート番号/api/services'
headers = {'x-ha-access': 'さっき指定したYOURPASSWORD',
'content-type': 'application/json'}
response = get(url, headers=headers)
print(response.text)


上記を実行すると、ドメインとそれに含まれるサービスが記載されますので、頑張って探します(いまいちわかってないです)。

・ドメイン名:kitchen_light

・付ける方:turn_on

・消す方:turn_off

また、こちらを実行すると、entity_id(今回はswitch.kitchen_light)なるものがありますので、探します。


request2.py

from requests import get

url = 'http://グローバルIP:開放したポート番号/api/states'
headers = {'x-ha-access': 'さっき指定したYOURPASSWORD',
'content-type': 'application/json'}
response = get(url, headers=headers)
print(response.text)



3.3 IFTTTで新規レシピ作成

IFTTTでアカウントを作ってください。

次に、新規でレシピを作成します。

「this」で「google assistant」を選択。

今回は「Say a simple phrase」でいいでしょう。こんな感じで設定しました。

「that」は「webhooks」を選びます。一個しかないので、「Make a web request」にして、このように設定します。

URLとBODYは3.2の値を入れてください。


4 OK Googleしてみる

「テレビつけて」って言ったら、irmagicianから赤外線が出てくると思います。イェイ!

google homeからMacいじれたので、なんでもできそうです。ただ、他のサービス使ってるからディレイがちょっと実用に耐え得らなそう。

google homeをラズパイに入れて、そのラズパイから直接irMagicianいじるのが良さそうです。

Mac母体にするなら、amazonのalexa入れるのが簡単そう。

https://qiita.com/marceline/items/1bcc66336bb7d63bfdc2

全ての家電をSmartにするのはお金もかかるし普及はしないだろうけど、何か間にデバイスをかますことでSmart Homeにできそうで、そっちの方向に発展していくんだと思います。