長かったのでの頭の整理と備忘録として。
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 大体の流れ
- MacでirMagicianのセットアップ
- MacにHome Assistantのセットアップ
- IFTTTでGoogle HomeとHome Assistantを繋げる
- 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
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への指示が直接書き込めます。
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」が再生されるようになってます。
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ファイルで設定したパスワード使います。
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)なるものがありますので、探します。
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にできそうで、そっちの方向に発展していくんだと思います。