概要
raspiに赤外線学習リモコンirMagicianを繋げて, スマート家電ではないテレビの電源を操作するプログラムをgoogle homeから実行させてみました
かなり殴り書きです。ごめんなさい。。。
ゴール
google homeに話しかけて普通のテレビの電源を制御します
IFTTT×raspi×irMagician
— mori takuto(gump) (@m___04v) 2018年7月27日
raspiとgoogle homeでテレビの電源操作してもらうようにした pic.twitter.com/zcGeh4UDGi
用意するもの
システム構成図
- 「OK,google テレビつけて」でgoogle assistantからIFTTTのApplet起動
- webhookからMQTTのbrokerへpulishする
- brokerにsubscribeしているraspiのNode-redがメッセージを受け取りプログラムを実行
- irMagicianから赤外線を照射してテレビをつける
参考:IFTTT から Raspberry Pi に指示を出す
ステップ
irMagician
スマート家電ではないテレビをつけるために赤外線学習モジュールである、「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]を押して新しいチャンネルを作成します
画像のように入力して[Create channel]を押してチャンネル作成を完了します
作成したチャンネルを選択しTokenを確認します
紫色で隠れているとこをコピーしておきましょう
参考: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を設定します
Say a phrase with a text ingredientを選択します
($で文字列パターンを使用できます)
今回は「テレビつけて」と「テレビ消して」に対応させるため以下のように設定します
これでgoogle homeが「しゃーなし消してやるで」とか返してくれるようになります
thisの設定は終わりです
thatには以下のようにwebhookを使います
以下のように設定してください
「先ほどコピーしたToken」のところには先ほどコピーしたBeebotteのChannel Tokenを入力してください
これで、「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 をブラウザで開きます
フローの作成
-
ダブルクリックで設定を開き
以下のように設定します
(tv/tvのところはBeebotteで設定した[channel名]/[action名]になっています) -
jsonとfunctionの配置
画像のようにjsonとfuncを配置してください
jsonは何も変更しなくてOKです
functionでは画像のように設定して完了してください
-
プログラムを実行させるexecの追加
execノードに実行させたいコマンドを入力してプログラムを実行させます
このときコマンドは、できるだけ絶対パスで入力してください
/usr/bin/python /root/IFTTT/irmcli/irmcli.py -p -f /root/IFTTT/irmcli/tv.json
# python irmcli.py -p -f tv.json
以上で設定が完了です
うまくいけば以下の動画のように動いてくれるはずです
動画では「仕方ないのでつけてあげます」と言わせています
IFTTT×raspi×irMagician
— mori takuto(gump) (@m___04v) 2018年7月27日
raspiとgoogle homeでテレビの電源操作してもらうようにした pic.twitter.com/zcGeh4UDGi
是非 Google Home × IFTTT × irMagician で普通の家電をスマート家電に変身させちゃいましょう!