Edited at

google homeでテレビをつける(普通の家電版)

More than 1 year has passed since last update.


概要

raspiに赤外線学習リモコンirMagicianを繋げて, スマート家電ではないテレビの電源を操作するプログラムをgoogle homeから実行させてみました

かなり殴り書きです。ごめんなさい。。。


ゴール

google homeに話しかけて普通のテレビの電源を制御します

 



用意するもの


システム構成図

今回のシステムの流れを簡単な図にすると

スクリーンショット 2018-09-16 17.56.22.png


  1. 「OK,google テレビつけて」でgoogle assistantからIFTTTのApplet起動

  2. webhookからMQTTのbrokerへpulishする

  3. brokerにsubscribeしているraspiのNode-redがメッセージを受け取りプログラムを実行

  4. irMagicianから赤外線を照射してテレビをつける

参考:IFTTT から Raspberry Pi に指示を出す


ステップ


  1. irMagicianの使い方

  2. irMagicianでテレビの電源を操作


  3. Beebotteの登録&設定

  4. IFTTTの登録&設定

  5. raspiにNode-REDをインストール&起動


irMagician

スマート家電ではないテレビをつけるために赤外線学習モジュールである、「irMagician」を使います

(赤外線で操作できる家電は基本的に操作可能。今回はテレビにしたがエアコンでも動作した)

Amazon:https://www.amazon.co.jp/%E5%A4%A7%E5%AE%AE%E6%8A%80%E7%A0%94-irMagician-%E9%AB%98%E6%80%A7%E8%83%BD-%E4%BD%8E%E4%BE%A1%E6%A0%BC-%E8%B5%A4%E5%A4%96%E7%B7%9A%E3%83%AA%E3%83%A2%E3%82%B3%E3%83%B3/dp/B074Z3TZ1R/ref=sr_1_1?s=industrial&ie=UTF8&qid=1537088718&sr=1-1&keywords=irmagician


使い方

設定はこちらを参考:Raspberry Pi と irMagician(赤外線モジュール)で家電を操作する

raspiでirMagicianが使用可能になったらgithubから以下のリポジトリをclone

https://github.com/netbuffalo/irmcli

$ git clone https://github.com/netbuffalo/irmcli

pipがなければinstall

pipで必要なパッケージをinstall

$ sudo apt-get install python-pip

$ sudo pip install pyserial


赤外線の保存と実行

以下のようにプログラムを実行して照射した赤外線をファイルに保存します

実行中にテレビのリモコンをirMagicianに向けて電源ボタンを押します

$ python irmcli.py -s  -f tv.json

Saving IR data to tv.json ...
Done !

これでテレビの電源を制御する赤外線をファイルに保存することができたはず

保存ができたら実行して照射してみます

$ python irmcli.py -p -f tv.json

Playing IR with tv.json ...
... Done !

テレビの電源が切り替われば成功

テレビの電源はトグルのため、ついていれば消え、消えていればつくはず

一方、エアコンは電源入、電源切で異なる赤外線を発しているためそれぞれ保存する必要があります


Beebotte

今回は、「OK,google.テレビつけて」の命令をraspiに送るためにMQTTを使います

そしてMQTTのbroker(データを受け取るところ?)としてbeebotteを使います

参考:MQTT入門(導入編)


設定

こちらは、ほとんど参考記事と同じことをしています

が、channel名などが異なるものを使用しているので載せさせていただきます


channelの作成

[Create New]を押して新しいチャンネルを作成します

スクリーンショット 2018-09-16 18.27.47.png

画像のように入力して[Create channel]を押してチャンネル作成を完了します

作成したチャンネルを選択しTokenを確認します

スクリーンショット 2018-09-16 18.28.29.png

紫色で隠れているとこをコピーしておきましょう

参考:IFTTT から Raspberry Pi に指示を出す


IFTTT

google assistantで認識した結果からBeebotteにデータを送るためにIFTTTを使います

IFTTTはさまざまなサービスを簡単につなぎ合わせることができます

LINEやTwitter,SlackなどのSNSツールからSpotifyなど非常にたくさんのサービスをつなぎ合わせることができます

今回はIFTTTを使って[google assistant]と[[webhook]を繋げたいと思います


Appletの作成

IFTTTを使用するにあたり[Applet]と呼ばれるものを作成します

[New Applet]を押して作成を開始します

thisにはgoogle assistantを設定します

スクリーンショット 2018-09-16 18.44.40.png

Say a phrase with a text ingredientを選択します

($で文字列パターンを使用できます)

スクリーンショット 2018-09-16 18.44.52.png

今回は「テレビつけて」と「テレビ消して」に対応させるため以下のように設定します

これでgoogle homeが「しゃーなし消してやるで」とか返してくれるようになります

スクリーンショット 2018-09-16 18.45.42.png

thisの設定は終わりです

thatには以下のようにwebhookを使います

スクリーンショット 2018-09-16 18.45.58.png

以下のように設定してください

「先ほどコピーしたToken」のところには先ほどコピーしたBeebotteのChannel Tokenを入力してください

スクリーンショット 2018-09-16 18.47.24.png

これで、「OK,google テレビつけて」と言ったら

Beebotteに

{

"message": "つけて"
}

というjsonがpublish(送信)されます


Node-RED

以上までの手順でpublishされたjsonを読み取れるように今回はNode-redを使います

最新のOS(raspbian)にはすでにNode-redがインストールされているみたいなのでインストール手順は割愛させていただきます


起動

sshでraspiにログインして以下のコマンドでNode-redを起動します

$ node-red-start

Once Node-RED has started, point a browser at http://192.168.xx.xx:1880
On Pi Node-RED works better with the Firefox or Chrome browser

Use sudo systemctl enable nodered.service to autostart Node-RED at every boot
Use sudo systemctl disable nodered.service to disable autostart on boot

To find more nodes and example flows - go to http://flows.nodered.org
16 Sep 10:03:55 - [info]

Welcome to Node-RED
===================

16 Sep 10:03:55 - [info] Node-RED version: v0.18.7
16 Sep 10:03:55 - [info] Node.js version: v6.14.3
16 Sep 10:03:55 - [info] Linux 4.14.34-v7+ arm LE

http://192.168.xx.xx:1880 をブラウザで開きます


フローの作成


  1. 入力からmqttを選択して配置します

    スクリーンショット 2018-09-16 19.09.00.png


  2. ダブルクリックで設定を開き

    以下のように設定します

    スクリーンショット 2018-09-16 19.08.51.png

    (tv/tvのところはBeebotteで設定した[channel名]/[action名]になっています)


  3. 画像の赤いところをクリックして詳細設定をします

    スクリーンショット 2018-09-16 19.12.56.png

    スクリーンショット 2018-09-16 19.15.58.png

    紫のところに先ほどと同じようにchannel tokenを入力します


  4. jsonとfunctionの配置

    画像のようにjsonとfuncを配置してください

    jsonは何も変更しなくてOKです

    functionでは画像のように設定して完了してください

    スクリーンショット 2018-09-16 19.41.07.png


  5. 分岐をさせるSwitchの追加

    「つけて」と「けして」だけに反応するように画像のように設定して完了します

    スクリーンショット 2018-09-16 19.22.59.png


  6. プログラムを実行させるexecの追加

    execノードに実行させたいコマンドを入力してプログラムを実行させます

    スクリーンショット 2018-09-16 19.26.57.png

    このときコマンドは、できるだけ絶対パスで入力してください


/usr/bin/python /root/IFTTT/irmcli/irmcli.py -p -f /root/IFTTT/irmcli/tv.json

# python irmcli.py -p -f tv.json

以上で設定が完了です

うまくいけば以下の動画のように動いてくれるはずです

動画では「仕方ないのでつけてあげます」と言わせています

 


是非 Google Home × IFTTT × irMagician で普通の家電をスマート家電に変身させちゃいましょう!