Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

0.1 やりたいことはこれ

Google Homeに声で命令して、Macを通して家電を操作。
(Macじゃなくラズパイでもいいんだけど、MacからiTunesも流したかったので、Macにした。)
Artboard – 2.png
参考にしたのはここらへん(ここのをまとめただけ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」でいいでしょう。こんな感じで設定しました。
Screen Shot 2017-11-15 at 13.21.13.png

「that」は「webhooks」を選びます。一個しかないので、「Make a web request」にして、このように設定します。
URLとBODYは3.2の値を入れてください。

Screen Shot 2017-11-15 at 13.26.06.png

4 OK Googleしてみる

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

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

Mac母体にするなら、amazonのalexa入れるのが簡単そう。
https://qiita.com/marceline/items/1bcc66336bb7d63bfdc2

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした