Apple TV 4Kをスマートスピーカーで操作する
目次
やりたいこと
前回の「スマートスピーカーでPS4を操作してみた」に引き続き、スマートスピーカー(Alexa)とRaspberry Pi、Node Redの組み合わせを使って、Apple TVを音声で操作する方法を紹介します。音声でApple TVの電源のON/OFFを操作することが目的となります。
前置きとしてApple TVは専用のリモコンだけでなく、下の画像の様にiPhone/iPadのコントロールセンタにリモコンを追加すれば、専用リモコンと同じ操作感で使うことができます。恐らく大抵の人はiPhoneで十分となるかも。また、テレビのリモコンでも操作はできますが、この場合は電源のONだけができないという、まさに前回のPS4(tone)の操作と同じ悩みがありました。
基本的にリモンを増やしたくないので、当初はiPhoneをリモコン代わりにしていましたが、「スリープ状態の解除→コントロールセンタを表示→Apple TVリモコンを表示」をiPhoneがスリープする度にすることが地味に煩わしいんです。そんな中、Raspberry PiでApple TVを操作できることを知り、電源のON/OFFだけスマートスピーカーで、あとはテレビのリモコンで操作するという素晴らしいIoT環境の構築を考えました。
必要なもの
物理的に必要なものは以下の通りです。
- Apple TV 4K(通常のApple TVも可)
- Raspberry Pi
- スマートスピーカー(私の場合はAlexa)
また、前回の記事で紹介したRaspberry PiとNode Redの環境も構築済みであることが前提となります。まだの方は前回の記事を参考に構築をお願いします。
構築の流れ
Apple TVをRaspberry Piで操作するためのツールである「pyatv」を使って、Node Redと連携するというシンプルな流れです。既にNode Redの環境がある方は非常にハードルが低いと思われます。
- pyatvのインストール
- Node Redとpyatvの連携設定
私のApple TVは4K対応版なのと、直感的な呼びやすさを重視して「アレクサ、4Kオン」の言葉で操作できるようにしました。
「4K」が言いづらかったりダサいと感じた方は、部分は好きな言葉(デバイス名)に変えることができるので、好みに応じて変更することができます。真似したいので何に変えたかコメント下さい笑
pyatvのインストール
では早速、Raspberry PiからApple TVを操作するための「pyatv」をインストールします。pyatv公式のインストール手順通り、コマンドを投入します。
$ pip3 install pyatv
これだけでインストール完了しました。かなり簡単ですね!pyatvをインストールすると「atvremote」コマンドが使えるようになるので、このコマンドを使ってApple TVを操作していきます。
どのApple TVが操作対象かを指定するために、まずはscanでApple TVを見つけることから始めます。
$ atvremote scan
すると、下記のような表示が出てくるので「Name」または「Identifiers」をメモしておきます。「Identifiers」は2行ありますが、どちらか一つで問題ありません。
========================================
Name: Living Room
Model/SW: 4K tvOS 13.3.1 build 17K795
Address: 10.0.0.10
MAC: AA:BB:CC:DD:EE:FF
Identifiers:
- 01234567-89AB-CDEF-0123-4567890ABCDE
- 00:11:22:33:44:55
Services:
- Protocol: MRP, Port: 49152, Credentials: None
- Protocol: AirPlay, Port: 7000, Credentials: None
続いて、Apple TVとペアリングをします。「Name」と「Identifiers」のどちらを指定するかで、コマンドが少し変わります。
$ atvremote -n "Living Room" --protocol mrp pair #Nameを使う場合。Living Roomの部分は例です。
$ atvremote --id 00:11:22:33:44:55 --protocol mrp pair #Identifiersを使う場合。00:11:の部分は例です。
このコマンドを実行後、Apple TV側で「設定 → リモコンとデバイス → Remote Appとデバイス → pyatvを選択 → pinに1234と入力」を行えばペアリング完了です。
ちなみに、私はより一意にApple TVを特定できるように「Identifiers」の方を使っています。もし今後複数のApple TVを導入した場合、同じ名前だとどちらか分からなくなる可能性があるかなと。複数買う予定はありませんが念のためという感じです。
では実際に、Apple TVを操作してみましょう!
$ atvremote --id 00:11:22:33:44:55 menu #メニュー。idは例です。
$ atvremote --id 00:11:22:33:44:55 turn_on #起動。idは例です。
$ atvremote --id 00:11:22:33:44:55 turn_off #スリープモードへ。idは例です。
いかがですか?きちんとペアリングが完了しidも正しければ、リモコンと同じ動きをしてくれるはずです。
その他にも様々な操作ができますが、今回の目的から外れるため詳細は割愛ます。以下のコマンドで操作可能なコマンドが一覧表示されますので、参考にご確認下さい。
$ atvremote --id 00:11:22:33:44:55 commands
これでRaspberry PiからApple TVを操作する環境が整いました。
Node Redとpyatvの連携設定
続いて、Node Redでデバイス登録を行い、pyatvのコマンドを実行する連携を実装していきます。
デバイス登録
前回と同じようにNode-Red Alexa Home Skill Bridgeへログインし、デバイス「4K」を登録しましょう。
- DeviceタブのAdd Deviceをプッシュ
- Add New Device ポップアップのName(4K), Actions(On/Off)を設定する
次に、Alexaアプリの方で先ほどNode Redで登録したデバイスを追加していきます。
- Alexaアプリで「デバイスの検出」で先ほど登録したデバイス(4K)を登録する
これでAlexaは「4K」をデバイスとして認識し、声に反応するようになりました。
試しに、「4K、オン」と言ってみてください。きちんと反応が返ってくるはずです。ただし、このデバイス(4K)にはまだ何の機能も持たせていないため、実際にApple TVが起動することはありません。
また、「4Kつけて」というとAlexaは正しく動いてくれませんので注意が必要です。正しく動くのは「4K、オン」です。恐らくですがAmazon Prime Videoの?4K動画を再生する方に捉えてしまうのかと思います。
Node Redのフローを作成
次にNode Redのフローを作成します。フローの内容は「4K」→「change:2 rules」→「電源操作」です。
「4K」の部分はAlexa Homeノードです。前回のように4Kをデバイスとして選択しましょう。「4K、オン/オフ」の音声に対する出力動作も同様にTrue/Falseなので、changeノードを使ってpyatvに渡す引数を変換してあげます。
Trueの時は「turn_on」へ、Falseの時は「turne_off」へ返還するには、上の画像のように項目を記載します。
最後に「電源操作」はexecノードを使ってpyatvのコマンドを入力します。
ここで少しハマってしまいますが、コマンド項目にpyatvのコマンドをそのまま入力してもコマンドが見つからないというエラーが出て正しく動いてくれないため、以下のように記入します。
export LD_LIBRARY_PATH=/usr/local/lib; atvremote --id 00:11:22:33:44:55 #idは例です。
私のITリテラシでは理由の詳細までは分かりませんが、Node Redのプロセスがpyatvのコマンドの場所を知らないためだと思われます。詳しい方、コメントもらえると助かります。
これで「4K、オン/オフ」に応じたTrue/Falseをturne_on/turn_offに変換しpyatvへ渡すことで目的のコマンドが実行できるようになりました。
まとめ
スマートスピーカーを使ってApple TVを操作する方法を紹介しました。Raspberry PiとNode Redの組み合わせは本当に自由度が高く無限の可能性を感じますね。今回は電源のオン/オフのみですが、pyatvはその他にも色々な操作に対応しているので工夫次第でもっと便利になります。とは言え、リモコンでの操作の方が音声より早かったりするので、本当に便利になる操作を見極める必要はありますが。
他にも生活の些細な不便をIoTの力で解決していくので、今後も紹介していきたいと思います。