予想以上に時間がかかってしまいましたが、一旦目標としていた、「Google Homeへの音声指示でTVを操作」するところまでできました。
今までのまとめも含めて、解説していきます。
Contents
全体像を見ながら一旦まとめ
いままで、いろいろやってきましたが、データの流れに沿って対応しているわけではないので、自分でも混乱してきました。
今回の対応の前に、一旦
- 今まで対応した事
- 今回対応する事
をまとめておきます。
全体像は下の図のとおり
対応した順番に解説すると、
- Raspberry Pi自体の購入~インストール等の準備。
http://techback.info/raspberry-pi-os-install - Raspberry PIを操作するにあたって、SSH接続&Sambaでファイル共有する環境構築。
http://techback.info/raspberry-pi-ssh-from-windows - Raspberry PiからHDMIケーブル経由で信号送ってみたり。
http://techback.info/raspberry-pi-tv-control-failed - ADRSIRから赤外線信号でTVを操作してみたり。
http://techback.info/raspberry-pi-adrsir - Google Homeに発声。その内容をIFTTT → Beebotteに伝えるまで。
http://techback.info/raspberry-pi-google-home-ifttt-beebotte - そして、BeebotteからRaspberry Piへの伝送 → Raspberry Piで解釈してADRSIRから赤外線信号の発信 ※これが今回の記事
ざっとこんな感じで、一旦今回で完結させます。
今回やること
Beebotteから、mqttをRaspberry Piで受信。そいつをパターンごとに分岐。そして、ADRSIRから赤外線信号発信!
この処理を、Node-REDを使って構築します。
そして、TVの操作できる所まで確認することが目的です。
Node-REDの環境構築
Node-REDのインストール
Raspberry Piに、Node-REDをインストールします。
Raspberry Piに入って、下記コマンド実行。
$ bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered)
結構時間かかりますよ。。。。
こんなかんじで、状況表示されます。
Node-redを早速起動してみましょう
下記コマンドを実行
$ node-red
筆者の場合、Windows PCからアクセスしているので、
ブラウザーを起動して下記URLを表示
http://[raspberry pi のIP]:1880
こんな感じで表示されます。GUIでいいですね~
無事、インストール完了しているようです。
Node-REDに処理を実装していきます
MQTTを受け取る所を作る
mqttをドラッグして、フィールドに配置
ドラッグして配置したmqttをダブルクリック
編集画面が表示されるので、
トピック:google_home/voice
と、とりあえず入れておいて、サーバのところにあるペンのアイコンをクリック
表示されたダイアログの接続タブで、
サーバ:mqtt.beebotte.com
ポート:8883
SSL/TLS接続を使用:チェックを入れる
次に、セキュリティタブを開いて、
ユーザ名:beebotteのChannel Tokenをコピーしてきて、貼り付け
追加ボタンをクリック
受け取ったデータをJSONに変換
機能の下にあるjsonをドラッグして適当な場所に配置しておく
Debugを設置して、データ受信を確認してみる
今度は、出力の下にあるdebugをドラッグして設置
灰色のマーク同士をドラッグして、接続する
右上にある、デプロイボタンをクリックして、Raspberry Piに反映しておきます。
成功したようです。
デバッグアイコンをクリックして、
Google Homeに設定した文言を発声してみると
ちゃんと来てます。
分岐を設置
TVを消音にする命令をIFTTTに登録しましたが、実は裏でいろいろ設定しておきました。(消音だけしてもつまらないですしね)
というわけで、それぞれのRequest内容で分岐するところを作ります。
機能の下にある、switchで分岐します。こちらを配置して
こんな感じで、分岐の設定をしてください。
解説すると、IFTTTのところでのBody情報で、こんな情報をセットしたと思います。
{“data”:[{“device”:”regza”,”action”:”silence”}]}
device は、 regza
action は、silence
上の例だと、プロパティのところで、payload.data[0].device と書いて、deviceに何が設定されているか判断しよう!として
lightだったり、今回設定したregzaだったりが来たら、それぞれ1と2に処理が分岐しますってこと。
こんな感じで、actionでの分岐も設定して、分岐部分は最終的にこんな感じになりました。
actionの分岐はこんな感じですね。プロパティでdeviceだったところをactionにして、入ってくる値で判断しています。
ADRSIRへの処理
いよいよ、最後の処理を実行するところですね!
その他のところにある、execを配置して
中身は、こんな感じ。
python3で、ファイルを実行して
引数のところで、オプションの 「t」 と、ダブルクオーテーションで囲んだ赤外線コード
引数のところの msg.payloadはチェック外しておきます。
名前のところは適当にわかりやすいものを。
これを、switchの分岐からそれぞれ対応したexecにつなげてください。
最後にデプロイ
上記設定が終わったら、デプロイして設定を反映させてください。
そして、node-redをCtrl+cで、終了。
Node-REDの起動について
下記コマンドで、Node-REDを起動しっぱなしにします。
$ node-red-start
ちなみに、上記を終了させる場合は、
$ node-red-stop
そして、Raspberry Pi 再起動時もサービスが自動で起動するようにサービス登録しておくと便利です。
$ sudo systemctl enable nodered.service
Google Homeで動作確認
Google Homeに「OK Google 消音」・・・・
はい。消音できました。長かった。。。。
追加対応
これまでの対応で、Google HomeからのTV操作はできるようになりました。
次回、BeebottteにHTMLからHTTPリクエストをだして、スマホやPCのブラウザからTVを操作できるようにしてみようと思います。